Add 2018
This commit is contained in:
parent
675985e57d
commit
bd4acc8f17
30 changed files with 5699 additions and 0 deletions
995
2018/day1/input
Normal file
995
2018/day1/input
Normal file
|
@ -0,0 +1,995 @@
|
|||
-4
|
||||
+9
|
||||
+6
|
||||
+8
|
||||
+3
|
||||
+14
|
||||
+11
|
||||
+7
|
||||
-12
|
||||
+4
|
||||
-15
|
||||
+2
|
||||
-12
|
||||
-4
|
||||
+15
|
||||
-8
|
||||
-16
|
||||
-4
|
||||
+14
|
||||
-11
|
||||
-19
|
||||
-2
|
||||
+15
|
||||
-4
|
||||
-5
|
||||
-1
|
||||
+15
|
||||
-8
|
||||
+1
|
||||
+10
|
||||
+7
|
||||
+18
|
||||
+1
|
||||
+10
|
||||
+11
|
||||
+17
|
||||
-16
|
||||
+4
|
||||
-12
|
||||
+14
|
||||
+9
|
||||
+6
|
||||
+7
|
||||
+10
|
||||
+14
|
||||
+7
|
||||
+6
|
||||
-3
|
||||
+19
|
||||
+18
|
||||
+4
|
||||
+16
|
||||
+17
|
||||
+11
|
||||
+9
|
||||
+7
|
||||
-8
|
||||
-1
|
||||
-5
|
||||
-12
|
||||
-7
|
||||
+4
|
||||
-5
|
||||
+2
|
||||
+4
|
||||
+3
|
||||
+20
|
||||
-19
|
||||
+18
|
||||
+12
|
||||
+14
|
||||
+5
|
||||
-14
|
||||
+7
|
||||
-19
|
||||
-20
|
||||
+6
|
||||
-3
|
||||
+7
|
||||
+15
|
||||
+12
|
||||
+11
|
||||
+15
|
||||
+2
|
||||
+3
|
||||
-17
|
||||
-18
|
||||
+1
|
||||
+13
|
||||
-3
|
||||
+14
|
||||
-1
|
||||
-8
|
||||
-9
|
||||
-12
|
||||
+15
|
||||
-8
|
||||
+10
|
||||
+11
|
||||
+15
|
||||
+4
|
||||
+6
|
||||
+16
|
||||
+1
|
||||
+3
|
||||
+13
|
||||
-6
|
||||
+14
|
||||
-3
|
||||
-12
|
||||
-12
|
||||
+14
|
||||
+6
|
||||
-10
|
||||
+20
|
||||
+5
|
||||
+18
|
||||
+11
|
||||
+3
|
||||
+17
|
||||
+2
|
||||
-9
|
||||
-17
|
||||
-14
|
||||
+2
|
||||
+9
|
||||
+11
|
||||
-2
|
||||
+14
|
||||
+5
|
||||
-7
|
||||
+18
|
||||
-6
|
||||
-9
|
||||
-9
|
||||
-10
|
||||
-12
|
||||
-16
|
||||
-1
|
||||
+14
|
||||
-15
|
||||
-9
|
||||
-2
|
||||
-6
|
||||
-11
|
||||
-14
|
||||
-11
|
||||
-19
|
||||
+11
|
||||
-12
|
||||
-18
|
||||
-5
|
||||
+11
|
||||
+18
|
||||
+17
|
||||
-5
|
||||
-19
|
||||
+14
|
||||
+11
|
||||
-2
|
||||
-14
|
||||
+17
|
||||
+8
|
||||
+3
|
||||
+12
|
||||
-9
|
||||
+1
|
||||
+23
|
||||
+7
|
||||
-12
|
||||
+24
|
||||
+10
|
||||
-2
|
||||
+6
|
||||
+20
|
||||
-16
|
||||
-17
|
||||
+19
|
||||
-7
|
||||
+11
|
||||
+14
|
||||
+21
|
||||
-18
|
||||
+1
|
||||
+4
|
||||
+8
|
||||
-2
|
||||
-5
|
||||
-12
|
||||
-13
|
||||
+7
|
||||
+19
|
||||
+2
|
||||
+8
|
||||
+9
|
||||
+8
|
||||
+2
|
||||
+17
|
||||
+15
|
||||
+18
|
||||
+18
|
||||
+18
|
||||
-2
|
||||
-13
|
||||
-18
|
||||
-12
|
||||
-1
|
||||
+17
|
||||
-14
|
||||
-15
|
||||
+8
|
||||
+20
|
||||
+9
|
||||
-7
|
||||
+11
|
||||
-15
|
||||
-16
|
||||
-11
|
||||
-9
|
||||
+11
|
||||
+19
|
||||
+15
|
||||
+4
|
||||
+15
|
||||
+9
|
||||
-3
|
||||
+5
|
||||
-18
|
||||
+6
|
||||
+17
|
||||
+15
|
||||
-8
|
||||
-13
|
||||
+16
|
||||
+8
|
||||
+17
|
||||
+2
|
||||
+18
|
||||
+2
|
||||
+2
|
||||
+4
|
||||
-10
|
||||
+11
|
||||
-3
|
||||
+8
|
||||
+2
|
||||
+3
|
||||
-12
|
||||
+6
|
||||
+12
|
||||
-1
|
||||
+21
|
||||
-13
|
||||
-17
|
||||
-10
|
||||
+13
|
||||
-6
|
||||
-18
|
||||
-4
|
||||
-6
|
||||
-5
|
||||
+18
|
||||
-20
|
||||
-6
|
||||
-7
|
||||
-17
|
||||
-6
|
||||
-18
|
||||
+9
|
||||
+16
|
||||
+14
|
||||
+10
|
||||
+16
|
||||
+1
|
||||
-4
|
||||
+1
|
||||
+15
|
||||
-9
|
||||
-5
|
||||
-4
|
||||
-7
|
||||
-7
|
||||
-1
|
||||
+13
|
||||
-15
|
||||
-1
|
||||
-22
|
||||
-19
|
||||
+10
|
||||
-8
|
||||
-5
|
||||
+16
|
||||
-12
|
||||
+17
|
||||
+7
|
||||
+4
|
||||
-7
|
||||
+4
|
||||
+6
|
||||
+5
|
||||
-2
|
||||
-1
|
||||
+20
|
||||
-8
|
||||
-3
|
||||
+7
|
||||
-47
|
||||
-10
|
||||
+19
|
||||
-27
|
||||
-3
|
||||
+13
|
||||
-26
|
||||
+1
|
||||
+8
|
||||
-30
|
||||
-14
|
||||
+3
|
||||
+17
|
||||
-16
|
||||
-2
|
||||
-11
|
||||
+14
|
||||
-8
|
||||
-7
|
||||
-10
|
||||
-8
|
||||
+20
|
||||
+23
|
||||
+26
|
||||
+12
|
||||
-25
|
||||
-88
|
||||
+4
|
||||
+1
|
||||
-29
|
||||
-5
|
||||
+16
|
||||
-19
|
||||
+15
|
||||
+19
|
||||
-27
|
||||
-8
|
||||
-18
|
||||
-9
|
||||
-12
|
||||
-10
|
||||
+14
|
||||
-13
|
||||
-14
|
||||
-10
|
||||
-21
|
||||
-14
|
||||
+6
|
||||
-1
|
||||
+21
|
||||
+14
|
||||
+6
|
||||
+21
|
||||
-2
|
||||
+17
|
||||
+20
|
||||
-5
|
||||
+17
|
||||
-4
|
||||
-14
|
||||
-9
|
||||
-11
|
||||
-14
|
||||
+17
|
||||
+20
|
||||
+10
|
||||
+20
|
||||
-80
|
||||
+15
|
||||
-27
|
||||
-42
|
||||
+7
|
||||
-18
|
||||
+14
|
||||
-4
|
||||
-16
|
||||
-3
|
||||
+10
|
||||
-8
|
||||
-25
|
||||
-14
|
||||
-3
|
||||
+24
|
||||
+3
|
||||
+18
|
||||
-35
|
||||
+54
|
||||
+29
|
||||
-35
|
||||
+63
|
||||
+4
|
||||
-119
|
||||
-24
|
||||
-57508
|
||||
+1
|
||||
-10
|
||||
-10
|
||||
-17
|
||||
-8
|
||||
-9
|
||||
+4
|
||||
-7
|
||||
+19
|
||||
+2
|
||||
+19
|
||||
+8
|
||||
-16
|
||||
-19
|
||||
-2
|
||||
+5
|
||||
+2
|
||||
+10
|
||||
+11
|
||||
-6
|
||||
-18
|
||||
+11
|
||||
-17
|
||||
-17
|
||||
+12
|
||||
+4
|
||||
-2
|
||||
-17
|
||||
-5
|
||||
+7
|
||||
-18
|
||||
-14
|
||||
-3
|
||||
-18
|
||||
-16
|
||||
+18
|
||||
-1
|
||||
-10
|
||||
-8
|
||||
-13
|
||||
+12
|
||||
-4
|
||||
-9
|
||||
+6
|
||||
+11
|
||||
-5
|
||||
+9
|
||||
+13
|
||||
+16
|
||||
+15
|
||||
-5
|
||||
+10
|
||||
+13
|
||||
-19
|
||||
-16
|
||||
-13
|
||||
+5
|
||||
-12
|
||||
+8
|
||||
+1
|
||||
+14
|
||||
+23
|
||||
-1
|
||||
+17
|
||||
-15
|
||||
-19
|
||||
-9
|
||||
+8
|
||||
-2
|
||||
+19
|
||||
-13
|
||||
-15
|
||||
+2
|
||||
+12
|
||||
-15
|
||||
-16
|
||||
-20
|
||||
-2
|
||||
+14
|
||||
+6
|
||||
-1
|
||||
-1
|
||||
-3
|
||||
-9
|
||||
-3
|
||||
-15
|
||||
+6
|
||||
+4
|
||||
-8
|
||||
+9
|
||||
-14
|
||||
-10
|
||||
+9
|
||||
-15
|
||||
-16
|
||||
-3
|
||||
-18
|
||||
-9
|
||||
+18
|
||||
-8
|
||||
-16
|
||||
-18
|
||||
+14
|
||||
+17
|
||||
+9
|
||||
+12
|
||||
-7
|
||||
+2
|
||||
+15
|
||||
+12
|
||||
-7
|
||||
-11
|
||||
+13
|
||||
+8
|
||||
+5
|
||||
+2
|
||||
+10
|
||||
-19
|
||||
-12
|
||||
-20
|
||||
+10
|
||||
+7
|
||||
+19
|
||||
-8
|
||||
-7
|
||||
+19
|
||||
-18
|
||||
-15
|
||||
-9
|
||||
-12
|
||||
-18
|
||||
+2
|
||||
+12
|
||||
+10
|
||||
-5
|
||||
+7
|
||||
-15
|
||||
+1
|
||||
-11
|
||||
-18
|
||||
-8
|
||||
-16
|
||||
-16
|
||||
+13
|
||||
-19
|
||||
-10
|
||||
-5
|
||||
-5
|
||||
-18
|
||||
+13
|
||||
+3
|
||||
+16
|
||||
+17
|
||||
+15
|
||||
+19
|
||||
-11
|
||||
+15
|
||||
-12
|
||||
+2
|
||||
+17
|
||||
+17
|
||||
-16
|
||||
-15
|
||||
+5
|
||||
+20
|
||||
-12
|
||||
+5
|
||||
+2
|
||||
+7
|
||||
+15
|
||||
-6
|
||||
-17
|
||||
+18
|
||||
-20
|
||||
-8
|
||||
-15
|
||||
-18
|
||||
-1
|
||||
-20
|
||||
-5
|
||||
+18
|
||||
-11
|
||||
-15
|
||||
+2
|
||||
-15
|
||||
-15
|
||||
+8
|
||||
-18
|
||||
+1
|
||||
+1
|
||||
+5
|
||||
+5
|
||||
+11
|
||||
+5
|
||||
+15
|
||||
+16
|
||||
+19
|
||||
-4
|
||||
-7
|
||||
-5
|
||||
+8
|
||||
-2
|
||||
-19
|
||||
+7
|
||||
-6
|
||||
+19
|
||||
+17
|
||||
+9
|
||||
+2
|
||||
+1
|
||||
-15
|
||||
-2
|
||||
-6
|
||||
-12
|
||||
+19
|
||||
-16
|
||||
-9
|
||||
+4
|
||||
-3
|
||||
+21
|
||||
+6
|
||||
+27
|
||||
+14
|
||||
-22
|
||||
+18
|
||||
+12
|
||||
+18
|
||||
+13
|
||||
-10
|
||||
+8
|
||||
-13
|
||||
-6
|
||||
+10
|
||||
-12
|
||||
-17
|
||||
-38
|
||||
+21
|
||||
-19
|
||||
+18
|
||||
-23
|
||||
-7
|
||||
+17
|
||||
+8
|
||||
+59
|
||||
+3
|
||||
-19
|
||||
+22
|
||||
+17
|
||||
+15
|
||||
+5
|
||||
+24
|
||||
+13
|
||||
+15
|
||||
+8
|
||||
+18
|
||||
-17
|
||||
+16
|
||||
+16
|
||||
+20
|
||||
+1
|
||||
+7
|
||||
-16
|
||||
-15
|
||||
+2
|
||||
-18
|
||||
-9
|
||||
+1
|
||||
+13
|
||||
+5
|
||||
-17
|
||||
+22
|
||||
-13
|
||||
-21
|
||||
-12
|
||||
-4
|
||||
+20
|
||||
-31
|
||||
-12
|
||||
-34
|
||||
+10
|
||||
+2
|
||||
+20
|
||||
+22
|
||||
-28
|
||||
-19
|
||||
-19
|
||||
-2
|
||||
+133
|
||||
+17
|
||||
-10
|
||||
+18
|
||||
-10
|
||||
+6
|
||||
+20
|
||||
-10
|
||||
+3
|
||||
+11
|
||||
+14
|
||||
-5
|
||||
+3
|
||||
+20
|
||||
+11
|
||||
-9
|
||||
-12
|
||||
-1
|
||||
-3
|
||||
-19
|
||||
+12
|
||||
+14
|
||||
+8
|
||||
+12
|
||||
+2
|
||||
+18
|
||||
+7
|
||||
-19
|
||||
+11
|
||||
-22
|
||||
+13
|
||||
-9
|
||||
+15
|
||||
-13
|
||||
+1
|
||||
+20
|
||||
+14
|
||||
-9
|
||||
+11
|
||||
-18
|
||||
+13
|
||||
-21
|
||||
-20
|
||||
-16
|
||||
+7
|
||||
-14
|
||||
+12
|
||||
-1
|
||||
+8
|
||||
-16
|
||||
-16
|
||||
-13
|
||||
+7
|
||||
-3
|
||||
+19
|
||||
-22
|
||||
-10
|
||||
+6
|
||||
+1
|
||||
+16
|
||||
+4
|
||||
-1
|
||||
-12
|
||||
-16
|
||||
-10
|
||||
+29
|
||||
+8
|
||||
+18
|
||||
-9
|
||||
+11
|
||||
+18
|
||||
-6
|
||||
-2
|
||||
+4
|
||||
-3
|
||||
-8
|
||||
-9
|
||||
+21
|
||||
+13
|
||||
-23
|
||||
-26
|
||||
-22
|
||||
-9
|
||||
-24
|
||||
-11
|
||||
+2
|
||||
-18
|
||||
-42
|
||||
+13
|
||||
+46
|
||||
-96
|
||||
-7
|
||||
-9
|
||||
-131
|
||||
-6
|
||||
-21
|
||||
+11
|
||||
-18
|
||||
+14
|
||||
+28
|
||||
-18
|
||||
-11
|
||||
-18
|
||||
-48
|
||||
+7
|
||||
+69
|
||||
+9
|
||||
-24
|
||||
-15
|
||||
+46
|
||||
-10
|
||||
+137
|
||||
-57522
|
||||
+5
|
||||
+4
|
||||
+3
|
||||
+16
|
||||
-3
|
||||
-18
|
||||
+3
|
||||
-9
|
||||
-10
|
||||
+11
|
||||
+12
|
||||
-8
|
||||
-18
|
||||
-18
|
||||
-4
|
||||
+18
|
||||
+19
|
||||
-4
|
||||
-19
|
||||
-19
|
||||
+4
|
||||
-15
|
||||
+3
|
||||
-16
|
||||
-2
|
||||
+12
|
||||
+16
|
||||
+9
|
||||
+10
|
||||
+13
|
||||
+1
|
||||
+21
|
||||
+17
|
||||
+18
|
||||
+5
|
||||
-4
|
||||
-2
|
||||
+15
|
||||
+13
|
||||
+2
|
||||
+7
|
||||
-19
|
||||
+1
|
||||
-16
|
||||
-7
|
||||
-10
|
||||
+18
|
||||
+12
|
||||
-21
|
||||
-7
|
||||
+3
|
||||
+16
|
||||
+14
|
||||
-13
|
||||
+17
|
||||
+2
|
||||
+7
|
||||
-2
|
||||
-10
|
||||
-17
|
||||
+9
|
||||
-5
|
||||
+14
|
||||
+13
|
||||
+7
|
||||
+15
|
||||
-13
|
||||
+1
|
||||
-13
|
||||
+16
|
||||
-2
|
||||
-5
|
||||
-7
|
||||
+15
|
||||
+13
|
||||
-8
|
||||
-1
|
||||
+18
|
||||
+16
|
||||
-15
|
||||
-7
|
||||
+11
|
||||
+10
|
||||
+16
|
||||
-12
|
||||
+15
|
||||
-16
|
||||
-14
|
||||
+8
|
||||
-16
|
||||
-4
|
||||
-4
|
||||
-19
|
||||
-17
|
||||
-4
|
||||
+18
|
||||
+1
|
||||
+14
|
||||
-9
|
||||
-15
|
||||
+19
|
||||
+8
|
||||
+19
|
||||
+14
|
||||
+20
|
||||
-14
|
||||
+1
|
||||
-18
|
||||
+4
|
||||
-3
|
||||
+2
|
||||
-20
|
||||
+10
|
||||
-2
|
||||
+1
|
||||
-3
|
||||
-2
|
||||
-3
|
||||
+12
|
||||
+6
|
||||
+6
|
||||
+11
|
||||
+17
|
||||
-7
|
||||
+20
|
||||
-16
|
||||
+5
|
||||
+6
|
||||
-39
|
||||
-26
|
||||
-31
|
||||
-29
|
||||
+2
|
||||
-19
|
||||
+18
|
||||
-6
|
||||
-16
|
||||
+14
|
||||
+4
|
||||
-19
|
||||
+18
|
||||
-14
|
||||
-1
|
||||
-10
|
||||
-4
|
||||
-17
|
||||
+6
|
||||
+17
|
||||
+1
|
||||
+1
|
||||
-12
|
||||
+21
|
||||
-12
|
||||
+16
|
||||
-12
|
||||
+16
|
||||
-27
|
||||
+22
|
||||
-2
|
||||
+30
|
||||
+1
|
||||
-3
|
||||
+7
|
||||
+23
|
||||
-9
|
||||
+20
|
||||
+34
|
||||
-142
|
||||
-7
|
||||
+5
|
||||
+16
|
||||
-23
|
||||
-9
|
||||
+7
|
||||
-2
|
||||
+12
|
||||
-15
|
||||
-4
|
||||
-19
|
||||
-16
|
||||
+15
|
||||
+13
|
||||
+4
|
||||
+4
|
||||
-16
|
||||
-7
|
||||
+10
|
||||
+17
|
||||
-6
|
||||
-15
|
||||
+11
|
||||
-5
|
||||
-8
|
||||
-18
|
||||
+115524
|
5
2018/day1/part1.exs
Normal file
5
2018/day1/part1.exs
Normal file
|
@ -0,0 +1,5 @@
|
|||
File.stream!("input")
|
||||
|> Stream.map(&String.trim/1)
|
||||
|> Stream.map(&String.to_integer/1)
|
||||
|> Enum.sum()
|
||||
|> IO.puts()
|
27
2018/day1/part2.exs
Normal file
27
2018/day1/part2.exs
Normal file
|
@ -0,0 +1,27 @@
|
|||
defmodule Part2 do
|
||||
def mark_seen(change, {prev_freq, seen}) do
|
||||
freq = prev_freq + change
|
||||
|
||||
marked_freq = {freq, MapSet.member?(seen, freq)}
|
||||
acc = {freq, MapSet.put(seen, freq)}
|
||||
|
||||
{[marked_freq], acc}
|
||||
end
|
||||
|
||||
def run do
|
||||
File.stream!("input")
|
||||
|> Stream.map(&String.trim/1)
|
||||
# Trying to work out why can't cycle over the stream
|
||||
# Can't reproduce with this
|
||||
# Stream.cycle([1]) |> Stream.transform(0, fn one, prev -> {[prev + one], prev + one} end) |> Enum.find(fn x -> x == 25 end)
|
||||
# So maybe it's because a combination of the accumulator in the stream and Enum.find
|
||||
|> Stream.map(&String.to_integer/1)
|
||||
|> Stream.cycle()
|
||||
|> Stream.transform({0, MapSet.new([0])}, &mark_seen/2)
|
||||
|> Enum.find(fn {_freq, seen} -> seen end)
|
||||
|> elem(0)
|
||||
|> IO.puts()
|
||||
end
|
||||
end
|
||||
|
||||
Part2.run()
|
91
2018/day10/day10.exs
Normal file
91
2018/day10/day10.exs
Normal file
|
@ -0,0 +1,91 @@
|
|||
defmodule Star do
|
||||
defstruct [:pos_x, :pos_y, :vel_x, :vel_y]
|
||||
|
||||
def move_all(stars, secs) do
|
||||
Enum.map(stars, &move(&1, secs))
|
||||
end
|
||||
|
||||
def move(star, secs) do
|
||||
%Star{star | pos_x: star.pos_x + star.vel_x * secs, pos_y: star.pos_y + star.vel_y * secs}
|
||||
end
|
||||
end
|
||||
|
||||
defmodule Day10 do
|
||||
@input_pattern ~r/=< ?(-?\d+), ?(-?\d+)>.*=< ?(-?\d+), ?(-?\d+)>/
|
||||
|
||||
def parse_line(line) do
|
||||
[pos_x, pos_y, v_x, v_y] =
|
||||
Regex.run(@input_pattern, line, capture: :all_but_first)
|
||||
|> Enum.map(&String.to_integer/1)
|
||||
|
||||
%Star{pos_x: pos_x, pos_y: pos_y, vel_x: v_x, vel_y: v_y}
|
||||
end
|
||||
|
||||
def init do
|
||||
File.stream!("input")
|
||||
|> Enum.map(&parse_line/1)
|
||||
end
|
||||
|
||||
# Start with the first star, then compare all the others to find the extremities
|
||||
def bounding_box([%Star{pos_x: x, pos_y: y} | _] = stars) do
|
||||
Enum.reduce(stars, {x, y, x, y}, fn star, {min_x, min_y, max_x, max_y} ->
|
||||
{
|
||||
min(star.pos_x, min_x),
|
||||
min(star.pos_y, min_y),
|
||||
max(star.pos_x, max_x),
|
||||
max(star.pos_y, max_y)
|
||||
}
|
||||
end)
|
||||
end
|
||||
|
||||
def draw(stars) do
|
||||
starfield = MapSet.new(stars, fn star -> {star.pos_x, star.pos_y} end)
|
||||
|
||||
{min_x, min_y, max_x, max_y} = bounding_box(stars)
|
||||
|
||||
grid =
|
||||
for y <- min_y..max_y, x <- min_x..max_x do
|
||||
eol = if x === max_x, do: "\n", else: ""
|
||||
char = if MapSet.member?(starfield, {x, y}), do: "#", else: " "
|
||||
char <> eol
|
||||
end
|
||||
|
||||
Enum.join(grid)
|
||||
end
|
||||
|
||||
def aligned?(stars) do
|
||||
starfield = MapSet.new(stars, fn star -> {star.pos_x, star.pos_y} end)
|
||||
Enum.all?(stars, &aligned?(&1, starfield))
|
||||
end
|
||||
|
||||
def aligned?(star, starfield) do
|
||||
neighbours = [
|
||||
{star.pos_x - 1, star.pos_y - 1},
|
||||
{star.pos_x - 1, star.pos_y},
|
||||
{star.pos_x - 1, star.pos_y + 1},
|
||||
{star.pos_x, star.pos_y - 1},
|
||||
{star.pos_x, star.pos_y + 1},
|
||||
{star.pos_x + 1, star.pos_y - 1},
|
||||
{star.pos_x + 1, star.pos_y},
|
||||
{star.pos_x + 1, star.pos_y + 1}
|
||||
]
|
||||
|
||||
Enum.any?(neighbours, &MapSet.member?(starfield, &1))
|
||||
end
|
||||
|
||||
def wait_for_alignment(stars, count) do
|
||||
if aligned?(stars) do
|
||||
{stars, count}
|
||||
else
|
||||
stars |> Star.move_all(1) |> wait_for_alignment(count + 1)
|
||||
end
|
||||
end
|
||||
|
||||
def go do
|
||||
{stars, count} = init() |> wait_for_alignment(0)
|
||||
IO.puts(draw(stars))
|
||||
IO.puts("#{count} seconds")
|
||||
end
|
||||
end
|
||||
|
||||
Day10.go()
|
374
2018/day10/input
Normal file
374
2018/day10/input
Normal file
|
@ -0,0 +1,374 @@
|
|||
position=<-20620, -41485> velocity=< 2, 4>
|
||||
position=<-51844, 41770> velocity=< 5, -4>
|
||||
position=<-51817, -20670> velocity=< 5, 2>
|
||||
position=< 21000, 52179> velocity=<-2, -5>
|
||||
position=< 21051, 31360> velocity=<-2, -3>
|
||||
position=< 41859, -41487> velocity=<-4, 4>
|
||||
position=< 41830, 31361> velocity=<-4, -3>
|
||||
position=<-51817, -51895> velocity=< 5, 5>
|
||||
position=<-51836, -41484> velocity=< 5, 4>
|
||||
position=< 21032, -51887> velocity=<-2, 5>
|
||||
position=<-31003, -41482> velocity=< 3, 4>
|
||||
position=< 52261, -51890> velocity=<-5, 5>
|
||||
position=<-51836, 10547> velocity=< 5, -1>
|
||||
position=< 10614, -10259> velocity=<-1, 1>
|
||||
position=<-10194, 41776> velocity=< 1, -4>
|
||||
position=<-10186, 10550> velocity=< 1, -1>
|
||||
position=< 31431, -51892> velocity=<-3, 5>
|
||||
position=<-51804, 52175> velocity=< 5, -5>
|
||||
position=< 10601, 52183> velocity=<-1, -5>
|
||||
position=<-51812, 10548> velocity=< 5, -1>
|
||||
position=< 10633, 20959> velocity=<-1, -2>
|
||||
position=<-41417, -41480> velocity=< 4, 4>
|
||||
position=< 10628, 31360> velocity=<-1, -3>
|
||||
position=<-10160, -20666> velocity=< 1, 2>
|
||||
position=<-51793, -20673> velocity=< 5, 2>
|
||||
position=<-41430, -41485> velocity=< 4, 4>
|
||||
position=< 21032, -20670> velocity=<-2, 2>
|
||||
position=<-30987, -51891> velocity=< 3, 5>
|
||||
position=< 52280, -31080> velocity=<-5, 3>
|
||||
position=<-30995, -10266> velocity=< 3, 1>
|
||||
position=<-10177, -51888> velocity=< 1, 5>
|
||||
position=<-30995, 10551> velocity=< 3, -1>
|
||||
position=< 21028, 20961> velocity=<-2, -2>
|
||||
position=< 31412, -51895> velocity=<-3, 5>
|
||||
position=< 31467, -10260> velocity=<-3, 1>
|
||||
position=< 31407, -51895> velocity=<-3, 5>
|
||||
position=< 10636, 41773> velocity=<-1, -4>
|
||||
position=< 31418, -51892> velocity=<-3, 5>
|
||||
position=<-20620, 41773> velocity=< 2, -4>
|
||||
position=<-10163, -10265> velocity=< 1, 1>
|
||||
position=<-20594, -10264> velocity=< 2, 1>
|
||||
position=< 52266, -10262> velocity=<-5, 1>
|
||||
position=< 52223, 52178> velocity=<-5, -5>
|
||||
position=< 21019, -20666> velocity=<-2, 2>
|
||||
position=<-20620, 20958> velocity=< 2, -2>
|
||||
position=< 21016, 20960> velocity=<-2, -2>
|
||||
position=< 10593, -10259> velocity=<-1, 1>
|
||||
position=< 21045, 31365> velocity=<-2, -3>
|
||||
position=< 10609, 10548> velocity=<-1, -1>
|
||||
position=< 21016, -20666> velocity=<-2, 2>
|
||||
position=< 10598, -10265> velocity=<-1, 1>
|
||||
position=<-41394, 20955> velocity=< 4, -2>
|
||||
position=<-20612, -10262> velocity=< 2, 1>
|
||||
position=<-30987, -41489> velocity=< 3, 4>
|
||||
position=< 52261, 31361> velocity=<-5, -3>
|
||||
position=< 31408, 31364> velocity=<-3, -3>
|
||||
position=<-10181, -31076> velocity=< 1, 3>
|
||||
position=<-20625, -10268> velocity=< 2, 1>
|
||||
position=< 41846, 10551> velocity=<-4, -1>
|
||||
position=<-20588, -31074> velocity=< 2, 3>
|
||||
position=<-41407, 31364> velocity=< 4, -3>
|
||||
position=<-20577, 41767> velocity=< 2, -4>
|
||||
position=< 21040, 31361> velocity=<-2, -3>
|
||||
position=<-20586, -51892> velocity=< 2, 5>
|
||||
position=<-41386, 31364> velocity=< 4, -3>
|
||||
position=< 21001, 20953> velocity=<-2, -2>
|
||||
position=<-51797, -20671> velocity=< 5, 2>
|
||||
position=<-20620, -41484> velocity=< 2, 4>
|
||||
position=< 31433, -51887> velocity=<-3, 5>
|
||||
position=< 10617, 31363> velocity=<-1, -3>
|
||||
position=< 10598, 52175> velocity=<-1, -5>
|
||||
position=<-41413, -51891> velocity=< 4, 5>
|
||||
position=<-41386, -10260> velocity=< 4, 1>
|
||||
position=<-51846, -20671> velocity=< 5, 2>
|
||||
position=< 52273, -51892> velocity=<-5, 5>
|
||||
position=<-51836, -51896> velocity=< 5, 5>
|
||||
position=<-20596, 20959> velocity=< 2, -2>
|
||||
position=< 41814, 31360> velocity=<-4, -3>
|
||||
position=< 10620, -31073> velocity=<-1, 3>
|
||||
position=<-41438, 31360> velocity=< 4, -3>
|
||||
position=< 21060, 31361> velocity=<-2, -3>
|
||||
position=<-20628, -41487> velocity=< 2, 4>
|
||||
position=<-10185, -51896> velocity=< 1, 5>
|
||||
position=<-31022, -20671> velocity=< 3, 2>
|
||||
position=< 31407, 10551> velocity=<-3, -1>
|
||||
position=< 41830, -51887> velocity=<-4, 5>
|
||||
position=< 52263, 52177> velocity=<-5, -5>
|
||||
position=<-41413, -10267> velocity=< 4, 1>
|
||||
position=< 10653, -10260> velocity=<-1, 1>
|
||||
position=<-20628, -31074> velocity=< 2, 3>
|
||||
position=< 41830, -51892> velocity=<-4, 5>
|
||||
position=<-51822, 20953> velocity=< 5, -2>
|
||||
position=< 52221, 52181> velocity=<-5, -5>
|
||||
position=<-20583, -41488> velocity=< 2, 4>
|
||||
position=<-51813, -31082> velocity=< 5, 3>
|
||||
position=< 41822, 52175> velocity=<-4, -5>
|
||||
position=<-41442, -41482> velocity=< 4, 4>
|
||||
position=<-10172, -31078> velocity=< 1, 3>
|
||||
position=<-10178, -10263> velocity=< 1, 1>
|
||||
position=<-51797, 31360> velocity=< 5, -3>
|
||||
position=< 10650, 31364> velocity=<-1, -3>
|
||||
position=<-51798, 10550> velocity=< 5, -1>
|
||||
position=< 31444, -51893> velocity=<-3, 5>
|
||||
position=< 21008, -51888> velocity=<-2, 5>
|
||||
position=<-51792, -31078> velocity=< 5, 3>
|
||||
position=<-30991, 20960> velocity=< 3, -2>
|
||||
position=< 10606, -10263> velocity=<-1, 1>
|
||||
position=<-41429, 31363> velocity=< 4, -3>
|
||||
position=< 41843, 20960> velocity=<-4, -2>
|
||||
position=< 31423, -51896> velocity=<-3, 5>
|
||||
position=<-20586, 20957> velocity=< 2, -2>
|
||||
position=< 21002, -20675> velocity=<-2, 2>
|
||||
position=< 21056, 20953> velocity=<-2, -2>
|
||||
position=< 31420, 10549> velocity=<-3, -1>
|
||||
position=< 21029, 31365> velocity=<-2, -3>
|
||||
position=< 21048, 20955> velocity=<-2, -2>
|
||||
position=< 31463, -10264> velocity=<-3, 1>
|
||||
position=<-31007, -41489> velocity=< 3, 4>
|
||||
position=<-20595, -20675> velocity=< 2, 2>
|
||||
position=<-51849, -20673> velocity=< 5, 2>
|
||||
position=< 41856, -10264> velocity=<-4, 1>
|
||||
position=<-31011, -20671> velocity=< 3, 2>
|
||||
position=<-31033, 41767> velocity=< 3, -4>
|
||||
position=<-10165, 20956> velocity=< 1, -2>
|
||||
position=<-41418, -20667> velocity=< 4, 2>
|
||||
position=< 21024, 41775> velocity=<-2, -4>
|
||||
position=<-20572, 10547> velocity=< 2, -1>
|
||||
position=<-41383, 52181> velocity=< 4, -5>
|
||||
position=<-31022, 20956> velocity=< 3, -2>
|
||||
position=< 31415, -51889> velocity=<-3, 5>
|
||||
position=<-10184, -51887> velocity=< 1, 5>
|
||||
position=<-41418, 10548> velocity=< 4, -1>
|
||||
position=< 52238, 10555> velocity=<-5, -1>
|
||||
position=<-41439, 10546> velocity=< 4, -1>
|
||||
position=< 21013, -51887> velocity=<-2, 5>
|
||||
position=< 52247, 41767> velocity=<-5, -4>
|
||||
position=<-20599, -51895> velocity=< 2, 5>
|
||||
position=< 41823, 31364> velocity=<-4, -3>
|
||||
position=<-41394, 41773> velocity=< 4, -4>
|
||||
position=<-41394, 10547> velocity=< 4, -1>
|
||||
position=<-31027, -51893> velocity=< 3, 5>
|
||||
position=< 31420, 10554> velocity=<-3, -1>
|
||||
position=< 52258, -10267> velocity=<-5, 1>
|
||||
position=< 52277, -20672> velocity=<-5, 2>
|
||||
position=< 10601, -41488> velocity=<-1, 4>
|
||||
position=< 52258, 31362> velocity=<-5, -3>
|
||||
position=<-31031, -31078> velocity=< 3, 3>
|
||||
position=<-30987, -31073> velocity=< 3, 3>
|
||||
position=<-30990, 41775> velocity=< 3, -4>
|
||||
position=< 31432, -41489> velocity=<-3, 4>
|
||||
position=<-31001, 41767> velocity=< 3, -4>
|
||||
position=<-20588, -20675> velocity=< 2, 2>
|
||||
position=<-20591, 41769> velocity=< 2, -4>
|
||||
position=<-31003, 20953> velocity=< 3, -2>
|
||||
position=<-51793, 52178> velocity=< 5, -5>
|
||||
position=<-41410, 31361> velocity=< 4, -3>
|
||||
position=<-20580, 31369> velocity=< 2, -3>
|
||||
position=<-20594, 31360> velocity=< 2, -3>
|
||||
position=< 41855, -41487> velocity=<-4, 4>
|
||||
position=<-10173, 20954> velocity=< 1, -2>
|
||||
position=< 21016, 20954> velocity=<-2, -2>
|
||||
position=< 41843, -51888> velocity=<-4, 5>
|
||||
position=< 52241, -51887> velocity=<-5, 5>
|
||||
position=<-51816, -31082> velocity=< 5, 3>
|
||||
position=<-31035, -20666> velocity=< 3, 2>
|
||||
position=< 41857, 31366> velocity=<-4, -3>
|
||||
position=< 41814, -51896> velocity=<-4, 5>
|
||||
position=< 31439, 20957> velocity=<-3, -2>
|
||||
position=< 21036, 31366> velocity=<-2, -3>
|
||||
position=<-20615, -41488> velocity=< 2, 4>
|
||||
position=< 10634, -20674> velocity=<-1, 2>
|
||||
position=< 52269, 20958> velocity=<-5, -2>
|
||||
position=<-41441, -20671> velocity=< 4, 2>
|
||||
position=<-30995, -20670> velocity=< 3, 2>
|
||||
position=< 41872, -20672> velocity=<-4, 2>
|
||||
position=< 52222, 31364> velocity=<-5, -3>
|
||||
position=<-41434, 20956> velocity=< 4, -2>
|
||||
position=< 41814, 10554> velocity=<-4, -1>
|
||||
position=< 41833, -41480> velocity=<-4, 4>
|
||||
position=<-31007, 31368> velocity=< 3, -3>
|
||||
position=< 10609, -41481> velocity=<-1, 4>
|
||||
position=<-51844, 41769> velocity=< 5, -4>
|
||||
position=< 41814, 31361> velocity=<-4, -3>
|
||||
position=< 41818, 20957> velocity=<-4, -2>
|
||||
position=< 41859, -51888> velocity=<-4, 5>
|
||||
position=< 31455, -20667> velocity=<-3, 2>
|
||||
position=< 21045, 10549> velocity=<-2, -1>
|
||||
position=< 10609, 10550> velocity=<-1, -1>
|
||||
position=<-20628, 10552> velocity=< 2, -1>
|
||||
position=<-41431, -20671> velocity=< 4, 2>
|
||||
position=< 41858, 52181> velocity=<-4, -5>
|
||||
position=< 10595, 20953> velocity=<-1, -2>
|
||||
position=<-10208, 20960> velocity=< 1, -2>
|
||||
position=<-51817, 10553> velocity=< 5, -1>
|
||||
position=<-20568, -31074> velocity=< 2, 3>
|
||||
position=< 52241, 10555> velocity=<-5, -1>
|
||||
position=< 31452, 41774> velocity=<-3, -4>
|
||||
position=< 41865, -41485> velocity=<-4, 4>
|
||||
position=< 10638, -31080> velocity=<-1, 3>
|
||||
position=<-20571, 31364> velocity=< 2, -3>
|
||||
position=<-41394, 31363> velocity=< 4, -3>
|
||||
position=< 31407, 10546> velocity=<-3, -1>
|
||||
position=< 41870, 31366> velocity=<-4, -3>
|
||||
position=< 21040, -31074> velocity=<-2, 3>
|
||||
position=< 10614, -20666> velocity=<-1, 2>
|
||||
position=<-51801, 52182> velocity=< 5, -5>
|
||||
position=<-31027, 41767> velocity=< 3, -4>
|
||||
position=< 31415, -20671> velocity=<-3, 2>
|
||||
position=<-51817, -41481> velocity=< 5, 4>
|
||||
position=< 31452, 52177> velocity=<-3, -5>
|
||||
position=< 21027, -20675> velocity=<-2, 2>
|
||||
position=<-31035, 20957> velocity=< 3, -2>
|
||||
position=<-51814, -31077> velocity=< 5, 3>
|
||||
position=<-20569, 41769> velocity=< 2, -4>
|
||||
position=< 21013, -51889> velocity=<-2, 5>
|
||||
position=< 21033, -51892> velocity=<-2, 5>
|
||||
position=<-10173, -20669> velocity=< 1, 2>
|
||||
position=<-20596, 41770> velocity=< 2, -4>
|
||||
position=< 21027, 52183> velocity=<-2, -5>
|
||||
position=<-41418, -31076> velocity=< 4, 3>
|
||||
position=< 52264, 52179> velocity=<-5, -5>
|
||||
position=< 21048, 10551> velocity=<-2, -1>
|
||||
position=< 52221, 20956> velocity=<-5, -2>
|
||||
position=<-51793, 20954> velocity=< 5, -2>
|
||||
position=<-30999, 10550> velocity=< 3, -1>
|
||||
position=< 41827, -31075> velocity=<-4, 3>
|
||||
position=<-41423, 10555> velocity=< 4, -1>
|
||||
position=< 52272, 41771> velocity=<-5, -4>
|
||||
position=< 21008, 52180> velocity=<-2, -5>
|
||||
position=<-20595, -31078> velocity=< 2, 3>
|
||||
position=<-10178, -51890> velocity=< 1, 5>
|
||||
position=< 21013, 10548> velocity=<-2, -1>
|
||||
position=<-51793, -41483> velocity=< 5, 4>
|
||||
position=<-51808, 10547> velocity=< 5, -1>
|
||||
position=< 21050, -41489> velocity=<-2, 4>
|
||||
position=<-20599, -41481> velocity=< 2, 4>
|
||||
position=<-51833, 31367> velocity=< 5, -3>
|
||||
position=<-51817, -31082> velocity=< 5, 3>
|
||||
position=<-30995, 31364> velocity=< 3, -3>
|
||||
position=< 31455, 10546> velocity=<-3, -1>
|
||||
position=< 31433, 41776> velocity=<-3, -4>
|
||||
position=<-30995, -10264> velocity=< 3, 1>
|
||||
position=<-51849, -51889> velocity=< 5, 5>
|
||||
position=<-31026, 20957> velocity=< 3, -2>
|
||||
position=< 31468, 31360> velocity=<-3, -3>
|
||||
position=< 31449, -51893> velocity=<-3, 5>
|
||||
position=<-41397, 20959> velocity=< 4, -2>
|
||||
position=<-10181, 10549> velocity=< 1, -1>
|
||||
position=< 10638, -10268> velocity=<-1, 1>
|
||||
position=< 41843, -10262> velocity=<-4, 1>
|
||||
position=<-10189, 52183> velocity=< 1, -5>
|
||||
position=< 41859, -51893> velocity=<-4, 5>
|
||||
position=< 41819, -51893> velocity=<-4, 5>
|
||||
position=< 31431, -10263> velocity=<-3, 1>
|
||||
position=<-51793, 52179> velocity=< 5, -5>
|
||||
position=< 10593, -10263> velocity=<-1, 1>
|
||||
position=< 21040, 31369> velocity=<-2, -3>
|
||||
position=< 10649, -10267> velocity=<-1, 1>
|
||||
position=< 41875, -10268> velocity=<-4, 1>
|
||||
position=<-20600, 10554> velocity=< 2, -1>
|
||||
position=< 31468, 20953> velocity=<-3, -2>
|
||||
position=<-31019, 20958> velocity=< 3, -2>
|
||||
position=<-20624, -51892> velocity=< 2, 5>
|
||||
position=< 41842, 20953> velocity=<-4, -2>
|
||||
position=<-20599, -41480> velocity=< 2, 4>
|
||||
position=< 10645, -51896> velocity=<-1, 5>
|
||||
position=<-10216, 52175> velocity=< 1, -5>
|
||||
position=< 21024, 31363> velocity=<-2, -3>
|
||||
position=< 41870, 10551> velocity=<-4, -1>
|
||||
position=<-20572, -20672> velocity=< 2, 2>
|
||||
position=<-20583, 31369> velocity=< 2, -3>
|
||||
position=<-20586, 31363> velocity=< 2, -3>
|
||||
position=<-20596, 10549> velocity=< 2, -1>
|
||||
position=< 31436, 41772> velocity=<-3, -4>
|
||||
position=<-41418, 20960> velocity=< 4, -2>
|
||||
position=<-10205, -51889> velocity=< 1, 5>
|
||||
position=< 10649, -31074> velocity=<-1, 3>
|
||||
position=< 10622, 20959> velocity=<-1, -2>
|
||||
position=< 52274, -10268> velocity=<-5, 1>
|
||||
position=< 52222, -51896> velocity=<-5, 5>
|
||||
position=< 52266, -31077> velocity=<-5, 3>
|
||||
position=< 41854, -10259> velocity=<-4, 1>
|
||||
position=< 31463, -20670> velocity=<-3, 2>
|
||||
position=< 21045, 10552> velocity=<-2, -1>
|
||||
position=<-10197, 20955> velocity=< 1, -2>
|
||||
position=< 31431, -51892> velocity=<-3, 5>
|
||||
position=< 52250, -10262> velocity=<-5, 1>
|
||||
position=< 41830, -20672> velocity=<-4, 2>
|
||||
position=<-20596, -51887> velocity=< 2, 5>
|
||||
position=<-10203, -41480> velocity=< 1, 4>
|
||||
position=< 41850, 52174> velocity=<-4, -5>
|
||||
position=< 10628, 52179> velocity=<-1, -5>
|
||||
position=<-30986, 31360> velocity=< 3, -3>
|
||||
position=<-20591, -31074> velocity=< 2, 3>
|
||||
position=< 52234, -51887> velocity=<-5, 5>
|
||||
position=<-20604, -51891> velocity=< 2, 5>
|
||||
position=< 10593, 41768> velocity=<-1, -4>
|
||||
position=< 31439, 31362> velocity=<-3, -3>
|
||||
position=< 41859, -51892> velocity=<-4, 5>
|
||||
position=<-10205, 31369> velocity=< 1, -3>
|
||||
position=<-31027, 10548> velocity=< 3, -1>
|
||||
position=< 10633, 10548> velocity=<-1, -1>
|
||||
position=< 21028, 20953> velocity=<-2, -2>
|
||||
position=< 21016, 20959> velocity=<-2, -2>
|
||||
position=< 31434, -10263> velocity=<-3, 1>
|
||||
position=<-10192, 10555> velocity=< 1, -1>
|
||||
position=< 52234, 31366> velocity=<-5, -3>
|
||||
position=< 41822, 31363> velocity=<-4, -3>
|
||||
position=< 41838, -51895> velocity=<-4, 5>
|
||||
position=<-31007, 20958> velocity=< 3, -2>
|
||||
position=<-41402, 31362> velocity=< 4, -3>
|
||||
position=< 52229, 41769> velocity=<-5, -4>
|
||||
position=< 10641, -41482> velocity=<-1, 4>
|
||||
position=<-51804, -41484> velocity=< 5, 4>
|
||||
position=< 41827, 20962> velocity=<-4, -2>
|
||||
position=<-10208, -31080> velocity=< 1, 3>
|
||||
position=< 41826, 41771> velocity=<-4, -4>
|
||||
position=< 21041, -10266> velocity=<-2, 1>
|
||||
position=<-51808, -51895> velocity=< 5, 5>
|
||||
position=<-51841, 41774> velocity=< 5, -4>
|
||||
position=<-20596, 41774> velocity=< 2, -4>
|
||||
position=< 41866, 31364> velocity=<-4, -3>
|
||||
position=< 31407, -20672> velocity=<-3, 2>
|
||||
position=< 10643, -20671> velocity=<-1, 2>
|
||||
position=< 41865, 10546> velocity=<-4, -1>
|
||||
position=<-51792, 10551> velocity=< 5, -1>
|
||||
position=<-30977, -10262> velocity=< 3, 1>
|
||||
position=< 31436, 41775> velocity=<-3, -4>
|
||||
position=< 31443, 20960> velocity=<-3, -2>
|
||||
position=<-30977, 10549> velocity=< 3, -1>
|
||||
position=<-31022, -31082> velocity=< 3, 3>
|
||||
position=<-41434, -41488> velocity=< 4, 4>
|
||||
position=<-20604, -31074> velocity=< 2, 3>
|
||||
position=< 52261, 31367> velocity=<-5, -3>
|
||||
position=< 21029, 20960> velocity=<-2, -2>
|
||||
position=< 10625, 52174> velocity=<-1, -5>
|
||||
position=<-41433, 41771> velocity=< 4, -4>
|
||||
position=< 52269, 20954> velocity=<-5, -2>
|
||||
position=< 10625, 41768> velocity=<-1, -4>
|
||||
position=< 41830, 20959> velocity=<-4, -2>
|
||||
position=< 31431, -10266> velocity=<-3, 1>
|
||||
position=<-20572, 41774> velocity=< 2, -4>
|
||||
position=< 52265, -20668> velocity=<-5, 2>
|
||||
position=< 10595, -41485> velocity=<-1, 4>
|
||||
position=<-20580, -10264> velocity=< 2, 1>
|
||||
position=< 52270, -10268> velocity=<-5, 1>
|
||||
position=<-31019, 31362> velocity=< 3, -3>
|
||||
position=< 31439, -10262> velocity=<-3, 1>
|
||||
position=<-20618, 20957> velocity=< 2, -2>
|
||||
position=<-41407, 31364> velocity=< 4, -3>
|
||||
position=< 41814, -31080> velocity=<-4, 3>
|
||||
position=<-10208, -20673> velocity=< 1, 2>
|
||||
position=< 31412, -20673> velocity=<-3, 2>
|
||||
position=< 31463, 52183> velocity=<-3, -5>
|
||||
position=<-30983, -51896> velocity=< 3, 5>
|
||||
position=< 31447, 10553> velocity=<-3, -1>
|
||||
position=< 41843, -51895> velocity=<-4, 5>
|
||||
position=< 31447, -10259> velocity=<-3, 1>
|
||||
position=<-41438, -31082> velocity=< 4, 3>
|
||||
position=< 10593, -31078> velocity=<-1, 3>
|
||||
position=<-30985, 10546> velocity=< 3, -1>
|
||||
position=<-31027, -41487> velocity=< 3, 4>
|
||||
position=< 21026, 52174> velocity=<-2, -5>
|
||||
position=<-51809, 52178> velocity=< 5, -5>
|
||||
position=<-41429, -10267> velocity=< 4, 1>
|
||||
position=< 52256, 10551> velocity=<-5, -1>
|
||||
position=< 52277, 41769> velocity=<-5, -4>
|
||||
position=<-31000, 41767> velocity=< 3, -4>
|
||||
position=<-20583, -51887> velocity=< 2, 5>
|
||||
position=<-20594, 10550> velocity=< 2, -1>
|
||||
position=<-41393, 20953> velocity=< 4, -2>
|
||||
position=< 21002, -20671> velocity=<-2, 2>
|
||||
position=<-10200, 41776> velocity=< 1, -4>
|
||||
position=< 52258, 31369> velocity=<-5, -3>
|
93
2018/day11/day11.exs
Normal file
93
2018/day11/day11.exs
Normal file
|
@ -0,0 +1,93 @@
|
|||
defmodule Day11 do
|
||||
@serial 7511
|
||||
@size 300
|
||||
|
||||
def hundreds(lvl) when lvl < 100, do: 0
|
||||
|
||||
def hundreds(lvl) do
|
||||
[_units, _tens, hundreds | _] = Integer.digits(lvl) |> Enum.reverse()
|
||||
hundreds
|
||||
end
|
||||
|
||||
def power_level(x, y, serial) do
|
||||
rack_id = x + 10
|
||||
rack_id |> Kernel.*(y) |> Kernel.+(serial) |> Kernel.*(rack_id) |> hundreds() |> Kernel.-(5)
|
||||
end
|
||||
|
||||
def grid(serial \\ @serial) do
|
||||
for x <- 1..@size, y <- 1..@size, into: %{} do
|
||||
{{x, y}, power_level(x, y, serial)}
|
||||
end
|
||||
end
|
||||
|
||||
def total_power(x, y, grid) do
|
||||
for x <- x..(x + 2), y <- y..(y + 2) do
|
||||
grid[{x, y}]
|
||||
end
|
||||
|> Enum.sum()
|
||||
end
|
||||
|
||||
def find_largest_3x3(grid) do
|
||||
for x <- 1..(@size - 2), y <- 1..(@size - 2) do
|
||||
{{x, y}, total_power(x, y, grid)}
|
||||
end
|
||||
|> Enum.max_by(fn {_, power} -> power end)
|
||||
end
|
||||
|
||||
def part1 do
|
||||
{{x, y}, power} = grid() |> find_largest_3x3()
|
||||
"#{x},#{y} (total power #{power})"
|
||||
end
|
||||
|
||||
# Entry point
|
||||
def largest_total_power_at(x, y, grid) do
|
||||
size = 1
|
||||
power = grid[{x, y}]
|
||||
largest_total_power_at(x, y, grid, size, power, size, power)
|
||||
end
|
||||
|
||||
# Terminating condition, square size has reached the edge of the grid
|
||||
def largest_total_power_at(x, y, _grid, size, _power, max_size, max_power)
|
||||
when x + size > @size or y + size > @size do
|
||||
{x, y, max_size, max_power}
|
||||
end
|
||||
|
||||
# Calculate extra power for square of size + 1 and take the max of the two
|
||||
def largest_total_power_at(x, y, grid, size, power, max_size, max_power) do
|
||||
new_x = x + size
|
||||
new_y = y + size
|
||||
new_row = for row_x <- x..new_x, do: grid[{row_x, new_y}]
|
||||
# Minus 1 to avoid counting the corner twice
|
||||
new_col = for col_y <- y..(new_y - 1), do: grid[{new_x, col_y}]
|
||||
new_power = Enum.sum([power | new_row ++ new_col])
|
||||
new_size = size + 1
|
||||
|
||||
{max_size, max_power} =
|
||||
if new_power > max_power do
|
||||
{new_size, new_power}
|
||||
else
|
||||
{max_size, max_power}
|
||||
end
|
||||
|
||||
largest_total_power_at(x, y, grid, new_size, new_power, max_size, max_power)
|
||||
end
|
||||
|
||||
# Still very slow, managed to avoid recalculating larger squares, but still recalculates
|
||||
# smaller squares that are a subset of a larger square we already calculated.
|
||||
# Could fix it, but 300x300 completes in a few mins.. maybe will come back to this
|
||||
# I Wonder if replacing all the comprehensions with reduce would have a strong effect
|
||||
def part2 do
|
||||
grid = grid()
|
||||
|
||||
{x, y, size, power} =
|
||||
for x <- 1..@size, IO.inspect(301 - x), y <- 1..@size do
|
||||
largest_total_power_at(x, y, grid)
|
||||
end
|
||||
|> Enum.max_by(fn {_x, _y, _size, power} -> power end)
|
||||
|
||||
"Part 2 Answer: #{x},#{y},#{size} (power: #{power})"
|
||||
end
|
||||
end
|
||||
|
||||
IO.puts(Day11.part1())
|
||||
IO.puts(Day11.part2())
|
101
2018/day12/day12.exs
Normal file
101
2018/day12/day12.exs
Normal file
|
@ -0,0 +1,101 @@
|
|||
defmodule Day12 do
|
||||
defmodule Parser do
|
||||
def parse(filename) when is_binary(filename) do
|
||||
File.open!(filename, [:utf8], &parse/1)
|
||||
end
|
||||
|
||||
def parse(file) do
|
||||
IO.read(file, String.length("initial state: "))
|
||||
state = file |> IO.read(:line) |> String.trim() |> String.to_charlist() |> Enum.with_index()
|
||||
IO.read(file, :line)
|
||||
{state, parse_spec(file)}
|
||||
end
|
||||
|
||||
def parse_spec(file), do: parse_spec(file, IO.read(file, :line), %{})
|
||||
def parse_spec(_file, :eof, spec), do: spec
|
||||
|
||||
def parse_spec(file, line, spec) do
|
||||
[pattern, <<result::utf8>>] = ~r/(.{5}) => (.)/ |> Regex.run(line, capture: :all_but_first)
|
||||
|
||||
parse_spec(
|
||||
file,
|
||||
IO.read(file, :line),
|
||||
Map.put(spec, String.to_charlist(pattern), result)
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
def evolve(input, _spec, 0, _previous), do: input
|
||||
|
||||
def evolve(input, spec, generations, previous) do
|
||||
next = generation(input, spec)
|
||||
IO.inspect("#{generations}: #{next |> visualise}")
|
||||
|
||||
if stable?(next, input) do
|
||||
# Stable state, so we can just add the remaining generation count to the index numbers and finish early
|
||||
next = Enum.map(next, fn {pot, idx} -> {pot, idx + generations - 1} end)
|
||||
evolve(next, spec, 0, input)
|
||||
else
|
||||
evolve(next, spec, generations - 1, input)
|
||||
end
|
||||
end
|
||||
|
||||
def stable?(next, prev), do: visualise(next) === visualise(prev)
|
||||
|
||||
def generation(input, spec) do
|
||||
input |> pad |> propagate(spec) |> strip
|
||||
end
|
||||
|
||||
def propagate([a, b, c, d, e | rest], spec) do
|
||||
{_, pot} = c
|
||||
pattern = visualise([a, b, c, d, e])
|
||||
[{Map.get(spec, pattern), pot} | propagate([b, c, d, e | rest], spec)]
|
||||
end
|
||||
|
||||
def propagate(rest, _spec) when length(rest) == 4, do: []
|
||||
|
||||
# Pads with 4 empty pots. If the spec contained ..... => #, would need to pad with 5
|
||||
def pad(list) do
|
||||
list |> Enum.reverse() |> pad_rear |> Enum.reverse() |> pad_front
|
||||
end
|
||||
|
||||
def pad_front([{?., _}, {?., _}, {?., _}, {?., _} | _] = done), do: done
|
||||
def pad_front([{_, i} | _] = list), do: pad_front([{?., i - 1} | list])
|
||||
|
||||
def pad_rear([{?., _}, {?., _}, {?., _}, {?., _} | _] = done), do: done
|
||||
def pad_rear([{_, i} | _] = list), do: pad_rear([{?., i + 1} | list])
|
||||
|
||||
# Removes leading and trailing empty pots
|
||||
def strip([{?., _}]), do: []
|
||||
def strip([{?., _} | list]), do: strip(list)
|
||||
def strip([{?#, _} | _] = list), do: strip_tl(Enum.reverse(list))
|
||||
def strip_tl([{?., _} | list]), do: strip_tl(list)
|
||||
def strip_tl(list), do: Enum.reverse(list)
|
||||
|
||||
def visualise(input) do
|
||||
Enum.map(input, fn {x, _i} -> x end)
|
||||
end
|
||||
|
||||
def part1 do
|
||||
{input, spec} = Parser.parse("input")
|
||||
|
||||
evolve(input, spec, 20, [])
|
||||
|> Enum.filter(fn {plant, _} -> plant === ?# end)
|
||||
|> Enum.map(fn {_, pot} -> pot end)
|
||||
|> Enum.sum()
|
||||
end
|
||||
|
||||
def part2 do
|
||||
{input, spec} = Parser.parse("input")
|
||||
|
||||
evolve(input, spec, 50_000_000_000, [])
|
||||
|> Enum.filter(fn {plant, _} -> plant === ?# end)
|
||||
|> Enum.map(fn {_, pot} -> pot end)
|
||||
|> Enum.sum()
|
||||
end
|
||||
end
|
||||
|
||||
part1 = Day12.part1()
|
||||
part2 = Day12.part2()
|
||||
IO.puts("part 1: #{part1}")
|
||||
IO.puts("part 2: #{part2}")
|
34
2018/day12/input
Normal file
34
2018/day12/input
Normal file
|
@ -0,0 +1,34 @@
|
|||
initial state: #.##.##.##.##.......###..####..#....#...#.##...##.#.####...#..##..###...##.#..#.##.#.#.#.#..####..#
|
||||
|
||||
..### => .
|
||||
##..# => #
|
||||
#..## => .
|
||||
.#..# => .
|
||||
#.##. => .
|
||||
#.... => .
|
||||
##... => #
|
||||
#...# => .
|
||||
###.# => #
|
||||
##.## => .
|
||||
....# => .
|
||||
..##. => #
|
||||
..#.. => .
|
||||
##.#. => .
|
||||
.##.# => #
|
||||
#..#. => #
|
||||
.##.. => #
|
||||
###.. => #
|
||||
.###. => #
|
||||
##### => #
|
||||
####. => .
|
||||
.#.#. => .
|
||||
...#. => #
|
||||
#.### => .
|
||||
.#... => #
|
||||
.#### => .
|
||||
#.#.# => #
|
||||
...## => .
|
||||
..... => .
|
||||
.#.## => #
|
||||
..#.# => #
|
||||
#.#.. => #
|
179
2018/day13/day13.exs
Normal file
179
2018/day13/day13.exs
Normal file
|
@ -0,0 +1,179 @@
|
|||
defmodule Day13 do
|
||||
defmodule Cart do
|
||||
defstruct dir: nil, turn: :left
|
||||
end
|
||||
|
||||
defmodule Parser do
|
||||
# track pieces
|
||||
# | - / \ +
|
||||
# Carts
|
||||
# ^ v < >
|
||||
# Inital cart = straight track underneath
|
||||
# Sample input:
|
||||
# /->-\
|
||||
# | | /----\
|
||||
# | /-+--+-\ |
|
||||
# | | | | v |
|
||||
# \-+-/ \-+--/
|
||||
# \------/
|
||||
def parse_file(filename) do
|
||||
rows =
|
||||
File.read!(filename)
|
||||
|> String.split("\n")
|
||||
|> Enum.map(&String.to_charlist/1)
|
||||
|
||||
{_, track, carts} =
|
||||
Enum.reduce(rows, {0, %{}, %{}}, fn row, {row_idx, track, carts} ->
|
||||
{_, _, track, carts} = Enum.reduce(row, {row_idx, 0, track, carts}, &parse_char/2)
|
||||
{row_idx + 1, track, carts}
|
||||
end)
|
||||
|
||||