Browse Source

Day 10

master
Ben Ashton 1 year ago
parent
commit
2d6fac90f6
  1. 144
      10/input
  2. 55
      10/solution.mjs

144
10/input

@ -0,0 +1,144 @@
noop
addx 5
noop
addx 3
addx -2
addx 4
noop
noop
noop
noop
noop
addx 7
addx 3
noop
noop
noop
noop
addx 5
noop
noop
addx 5
addx -10
addx 2
addx 14
noop
addx -38
noop
noop
addx 5
addx 2
addx 2
addx 3
noop
addx 20
addx -19
addx 28
addx -21
addx 2
addx 3
noop
addx 2
addx -4
addx 5
addx 2
addx -4
addx 11
addx -27
addx 28
addx -38
addx 5
addx 2
addx -1
noop
addx 6
addx 3
addx -2
noop
noop
addx 7
addx 2
noop
noop
noop
addx 5
addx 3
noop
addx 2
addx -11
addx 6
addx 8
noop
addx 3
addx -37
addx 1
addx 5
addx 2
addx 3
noop
noop
noop
noop
noop
addx -5
addx 13
addx 2
addx -8
addx 9
addx 4
noop
addx 5
addx -2
addx -14
addx 21
addx 1
noop
noop
addx -38
addx 2
addx 5
addx 2
addx 3
addx -2
noop
addx 11
addx -6
addx 5
addx 2
addx 3
noop
addx 2
addx -10
addx 15
noop
addx -24
addx 17
addx 10
noop
addx 3
addx -38
addx 5
addx 2
addx 3
addx -2
addx 2
addx 7
addx 1
addx -1
noop
addx 5
noop
noop
noop
noop
addx 3
noop
addx -21
addx 28
addx 1
noop
addx 2
noop
addx 3
noop
noop

55
10/solution.mjs

@ -0,0 +1,55 @@
import { readFileSync } from 'node:fs';
const input = readFileSync('input', 'utf-8');
const cycles = input
.split('\n')
.filter(line => line)
.flatMap((() => {
let x = 1;
return (line) => {
if (line.startsWith('noop')) {
return [x];
}
if (line.startsWith('addx')) {
const add = parseInt(line.substring(5));
if (isNaN(add)) {
throw new Error('Invalid value for addx');
}
const result = [x, x];
x += add;
return result;
}
};
})());
const sumOfSignalStrengths = [20, 60, 100, 140, 180, 220]
.map(c => {
const x = cycles[c - 1];
const strength = c * x;
return strength;
})
.reduce((total, strength) => total + strength);
console.log(
`The sum of observed signal strengths is: ${sumOfSignalStrengths}`
);
const render = cycles
.map((x, c) => {
const scanPos = c % 40;
return [x - 1, x, x + 1].some(pixelPos => pixelPos === scanPos);
})
.reduce((display, pixelVisible, c) => {
const scanLine = Math.floor(c / 40);
if (!display[scanLine]) {
display.push([]);
}
display[scanLine].push(pixelVisible ? '#' : ' ');
return display;
}, [])
.map(scanLine => scanLine.join(''))
.join('\n');
console.log('Display output:');
console.log(render);
Loading…
Cancel
Save