◂ 23 décembre 2015 ▸
Opening the Turing Lock :
- code.py
INSTRUCTIONS = [['jio','a','+19'], ['inc','a'], ['tpl','a'], ['inc','a'], ... ['jmp','-7']]
registers = {'a' : 1, 'b' : 0}
def half(registers, regName):
registers[regName] //= 2
def triple(registers, regName):
registers[regName] *= 3
def increment(registers, regName):
registers[regName] += 1
def jump(registers, skip):
return int(skip)
def jumpIfEven(registers, regName, skip):
if registers[regName] % 2 == 0:
return int(skip)
else:
return 1
def jumpIfOne(registers, regName, skip):
if registers[regName] == 1:
return int(skip)
else:
return 1
def doInstr(registers, t):
cmd = t[0]
args = t[1:]
match cmd:
case 'hlf':
return half(registers, *args)
case 'tpl':
return triple(registers, *args)
case 'inc':
return increment(registers, *args)
case 'jmp':
return jump(registers, *args)
case 'jie':
return jumpIfEven(registers, *args)
case 'jio':
return jumpIfOne(registers, *args)
print("Pas trouvé commande " + cmd + "...")
exit(1)
instrNum = 0
while instrNum < len(INSTRUCTIONS):
skip = doInstr(registers, INSTRUCTIONS[instrNum])
if skip:
instrNum += skip
else:
instrNum += 1
print(registers)