Skip to content

Instantly share code, notes, and snippets.

@ynonp
Created December 2, 2020 13:22
Show Gist options
  • Save ynonp/293e7ec59b5303b4002af5a9fc27eb53 to your computer and use it in GitHub Desktop.
Save ynonp/293e7ec59b5303b4002af5a9fc27eb53 to your computer and use it in GitHub Desktop.
defmodule Day2 do
def read_input do
File.read!("input/day2.txt")
|> String.split("\n", trim: true)
|> Enum.map(&(Regex.scan(~r/(\d+)-(\d+) (\w+): (.*)/, &1)))
|> Enum.map(fn [[_, min, max, char, text]] -> {
String.to_integer(min),
String.to_integer(max),
char,
text
} end)
end
def check_part_1 {min, max, char, text} do
count = String.graphemes(text)
|> Enum.count(&(&1 == char))
count >= min and
count <= max
end
def check_part_2 {min, max, char, text} do
c1 = String.at(text, min - 1) == char
c2 = String.at(text, max - 1) == char
(c1 or c2) and !(c1 && c2)
end
def part1 do
check(&check_part_1/1)
end
def part2 do
check(&check_part_2/1)
end
def check(part) do
read_input()
|> Enum.map(part)
|> Enum.count(&(&1 == true))
|> IO.inspect
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment