31 lines
594 B
Crystal
31 lines
594 B
Crystal
|
require "./common.cr"
|
||
|
|
||
|
lines = File.read("day2").split("\n")
|
||
|
lines.pop
|
||
|
|
||
|
CHARS = ('a'..'z').to_a
|
||
|
|
||
|
def has_n?(string, n)
|
||
|
return string.chars.count_each(CHARS).any?(&.[](1).==(n))
|
||
|
end
|
||
|
|
||
|
def count_changes(s1, s2)
|
||
|
pairs = s1.chars.zip s2.chars
|
||
|
total = 0
|
||
|
pairs.each do |pair|
|
||
|
total += 1 if pair[0] != pair[1]
|
||
|
end
|
||
|
return total
|
||
|
end
|
||
|
|
||
|
two = lines.count { |s| has_n?(s, 2) }
|
||
|
three = lines.count { |s| has_n?(s, 3) }
|
||
|
puts "\"Hash\": #{two * three}"
|
||
|
|
||
|
lines.product(lines).each do |pair|
|
||
|
if count_changes(pair[0], pair[1]) == 1
|
||
|
puts "Strings: #{pair[0]}, #{pair[1]}"
|
||
|
exit
|
||
|
end
|
||
|
end
|