lluque

AoC day 5

Dec 28th, 2016
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.01 KB | None | 0 0
  1. import java.security.MessageDigest
  2.  
  3. object day5 extends App {
  4.  
  5.   def digest = MessageDigest.getInstance("MD5")
  6.   def md5(s: String): String = digest.digest(s.getBytes).map("%02x".format(_)).mkString
  7.   def seed = "uqwqemis"
  8.  
  9.   def find = {
  10.     def inner(n: Int, pwd: String): String = pwd match {
  11.       case s if s.length == 8 => s
  12.       case _ =>
  13.         val hash = md5(seed + n)
  14.         if (hash.take(5) == "00000") inner(n + 1, pwd + hash(5))
  15.         else inner(n + 1, pwd)
  16.     }
  17.     inner(0, "")
  18.   }
  19.  
  20.   def find2 = {
  21.     def inner(n: Int, m: Map[Int, Char]): String = m match {
  22.       case s if s.size == 8 => (0 to 7).map(s(_)).mkString
  23.       case _ =>
  24.         val hash = md5(seed + n)
  25.         if (hash.take(5) != "00000") inner(n + 1, m)
  26.         else {
  27.           val key = hash(5).asDigit
  28.           if (!m.keySet.contains(key) && key < 8) inner(n + 1, m + (key -> hash(6)))
  29.           else inner(n + 1, m)
  30.         }
  31.     }
  32.  
  33.     inner(0, Map[Int, Char]())
  34.   }
  35.  
  36.   println(find)
  37.   println(find2)
  38.  
  39. }
Advertisement
Add Comment
Please, Sign In to add comment