This commit is contained in:
Yanick Champoux 2022-12-10 17:54:56 -05:00
parent 5626a72462
commit 31fab2a508
5 changed files with 267 additions and 0 deletions

63
2022/10/part1.js Normal file
View File

@ -0,0 +1,63 @@
import * as R from "remeda";
import { readFile } from "../05/part1.js";
const readInput = (...args) =>
R.pipe(
readFile(...args),
(lines) => lines.split("\n"),
R.compact, // remove last line
R.map((line) => line.split(" ").map((v, i) => (i ? parseInt(v) : v)))
);
export const puzzleInput = readInput(import.meta.url, "input");
export const sample = readInput(import.meta.url, "sample");
export const sample2 = readInput(import.meta.url, "sample.2");
export const comsys = () => {
let cycle = 1;
let register = 1;
const scheduled = [];
return (instr) => {
if( instr && (instr[0] === 'addx') ) {
scheduled.push(0,instr[1]);
} else {
scheduled.push(0);
}
cycle++;
register += scheduled.shift() ?? 0;
return { cycle, register };
}
}
export const gatherStrength = () => {
let strength = 0;
return ({cycle, signal, register}) => {
if( (cycle - 20) % 40 === 0 ) {
strength += signal;
}
return { strength, cycle, signal, register };
}
}
export const addSignal = (input) => ({
...input,
signal: input.cycle*input.register
});
export default (instructions) => {
const sys = comsys();
return R.pipe(
R.range(0,220),
R.map( () => sys(instructions.shift()) ),
R.map( addSignal ),
R.map( gatherStrength() ),
R.last,
R.prop('strength')
)
};

13
2022/10/part2.js Normal file
View File

@ -0,0 +1,13 @@
import * as R from "remeda";
import { comsys } from './part1.js';
export default (instructions) => {
const sys = comsys();
return R.pipe(
R.range(0,3),
R.map( () => sys(instructions.shift()) ),
)
};

3
2022/10/sample Normal file
View File

@ -0,0 +1,3 @@
noop
addx 3
addx -5

146
2022/10/sample.2 Normal file
View File

@ -0,0 +1,146 @@
addx 15
addx -11
addx 6
addx -3
addx 5
addx -1
addx -8
addx 13
addx 4
noop
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx 5
addx -1
addx -35
addx 1
addx 24
addx -19
addx 1
addx 16
addx -11
noop
noop
addx 21
addx -15
noop
noop
addx -3
addx 9
addx 1
addx -3
addx 8
addx 1
addx 5
noop
noop
noop
noop
noop
addx -36
noop
addx 1
addx 7
noop
noop
noop
addx 2
addx 6
noop
noop
noop
noop
noop
addx 1
noop
noop
addx 7
addx 1
noop
addx -13
addx 13
addx 7
noop
addx 1
addx -33
noop
noop
noop
addx 2
noop
noop
noop
addx 8
noop
addx -1
addx 2
addx 1
noop
addx 17
addx -9
addx 1
addx 1
addx -3
addx 11
noop
noop
addx 1
noop
addx 1
noop
noop
addx -13
addx -19
addx 1
addx 3
addx 26
addx -30
addx 12
addx -1
addx 3
addx 1
noop
noop
noop
addx -9
addx 18
addx 1
addx 2
noop
noop
addx 9
noop
noop
noop
addx -1
addx 2
addx -37
addx 1
addx 3
noop
addx 15
addx -21
addx 22
addx -6
addx 1
noop
addx 2
addx 1
noop
addx -10
noop
noop
addx 20
addx 1
addx 2
addx 2
addx -6
addx -11
noop
noop
noop

42
2022/10/test.js Normal file
View File

@ -0,0 +1,42 @@
import { test, expect, describe } from "vitest";
import * as R from "remeda";
import { expectSolution } from "../01/main.js";
import part1, { comsys, sample, sample2, puzzleInput, addSignal } from "./part1.js";
import part2 from "./part2.js";
describe("part 1", () => {
test( "comsys", () => {
let sys = comsys();
const result = sample.map( sys).map(R.prop('register'));
expect(result).toEqual([1,1,4]);
sys = comsys();
expect(sample.map( sys ).map(R.prop('cycle'))
).toEqual([2,3,4] )
});
test( "signal strength", () => {
expect(addSignal({cycle: 3, register: 2})).toMatchObject({signal: 6});
});
test( "sample2", () => {
expect(part1(sample2)).toEqual(13140);
});
test("solution", () => {
expectSolution(part1(puzzleInput)).toEqual(15020);
});
});
describe.only("part 2", () => {
test("sample", () => {
expectSolution(part2(sample2)).toEqual("TODO");
});
test.todo("solution", () => {
expectSolution(part2(puzzleInput)).toEqual("TODO");
});
});