44 lines
1.1 KiB
Ruby
44 lines
1.1 KiB
Ruby
|
#!/bin/env ruby
|
||
|
require 'pry'
|
||
|
input = File.readlines('./input')
|
||
|
|
||
|
sues = input.to_h do |line|
|
||
|
line = line.delete(':').delete(',').split
|
||
|
sue = (line[0] + line[1]).to_sym
|
||
|
properties = line[2..-1].each_slice(2).map { |property, num| [property.to_sym, num.to_i] }.to_h
|
||
|
[sue, properties]
|
||
|
end
|
||
|
|
||
|
list = { children: 3,
|
||
|
cats: 7,
|
||
|
samoyeds: 2,
|
||
|
pomeranians: 3,
|
||
|
akitas: 0,
|
||
|
vizslas: 0,
|
||
|
goldfish: 5,
|
||
|
trees: 3,
|
||
|
cars: 2,
|
||
|
perfumes: 1 }
|
||
|
|
||
|
part1 = sues.map do |sue, properties|
|
||
|
sue if properties.map do |key, value|
|
||
|
list[key] == value
|
||
|
end.reduce(:&)
|
||
|
end.compact[0].to_s
|
||
|
|
||
|
puts "Part 1 Solution: #{part1}"
|
||
|
# binding.pry
|
||
|
|
||
|
part2 = sues.map do |sue, properties|
|
||
|
sue if properties.map do |key, value|
|
||
|
if %i[cats trees].include?(key)
|
||
|
list[key] < value
|
||
|
elsif %i[pomeranians goldfish].include?(key)
|
||
|
list[key] > value
|
||
|
else
|
||
|
list[key] == value
|
||
|
end
|
||
|
end.reduce(&:&)
|
||
|
end.compact[0].to_s
|
||
|
puts "Part 1 Solution: #{part2}"
|