Skip to content

Instantly share code, notes, and snippets.

@mfilej
Last active 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/5d4d6aeb5dc3a4f2614c3ec85d2b9dab to your computer and use it in GitHub Desktop.
Save mfilej/5d4d6aeb5dc3a4f2614c3ec85d2b9dab 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("R" <> rest, key) when rem(key, 3) == 0 do
follow(rest, key)
end
def follow("R" <> rest, key) do
follow(rest, key + 1)
end
def follow("L" <> rest, key) when rem(key, 3) == 1 do
follow(rest, key)
end
def follow("L" <> rest, key) do
follow(rest, key - 1)
end
def follow("U" <> rest, key) when key > 3 do
follow(rest, key - 3)
end
def follow("U" <> rest, key) do
follow(rest, key)
end
def follow("D" <> rest, key) when key > 6 do
follow(rest, key)
end
def follow("D" <> rest, key) do
follow(rest, key + 3)
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