You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
31 lines
555 B
31 lines
555 B
2 years ago
|
require "minitest/autorun"
|
||
|
|
||
|
def exec(instructions)
|
||
|
return enum_for(__method__, instructions) unless block_given?
|
||
|
|
||
|
x = 1
|
||
|
instructions.each do |instruction|
|
||
|
case instruction
|
||
|
when /noop/
|
||
|
yield x
|
||
|
when /addx (-?\d+)/
|
||
|
yield x
|
||
|
yield x
|
||
|
x += $1.to_i
|
||
|
else
|
||
|
fail "invalid instruction: #{instruction}"
|
||
|
end
|
||
|
end
|
||
|
yield x
|
||
|
end
|
||
|
|
||
|
class TestDay10 < Minitest::Test
|
||
|
def test_example
|
||
|
assert_equal [1, 1, 1, 4, 4, -1], exec(<<~PROG.lines(chomp: true)).to_a
|
||
|
noop
|
||
|
addx 3
|
||
|
addx -5
|
||
|
PROG
|
||
|
end
|
||
|
end
|