part 1
This commit is contained in:
parent
5626a72462
commit
31fab2a508
63
2022/10/part1.js
Normal file
63
2022/10/part1.js
Normal 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
13
2022/10/part2.js
Normal 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
3
2022/10/sample
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
noop
|
||||||
|
addx 3
|
||||||
|
addx -5
|
146
2022/10/sample.2
Normal file
146
2022/10/sample.2
Normal 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
42
2022/10/test.js
Normal 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");
|
||||||
|
});
|
||||||
|
});
|
Loading…
Reference in New Issue
Block a user