AdventOfCode-2020/console.cr

37 lines
619 B
Crystal

def parse(input)
input.lines.map do |s|
code, int = s.split(" ")
{code, int.to_i32}
end
end
def run(prog)
acc = 0
pc = 0
visited = Set(Int32).new
input = Channel(Int32).new
output = Channel({Symbol, Int32}).new
spawn do
loop do
if pc >= prog.size
output.send({:term, acc})
break
elsif visited.includes? pc
output.send({:inf, acc})
break
end
visited << pc
code, int = prog[pc]
case code
when "acc"
acc += int
when "jmp"
pc += int - 1
end
pc += 1
end
end
{input, output}
end