This commit is contained in:
Kevin Hughes 2024-12-02 08:16:27 +00:00
parent e15d83107b
commit 10eb1838c7
Signed by: kev
GPG Key ID: 4F56A079AF7A66A6
1 changed files with 77 additions and 0 deletions

77
day02.livemd Normal file
View File

@ -0,0 +1,77 @@
# Day02
```elixir
Mix.install([
{:kino, "~> 0.14.2"},
])
```
## Run Me
[![Run in Livebook](https://livebook.dev/badge/v1/blue.svg)](https://livebook.dev/run?url=https%3A%2F%2Fgit.kev.pub%2Fkev%2Faoc2024%2Fraw%2Fbranch%2Fmain%2Fday01.livemd)
## Input
```elixir
input = Kino.Input.textarea("Input")
```
## Part One
```elixir
defmodule PartOne do
def differences([_]), do: []
def differences([a, b|t]), do: [a - b| differences([b|t])]
def parse(input) do
input
|> Kino.Input.read
|> String.split("\n")
|> Enum.map(fn l -> l |> String.split(" ")|> Enum.map(&String.to_integer/1) end)
end
def pass_diffs(l) do
fail = l
|> PartOne.differences
|> Enum.any?(fn y -> (abs(y) > 3 || y == 0) end)
!fail
end
def pass_direction(l) do
l =
l
|> PartOne.differences
|> Enum.map(fn x -> x > 0 end)
|> Enum.dedup
|> length
l == 1
end
def passes(x), do: pass_diffs(x) && pass_direction(x)
end
input
|> PartOne.parse
|> Enum.count(&PartOne.passes/1)
```
## Part Two
```elixir
%{false: fails, true: passes} =
input
|> PartOne.parse
|> Enum.group_by(&PartOne.passes/1)
fail_count = Enum.map(fails, fn l ->
0..length(l)
|> Enum.map(fn x -> List.delete_at(l,x) end)
|> Enum.any?(&PartOne.passes/1)
end)
|> Enum.count(fn x -> x end)
length(passes) + fail_count
```