Skip to content

Instantly share code, notes, and snippets.

@rodrigoSaladoAnaya
Last active December 24, 2015 16:28
Show Gist options
  • Save rodrigoSaladoAnaya/e81e62077e50e7ef0895 to your computer and use it in GitHub Desktop.
Save rodrigoSaladoAnaya/e81e62077e50e7ef0895 to your computer and use it in GitHub Desktop.
def regs = [a:0, b:0]
def instr = [
hlf: { params ->
def r = params.r/2
def output
if(r.remainder(1) == 0) {
output = [reg_val:r, jump_to: params.i+=1]
} else {
output = [reg_val:params.r, jump_to: params.i+=1]
}
return output
},
tpl: { params ->
return [reg_val:params.r*=3, jump_to: params.i+=1]
},
inc: { params ->
return [reg_val:params.r+=1, jump_to: params.i+=1]
},
jmp: { params ->
def offset = params.r.toInteger()
return [jump_to: params.i+offset]
},
jie: { params ->
def offset = params.i+1
if(params.r.toInteger()%2 == 0) {
offset = params.i + params.o.toInteger()
}
return [reg_val:params.r, jump_to: offset]
},
jio: { params ->
def offset = params.i+1
if(params.r.toInteger() == 1) {
offset = params.i + params.o.toInteger()
}
return [reg_val:params.r, jump_to: offset]
}
]
def program = new File(args[0]).readLines()
def count = 0
for(i = 0; i < program.size();) {
def (input_1, input_2, input_3) = program[i].tokenize(" ;,")
def rgt = regs[input_2]!= null? regs[input_2]: input_2
def r = instr[input_1]([r:rgt, i:i, o:input_3])
i = r.jump_to
if(regs[input_2] != null) {
regs[input_2] = r.reg_val
}
println "${count++}) [${input_1}, ${input_2}] -> ${regs[input_2]}"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment