lluque

AoC day 16

Dec 19th, 2016
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 0.90 KB | None | 0 0
  1. object day16 extends App {
  2.  
  3.   def dragonCurve(n: Int, s: String): String = {
  4.     def widen(x: String): String = {
  5.       val sb = new StringBuilder(s.length * 2 + 1).append(x).append('0')
  6.       for {
  7.         i <- x.indices
  8.       } yield {
  9.         if (x(i) == '0') sb.append('1') else sb.append('0')
  10.       }
  11.       sb.toString
  12.     }
  13.     var dc = s
  14.     while (dc.length <= n) dc = widen(dc)
  15.     dc take n
  16.   }
  17.  
  18.   def checksum(s: String): String = {
  19.     def narrow(s: String): String = {
  20.       val cs = new StringBuilder(s.length / 2 + 1)
  21.       for {
  22.         i <- s.indices by 2
  23.       } yield {
  24.         if (s(i) == s(i + 1)) cs.append('1') else cs.append('0')
  25.       }
  26.       cs.toString
  27.     }
  28.     var cs = s
  29.     while (cs.length % 2 == 0) cs = narrow(cs)
  30.     cs
  31.   }
  32.  
  33.   println(checksum(dragonCurve(272, "10001001100000001")))
  34.   println(checksum(dragonCurve(35651584, "10001001100000001")))
  35.  
  36. }
Advertisement
Add Comment
Please, Sign In to add comment