38 lines
793 B
Crystal
38 lines
793 B
Crystal
|
INPUT = File.read("day2.txt").lines.map(&.chomp)
|
||
|
|
||
|
def part1
|
||
|
input = INPUT.clone
|
||
|
total = 0
|
||
|
input.each do |line|
|
||
|
data = line.match(/([0-9]+)-([0-9]+) ([a-z]): ([a-z]+)/)
|
||
|
next unless data
|
||
|
min = data[1].to_i
|
||
|
max = data[2].to_i
|
||
|
char = data[3][0]
|
||
|
str = data[4]
|
||
|
count = str.chars.count(char)
|
||
|
total += 1 if count >= min && count <= max
|
||
|
end
|
||
|
|
||
|
puts total
|
||
|
end
|
||
|
|
||
|
def part2
|
||
|
input = INPUT.clone
|
||
|
total = 0
|
||
|
input.each do |line|
|
||
|
data = line.match(/([0-9]+)-([0-9]+) ([a-z]): ([a-z]+)/)
|
||
|
next unless data
|
||
|
min = data[1].to_i - 1
|
||
|
max = data[2].to_i - 1
|
||
|
char = data[3][0]
|
||
|
str = data[4]
|
||
|
count = str.chars.count(char)
|
||
|
total += 1 if ((str[min] == char) || (str[max] == char) ) && str[min] != str[max]
|
||
|
end
|
||
|
puts total
|
||
|
end
|
||
|
|
||
|
part1
|
||
|
part2
|