Day 1
This commit is contained in:
parent
5944dd6ce8
commit
3db1e578f0
|
@ -0,0 +1,37 @@
|
|||
defmodule Day1 do
|
||||
def calculate_frequency(shifts) do
|
||||
shifts
|
||||
|> Enum.reduce(0, &+/2)
|
||||
end
|
||||
|
||||
def first_repetition(shifts, index \\ 0, sum \\ 0, seen \\ [0]) do
|
||||
sum = sum + Enum.at(shifts, index)
|
||||
next_index = rem(index + 1, Enum.count(shifts))
|
||||
|
||||
cond do
|
||||
Enum.member?(seen, sum) ->
|
||||
sum
|
||||
true ->
|
||||
first_repetition(shifts, next_index, sum, [sum | seen])
|
||||
end
|
||||
end
|
||||
|
||||
def parse_input() do
|
||||
File.read!("lib/day1/input.txt")
|
||||
|> String.split("\n")
|
||||
|> Enum.map(fn s ->
|
||||
{num, _} = Integer.parse(s)
|
||||
num
|
||||
end)
|
||||
end
|
||||
|
||||
def part1() do
|
||||
parse_input()
|
||||
|> calculate_frequency()
|
||||
end
|
||||
|
||||
def part2() do
|
||||
parse_input()
|
||||
|> first_repetition()
|
||||
end
|
||||
end
|
|
@ -0,0 +1,958 @@
|
|||
+14
|
||||
-15
|
||||
+7
|
||||
-10
|
||||
+14
|
||||
-6
|
||||
-13
|
||||
-8
|
||||
-1
|
||||
-19
|
||||
-16
|
||||
-5
|
||||
+1
|
||||
+11
|
||||
+7
|
||||
+16
|
||||
-3
|
||||
+1
|
||||
-10
|
||||
+8
|
||||
+17
|
||||
-10
|
||||
-12
|
||||
+1
|
||||
-16
|
||||
+5
|
||||
+12
|
||||
-20
|
||||
+9
|
||||
-19
|
||||
-10
|
||||
-2
|
||||
+10
|
||||
+6
|
||||
-10
|
||||
-17
|
||||
-2
|
||||
-4
|
||||
+14
|
||||
-4
|
||||
+11
|
||||
+4
|
||||
+19
|
||||
+5
|
||||
+4
|
||||
+15
|
||||
-3
|
||||
+8
|
||||
-17
|
||||
+4
|
||||
+10
|
||||
-9
|
||||
-16
|
||||
-7
|
||||
-16
|
||||
-7
|
||||
+11
|
||||
+15
|
||||
+14
|
||||
+21
|
||||
+14
|
||||
+11
|
||||
+17
|
||||
+19
|
||||
-12
|
||||
-14
|
||||
+10
|
||||
-1
|
||||
+6
|
||||
-12
|
||||
+16
|
||||
-18
|
||||
+3
|
||||
-8
|
||||
-5
|
||||
-5
|
||||
+13
|
||||
-2
|
||||
+8
|
||||
-16
|
||||
+5
|
||||
-14
|
||||
-9
|
||||
+4
|
||||
-11
|
||||
+6
|
||||
+11
|
||||
-9
|
||||
-16
|
||||
+20
|
||||
+19
|
||||
-8
|
||||
-21
|
||||
+17
|
||||
+19
|
||||
+19
|
||||
+13
|
||||
-7
|
||||
+9
|
||||
+17
|
||||
-11
|
||||
-2
|
||||
-12
|
||||
-15
|
||||
-5
|
||||
+16
|
||||
-13
|
||||
-13
|
||||
+19
|
||||
-5
|
||||
+6
|
||||
+23
|
||||
+10
|
||||
+8
|
||||
+8
|
||||
-18
|
||||
-4
|
||||
+19
|
||||
-16
|
||||
-10
|
||||
+16
|
||||
-2
|
||||
+18
|
||||
+7
|
||||
+5
|
||||
+13
|
||||
+3
|
||||
+5
|
||||
+12
|
||||
+18
|
||||
+4
|
||||
+9
|
||||
-19
|
||||
-18
|
||||
-15
|
||||
-18
|
||||
+14
|
||||
-5
|
||||
-4
|
||||
+10
|
||||
+17
|
||||
+13
|
||||
+11
|
||||
+9
|
||||
-10
|
||||
-7
|
||||
+11
|
||||
-10
|
||||
-12
|
||||
+13
|
||||
-10
|
||||
+18
|
||||
+16
|
||||
+11
|
||||
+12
|
||||
+1
|
||||
-14
|
||||
+15
|
||||
-18
|
||||
-10
|
||||
+19
|
||||
-1
|
||||
+20
|
||||
-9
|
||||
+5
|
||||
+1
|
||||
-2
|
||||
-18
|
||||
-9
|
||||
-10
|
||||
+16
|
||||
-4
|
||||
-11
|
||||
-15
|
||||
-10
|
||||
-5
|
||||
-10
|
||||
+6
|
||||
-18
|
||||
-8
|
||||
+12
|
||||
-9
|
||||
+12
|
||||
+3
|
||||
+21
|
||||
-3
|
||||
-9
|
||||
+7
|
||||
-13
|
||||
+1
|
||||
-18
|
||||
-8
|
||||
-1
|
||||
+4
|
||||
-14
|
||||
-11
|
||||
+13
|
||||
-21
|
||||
-20
|
||||
+5
|
||||
-3
|
||||
-9
|
||||
-3
|
||||
+9
|
||||
+17
|
||||
+11
|
||||
-2
|
||||
+8
|
||||
+11
|
||||
-2
|
||||
-7
|
||||
+21
|
||||
-13
|
||||
+16
|
||||
+18
|
||||
+10
|
||||
+19
|
||||
+6
|
||||
+9
|
||||
-3
|
||||
-18
|
||||
+15
|
||||
+18
|
||||
+20
|
||||
-15
|
||||
+3
|
||||
+17
|
||||
+10
|
||||
+15
|
||||
+11
|
||||
-16
|
||||
+2
|
||||
+5
|
||||
-3
|
||||
-5
|
||||
+12
|
||||
-10
|
||||
+12
|
||||
-20
|
||||
-9
|
||||
+7
|
||||
-20
|
||||
+16
|
||||
-1
|
||||
+10
|
||||
+2
|
||||
+16
|
||||
+19
|
||||
+19
|
||||
+4
|
||||
+3
|
||||
-8
|
||||
+3
|
||||
-17
|
||||
-12
|
||||
+10
|
||||
+15
|
||||
+11
|
||||
-19
|
||||
-3
|
||||
+14
|
||||
+10
|
||||
+13
|
||||
+8
|
||||
-13
|
||||
+7
|
||||
+1
|
||||
-4
|
||||
-7
|
||||
-11
|
||||
-19
|
||||
+6
|
||||
+11
|
||||
+11
|
||||
-19
|
||||
-11
|
||||
-7
|
||||
+16
|
||||
+4
|
||||
-3
|
||||
-3
|
||||
-2
|
||||
-10
|
||||
-8
|
||||
-8
|
||||
+6
|
||||
+6
|
||||
+1
|
||||
-9
|
||||
-10
|
||||
+11
|
||||
-8
|
||||
+18
|
||||
-13
|
||||
-14
|
||||
+21
|
||||
-2
|
||||
+4
|
||||
+8
|
||||
+14
|
||||
+22
|
||||
+7
|
||||
+3
|
||||
+6
|
||||
+16
|
||||
+2
|
||||
+13
|
||||
+8
|
||||
-1
|
||||
-6
|
||||
-19
|
||||
+10
|
||||
+7
|
||||
+5
|
||||
-20
|
||||
+18
|
||||
-16
|
||||
+8
|
||||
-4
|
||||
+5
|
||||
-15
|
||||
+9
|
||||
-13
|
||||
-20
|
||||
-15
|
||||
+16
|
||||
-12
|
||||
+2
|
||||
+19
|
||||
+11
|
||||
-6
|
||||
-7
|
||||
+19
|
||||
+5
|
||||
+18
|
||||
+12
|
||||
+14
|
||||
-16
|
||||
+3
|
||||
+18
|
||||
-10
|
||||
+12
|
||||
-1
|
||||
+16
|
||||
+15
|
||||
+19
|
||||
+8
|
||||
+14
|
||||
-18
|
||||
+16
|
||||
+6
|
||||
-14
|
||||
-7
|
||||
-14
|
||||
-5
|
||||
-14
|
||||
+15
|
||||
-14
|
||||
+12
|
||||
-8
|
||||
-19
|
||||
-5
|
||||
+7
|
||||
+5
|
||||
-1
|
||||
+20
|
||||
-13
|
||||
+5
|
||||
+21
|
||||
+19
|
||||
-17
|
||||
-10
|
||||
-20
|
||||
+10
|
||||
+3
|
||||
-12
|
||||
-2
|
||||
-6
|
||||
-8
|
||||
-16
|
||||
+7
|
||||
+12
|
||||
-5
|
||||
+15
|
||||
-19
|
||||
+11
|
||||
-17
|
||||
-6
|
||||
-4
|
||||
-11
|
||||
+16
|
||||
+18
|
||||
+6
|
||||
-15
|
||||
+1
|
||||
-13
|
||||
-5
|
||||
+6
|
||||
-2
|
||||
+8
|
||||
-17
|
||||
-14
|
||||
+12
|
||||
-14
|
||||
+17
|
||||
+1
|
||||
-11
|
||||
+8
|
||||
-20
|
||||
-10
|
||||
-7
|
||||
+19
|
||||
-18
|
||||
-10
|
||||
+13
|
||||
-10
|
||||
-18
|
||||
+5
|
||||
-12
|
||||
+30
|
||||
-1
|
||||
-2
|
||||
-22
|
||||
+31
|
||||
+26
|
||||
+39
|
||||
+18
|
||||
-11
|
||||
+15
|
||||
+10
|
||||
+6
|
||||
-1
|
||||
+8
|
||||
+9
|
||||
-7
|
||||
-8
|
||||
-20
|
||||
+5
|
||||
-37
|
||||
+40
|
||||
+46
|
||||
-2
|
||||
+11
|
||||
+5
|
||||
-11
|
||||
+44
|
||||
-10
|
||||
+4
|
||||
+39
|
||||
-13
|
||||
+40
|
||||
+11
|
||||
+18
|
||||
+16
|
||||
-12
|
||||
+9
|
||||
-14
|
||||
-14
|
||||
-16
|
||||
-6
|
||||
-3
|
||||
+34
|
||||
+12
|
||||
-29
|
||||
+21
|
||||
-17
|
||||
-6
|
||||
+64
|
||||
-1
|
||||
+28
|
||||
+24
|
||||
-14
|
||||
+1
|
||||
+19
|
||||
-18
|
||||
+9
|
||||
+18
|
||||
+2
|
||||
+1
|
||||
-14
|
||||
+22
|
||||
+19
|
||||
-7
|
||||
-18
|
||||
+12
|
||||
+12
|
||||
-5
|
||||
-5
|
||||
-9
|
||||
-23
|
||||
+10
|
||||
+23
|
||||
+15
|
||||
+14
|
||||
-11
|
||||
+21
|
||||
+14
|
||||
-22
|
||||
-18
|
||||
-7
|
||||
-4
|
||||
+25
|
||||
+34
|
||||
-151
|
||||
+25
|
||||
-29
|
||||
+19
|
||||
-96
|
||||
-31
|
||||
+218
|
||||
+150
|
||||
-31
|
||||
+18
|
||||
-63
|
||||
+126
|
||||
+71018
|
||||
+2
|
||||
-9
|
||||
+3
|
||||
-5
|
||||
-16
|
||||
-6
|
||||
-17
|
||||
-4
|
||||
-13
|
||||
-1
|
||||
+3
|
||||
-4
|
||||
-19
|
||||
-1
|
||||
+6
|
||||
+2
|
||||
+10
|
||||
+11
|
||||
+16
|
||||
+5
|
||||
+22
|
||||
+10
|
||||
+16
|
||||
+4
|
||||
+4
|
||||
+4
|
||||
-14
|
||||
+7
|
||||
-6
|
||||
-12
|
||||
+1
|
||||
+9
|
||||
+17
|
||||
-7
|
||||
-6
|
||||
+16
|
||||
-7
|
||||
+11
|
||||
-15
|
||||
+12
|
||||
+10
|
||||
+5
|
||||
+19
|
||||
-8
|
||||
-14
|
||||
+9
|
||||
+16
|
||||
-13
|
||||
-11
|
||||
+14
|
||||
-16
|
||||
-16
|
||||
-2
|
||||
+9
|
||||
-11
|
||||
+14
|
||||
+2
|
||||
+9
|
||||
+15
|
||||
+8
|
||||
+2
|
||||
-12
|
||||
+3
|
||||
+17
|
||||
-4
|
||||
-7
|
||||
+6
|
||||
-16
|
||||
+12
|
||||
+7
|
||||
-14
|
||||
-16
|
||||
+8
|
||||
-21
|
||||
+4
|
||||
+12
|
||||
-2
|
||||
-21
|
||||
-20
|
||||
+1
|
||||
+7
|
||||
+37
|
||||
+1
|
||||
+7
|
||||
+24
|
||||
+13
|
||||
-15
|
||||
+6
|
||||
+10
|
||||
-11
|
||||
+18
|
||||
+1
|
||||
-12
|
||||
+2
|
||||
+12
|
||||
+4
|
||||
+3
|
||||
+7
|
||||
-15
|
||||
+12
|
||||
+8
|
||||
+12
|
||||
+5
|
||||
+11
|
||||
-5
|
||||
+9
|
||||
+16
|
||||
+14
|
||||
+19
|
||||
-14
|
||||
+4
|
||||
+12
|
||||
+14
|
||||
+12
|
||||
+19
|
||||
+13
|
||||
+4
|
||||
-12
|
||||
-19
|
||||
+5
|
||||
+10
|
||||
+15
|
||||
-9
|
||||
-14
|
||||
+4
|
||||
-8
|
||||
-5
|
||||
-5
|
||||
+15
|
||||
+4
|
||||
-15
|
||||
-12
|
||||
+6
|
||||
-7
|
||||
-4
|
||||
-2
|
||||
-19
|
||||
-7
|
||||
-11
|
||||
-3
|
||||
+2
|
||||
+2
|
||||
-14
|
||||
-1
|
||||
+12
|
||||
+10
|
||||
-2
|
||||
+8
|
||||
-11
|
||||
+24
|
||||
-7
|
||||
+5
|
||||
+10
|
||||
+1
|
||||
+15
|
||||
+12
|
||||
-16
|
||||
-18
|
||||
+2
|
||||
+1
|
||||
-17
|
||||
+4
|
||||
+11
|
||||
+3
|
||||
+8
|
||||
-7
|
||||
-11
|
||||
-2
|
||||
-17
|
||||
+13
|
||||
-12
|
||||
-15
|
||||
-16
|
||||
-16
|
||||
+6
|
||||
+11
|
||||
+10
|
||||
-13
|
||||
-19
|
||||
-6
|
||||
+16
|
||||
-15
|
||||
-5
|
||||
-9
|
||||
+10
|
||||
-12
|
||||
-14
|
||||
+18
|
||||
-19
|
||||
-8
|
||||
-19
|
||||
-6
|
||||
-17
|
||||
-18
|
||||
+13
|
||||
+41
|
||||
-4
|
||||
+8
|
||||
-6
|
||||
+20
|
||||
+18
|
||||
-12
|
||||
-5
|
||||
-12
|
||||
-2
|
||||
-4
|
||||
-6
|
||||
-7
|
||||
+5
|
||||
+35
|
||||
+20
|
||||
+10
|
||||
-11
|
||||
+4
|
||||
+2
|
||||
-7
|
||||
+16
|
||||
-10
|
||||
-20
|
||||
+3
|
||||
-9
|
||||
-10
|
||||
+22
|
||||
+26
|
||||
+16
|
||||
+13
|
||||
-7
|
||||
-9
|
||||
-14
|
||||
+10
|
||||
-5
|
||||
+11
|
||||
-3
|
||||
-10
|
||||
-17
|
||||
+8
|
||||
+10
|
||||
+8
|
||||
+13
|
||||
-10
|
||||
+7
|
||||
+7
|
||||
-1
|
||||
+28
|
||||
+16
|
||||
+10
|
||||
+17
|
||||
-16
|
||||
+11
|
||||
+17
|
||||
+4
|
||||
+15
|
||||
+2
|
||||
+9
|
||||
+8
|
||||
-10
|
||||
-2
|
||||
+3
|
||||
+15
|
||||
+17
|
||||
-16
|
||||
+11
|
||||
-4
|
||||
+11
|
||||
-4
|
||||
+11
|
||||
+4
|
||||
-3
|
||||
+9
|
||||
-2
|
||||
-18
|
||||
-17
|
||||
+6
|
||||
-12
|
||||
+11
|
||||
+9
|
||||
-10
|
||||
-8
|
||||
+12
|
||||
-15
|
||||
-1
|
||||
+18
|
||||
+16
|
||||
-19
|
||||
+15
|
||||
+7
|
||||
+20
|
||||
-3
|
||||
+18
|
||||
-11
|
||||
+7
|
||||
-17
|
||||
-13
|
||||
-15
|
||||
+9
|
||||
+14
|
||||
+12
|
||||
-18
|
||||
-20
|
||||
-22
|
||||
+7
|
||||
-6
|
||||
-3
|
||||
+15
|
||||
+8
|
||||
+22
|
||||
+19
|
||||
+17
|
||||
+7
|
||||
+3
|
||||
+2
|
||||
-14
|
||||
-9
|
||||
-1
|
||||
+4
|
||||
+13
|
||||
-15
|
||||
+3
|
||||
+15
|
||||
+7
|
||||
-1
|
||||
+11
|
||||
+9
|
||||
-14
|
||||
-16
|
||||
+2
|
||||
+23
|
||||
+14
|
||||
+1
|
||||
+20
|
||||
+14
|
||||
-4
|
||||
+19
|
||||
-18
|
||||
+14
|
||||
+2
|
||||
+17
|
||||
-12
|
||||
-1
|
||||
-19
|
||||
-13
|
||||
-17
|
||||
-6
|
||||
-10
|
||||
-14
|
||||
-7
|
||||
-10
|
||||
+18
|
||||
+10
|
||||
+15
|
||||
-1
|
||||
-3
|
||||
+14
|
||||
+3
|
||||
-18
|
||||
-9
|
||||
+3
|
||||
-12
|
||||
-6
|
||||
+5
|
||||
+5
|
||||
+9
|
||||
+15
|
||||
+14
|
||||
-12
|
||||
-4
|
||||
+9
|
||||
+16
|
||||
-13
|
||||
-9
|
||||
-15
|
||||
+17
|
||||
+18
|
||||
+1
|
||||
+16
|
||||
-3
|
||||
+19
|
||||
+17
|
||||
+18
|
||||
+7
|
||||
+6
|
||||
-14
|
||||
-2
|
||||
-6
|
||||
+3
|
||||
+2
|
||||
+15
|
||||
-19
|
||||
-5
|
||||
-9
|
||||
-12
|
||||
-16
|
||||
+20
|
||||
+7
|
||||
-21
|
||||
+13
|
||||
+6
|
||||
-8
|
||||
+9
|
||||
+17
|
||||
-19
|
||||
-13
|
||||
+19
|
||||
+9
|
||||
+15
|
||||
-16
|
||||
-7
|
||||
-10
|
||||
-20
|
||||
-15
|
||||
-14
|
||||
-19
|
||||
-13
|
||||
-23
|
||||
-1
|
||||
-8
|
||||
-8
|
||||
+10
|
||||
+5
|
||||
-22
|
||||
+8
|
||||
-11
|
||||
-20
|
||||
+17
|
||||
-1
|
||||
-2
|
||||
+5
|
||||
-21
|
||||
+11
|
||||
+17
|
||||
+3
|
||||
-7
|
||||
-7
|
||||
-19
|
||||
+15
|
||||
-38
|
||||
+1
|
||||
-18
|
||||
-17
|
||||
-23
|
||||
-21
|
||||
-71664
|
|
@ -0,0 +1,19 @@
|
|||
defmodule Day1Test do
|
||||
use ExUnit.Case
|
||||
doctest Day1
|
||||
|
||||
test "calculate frequency" do
|
||||
assert Day1.calculate_frequency([1, -2, 3, 1]) == 3
|
||||
assert Day1.calculate_frequency([1, 1, 1]) == 3
|
||||
assert Day1.calculate_frequency([1, 1, -2]) == 0
|
||||
assert Day1.calculate_frequency([-1, -2, -3]) == -6
|
||||
end
|
||||
|
||||
test "first repetition" do
|
||||
assert Day1.first_repetition([1, -2, 3, 1]) == 2
|
||||
assert Day1.first_repetition([1, -1]) == 0
|
||||
assert Day1.first_repetition([3, 3, 4, -2, -4]) == 10
|
||||
assert Day1.first_repetition([-6, 3, 8, 5, -6]) == 5
|
||||
assert Day1.first_repetition([7, 7, -2, -7, -4]) == 14
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue