Skip to content

Instantly share code, notes, and snippets.

@mctrafik
Last active December 13, 2023 05:48
Show Gist options
  • Save mctrafik/59df3b969e5305fdbdfdfd807a7d9d94 to your computer and use it in GitHub Desktop.
Save mctrafik/59df3b969e5305fdbdfdfd807a7d9d94 to your computer and use it in GitHub Desktop.
AOC 2023: Problem 13
const parsed = input.split(`\n\n`);
const start = performance.now();
// ===========================================================
// PART 1
// ===========================================================
let answer1 = 0;
/** Number of characters different between string arrays. */
const diff = (a: string[], b: string[]): number => {
let diffs = 0;
for (let i = 0; i < a.length; i++) {
if (a[i] !== b[i]) diffs++;
}
return diffs;
};
/** Returns the the row where the reflection happens, and the total differences = smudge */
function getReflection(grid: string[][], smudge: number): number {
rLoop: for (let r = 0; r < grid.length - 1; r++) {
let diffs = diff(grid[r], grid[r + 1]);
if (diffs <= smudge) {
const rowsBelow = r;
const rowsAbove = grid.length - r;
for (let i = 0; i < Math.min(rowsBelow, rowsAbove); i++) {
const lowRow = r - i - 1;
const highRow = r + 2 + i;
if (lowRow < 0 || highRow >= grid.length) break;
diffs += diff(grid[lowRow], grid[highRow]);
if (diffs > smudge) continue rLoop;
}
if (diffs === smudge) {
return r + 1;
}
}
}
return 0;
}
for (const gridInput of parsed) {
const grid = parse2d(gridInput);
const transposed = transpose2d(grid);
const vertical = getReflection(transposed, 0);
const horizontal = getReflection(grid, 0);
answer1 += 100 * horizontal + vertical;
}
console.info(`Answer1: ${answer1} after ${(performance.now() - start).toFixed(2)}ms`);
// ===========================================================
// PART 2
// ===========================================================
let answer2 = 0;
for (const gridInput of parsed) {
const grid = parse2d(gridInput);
const transposed = transpose2d(grid);
const vertical = getReflection(transposed, 1);
const horizontal = getReflection(grid, 1);
answer2 += 100 * horizontal + vertical;
}
console.info(`Answer2: ${answer2} after ${(performance.now() - start).toFixed(2)}ms`);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment