Day 4
Day 4: Camp Cleanup
Day 4: Camp Cleanup
Input
input = """
2-4,6-8
2-3,4-5
5-7,7-9
2-8,3-7
6-6,4-6
2-6,4-8
"""
Part 1
f = fn lines, delimiter, func ->
lines
|> Enum.map(fn s ->
s
|> String.split(delimiter)
|> func.()
end)
end
input
|> String.split("\n", trim: true)
|> f.(",", fn lines ->
f.(lines, "-", fn [a, b] ->
Range.new(String.to_integer(a), String.to_integer(b))
end)
end)
|> Enum.filter(fn [r1, r2] ->
if Range.size(r1) < Range.size(r2) do
Enum.all?(r1, &(&1 in r2))
else
Enum.all?(r2, &(&1 in r1))
end
end)
|> Enum.count()
Part 1 another
input
|> String.split("\n", trim: true)
|> f.(",", & &1)
|> Enum.map(fn lines ->
f.(lines, "-", fn [a, b] ->
Range.new(String.to_integer(a), String.to_integer(b))
end)
end)
|> Enum.filter(fn [r1, r2] ->
if Range.size(r1) < Range.size(r2) do
Enum.all?(r1, &(&1 in r2))
else
Enum.all?(r2, &(&1 in r1))
end
end)
|> Enum.count()
Part 2
input
|> String.split("\n", trim: true)
|> f.(",", fn lines ->
f.(lines, "-", fn [a, b] ->
Range.new(String.to_integer(a), String.to_integer(b))
end)
end)
|> Enum.filter(fn [r1, r2] ->
if Range.size(r1) < Range.size(r2) do
Enum.any?(r1, &(&1 in r2))
else
Enum.any?(r2, &(&1 in r1))
end
end)
|> Enum.count()