Advent of code day 01
Mix.install([
{:kino, "~> 0.5.0"}
])
Helpers
example = Kino.Input.textarea("Please paste your input file:")
input = Kino.Input.textarea("Please paste your input file:")
Part 01
input
|> Kino.Input.read()
|> String.split(["\n"])
|> Enum.map(fn line ->
digits = String.replace(line, ~r/[^\d]/, "") |> String.split("", trim: true)
with [first | _] <- digits,
[last | _] <- Enum.reverse(digits) do
(first <> last) |> String.to_integer()
else
[] -> 0
end
end)
|> Enum.sum()
Part 02
defmodule Part2 do
def solve(string) do
concatenated = solve(string, "")
last = concatenated |> String.first()
first = concatenated |> String.last()
String.to_integer(first <> last)
end
def solve("", acc), do: acc
def solve(<<x, rest::binary>>, acc) when x in ?1..?9, do: solve(rest, <<x>> <> acc)
def solve(<<"one", rest::binary>>, acc), do: solve("e" <> rest, "1" <> acc)
def solve(<<"two", rest::binary>>, acc), do: solve("o" <> rest, "2" <> acc)
def solve(<<"three", rest::binary>>, acc), do: solve("e" <> rest, "3" <> acc)
def solve(<<"four", rest::binary>>, acc), do: solve("r" <> rest, "4" <> acc)
def solve(<<"five", rest::binary>>, acc), do: solve("e" <> rest, "5" <> acc)
def solve(<<"six", rest::binary>>, acc), do: solve("x" <> rest, "6" <> acc)
def solve(<<"seven", rest::binary>>, acc), do: solve("n" <> rest, "7" <> acc)
def solve(<<"eight", rest::binary>>, acc), do: solve("t" <> rest, "8" <> acc)
def solve(<<"nine", rest::binary>>, acc), do: solve("e" <> rest, "9" <> acc)
def solve(<<_, rest::binary>>, acc), do: solve(rest, acc)
end
input
|> Kino.Input.read()
|> String.split("\n", trim: true)
|> Enum.map(&Part2.solve/1)
|> Enum.sum()