AoC2020/day08/solution2.rb

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