Skip to content

Instantly share code, notes, and snippets.

@bluepichu
Created December 12, 2023 05:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save bluepichu/4817b6b48abe6806d1f7c6de0015d4ff to your computer and use it in GitHub Desktop.
Save bluepichu/4817b6b48abe6806d1f7c6de0015d4ff to your computer and use it in GitHub Desktop.
import { Advent, f, fm, chr, ord } from "advent";
import { Set, Map } from "immutable";
const { compute, computeCheck } = await Advent({ day: 12 });
compute(2, async (input) => {
let data = input.parse(f.nl(f.dis(" ", f.str(), f.split(",", f.int()), (l, r) => ({ pat: l, segs: r }))));
data = data.map(({ pat, segs }) => ({
pat: (pat + "?").repeat(5).slice(0, -1) + ".",
segs: segs.concat(segs, segs, segs, segs)
}))
let ans = 0;
for (const { pat, segs } of data) {
// let cnt = count(pat + ".", segs);
console.log(pat, segs);
// ans += cnt;
let dp = Array.from(new Array(segs.length + 1), () => new Array(pat.length + 1).fill(0));
dp[0][0] = 1;
for (let i = 0; i <= segs.length; i++) {
for (let j = 0; j < pat.length; j++) {
if (i < segs.length && j + segs[i] <= pat.length && pat.slice(j, j + segs[i]).match(/^(#|\?)+$/) && (j + segs[i] === pat.length || pat[j + segs[i]] === "." || pat[j + segs[i]] === "?")) {
dp[i + 1][j + segs[i] + 1] += dp[i][j];
}
if (pat[j] === "." || pat[j] === "?") {
dp[i][j + 1] += dp[i][j];
}
}
}
// console.log(dp);
ans += dp[segs.length][pat.length];
}
return ans;
});
// function count(pat: string, segs: number[]) {
// if (pat.length === 0 && segs.length === 0) {
// return 1;
// }
// let ans = 0;
// if (segs.length > 0 && pat.slice(0, segs[0] + 1).match(/^(#|\?)+(\.|\?)$/)) {
// ans += count(pat.slice(segs[0] + 1), segs.slice(1));
// }
// if (pat[0] === "." || pat[0] === "?") {
// ans += count(pat.slice(1), segs);
// }
// console.log(pat, segs, ans);
// return ans;
// }
// computeCheck(1, async function* (input) {
// const data = input.parse(f.nl(f.int()));
// let ans = 0;
// yield ans;
// });
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment