Le Duc en Scala :
Scala
// on fabrique un flux d'entiers entre 1 et 6 def lancers : Stream[Int] = Stream.cons(1 + util.Random.nextInt(6), lancers) // on fabrique un flux de n-uplets à partir du flux précédent def par_paquets(n : Int , flux : Stream[Int]) : Stream[Stream[Int]] = { val (tete,queue) = vec_alea.splitAt(n) Stream.cons(tete , par_paquets(n,queue)) } // on fait la somme de chaque paquet : on a un flux de somme de lancers de 3 dés def toscane: Stream[Int] = par_paquets(3,lancers).map(x => x.sum) // on crée le dictionnaire des sorties avec le très puissant groupBy val dic = (toscane take 100000).groupBy(x => x).map(couple => (couple._1,couple._2.length))
Ce qui donne :
Scala
scala> dic(9) res50: Int = 11695 scala> dic(10) res51: Int = 12602