require "ext" local w, h = 40, 6 local cpu = { r = {x = 1}, isa = { addx = { nargs = 1, cycles = 2, f = function(self,v) self.r.x = self.r.x + tonumber(v) end }, noop = { nargs = 0, cycles = 1, f = function(self) end } } } local strength_sum = 0 local cycle = 1 for line in io.lines() do local parts = {} for part in line:gmatch("(%S+)") do table.insert(parts,part) end local insn = table.remove(parts,1) local ins = cpu.isa[insn] assertf(ins, "No instruction %s in %s",insn,line) for i = cycle,cycle + ins.cycles - 1 do local crtpos = (i-1) % w if crtpos + 1 == cpu.r.x or crtpos == cpu.r.x or crtpos - 1 == cpu.r.x then io.write("#") else io.write(" ") end if i % 40 == 0 then io.write("\n") end end cycle = cycle + ins.cycles ins.f(cpu,table.unpack(parts)) end print(strength_sum)