Toujours plus court avec Haskell...
Haskell
import qualified Data.List import qualified Data.Map import System.Random -- on fabrique un flux d'entiers compris entre 1 et 6 à partir de la graine 2^31 - 1 lancers = randomRs (1,6) (mkStdGen $ 2^31 - 1) :: [Int] -- on fabrique un flux de n-uplets à partir du flux précédent par_paquets n flux = tete : (par_paquets n queue) where (tete,queue) = splitAt n flux -- on fait la somme de chaque paquet : on a un flux de somme de lancers de 3 dés toscane = map sum $ par_paquets 3 lancers -- on ordonne la liste, on la regroupe puis on compte chaque occurence et on renvoie le couple (x, occ de x) -- compte est un dictionnaire (Map) compte liste = Data.Map.fromList $ map (\l@(x:xs) -> (x,length l)) . Data.List.group . Data.List.sort $ liste -- par exemple avec 100 000 lancers dic = compte (take 100000 toscane) -- on obtient les sorties de 9 et 10 avec -- Data.Map.lookup 9 dic -- Data.Map.lookup 10 dic Par exemple, pour 100 000 lancers de 3 dés : *Main> Data.Map.lookup 9 dic Just 11712 *Main> Data.Map.lookup 10 dic Just 12666