import AOC aoc 2015, 4 do def p1 do input_string() |> String.trim() |> mine_advent_coin(5) end defp mine_advent_coin(key, difficulty, nonce \\ 0) defp mine_advent_coin(key, 5, nonce) do case :erlang.md5(key <> Integer.to_string(nonce)) do <<0::20, _::108>> -> nonce _ -> mine_advent_coin(key, 5, nonce + 1) end end defp mine_advent_coin(key, 6, nonce) do case :erlang.md5(key <> Integer.to_string(nonce)) do <<0::24, _::104>> -> nonce _ -> mine_advent_coin(key, 6, nonce + 1) end end def p2 do input_string() |> String.trim() |> mine_advent_coin(6) end end