parent
8677078287
commit
5e542d90aa
@ -0,0 +1,39 @@
|
||||
input = ARGF.read
|
||||
|
||||
def cubes(input)
|
||||
input
|
||||
.scan(/(\d+) (\w+)/)
|
||||
.to_h(&:reverse)
|
||||
.transform_values(&:to_i)
|
||||
end
|
||||
|
||||
bag = cubes("12 red cubes, 13 green cubes, and 14 blue cubes")
|
||||
|
||||
Game = Data.define(:id, :reveals) do
|
||||
def possible?(bag)
|
||||
reveals.all? {|reveal|
|
||||
bag.all? {|color, n| n >= reveal.fetch(color, 0) }
|
||||
}
|
||||
end
|
||||
end
|
||||
|
||||
games = input
|
||||
.scan(/^Game (\d+): ((?~\n))/)
|
||||
.map {|id, reveals|
|
||||
Game.new(
|
||||
id.to_i,
|
||||
reveals.split(?;).map { cubes(_1) }
|
||||
)
|
||||
}
|
||||
|
||||
# part one
|
||||
p games.select { _1.possible?(bag) }.sum(&:id)
|
||||
|
||||
# part two
|
||||
p games
|
||||
.map {|game|
|
||||
game.reveals.inject {|bag, reveal|
|
||||
bag.merge(reveal) { [_2, _3].max }
|
||||
}
|
||||
}
|
||||
.sum {|bag| bag.values.inject(:*) }
|
Loading…
Reference in new issue