Advertisement
Guest User

olimpiadka

a guest
Dec 3rd, 2014
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.92 KB | None | 0 0
  1. package prost
  2.  
  3. import scala.collection._
  4.  
  5. object Main extends App {
  6.   val n = 1000
  7.   val b = Set("111", "101")
  8.   val r = 2
  9.  
  10.   def arrangements(length: Int) = {
  11.  
  12.     def arrangements(acc: List[Char]): List[List[Char]] = {
  13.       if (acc.size == length)
  14.         List(acc.reverse)
  15.       else
  16.         arrangements('0' :: acc) ::: arrangements('1' :: acc)
  17.     }
  18.            
  19.     arrangements(Nil).map(_.mkString)
  20.   }
  21.  
  22.   val endings = arrangements(r)
  23.  
  24.   def p(sequence: String) =
  25.     if (b.contains(sequence)) 0 else 1
  26.  
  27.   val qNextFunc = endings.map(ending =>
  28.     ending -> ((q: Map[String, BigInt]) =>
  29.         q('0' + ending.dropRight(1)) * p('0' + ending) +
  30.         q('1' + ending.dropRight(1)) * p('1' + ending)
  31.   )).toMap
  32.  
  33.   def qNext(q: Map[String, BigInt]) =
  34.     q.map(kv => kv._1 -> qNextFunc(kv._1)(q)).toMap
  35.  
  36.   val q = endings.map(_ -> BigInt(1)).toMap
  37.   println(Stream.iterate(q)(qNext)(n - r).values.sum)
  38. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement