Skip to content

Instantly share code, notes, and snippets.

@mfilej
Created December 2, 2016 19:11
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mfilej/3b11e509bcb8dee4328f9c33b58db569 to your computer and use it in GitHub Desktop.
Save mfilej/3b11e509bcb8dee4328f9c33b58db569 to your computer and use it in GitHub Desktop.
#!/usr/bin/env elixir
defmodule Keypad do
def decode(input) do
String.splitter(input, "\n")
|> Enum.map_reduce(5, fn input_line, key ->
new_key = follow(input_line, key)
{new_key, new_key}
end)
end
def follow("D" <> rest, 1) do
follow(rest, 3)
end
def follow(<<_::bytes-size(1)>> <> rest, 1) do
follow(rest, 1)
end
def follow("U" <> rest, 0xD) do
follow(rest, 0xB)
end
def follow("L" <> rest, 2) do
follow(rest, 2)
end
def follow("U" <> rest, 2) do
follow(rest, 2)
end
def follow("U" <> rest, 3) do
follow(rest, 1)
end
def follow("R" <> rest, 4) do
follow(rest, 4)
end
def follow("U" <> rest, 4) do
follow(rest, 4)
end
def follow("R" <> rest, 5) do
follow(rest, 6)
end
def follow(<<_::bytes-size(1)>> <> rest, 5) do
follow(rest, 5)
end
def follow("L" <> rest, 9) do
follow(rest, 8)
end
def follow(<<_::bytes-size(1)>> <> rest, 9) do
follow(rest, 9)
end
def follow("L" <> rest, 0xA) do
follow(rest, 0xA)
end
def follow("D" <> rest, 0xA) do
follow(rest, 0xA)
end
def follow("D" <> rest, 0xB) do
follow(rest, 0xD)
end
def follow("R" <> rest, 0xC) do
follow(rest, 0xC)
end
def follow("D" <> rest, 0xC) do
follow(rest, 0xC)
end
def follow("U" <> rest, 0xD) do
follow(rest, 0xB)
end
def follow(<<_::bytes-size(1)>> <> rest, 0xD) do
follow(rest, 0xD)
end
def follow("D" <> rest, key) do
follow(rest, key + 4)
end
def follow("U" <> rest, key) do
follow(rest, key - 4)
end
def follow("L" <> rest, key) do
follow(rest, key - 1)
end
def follow("R" <> rest, key) do
follow(rest, key + 1)
end
def follow("", key), do: key
end
{:ok, input} = File.read("input.txt")
Keypad.decode(input)
|> IO.inspect
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment