Duc de Toscane avec Scala

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

courtesy of webmatter.de