Day 1 Part 2
This commit is contained in:
parent
ae06003210
commit
3d2d6e3a39
3 changed files with 47 additions and 1 deletions
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
My (attempted) solutions to [Advent of Code 2020](https://adventofcode.com/2020) in Elixir.
|
My (attempted) solutions to [Advent of Code 2020](https://adventofcode.com/2020) in Elixir.
|
||||||
|
|
||||||
<img width="967" alt="image" src="https://user-images.githubusercontent.com/498229/100191430-6fc5be80-2f33-11eb-8a96-21d87c503c74.png">
|
<img width="976" alt="image" src="https://user-images.githubusercontent.com/498229/100701084-45b44680-33e2-11eb-9fb9-11c6161a49ef.png">
|
||||||
|
|
||||||
## Strategy
|
## Strategy
|
||||||
|
|
||||||
|
|
19
day1/README
19
day1/README
|
@ -1,6 +1,25 @@
|
||||||
Day 1 Notes
|
Day 1 Notes
|
||||||
|
|
||||||
|
------
|
||||||
Part1:
|
Part1:
|
||||||
|
------
|
||||||
|
|
||||||
$ elixir day1part1.exs
|
$ elixir day1part1.exs
|
||||||
618 x 1402 = 866436
|
618 x 1402 = 866436
|
||||||
|
|
||||||
|
Thoughts:
|
||||||
|
|
||||||
|
Avoid iterating seen elements by consuming the list, and comparing each list element only to the remaining
|
||||||
|
elements.
|
||||||
|
|
||||||
|
------
|
||||||
|
Part2:
|
||||||
|
------
|
||||||
|
|
||||||
|
$ elixir day1part2.exs
|
||||||
|
547 x 545 x 928 = 276650720
|
||||||
|
|
||||||
|
Thoughts:
|
||||||
|
|
||||||
|
Use a comprehension over two versions of the remaining list to efficiently compare the three items.
|
||||||
|
|
||||||
|
|
27
day1/day1part2.exs
Normal file
27
day1/day1part2.exs
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
defmodule Day1Part2 do
|
||||||
|
def run do
|
||||||
|
{a, b, c} =
|
||||||
|
File.read!("input")
|
||||||
|
|> String.trim()
|
||||||
|
|> String.split("\n")
|
||||||
|
|> Enum.map(&String.to_integer/1)
|
||||||
|
|> find_2020()
|
||||||
|
|
||||||
|
IO.puts("#{a} x #{b} x #{c} = #{a * b * c}")
|
||||||
|
end
|
||||||
|
|
||||||
|
def find_2020([current | rest]) do
|
||||||
|
pair =
|
||||||
|
for i <- rest, j <- rest do
|
||||||
|
if current + i + j == 2020, do: {i, j}, else: nil
|
||||||
|
end
|
||||||
|
|> Enum.find(&match?({_, _}, &1))
|
||||||
|
|
||||||
|
case pair do
|
||||||
|
{a, b} -> {a, b, current}
|
||||||
|
nil -> find_2020(rest)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
Day1Part2.run()
|
Loading…
Reference in a new issue