Finished day 6
This commit is contained in:
parent
e97e1f686d
commit
c8f40ccfe4
2 changed files with 90 additions and 0 deletions
|
@ -13,3 +13,7 @@ Day 3: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Fao
|
||||||
Day 4: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Faoc2022%2Fraw%2Fbranch%2Fmain%2Fday4.livemd][Run in Livebook]]
|
Day 4: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Faoc2022%2Fraw%2Fbranch%2Fmain%2Fday4.livemd][Run in Livebook]]
|
||||||
|
|
||||||
Day 5: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Faoc2022%2Fraw%2Fbranch%2Fmain%2Fday5.livemd][Run in Livebook]]
|
Day 5: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Faoc2022%2Fraw%2Fbranch%2Fmain%2Fday5.livemd][Run in Livebook]]
|
||||||
|
|
||||||
|
Day 6: [[https://livebook.dev/run?url=https%3A%2F%2Fgit.datarift.nl%2Ferwin%2Faoc2022%2Fraw%2Fbranch%2Fmain%2Fday6.livemd][Run in Livebook]]
|
||||||
|
|
||||||
|
|
||||||
|
|
86
day6.livemd
Normal file
86
day6.livemd
Normal file
|
@ -0,0 +1,86 @@
|
||||||
|
# AOC 2022 - Day 6
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
Mix.install([
|
||||||
|
{:req, "~> 0.3.3"}
|
||||||
|
])
|
||||||
|
```
|
||||||
|
|
||||||
|
## Puzzle description
|
||||||
|
|
||||||
|
[Day 6: Tuning Trouble](https://adventofcode.com/2022/day/6).
|
||||||
|
|
||||||
|
## Input
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
defmodule Load do
|
||||||
|
def input do
|
||||||
|
aoc_session = System.fetch_env!("LB_AOC_SESSION")
|
||||||
|
input_url = "https://adventofcode.com/2022/day/6/input"
|
||||||
|
Req.get!(input_url, headers: [cookie: "session=#{aoc_session}"]).body
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
## Solution
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
defmodule Marker do
|
||||||
|
def find(input, marker_length) do
|
||||||
|
input
|
||||||
|
|> String.graphemes()
|
||||||
|
|> Enum.chunk_every(marker_length, 1)
|
||||||
|
|> Enum.map(&MapSet.new/1)
|
||||||
|
|> Enum.find_index(&(MapSet.size(&1) == marker_length))
|
||||||
|
|> Kernel.+(marker_length)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
```
|
||||||
|
|
||||||
|
```elixir
|
||||||
|
defmodule Part1 do
|
||||||
|
@marker_length 4
|
||||||
|
def run(input) do
|
||||||
|
input
|
||||||
|
|> Marker.find(@marker_length)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
defmodule Part2 do
|
||||||
|
@marker_length 14
|
||||||
|
def run(input) do
|
||||||
|
input
|
||||||
|
|> Marker.find(@marker_length)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ExUnit.start(autorun: false)
|
||||||
|
|
||||||
|
defmodule Test do
|
||||||
|
use ExUnit.Case, async: true
|
||||||
|
@example_input ~s(mjqjpqmgbljsphdztnvjfqwrcgsmlb)
|
||||||
|
@input Load.input()
|
||||||
|
|
||||||
|
test "it loads the input" do
|
||||||
|
assert String.length(@input) > 0
|
||||||
|
end
|
||||||
|
|
||||||
|
test "part 1 example" do
|
||||||
|
assert Part1.run(@example_input) === 7
|
||||||
|
end
|
||||||
|
|
||||||
|
test "part 1" do
|
||||||
|
assert Part1.run(@input) === 1093
|
||||||
|
end
|
||||||
|
|
||||||
|
test "part 2 example" do
|
||||||
|
assert Part2.run(@example_input) === 19
|
||||||
|
end
|
||||||
|
|
||||||
|
test "part 2" do
|
||||||
|
assert Part2.run(@input) === 3534
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
ExUnit.run()
|
||||||
|
```
|
Loading…
Reference in a new issue