day 3 haha
This commit is contained in:
72
lib/day03.ex
Normal file
72
lib/day03.ex
Normal file
@@ -0,0 +1,72 @@
|
||||
defmodule AdventOfCode.Day03 do
|
||||
def part1() do
|
||||
input = File.read!("./priv/day03.part1.txt")
|
||||
regex = ~r/mul\((\d{1,3}),(\d{1,3})\)/
|
||||
instructions = Regex.scan(regex, input)
|
||||
|
||||
Enum.reduce(instructions, 0, fn instruction, sum ->
|
||||
[_, left, right] = instruction
|
||||
left = String.to_integer(left)
|
||||
right = String.to_integer(right)
|
||||
sum + left * right
|
||||
end)
|
||||
end
|
||||
|
||||
def part2() do
|
||||
input = File.read!("./priv/day03.part2.txt")
|
||||
|
||||
String.graphemes(input)
|
||||
|> Enum.with_index()
|
||||
|> Enum.reduce({0, true}, fn {letter, index}, {sum, enable_instruction} ->
|
||||
case letter do
|
||||
"m" ->
|
||||
{_head, substr} = String.split_at(input, index)
|
||||
|
||||
case :binary.match(substr, ")") do
|
||||
{position, _length} ->
|
||||
instruction = String.slice(substr, 0, position + 1)
|
||||
|
||||
case String.length(instruction) <= 12 and
|
||||
Regex.scan(~r/mul\((\d{1,3}),(\d{1,3})\)/, instruction) do
|
||||
[[_, left, right]] ->
|
||||
left = String.to_integer(left)
|
||||
right = String.to_integer(right)
|
||||
|
||||
IO.inspect(instruction)
|
||||
IO.inspect(left)
|
||||
IO.inspect(right)
|
||||
IO.inspect(enable_instruction)
|
||||
|
||||
case enable_instruction do
|
||||
true ->
|
||||
{sum + left * right, enable_instruction}
|
||||
|
||||
false ->
|
||||
{sum, enable_instruction}
|
||||
end
|
||||
|
||||
_ ->
|
||||
{sum, enable_instruction}
|
||||
end
|
||||
|
||||
:nomatch ->
|
||||
{sum, enable_instruction}
|
||||
end
|
||||
|
||||
"d" ->
|
||||
substr = String.slice(input, index, String.length("don't()"))
|
||||
|
||||
cond do
|
||||
substr == "don't()" ->
|
||||
{sum, false}
|
||||
|
||||
String.starts_with?(substr, "do()") ->
|
||||
{sum, true}
|
||||
end
|
||||
|
||||
_ ->
|
||||
{sum, enable_instruction}
|
||||
end
|
||||
end)
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user