This commit is contained in:
2024-12-17 21:31:47 +01:00
parent 71629c5523
commit 8995e45bfc
2 changed files with 39 additions and 35 deletions

View File

@@ -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')

6
17/tt Normal file
View File

@@ -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