blob: ae7bfde016d1fca69929d7ff6ef7b95f250895f2 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
|
defmodule Day02 do
def parse_report(line) do
line
|> String.trim()
|> String.split(" ")
|> Enum.map(&String.to_integer/1)
end
def is_report_safe(report) do
diffs = report
|> Enum.chunk_every(2, 1, :discard)
|> Enum.map(fn [a, b] -> b - a end)
Enum.all?(diffs, fn x -> 1 <= x and x <= 3 end) or
Enum.all?(diffs, fn x -> -3 <= x and x <= -1 end)
end
def is_report_safe_with_dampener(report) do
is_report_safe(report) or
Enum.any?(0..Enum.count(report)-1,
fn i -> List.delete_at(report, i) |> is_report_safe() end)
end
end
reports = IO.stream(:stdio, :line)
|> Enum.map(&Day02.parse_report/1)
ans1 = reports
|> Enum.count(&Day02.is_report_safe/1)
IO.puts(ans1)
ans2 = reports
|> Enum.count(&Day02.is_report_safe_with_dampener/1)
IO.puts(ans2)
|