매년 12월 1일부터 25일까지 매일 두 문제씩, 총 50문제의 프로그래밍 퍼즐이 공개되는 개발자 이벤트. (홈페이지) 나는 2년 전에 처음 시작했는데, 그때는 10일차 즈음까지 뒤쫓아가며 풀다가 코드가 점점 스파게티가 되어간 탓에 더 풀지 못하고 하차했었고, 작년에는 여러 일로 정신이 없어 한다는 것도 모르고 지나쳐 버렸다. 올해는 마음에 조금 여유가 생겨 리얼타임으로 따라가 보려 한다. 조금 늦더라도 어떻게든 완주할 수 있었으면 좋겠다. 올해도 어김없이 엘릭서를 사용하여 풀 예정.
첫날 퍼즐은 (나름 스토리가 있지만 생략하고 문제만 정리하면) 연속된 숫자들 중 이전 숫자보다 증가한 것이 몇 번인지를 찾는 문제였다. 첫날이라서 그런지 비교적 간단하게 풀 수 있었다.
경험상 전에 작성했던 코드를 뒤에서 확장해서 사용하기도 해서, 일단 돌아가도록 푸는 것도 중요하지만 나중에 재활용할 수도 있도록 하는 것도 중요하다 싶다.
defmodule Day1 do
def parse_input do
path = "input_day1q1.txt"
File.read!(path)
|> String.split("\n")
|> Enum.map(&String.to_integer/1)
end
def run_q1 do
parse_input()
|> count_increase()
|> elem(1)
end
def run_q2 do
parse_input()
|> Enum.chunk_every(3, 1, :discard)
|> Enum.map(&Enum.sum/1)
|> count_increase()
|> elem(1)
end
defp count_increase(numbers) do
numbers
|> Enum.reduce(
{nil, 0},
fn
element, {nil, cnt} ->
{element, cnt}
element, {before, cnt} ->
if element > before do
{element, cnt + 1}
else
{element, cnt}
end
end
)
end
end
'호두나무 공방 > Advent of Code' 카테고리의 다른 글
Advent of Code 2021 Day 6 in Elixir - Lanternfish (0) | 2021.12.06 |
---|---|
Advent of Code 2021 Day 5 in Elixir - Hydrothermal Venture (0) | 2021.12.06 |
Advent of Code 2021 Day 4 in Elixir - Giant Squid (0) | 2021.12.04 |
Advent Of Code 2021 Day 3 in Elixir - Binary Diagnostic (0) | 2021.12.03 |
Advent of Code 2021 Day 2 in Elixir - Dive! (0) | 2021.12.02 |