Advent of code

 23 décembre 2015 

  Opening the Turing Lock :
  1. 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)