Advertisement
lluque

AoC day 5

Dec 25th, 2016
106
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.  
  7.   def md5(s: String): String = digest.digest(s.getBytes).map("%02x".format(_)).mkString
  8.  
  9.   def seed = "uqwqemis"
  10.  
  11.   def find = {
  12.     def inner(n: Int, pwd: String): String = pwd match {
  13.       case s if s.length == 8 => s
  14.       case _ =>
  15.         val hash = md5(seed + n)
  16.         if (hash.take(5) == "00000") inner(n + 1, pwd + hash(5))
  17.         else inner(n + 1, pwd)
  18.     }
  19.     inner(0, "")
  20.   }
  21.  
  22.   def find2 = {
  23.     def inner(n: Int, m: Map[Int, Char]): String = m match {
  24.       case s if s.size == 8 => (0 to 7).map(s(_)).mkString
  25.       case _ =>
  26.         val hash = md5(seed + n)
  27.         if (hash.take(5) != "00000") inner(n + 1, m)
  28.         else {
  29.           val key = hash(5).asDigit
  30.           if (!m.keySet.contains(key) && key < 8) inner(n + 1, m + (key -> hash(6)))
  31.           else inner(n + 1, m)
  32.         }
  33.     }
  34.  
  35.     inner(0, Map[Int, Char]())
  36.   }
  37.  
  38.   println(find)
  39.   println(find2)
  40.  
  41. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement