aoc_omni/ruby/2015/21/problem.rb
2025-11-30 21:22:21 -05:00

60 lines
1.4 KiB
Ruby

STORE = <<-STORE
Weapons: Cost Damage Armor
Dagger 8 4 0
Shortsword 10 5 0
Warhammer 25 6 0
Longsword 40 7 0
Greataxe 74 8 0
Armor: Cost Damage Armor
Leather 13 0 1
Chainmail 31 0 2
Splintmail 53 0 3
Bandedmail 75 0 4
Platemail 102 0 5
Rings: Cost Damage Armor
Damage +1 25 1 0
Damage +2 50 2 0
Damage +3 100 3 0
Defense +1 20 0 1
Defense +2 40 0 2
Defense +3 80 0 3
STORE
WEAPON_COUNT_RANGE = [1..1]
ARMOR_COUNT_RANGE = [0..1]
RING_COUNT_RANGE = [0..2]
INITIAL_HIT_POINTS = 100
Equipment = Struct.new(:name, :cost, :damage, :armor) do
def + other
Equipment.new("", cost + other.cost, damage + other.damage, armor + other.armor)
end
end
class Store
attr_reader :type, :equipment
def initialize(string)
lines = string.split("\n")
@type = lines[0].split(":")[0]
@equipment = lines[1..].map do |line|
chunks = line.split
Equipment.new(chunks[0..-4].join(" "), chunks[-3].to_i, chunks[-2].to_i, chunks[-1].to_i)
end
end
end
stores = STORE.split("\n\n").map{ |store| Store.new(store) }
WEAPON_COUNT_RANGE.map do |weapon_count|
weapon_combinations =
ARMOR_COUNT_RANGE.map do |armor_count|
RING_COUNT_RANGE.map do |ring_count|
end
end
end
input = STDIN.read
p input.split("\n\n")