y2024d17p2 test works

This commit is contained in:
Fabian Schmidt 2024-12-17 15:50:06 +01:00
parent b410fa49ca
commit 085a02b2d5
2 changed files with 41 additions and 10 deletions

26
test.py Normal file
View File

@ -0,0 +1,26 @@
# JS sucks
for line in open('./y2024/resources/17_input.txt'):
if line.startswith('Program:'):
instructions = list(map(int, line.split(': ')[1].split(',')))
def outFromA(a):
interim = (a % 8) ^ 3
c = a // (2 ** interim)
postC = c ^ 6
return (postC ^ (a % 8)) % 8
candidates = [0]
for i in range(len(instructions) - 1, -1, -1):
newCandidates = []
# print(f'Instruction: {instructions[i]}, candidates: {candidates}')
for c in candidates:
for j in range(8):
num = (c << 3) + j
out = outFromA(num)
# print(f'Num: {num}, Out: {out}, Instruction: {instructions[i]}')
if out == instructions[i]:
newCandidates.append(num)
candidates = newCandidates
# print(candidates)
print(min(candidates))

View File

@ -63,17 +63,22 @@ pub fn process_part2(input: &str) -> u32 {
.collect_vec()
.concat();
let mut a = 0;
for idx in 1..=orig.len() {
let target = orig[orig.len() - idx..].to_vec();
let mut new_a = a << 3;
loop {
registers.insert("A", a);
registers.insert("A", new_a);
let out = exec_program(instructions.clone(), &mut registers);
if out == orig {
println!("{orig:?}");
println!("{out:?}");
println!("target {target:?}");
println!("output {out:?}");
if out == target {
a = new_a;
break;
}
a += 1;
new_a += 1;
}
}
a
}