cristobal78 a écritMerci à tous
Je ne creuserai pas les solutions basées sur Python car je ne connais pas du tout ce langage. Mais merci tout de même d'avoir regardé mon petit problème.
Quant aux solutions bash elle me semblent basées sur la création d'un tableau.
Comme je n'en ai jamais utilisé je ne sais pas comment ça marche ni pourquoi on passe par un tableau.
(...)
Et tu as bien raison.
En plus s'il vous plaît, à moins que ce soit vraiment indispensable... évitez les "
bashisms" : or les "tableaux" sont un pur bashism.
La bonne pratique est d'écrire du shell
portable, et de spécifier /bin/sh et non pas /bin/bash.
Ca fait pas loin de 10 ans qu'Ubuntu est passé à Dash qui est bien plus performant que bash... mais ne gère pas les "bashisms" comme les tableaux !
Donc voici la solution en "philosophie GNU/Linux", c'est à dire en utilisant l'outillage à notre disposition.
Je l'ai rendue paramétrable en fonction du nombre de faces du dé.
#! /bin/sh
faces=6
for de1 in $(seq 1 $faces)
do
for de2 in $(seq 1 $faces)
do
for de3 in $(seq 1 $faces)
do
echo "$(($de1+$de2+$de3))"
done
done
done | sort -n | uniq -c
Notez bien
#! /bin/sh à moins que vous vouliez un truc plus mou et lent, aucune raison de mettre
#! /bin/bash
Aussi, bash est particulièrement inefficace pour les boucles (for, do). Pour faire plaisir à Vobul,
j'ai changé faces pour mettre 300 et testé avec le programme ci-dessus et en remplaçant /bin/sh par /bin/bash, voici ce que ça donne sur mon PC:
$ /usr/bin/time -v ./test.sh # Test avec /bin/sh ==> dash 300 faces
(...)
User time (seconds): 114.09
(...)
$ /usr/bin/time -v ./test.sh # Test avec /bin/bash ==> bash 300 faces
(...)
User time (seconds): 233.30
(...)
CQFD : bash est plus de 2 fois plus lent !