40 lines
937 B
Ruby
40 lines
937 B
Ruby
|
#!/bin/env ruby
|
||
|
|
||
|
def run_code (instructions)
|
||
|
acc = 0
|
||
|
tracker = Array.new(instructions.length, false)
|
||
|
i = 0
|
||
|
success = false
|
||
|
while tracker[i] == false do
|
||
|
tracker[i] = true
|
||
|
case instructions[i][0..2]
|
||
|
when 'acc'
|
||
|
acc += instructions[i].split(' ')[1].to_i
|
||
|
i += 1
|
||
|
when 'jmp'
|
||
|
i += instructions[i].split(' ')[1].to_i
|
||
|
when 'nop'
|
||
|
i += 1
|
||
|
end
|
||
|
success = true if i == instructions.length
|
||
|
end
|
||
|
return success, acc, tracker
|
||
|
end
|
||
|
|
||
|
input = File.readlines('./input').to_ary.map(&:strip)
|
||
|
succ, acc, tracker = false, 0, []
|
||
|
|
||
|
input.each.with_index do |instruction, i|
|
||
|
mod = input.map(&:clone)
|
||
|
if instruction[0..2] == 'jmp'
|
||
|
mod[i][0..2] = 'nop'
|
||
|
elsif instruction[0..2] == 'nop'
|
||
|
mod[i][0..2] = 'jmp'
|
||
|
else
|
||
|
next
|
||
|
end
|
||
|
succ, acc, tracker = run_code(mod)
|
||
|
break if succ == true
|
||
|
end
|
||
|
|
||
|
p acc
|