17-2
This commit is contained in:
68
17/17-2.py
68
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')
|
||||
6
17/tt
Normal file
6
17/tt
Normal 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
|
||||
Reference in New Issue
Block a user