aoc2021-d1
Setup
Mix.install([{:kino, "~> 0.4.1"}])
input = Kino.Input.textarea("input")
Part1
이전 것보다 증가하는 경우만 counting
defmodule Solver do
def solve(input_string) do
parse(input_string)
|> calculate(:infinity, 0)
end
def parse(input_string) do
String.split(input_string, "\n", trim: true)
|> Enum.map(&String.to_integer/1)
end
def calculate(inputs, prev, acc)
def calculate([], _, acc), do: acc
def calculate([cur | rest], prev, acc) when cur > prev do
calculate(rest, cur, acc + 1)
end
def calculate([cur | rest], _prev, acc), do: calculate(rest, cur, acc)
end
Part2: three-measurments windows
defmodule Part2 do
def solve(input_string) do
parse(input_string)
|> calculate([], 0)
end
def parse(input_string) do
String.split(input_string, "\n", trim: true)
|> Enum.map(&String.to_integer/1)
end
def calculate(inputs, prev \\ [], acc \\ 0)
def calculate([cur, next, next2 | _] = inputs, [], acc) do
calculate(tl(inputs), [cur, next, next2], acc)
end
def calculate([cur, next, next2 | _] = inputs, prev_window, acc) do
if cur + next + next2 > Enum.sum(prev_window) do
calculate(tl(inputs), tl(prev_window) ++ [next2], acc + 1)
else
calculate(tl(inputs), tl(prev_window) ++ [next2], acc)
end
end
def calculate(_inputs, _window, acc), do: acc
end
inputs = Kino.Input.read(input)
Solver.solve(inputs)
inputs2 = """
199
200
208
210
200
207
240
269
260
263
"""
Part2.solve(inputs)