40 lines
937 B
Ruby
Executable File
40 lines
937 B
Ruby
Executable File
#!/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 |