parent
8d12d532cd
commit
6895a81f76
@ -0,0 +1,86 @@
|
|||||||
|
class Computer < Struct.new(:instructions)
|
||||||
|
INSTRUCTIONS = {
|
||||||
|
hlf: ->(c,r) { c.registers[r] /= 2; c.pc += 1 },
|
||||||
|
tpl: ->(c,r) { c.registers[r] *= 3; c.pc += 1 },
|
||||||
|
inc: ->(c,r) { c.registers[r] += 1; c.pc += 1 },
|
||||||
|
jmp: ->(c,o) { c.pc += o.to_i },
|
||||||
|
jie: ->(c,r,o) { c.pc += (c.registers[r].even?) ? o.to_i : 1 },
|
||||||
|
jio: ->(c,r,o) { c.pc += (c.registers[r] == 1) ? o.to_i : 1 },
|
||||||
|
}
|
||||||
|
|
||||||
|
attr_reader :registers
|
||||||
|
attr_accessor :pc
|
||||||
|
|
||||||
|
def initialize(*)
|
||||||
|
super
|
||||||
|
|
||||||
|
@registers = Hash.new(0)
|
||||||
|
@pc = 0
|
||||||
|
end
|
||||||
|
|
||||||
|
def run!
|
||||||
|
loop do
|
||||||
|
instruction, *args = self.instructions[self.pc]
|
||||||
|
break if instruction.nil?
|
||||||
|
|
||||||
|
INSTRUCTIONS[instruction.to_sym].call(self, *args)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
instructions = DATA.read.split("\n").map {|line| line.split(/,? /) }
|
||||||
|
|
||||||
|
c = Computer.new(instructions)
|
||||||
|
c.run!
|
||||||
|
p c.registers
|
||||||
|
|
||||||
|
__END__
|
||||||
|
jio a, +19
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
jmp +23
|
||||||
|
tpl a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
inc a
|
||||||
|
tpl a
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
jio a, +8
|
||||||
|
inc b
|
||||||
|
jie a, +4
|
||||||
|
tpl a
|
||||||
|
inc a
|
||||||
|
jmp +2
|
||||||
|
hlf a
|
||||||
|
jmp -7
|
Loading…
Reference in new issue