-
Notifications
You must be signed in to change notification settings - Fork 0
/
ten.rb
66 lines (46 loc) · 1.25 KB
/
ten.rb
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
class Ten < Day
def initialize
@instructions = File.readlines('ten.txt', chomp: true).map do |line|
operation, oprand = line.split
[operation, oprand.to_i]
end
end
def part_a
cycle_count = 1
reg_x = 1
output = 0
@instructions.each do |(instruction, oprand)|
cycle_count += 1
output += reg_x * cycle_count if (cycle_count + 20) % 40 == 0
next if instruction == 'noop'
cycle_count += 1
reg_x += oprand
output += reg_x * cycle_count if (cycle_count + 20) % 40 == 0
break if cycle_count > 241
end
output
end
def part_b
cycle_count = 1
reg_x = 1
row = Array.new(40, ' ')
output = "\n"
@instructions.each do |(instruction, oprand)|
cycle_count += 1
if cycle_count % 40 == 0
output += "#{row.join}\n"
row = Array.new(40, ' ')
end
row[cycle_count % 40] = '#' if (reg_x..reg_x + 2).include?(cycle_count % 40)
next if instruction == 'noop'
cycle_count += 1
reg_x += oprand
if cycle_count % 40 == 0
output += "#{row.join}\n"
row = Array.new(40, ' ')
end
row[cycle_count % 40] = '#' if (reg_x..reg_x + 2).include?(cycle_count % 40)
end
output
end
end