1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
|
class Blueprint
def initialize(line)
id, oreore, claore, obsore, obscla, geoore, geoobs = line.scan(/\d+/).map(&:to_i)
@id = id
@ore = {
ore: oreore
}
@clay = {
ore: claore
}
@obsidian = {
ore: obsore,
clay: obscla
}
@geode = {
ore: geoore,
obsidian: geoobs
}
end
attr_reader :id
def make_robot?(pool)
if pool[:obsidian] >= @geode[:obsidian]
if pool[:ore] >= @geode[:ore]
pool[:ore] -= @geode[:ore]
pool[:obsidian] -= @geode[:obsidian]
return :geode
else
return false
end
end
if pool[:clay] >= @obsidian[:clay]
if pool[:ore] >= @obsidian[:ore]
pool[:ore] -= @obsidian[:ore]
pool[:clay] -= @obsidian[:clay]
return :obsidian
else
return false
end
end
if pool[:ore] >= @clay[:ore]
pool[:ore] -= @clay[:ore]
return :clay
end
if pool[:ore] >= @ore[:ore]
pool[:ore] -= @ore[:ore]
return :ore
end
return false
end
end
blueprints = $stdin.readlines.map{ |line| Blueprint.new(line) }
time_limit = 24
pool = {
ore: 0,
clay: 0,
obsidian: 0,
geode: 0
}
robots = {
ore: 1,
clay: 0,
obsidian: 0,
geode: 0
}
time_limit.times do
new_robot = blueprints[0].make_robot?(pool)
pool[:ore] += robots[:ore]
pool[:clay] += robots[:clay]
pool[:obsidian] += robots[:obsidian]
pool[:geode] += robots[:geode]
robots[new_robot] += 1 if new_robot
end
pp pool[:geode]
|