Add solution day 17 on js impl

This commit is contained in:
monoid 2024-12-20 14:22:41 +09:00
parent d64b961caf
commit 78df933581
2 changed files with 44 additions and 2 deletions

42
day_17/solve_2.ts Normal file
View File

@ -0,0 +1,42 @@
import { readData } from "./solve_1.ts";
function dfs(
a: bigint,
output: bigint[],
): bigint[] {
const [first, ...rest] = output;
if (output.length === 0) {
return [a];
}
const candidates = new Array<bigint>(8)
.fill(0n)
.map((_, i) => BigInt(i));
return candidates.filter(cand => {
const na = ((a << 3n) | cand);
if (na < 0) {
console.log("na < 0", na, a, cand);
}
let b = na & 7n; // b == cand
b = b ^ 1n;
const c = (na >> b);
b = b ^ 5n;
b = b ^ c;
b = b & 7n;
return b === first;
}).map(cand => {
const na = (a << 3n) | cand;
return na;
}).flatMap(na => {
return dfs(na, rest);
});
}
if (import.meta.main) {
const data = await readData("input.txt");
console.log(data.registers);
const outputs = data.programs.toReversed().map(x => BigInt(x));
// const outputs = [5,0,3,5,7,6,1,5,4].toReversed().map(x => BigInt(x));
const solutions = dfs(0n, outputs);
console.log(solutions.sort((a, b) => Number(a - b)));
}

View File

@ -37,9 +37,9 @@ class VMCompiler extends VM {
} }
if (import.meta.main) { if (import.meta.main) {
const data = await readData("example_3.txt"); const data = await readData(Deno.args[0]);
console.log(data.registers); console.log(data.registers);
data.registers.A = 0b11100101011000000; // data.registers.A = 0b11100101011000000;
console.log(data.programs.join(",")); console.log(data.programs.join(","));
const vm = new VMCompiler(data); const vm = new VMCompiler(data);
const text = vm.compile(); const text = vm.compile();