class CharCountFilter
TARGET_COUNT = 2
def self.filter(lines)
lines.select { |line| char_appears_exactly_twice?(line) }
end
def self.char_appears_exactly_twice?(line)
count_characters(line).value?(TARGET_COUNT)
end
def self.count_characters(line)
line.chars.each_with_object(Hash.new(0)) { |char, counts| counts[char] += 1 }
end
end
lines = ARGF.readlines.map(&:chomp)
puts CharCountFilter.filter(lines)
Y2xhc3MgQ2hhckNvdW50RmlsdGVyCiAgVEFSR0VUX0NPVU5UID0gMgoKICBkZWYgc2VsZi5maWx0ZXIobGluZXMpCiAgICBsaW5lcy5zZWxlY3QgeyB8bGluZXwgY2hhcl9hcHBlYXJzX2V4YWN0bHlfdHdpY2U/KGxpbmUpIH0KICBlbmQKCiAgZGVmIHNlbGYuY2hhcl9hcHBlYXJzX2V4YWN0bHlfdHdpY2U/KGxpbmUpCiAgICBjb3VudF9jaGFyYWN0ZXJzKGxpbmUpLnZhbHVlPyhUQVJHRVRfQ09VTlQpCiAgZW5kCgogIGRlZiBzZWxmLmNvdW50X2NoYXJhY3RlcnMobGluZSkKICAgIGxpbmUuY2hhcnMuZWFjaF93aXRoX29iamVjdChIYXNoLm5ldygwKSkgeyB8Y2hhciwgY291bnRzfCBjb3VudHNbY2hhcl0gKz0gMSB9CiAgZW5kCmVuZAoKbGluZXMgPSBBUkdGLnJlYWRsaW5lcy5tYXAoJjpjaG9tcCkKCnB1dHMgQ2hhckNvdW50RmlsdGVyLmZpbHRlcihsaW5lcyk=