saw part 2 coming so it was indeed straightforward
This commit is contained in:
parent
e7e1b615ff
commit
13667f414b
91
05/index.ts
Normal file
91
05/index.ts
Normal file
@ -0,0 +1,91 @@
|
||||
import fs from "node:fs";
|
||||
import { printTime, now } from "../util";
|
||||
|
||||
const test = false;
|
||||
|
||||
const data = fs.readFileSync(
|
||||
test ? "./inputs/testinput" : "./inputs/input",
|
||||
"utf8"
|
||||
);
|
||||
|
||||
let timer = now.instant();
|
||||
console.log(
|
||||
"part one:",
|
||||
(() => {
|
||||
const { ordering, manuals } = data
|
||||
.split("\n")
|
||||
.slice(0, -1)
|
||||
.reduce(
|
||||
(coll, curr) => {
|
||||
if (curr === "") {
|
||||
return coll;
|
||||
}
|
||||
if (curr[2] === "|") {
|
||||
return { ...coll, ordering: [...coll.ordering, curr.split("|")] };
|
||||
}
|
||||
if (curr[2] === ",") {
|
||||
return { ...coll, manuals: [...coll.manuals, curr.split(",")] };
|
||||
}
|
||||
return coll;
|
||||
},
|
||||
{ ordering: [], manuals: [] } as {
|
||||
ordering: Array<Array<string>>;
|
||||
manuals: Array<Array<string>>;
|
||||
}
|
||||
);
|
||||
|
||||
return manuals.reduce((coll, curr) => {
|
||||
const sorted = [...curr].sort((a, b) => {
|
||||
return ordering.filter((v) => v[0] === a && v[1] === b).length === 0
|
||||
? 1
|
||||
: -1;
|
||||
});
|
||||
if (sorted.join(",") === curr.join(",")) {
|
||||
return coll + parseInt(curr[Math.floor(curr.length / 2)], 10);
|
||||
}
|
||||
return coll;
|
||||
}, 0);
|
||||
})(),
|
||||
printTime(now.instant().since(timer))
|
||||
);
|
||||
|
||||
timer = now.instant();
|
||||
console.log(
|
||||
"part two:",
|
||||
(() => {
|
||||
const { ordering, manuals } = data
|
||||
.split("\n")
|
||||
.slice(0, -1)
|
||||
.reduce(
|
||||
(coll, curr) => {
|
||||
if (curr === "") {
|
||||
return coll;
|
||||
}
|
||||
if (curr[2] === "|") {
|
||||
return { ...coll, ordering: [...coll.ordering, curr.split("|")] };
|
||||
}
|
||||
if (curr[2] === ",") {
|
||||
return { ...coll, manuals: [...coll.manuals, curr.split(",")] };
|
||||
}
|
||||
return coll;
|
||||
},
|
||||
{ ordering: [], manuals: [] } as {
|
||||
ordering: Array<Array<string>>;
|
||||
manuals: Array<Array<string>>;
|
||||
}
|
||||
);
|
||||
|
||||
return manuals.reduce((coll, curr) => {
|
||||
const sorted = [...curr].sort((a, b) => {
|
||||
return ordering.filter((v) => v[0] === a && v[1] === b).length === 0
|
||||
? 1
|
||||
: -1;
|
||||
});
|
||||
if (sorted.join(",") !== curr.join(",")) {
|
||||
return coll + parseInt(sorted[Math.floor(curr.length / 2)], 10);
|
||||
}
|
||||
return coll;
|
||||
}, 0);
|
||||
})(),
|
||||
printTime(now.instant().since(timer))
|
||||
);
|
Loading…
Reference in New Issue
Block a user