diff --git a/17/17-2.py b/17/17-2.py index 17f0dea..3600840 100644 --- a/17/17-2.py +++ b/17/17-2.py @@ -1,12 +1,12 @@ #!/usr/bin/env python3 # -*- coding: utf-8 -*- -from sys import exc_info - +from copy import deepcopy from time import time + start_time = time() -ex_input = """Register A: 729 +ex_p1_input = """Register A: 729 Register B: 0 Register C: 0 Program: 0,1,5,4,3,0 @@ -52,6 +52,7 @@ def do(instruction:int, operand:int, point:int): case 4: rb = rb ^ rc case 5: + #print(ra,rb,rc,ope,ope%8) out.append(ope%8) case 6: rb = int(ra/(2**ope)) @@ -61,37 +62,34 @@ def do(instruction:int, operand:int, point:int): pass return point -def teile_bereich(a, b, c): - if c <= 0: - return [] - if a > b: - a, b = b, a # Tauscht a und b, falls a größer ist als b - ergebnis = [a] - schritt = (b - a) // c # Ganzzahlige Division - rest = (b - a) % c - for i in range(1, c): - nächster_wert = a + i * schritt - if i <= rest: - nächster_wert += 1 - ergebnis.append(nächster_wert) - ergebnis.append(b) - return ergebnis - - if __name__ == "__main__": - # ra, rb, rc, prog = read_input(ex_input) - prog = read_input(ex_p2_input) - #ra, rb, rc, prog = read_input(real_input) - #print(rb, rc, prog) - print(teile_bereich(614124,1142214142,5)) - for i in range(11744234): - ra = i - rc, rb = 0, 0 - out = [] - pointer = 0 - while pointer < len(prog): - pointer = do(prog[pointer], prog[pointer+1], pointer) - pointer += 2 - if out == prog: - print(i) + #prog = read_input(ex_p1_input) + #prog = read_input(ex_p2_input) + prog = read_input(real_input) + + sol_list = [""] + for x in range(2,len(prog)+2,2): + new_list = [] + for i in sol_list: + for o1 in range(8): + for o2 in range(8): + i_str=f"{i}{o1}{o2}" + ra_a = int(i_str, 8) + ra = int(i_str, 8) + rc, rb = 0, 0 + out = [] + pointer = 0 + while pointer < len(prog): + pointer = do(prog[pointer], prog[pointer+1], pointer) + pointer += 2 + # Program: 2,4,1,1,7,5,0,3,4,7,1,6,5,5,3,0 + if len(out) == x and out[-x:] == prog[-x:]: + new_list.append(f"{ra_a:o}") + #print(f"Prog: {prog}") + print(f"Dez:{ra_a}, Oktal: {ra_a:o}, OUT:{out}") + sol_list = deepcopy(new_list) + integer_liste = [int(zahl, 8) for zahl in sol_list] + print() + print(f"Prog: {prog}") + print(f"Lösung Part2: {min(integer_liste)}") print(f'Runtime: {time()-start_time:.5f} s') \ No newline at end of file diff --git a/17/tt b/17/tt new file mode 100644 index 0000000..5f5bfed --- /dev/null +++ b/17/tt @@ -0,0 +1,6 @@ +Dez: 56 HEX: 38 OCT:70 BIN:111000 +Dez: 3622 HEX: E26 OCT:7046 BIN:111000100110 +Dez: 3606 HEX: E16 OCT:7026 BIN:111000010110 +Dez: 230818 HEX: 385A2 OCT:702642 BIN:111000010110100010 +Dez: 14772355 HEX:E16883 OCT:70264203 BIN:111000010110100010000011 +Dez: 14772362 HEX:E1688A OCT:70264212 BIN:111000010110100010001010