Compare commits
No commits in common. "bef73c0cb5f57e6bc74c99e93995481312d5100b" and "d23ce26d0ebb34f15fcc196d442e6412f72ed816" have entirely different histories.
bef73c0cb5
...
d23ce26d0e
6 changed files with 39 additions and 98 deletions
1
.gitignore
vendored
1
.gitignore
vendored
|
@ -1 +0,0 @@
|
||||||
**/input.txt
|
|
9
aoc
9
aoc
|
@ -1,9 +0,0 @@
|
||||||
#!/usr/bin/env zsh
|
|
||||||
setopt extendedglob
|
|
||||||
|
|
||||||
cd "day$1"
|
|
||||||
|
|
||||||
# Handle deno days
|
|
||||||
if [[ -n *.ts(#qN) ]]; then
|
|
||||||
deno eval --ext=ts "await import('./part$2.ts').then(m => m.solve()).then(s => console.log('The solution is', s))"
|
|
||||||
fi
|
|
|
@ -1,18 +1,16 @@
|
||||||
export async function solve() {
|
const input = await Deno.readTextFile("./input.txt").then(
|
||||||
return await Deno.readTextFile("./input.txt").then(
|
|
||||||
(f) =>
|
(f) =>
|
||||||
f.split("\n").reduce<[number[], number[]]>(
|
f.split("\n").reduce<[number[], number[]]>(
|
||||||
(
|
(
|
||||||
acc,
|
acc,
|
||||||
cur,
|
cur,
|
||||||
) => [
|
) => [[...acc[0], +cur.split(" ")[0]], [
|
||||||
[...acc[0], +cur.split(" ")[0]],
|
...acc[1],
|
||||||
[...acc[1], +cur.split(" ")[1]],
|
+cur.split(" ")[1],
|
||||||
],
|
]],
|
||||||
[[], []],
|
[[], []],
|
||||||
),
|
),
|
||||||
).then(([first, second]) => [first.toSorted(), second.toSorted()]).then(
|
).then(([first, second]) => [first.toSorted(), second.toSorted()]).then((
|
||||||
([first, second]) =>
|
[first, second],
|
||||||
first.reduce((acc, cur, i) => acc + Math.abs(cur - second[i]), 0),
|
) => first.reduce((acc, cur, i) => acc + Math.abs(cur - second[i]), 0));
|
||||||
);
|
console.log("Answer = " + input);
|
||||||
}
|
|
||||||
|
|
|
@ -1,14 +1,13 @@
|
||||||
export async function solve() {
|
const input = await Deno.readTextFile("./input.txt").then(
|
||||||
return await Deno.readTextFile("./input.txt").then(
|
|
||||||
(f) =>
|
(f) =>
|
||||||
f.split("\n").reduce<[number[], number[]]>(
|
f.split("\n").reduce<[number[], number[]]>(
|
||||||
(
|
(
|
||||||
acc,
|
acc,
|
||||||
cur,
|
cur,
|
||||||
) => [
|
) => [[...acc[0], +cur.split(" ")[0]], [
|
||||||
[...acc[0], +cur.split(" ")[0]],
|
...acc[1],
|
||||||
[...acc[1], +cur.split(" ")[1]],
|
+cur.split(" ")[1],
|
||||||
],
|
]],
|
||||||
[[], []],
|
[[], []],
|
||||||
),
|
),
|
||||||
).then(([first, second]) => [
|
).then(([first, second]) => [
|
||||||
|
@ -19,7 +18,7 @@ export async function solve() {
|
||||||
|
|
||||||
return acc;
|
return acc;
|
||||||
}, {} as Record<number, number>),
|
}, {} as Record<number, number>),
|
||||||
] as const).then(([first, map]) =>
|
]).then(([first, map]) =>
|
||||||
first.reduce((acc, cur) => acc + ((map[cur] ?? 0) * cur), 0)
|
first.reduce((acc, cur) => acc + ((map[cur] ?? 0) * cur), 0)
|
||||||
);
|
);
|
||||||
}
|
console.log("Answer = " + input);
|
||||||
|
|
|
@ -1,17 +0,0 @@
|
||||||
export async function solve() {
|
|
||||||
return await Deno.readTextFile("./input.txt").then((f) =>
|
|
||||||
f.split("\n").filter((l) => {
|
|
||||||
const report = l.split(" ").map((s) => +s);
|
|
||||||
const increasing = report[0] < report[1];
|
|
||||||
let last = report[0];
|
|
||||||
for (const number of report.slice(1)) {
|
|
||||||
if (number > last && !increasing) return false;
|
|
||||||
if (number < last && increasing) return false;
|
|
||||||
if (Math.abs(number - last) < 1 || Math.abs(number - last) > 3) return false;
|
|
||||||
|
|
||||||
last = number;
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}).reduce(acc => acc + 1, 0)
|
|
||||||
);
|
|
||||||
}
|
|
|
@ -1,29 +0,0 @@
|
||||||
export async function solve() {
|
|
||||||
return await Deno.readTextFile("./input.txt").then((f) =>
|
|
||||||
f.split("\n").filter((l) => {
|
|
||||||
const report = l.split(" ").map((s) => +s);
|
|
||||||
for (let i = 0; i < report.length; i++) {
|
|
||||||
const sliced = [
|
|
||||||
...report.slice(0, i),
|
|
||||||
...report.slice(i + 1, report.length),
|
|
||||||
];
|
|
||||||
const increasing = sliced[0] < sliced[1];
|
|
||||||
let last = sliced[0];
|
|
||||||
let failed = false;
|
|
||||||
for (const number of sliced.slice(1)) {
|
|
||||||
if (number > last && !increasing) failed = true;
|
|
||||||
if (number < last && increasing) failed = true;
|
|
||||||
if (
|
|
||||||
Math.abs(number - last) < 1 ||
|
|
||||||
Math.abs(number - last) > 3
|
|
||||||
) failed = true;
|
|
||||||
|
|
||||||
last = number;
|
|
||||||
}
|
|
||||||
if (failed) continue;
|
|
||||||
else return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}).reduce((acc) => acc + 1, 0)
|
|
||||||
);
|
|
||||||
}
|
|
Loading…
Reference in a new issue