diff --git a/2022/13/part1.js b/2022/13/part1.js index 5289c93..c19ce7c 100644 --- a/2022/13/part1.js +++ b/2022/13/part1.js @@ -7,40 +7,36 @@ const readInput = (...args) => readFile(...args), (lines) => lines.split("\n\n"), R.compact, // remove last line - R.map( - block => block.split("\n").map( line => eval(line) ) - ) + R.map((block) => block.split("\n").map((line) => eval(line))) ); export const puzzleInput = readInput(import.meta.url, "input"); export const sample = readInput(import.meta.url, "sample"); -export function isLessThan(x,y) { - if( [x,y].every(R.isNumber) ) return x < y ? -1 : x == y ? 0 : 1; +export function isLessThan(x, y) { + if ([x, y].every(R.isNumber)) return x < y ? -1 : x == y ? 0 : 1; - if( [x,y].every(R.isArray) ) { - for ( const [a,b] of R.zip(x,y)) { - const res = isLessThan(a,b); - if(res !== 0) return res; - } - if( x.length === y.length ) return 0 - return x.length < y.length ? -1 : 1; + if ([x, y].every(R.isArray)) { + for (const [a, b] of R.zip(x, y)) { + const res = isLessThan(a, b); + if (res !== 0) return res; } + if (x.length === y.length) return 0; + return x.length < y.length ? -1 : 1; + } - return isLessThan(...[x,y].map( z => R.isNumber(z)? [z] : z )); + return isLessThan(...[x, y].map((z) => (R.isNumber(z) ? [z] : z))); } const passthru = (x) => (arg) => { - x(arg); - return arg; -} + x(arg); + return arg; +}; export default R.createPipe( - R.map( ([x,y]) => isLessThan(x,y) ), - (results) => results.map( - (value,index) => ({ value, index: index+1 }) - ), - R.filter( ({ value }) => value !== 1 ), - R.map( R.prop('index') ), - (results) => results.reduce((a,b) => a+b) + R.map(([x, y]) => isLessThan(x, y)), + (results) => results.map((value, index) => ({ value, index: index + 1 })), + R.filter(({ value }) => value !== 1), + R.map(R.prop("index")), + (results) => results.reduce((a, b) => a + b) ); diff --git a/2022/13/part2.js b/2022/13/part2.js index 328da14..79f8c62 100644 --- a/2022/13/part2.js +++ b/2022/13/part2.js @@ -1,13 +1,14 @@ import * as R from "remeda"; import { isLessThan } from "./part1"; -const dividers = [[[2]],[[6]]]; +const dividers = [[[2]], [[6]]]; export default R.createPipe( - R.flatten, - R.concat(dividers), - (packets) => packets.sort(isLessThan), - packets => packets.map( (p,i) => ({ i: i+1, divider: dividers.includes(p) }) ), - R.filter( ({divider}) => divider ), - R.map(R.prop('i')), - (v) => v.reduce((a,b)=>a*b), + R.flatten, + R.concat(dividers), + (packets) => packets.sort(isLessThan), + (packets) => + packets.map((p, i) => ({ i: i + 1, divider: dividers.includes(p) })), + R.filter(({ divider }) => divider), + R.map(R.prop("i")), + (v) => v.reduce((a, b) => a * b) ); diff --git a/2022/13/test.js b/2022/13/test.js index 554b8ae..7fb35cb 100644 --- a/2022/13/test.js +++ b/2022/13/test.js @@ -5,17 +5,16 @@ import part1, { sample, puzzleInput, isLessThan } from "./part1.js"; import part2 from "./part2.js"; describe("part 1", () => { - test( "readInput", () => { - expect(sample[0][0]).toEqual([1,1,3,1,1]); - - }); - test( "lessThan", () => { - expect( isLessThan(1,2) ).toBe(-1); - expect( isLessThan(2,1) ).toBe(1); - expect( isLessThan(2,2) ).toBe(0); - expect( isLessThan(2,[1]) ).toBe(1); - expect( isLessThan([1],[2]) ).toBe(-1); - }); + test("readInput", () => { + expect(sample[0][0]).toEqual([1, 1, 3, 1, 1]); + }); + test("lessThan", () => { + expect(isLessThan(1, 2)).toBe(-1); + expect(isLessThan(2, 1)).toBe(1); + expect(isLessThan(2, 2)).toBe(0); + expect(isLessThan(2, [1])).toBe(1); + expect(isLessThan([1], [2])).toBe(-1); + }); test("sample", () => { expect(part1(sample)).toEqual(13); });