Compare commits

...

14 Commits

Author SHA1 Message Date
538259ffd4 Mooie dingen 2022-12-13 08:01:47 +00:00
f640da25f8 d10 2022-12-12 20:09:49 +00:00
c0f0e9e754 9 2022-12-11 13:07:25 +00:00
de91702dff day7 2022-12-08 22:07:30 +00:00
4c960e4ab5 day6 2022-12-06 08:21:39 +00:00
e43eea0f6e d5p2 2022-12-05 21:05:25 +00:00
f214ed1fe3 d5p1 2022-12-05 18:17:03 +00:00
6b2e5bbe2c d4 2022-12-04 17:35:01 +00:00
57f3bd59e1 d4p1 2022-12-04 16:33:24 +00:00
d68ac87ca9 d3p2 2022-12-04 15:32:49 +00:00
9574f3b126 day3p1 2022-12-03 23:44:39 +00:00
6833bfb1e3 wip d2p2 2022-12-03 16:14:02 +00:00
b381d29871 Merge remote-tracking branch 'origin/master'
# Conflicts:
#	package-lock.json
#	package.json
#	src/utils/index.ts
#	tsconfig.json
2022-12-03 15:48:33 +01:00
e7c428b678 nieuw jaar 2022-12-03 15:48:04 +01:00
49 changed files with 12145 additions and 195 deletions

20
.vscode/launch.json vendored Normal file
View File

@@ -0,0 +1,20 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "node",
"request": "launch",
"name": "Launch Program",
"skipFiles": [
"<node_internals>/**"
],
"program": "${workspaceFolder}/src/2022/day6/index.ts",
"outFiles": [
"${workspaceFolder}/**/*.js"
]
}
]
}

3
.vscode/settings.json vendored Normal file
View File

@@ -0,0 +1,3 @@
{
"typescript.tsdk": "node_modules/typescript/lib"
}

1199
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -1,10 +1,14 @@
{ {
"devDependencies": { "devDependencies": {
"@types/node": "^16.11.11", "@swc/core": "^1.3.21",
"ts-node": "^10.4.0", "@swc/helpers": "^0.4.14",
"typescript": "^4.5.2" "@types/node": "^16.18.4",
"nodemon": "^2.0.20",
"regenerator-runtime": "^0.13.11",
"ts-node": "^10.9.1",
"typescript": "^4.9.3"
}, },
"dependencies": { "scripts": {
"node-fetch": "^3.1.0" "start": "nodemon src/2022/day12/index.ts"
} }
} }

View File

@@ -1,6 +1,6 @@
import * as fs from 'fs'; import * as fs from 'fs';
import path from 'path'; import path from 'path';
import {readFile} from "../utils"; import {readFile} from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt')); let input = readFile(path.resolve(__dirname, 'input.txt'));

56
src/2021/day2/index.ts Normal file
View File

@@ -0,0 +1,56 @@
import path from 'path';
import {readFile} from "../../utils";
let input = readFile(path.resolve(__dirname, 'example.txt')).map(x => x.split(' ')).map((cmd) => ({cmd: cmd[0], val: Number(cmd[1])}))
let forward = 0;
let depth = 0;
type Entry = {
cmd: string,
val: number
}
const add = (entry: Entry) => {
if (entry.cmd === 'forward') forward += entry.val;
else if (entry.cmd === 'down') depth += entry.val;
else depth -= entry.val;
}
input.map(add)
console.log("Part 1", forward * depth)
forward = 0;
depth = 0;
let aim = 0;
const execute = (entry: Entry) => {
if (entry.cmd === 'down') aim += entry.val;
else if (entry.cmd === 'up') aim -= entry.val;
else {
forward += entry.val
depth += entry.val * aim
}
}
input.map(execute)
console.log("Part 2", forward * depth)
//console.log(input)
const res =
input
.map(x => x)
.push({cmd: 0, val: 0} )
console.log(res);
// .print()
// .reduce((prev: any, cur: any, curIdx: number, array: any) => {
// console.log(curIdx, cur, prev,);
// return {
// forward: 0,
// depth: 0,
// aim: 0
// }
// })

14
src/2022/day1/example.txt Normal file
View File

@@ -0,0 +1,14 @@
1000
2000
3000
4000
5000
6000
7000
8000
9000
10000

28
src/2022/day1/index.ts Normal file
View File

@@ -0,0 +1,28 @@
import * as fs from 'fs';
import path from 'path';
import {readFile} from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
const day1 = Math.max(
...input
.split("\n\n")
.map(a => a.split("\n"))
.map(buck => buck
.map(Number)
.reduce((a, b) => a + b), 0)
)
console.log("Day1:", day1);
const day2 =
input
.split("\n\n")
.map(a => a.split("\n"))
.map(buck => buck.map(Number).reduce((a, b) => a + b), 0)
.sort((n1,n2) => n2 - n1)
.splice(0,3)
.reduce((n1, n2) => n1 + n2)
console.log("Day2:", day2);

2242
src/2022/day1/input.txt Normal file

File diff suppressed because it is too large Load Diff

146
src/2022/day10/example.txt 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

61
src/2022/day10/index.ts Normal file
View File

@@ -0,0 +1,61 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let reg: number[] = [1];
input.split("\n").forEach(line => {
const [instruction, value] = line.split(" ");
let addme: number[] = [];
let base = reg[reg.length - 1];
if (instruction === "addx") {
addme.push(base);
addme.push(base + Number(value));
reg = reg.concat(addme)
} else if (instruction === "noop") {
reg = reg.concat([base]);
}
});
const cycles = [20, 60, 100, 140, 180, 220];
const p1 = cycles.map(cycle => cycle * reg[cycle - 1]).reduce(sum);
console.log("Part1:", p1);
function sliceIntoChunks(arr, chunkSize) {
const res: any[] = [];
for (let i = 0; i < arr.length; i += chunkSize) {
const chunk = arr.slice(i, i + chunkSize);
res.push(chunk);
}
return res;
}
function isPixel(register, cycle) {
const range = register - (cycle % 40);
return (range <= 0 && range >= -2) ? "#" : ".";
}
const CRT = Array(40 * 5).fill(".");
let register = 1;
let cycle = 0;
input.split("\n").forEach((line) => {
const [instruction, value] = line.split(" ");
CRT[cycle] = isPixel(register, ++cycle);
if (instruction === "addx") {
CRT[cycle] = isPixel(register, ++cycle);
register = register + Number(value);
}
})
//console.log(CRT);
console.log(sliceIntoChunks(CRT, 40).map(line => line.join("")));

145
src/2022/day10/input.txt Normal file
View File

@@ -0,0 +1,145 @@
noop
noop
noop
addx 3
addx 7
noop
noop
noop
noop
addx 6
noop
addx -1
noop
addx 5
addx 1
noop
addx 4
noop
noop
noop
noop
addx 6
addx -1
noop
addx 3
addx -13
addx -22
noop
noop
addx 3
addx 2
addx 11
addx -4
addx 11
addx -10
addx 2
addx 5
addx 2
addx -2
noop
addx 7
addx 3
addx -2
addx 2
addx 5
addx 2
addx -2
addx -8
addx -27
addx 5
addx 2
addx 21
addx -21
addx 3
addx 5
addx 2
addx -3
addx 4
addx 3
addx 1
addx 5
noop
noop
noop
noop
addx 3
addx 1
addx 6
addx -31
noop
addx -4
noop
noop
noop
noop
addx 3
addx 7
noop
addx -1
addx 1
addx 5
noop
addx 1
noop
addx 2
addx -8
addx 15
addx 3
noop
addx 2
addx 5
noop
noop
noop
addx -28
addx 11
addx -20
noop
addx 7
addx -2
addx 7
noop
addx -2
noop
addx -6
addx 11
noop
addx 3
addx 2
noop
noop
addx 7
addx 3
addx -2
addx 2
addx 5
addx 2
addx -16
addx -10
addx -11
addx 27
addx -20
noop
addx 2
addx 3
addx 5
noop
noop
noop
addx 3
addx -2
addx 2
noop
addx -14
addx 21
noop
addx -6
addx 12
noop
addx -21
addx 24
addx 2
noop
noop
noop

View File

@@ -0,0 +1,27 @@
Monkey 0:
Starting items: 79, 98
Operation: new = old * 19
Test: divisible by 23
If true: throw to monkey 2
If false: throw to monkey 3
Monkey 1:
Starting items: 54, 65, 75, 74
Operation: new = old + 6
Test: divisible by 19
If true: throw to monkey 2
If false: throw to monkey 0
Monkey 2:
Starting items: 79, 60, 97
Operation: new = old * old
Test: divisible by 13
If true: throw to monkey 1
If false: throw to monkey 3
Monkey 3:
Starting items: 74
Operation: new = old + 3
Test: divisible by 17
If true: throw to monkey 0
If false: throw to monkey 1

108
src/2022/day11/index.ts Normal file
View File

@@ -0,0 +1,108 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let monkeys: any[] = []
input.split("\n\n").forEach((line, idx) => {
const data = line.split("\n");
const starting = data[1].split(":")[1].split(",").map(meow => meow.split(" ").join("")).map(Number);
const [arg1, op, arg2] = data[2].split(":")[1].split(" ").filter(a => a !== "=" && a !== "" && a !== "new");
const DivBy = Number(data[3].split("Test: divisible by ")[1]);
const toTrue = Number(data[4].split("If true: throw to monkey ")[1]);
const toFalse = Number(data[5].split("If false: throw to monkey ")[1]);
monkeys.push({
starting,
operation: { arg1, op, arg2 },
DivBy,
toTrue,
toFalse,
inspected: 0
})
});
let rounds = 20;
for (let round = 0; round < rounds; round++) {
monkeys.forEach(monkey => {
while(monkey.starting.length > 0){
const item = monkey.starting.shift();
monkey.inspected++;
const arg1 = monkey.operation.arg1 === "old" ? item : Number(monkey.operation.arg1);
const arg2 = monkey.operation.arg2 === "old" ? item : Number(monkey.operation.arg2);
var newVal = 0;
if (monkey.operation.op === "*") {
newVal = arg1 * arg2;
}
else if (monkey.operation.op === "+") {
newVal = arg1 + arg2;
}
newVal = Math.floor(newVal / 3);
if (!(newVal % monkey.DivBy)) {
monkeys[monkey.toTrue].starting.push(newVal);
} else {
monkeys[monkey.toFalse].starting.push(newVal);
}
}
})
}
const monkeyz = monkeys.map(moneky => moneky.inspected).sort((a,b) => b - a);
console.log("Part1:", monkeyz[0] * monkeyz[1]);
monkeys = []
input.split("\n\n").forEach((line, idx) => {
const data = line.split("\n");
const starting = data[1].split(":")[1].split(",").map(meow => meow.split(" ").join("")).map(Number);
const [arg1, op, arg2] = data[2].split(":")[1].split(" ").filter(a => a !== "=" && a !== "" && a !== "new");
const DivBy = Number(data[3].split("Test: divisible by ")[1]);
const toTrue = Number(data[4].split("If true: throw to monkey ")[1]);
const toFalse = Number(data[5].split("If false: throw to monkey ")[1]);
monkeys.push({
starting,
operation: { arg1, op, arg2 },
DivBy,
toTrue,
toFalse,
inspected: 0
})
});
rounds = 1000;
for (let round = 0; round < rounds; round++) {
monkeys.forEach(monkey => {
while(monkey.starting.length > 0){
const item = monkey.starting.shift();
monkey.inspected++;
const arg1 = monkey.operation.arg1 === "old" ? item : Number(monkey.operation.arg1);
const arg2 = monkey.operation.arg2 === "old" ? item : Number(monkey.operation.arg2);
var newVal = 0;
if (monkey.operation.op === "*") {
newVal = arg1 * arg2;
}
else if (monkey.operation.op === "+") {
newVal = arg1 + arg2;
}
let remainder = newVal / monkey.DivBy;
}
})
}
const monkeyz2 = monkeys.map(moneky => moneky.inspected).sort((a,b) => b - a);
console.log("Part1:", monkeyz2[0] * monkeyz2[1]);

55
src/2022/day11/input.txt Normal file
View File

@@ -0,0 +1,55 @@
Monkey 0:
Starting items: 89, 74
Operation: new = old * 5
Test: divisible by 17
If true: throw to monkey 4
If false: throw to monkey 7
Monkey 1:
Starting items: 75, 69, 87, 57, 84, 90, 66, 50
Operation: new = old + 3
Test: divisible by 7
If true: throw to monkey 3
If false: throw to monkey 2
Monkey 2:
Starting items: 55
Operation: new = old + 7
Test: divisible by 13
If true: throw to monkey 0
If false: throw to monkey 7
Monkey 3:
Starting items: 69, 82, 69, 56, 68
Operation: new = old + 5
Test: divisible by 2
If true: throw to monkey 0
If false: throw to monkey 2
Monkey 4:
Starting items: 72, 97, 50
Operation: new = old + 2
Test: divisible by 19
If true: throw to monkey 6
If false: throw to monkey 5
Monkey 5:
Starting items: 90, 84, 56, 92, 91, 91
Operation: new = old * 19
Test: divisible by 3
If true: throw to monkey 6
If false: throw to monkey 1
Monkey 6:
Starting items: 63, 93, 55, 53
Operation: new = old * old
Test: divisible by 5
If true: throw to monkey 3
If false: throw to monkey 1
Monkey 7:
Starting items: 50, 61, 52, 58, 86, 68, 97
Operation: new = old + 4
Test: divisible by 11
If true: throw to monkey 5
If false: throw to monkey 4

View File

@@ -0,0 +1,5 @@
Sabqponm
abcryxxl
accszExk
acctuvwj
abdefghi

5
src/2022/day12/index.ts Normal file
View File

@@ -0,0 +1,5 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));

41
src/2022/day12/input.txt Normal file
View File

@@ -0,0 +1,41 @@
abccccaaaaaaaaaaaaaccaaaaaaaacccccccccaaaaaaaaccccccccaaacaaacccccccaaaaaaccccccccccccccccccccccaaaacccccccccccacccccccccccccccccccccccccccccccccccccccccccccccaaaa
abccccaaaaacaaaaaaccccaaaaaaccccccccccaaaaaaacccccccccaaaaaaacccccaaaaaaaaaacccccccccccccccccccaaaaaacccccccccaaaaaaaaccccccccccccccccccccccccccccccccccccccccaaaaa
abcccaaaaaccaaaaaaccccaaaaaaccccccaacccaaaaaacccccccccaaaaaacccaaaaaaaaaaaaaaacaaccacccccccccccaaaaaaccccccccccaaaaaacccccccccccccccccccccccccccccccccccccccccaaaaa
abccccccaaccaaaaaaccaaaaaaaaccccccaaacaaaacaaacccccccaaaaaaaaccaaaaaaaaaaaaaaacaaaaacccccccccccccaaccccccccccccaaaaaaccccccccccccccccccccccccccccacccccccccccaaaaaa
abccccccccccaaccaaccaaaaccaacccccccaaaaaaaccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccaaaaccccccccccccccccaaaaaaaacccccccccccccccccccccccccccaaccccccccccccccaa
abcccccccaaaaacccaaaaaaaacccaaccccaaaaaaccccccccccccaaaaaaaaaaaaaaaacaaaaaaaccaaaaaaccccccaaaaaccccccccccccccaaaaaaaaaaccaccccccccccccccccccccccccaccccccccccccccca
abcccccccaaaaacccaaaaaaaaccaaaaccaaaaaaaaccccccccccccccaaacaaaaaaaaacaaaaaacccccaaaacccccaaaaaaccccccccccccccaaaaaaaaaaaaacccccccccccccccllllllccccdccccccccccccccc
abccccccaaaaaacccccaaaaccccaaaaacaaaaaaaaccccccccccccccaaacccccaaaccccaaaaaacccaaccccccccaaaaaacccccccccccccccccaaaaaaaaaacccccccccccccklllllllllcddddccaccaaaccccc
abccccccaaaaaacccccaaaaaaaaaaaaaaaccaaccccccaacaacccccccaaccccccccccccaaacaacccccccccccccaaaaaacccccccccccccccccaaaaaaaaaacccccccccccckklllppllllcddddddddaaaaccccc
abccccccaaaaaaccccaaacaaaaaaaaaaaaccaaccccccaaaaaccccccccccccccccccccccccccccccccccccccccccaaccccccaaccccccccccccaacaaaaaaaccccccccccckklpppppplllmdddddddddacccccc
abccccccccaaacccccaacccaccaaaaaaccccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccccccccaaaaccccccccccccaaaaaaaaaaccccccccckkkkppppppplmmmmmmddddddaacccc
abccccaaacaaacccccccccccccaaaaaaccccccccccccaaaaaacccccccccccccccccaaaccccccccccccccccccccccccccccaaaaccccccccccccaaaaaaaaaaccccccccckkkppppuppppmmmmmmmmddeeeacccc
abccccaaaaaaacccccccccccccaaaaaacccaccccccccaaaaaacccccccccccccccccaaaacccccccccccccccccccccaaacccaaaacccccccccccaaaacaaaccccccccccckkkpppuuuuuppqqmmmmmmmmeeeacccc
abcccccaaaaaaccccccccccccaaaaaaaacaaccccccccccaaaccccccccccccccccccaaaaccccccccccccccccccccaaaaccccccccccccccccccaaaaaaaacccccccccckkkkpppuuuuupqqqqqqqmmmmeeeccccc
abcccccaaaaaaaacccccccccccaccccaaaaacccccccccccccccccccccccccccccccaaaccccccccccccccaaaccccaaaacccccccccccccaaccaaaaaaaaccccccccckkkkkrrpuuuxuuuqqqqqqqqmmmmeeccccc
abccccaaaaaaaaaccccccccccccccaaaaaacccccccacaacccccccccccccccccccccccccccccccccccccaaaaaacccaaaccccccccccaaaaccaaaaaaacccccccccckkkkrrrrruuuxxuvvvvvvqqqqnnneeccccc
abcccaaaaaaaaaaccccccccccccccaaaaaaaacccccaaaaacccccccccccccccaaaaaccccccccccccccccaaaaaaccccccccccccccccaaaaaaaaaaaaacccccccccjjjkrrrrruuuxxxxvvvvvvvqqqnnneeccccc
abcaaaaacaaacccccccccccccccccaaaaaaaacccccaaaaaccaacccccccccccaaaaaccccccccccccccccaaaaaccccccccccccccccccaaaaaccaaaaaacccccccjjjrrrrruuuuuxxxyvyyyvvvqqqnneeeccccc
abcaaaaacaaaccaaccccccccccccccccaacccccccaaaaaaaaaaaccccccccccaaaaaaccccccccccccccccaaaaaccccccccccccccccaaaaacccaaaaaaaacaaacjjjrrrtttuuxxxxxyyyyyvvvqqnnneeeccccc
abaaaaaccaacccaaaccaacccaaccccccaccccccccaaaaaaaaaacccccccccccaaaaaaccccccccccccccccaacaacccccccccccccccccccaacccaaccccaaaaaacjjjrrrtttxxxxxxxyyyyyvvvrrnnneeeccccc
SbaaaaacccccccaaaaaaaccaaaacccccccccccccccaaaaaaaaacccccccccccaaaaaaccccccccccccccccccccccccccccccccccccccccccccccaacccaaaaaacjjjrrrtttxxxEzzzzyyyvvvrrnnneeecccccc
abcaaaaacccccccaaaaaaccaaaacccccccccccccccaaaaaaaaacccccccccccccaaccccccccccccccccccccccccccccaaccccccccccaaccccacaaaacaaaaaaajjjrrrtttxxxxxyyyyyvvvrrrnnnfffcccccc
abcaacccccccaaaaaaaacccaaaaccccccccccccccccaaaaaaaaaaccccccccccccccccccccccccccccccccccccccaaaaaccccccccccaaccccaaaaaaaaaaaaaajjjqqqttttxxxxyyyyyyvvrrrnnnfffcccccc
abccccccccccaaaaaaaaaccccccccccccccccccccaaaaaaaaaaaaacccccccccccccccccaacccccccccccccccccccaaaaaccccccaacaaaaaccaaaacaaaaaaaacjjjqqqqttttxxyywyyyywvrrnnnfffcccccc
abccccccccccaaaaaaaaaacccccccccccccccccccaaaaaaaaacaaacccccccccccccaaacaacccccccccccccccccccaaaaaccccccaaaaaaaaccaaaaccccaaacccjjjjqqqqtttxwywwwyywwwrrnnnfffcccccc
abcccccccccccccaaaaaaacccccccccccccccccccaaaaaaaaaaaaaaaacccccccccccaaaaaccccccccccccccccccaaaaacccaaccccaaaaccccaacaacccaaaccccjjjiqqqtttwwywwwwwwwwrrroofffcccccc
abcccccccccccccaaaccccccccccccccccccccccaaaaaaaaaaaaaaaaaccccccccccccaaaaaacccccccccccccccccccaaacaaaccccaaaaaccccccccccccccccccciiiiqqqttwwwwwswwwwrrrroofffcccccc
abcccccccccccccaaccccccccccccaaaacccccccaaaaaaaaccaaaaacccccccccccccaaaaaaacccccccccccccccccccaaaaaaacccaaacaacccccaaaaacccccccccciiiqqqttwwwwsssssrrrrroofffaccccc
abcccccccccccccccccccccccccccaaaaccccccccacaaacccaaaaaaccccccaaccccaaaaaaccccccccaacaaccccccccaaaaaaccccaaaacacccccaaaaacccccccccciiiqqqtsswsssssssrrrrooofffaccccc
abcccccccccccccccccccccccccccaaaaccccccccccaaaccaaaaaaaccccccaaaaccaacaaaccccccccaaaaacccccccccaaaaaaaaccaaacacccccaaaaaacccccccccciiqqqssssssspposrrroooofffaccccc
abccccaaacccccccccccccccccccccaaacccccccccccccccaaacaaaccccaaaaaacccccaaaccccccccaaaaaacccccccaaaaaaaaaaaaaaaaaccccaaaaaaccccccaccciiiqqpsssssppppooooooogffaaccccc
abccccaaaaaacccaaaccccccccccccccccccccccccccccccccccccaccccaaaaacccccccccccccccccaaaaaaccccccaaaaaaaaaaaaaaaaaaccccaaaaaacccaaaaccciiiqqppppppppppoooooogggfaaacccc
abcccaaaaaaacccaaaccccccccccccccccccccccccccccccccccccccccccaaaaaccccccccccccccccaaaaaaccccccaaacaaaccccaaaaaacccccccaacccccaaaaaacciiipppppppphgggggggggggaaaacccc
abccaaaaaaaacccaaacaaacccccccccccccccccccccaacccccccccccccccaacaacccccaacccccccccccaaacccccccccccaaacccccaaaaacccccccccccccccaaaaacciiihppppphhhhgggggggggaaccccccc
abccaaaaaaacaaaaaaaaaacccccccccccccccccccccaaaccccccacccccccccccccccccaaccccccccccccccccccccccccaaaaccccaaaaaaccccccccccccccaaaaacccciihhhhhhhhhhgggggggccaaccccccc
abccccaaaaaaaaaaaaaaacccccccccccccccccccaaaaaaaaccccaaacaaaccccccccccaaaaccaaccccccccaacaacccccaaaaaaacccaacccccccccccccccccaacaaccccchhhhhhhhhaaaacccccccccccccccc
abccccaaaaaacaaaaaaaccccccccccccccccccccaaaaaaaaccccaaaaaaaccccccccccaaaaaaaacaccccccaaaaaccccccaaaaacccccccccccccccccccccccccccccccccchhhhhhacaaaaaccccccccccccccc
abccccaaccccccaaaaaacccccccccccccaaccccccaaaaaacccccaaaaaaccccccaaaaaaaaaaaaaaaccccccaaaaaacccaaaaaaacccccccccccccccccccccccccccccccccccccaaaaccaaacccccccccccaaaca
abccccccccccccaaaaaaaccccccccccccaaccccccaaaaaacccaaaaaaaaccccccaaaaaaaaaaaaaacccccccaaaaaacccaaaaaaaaccccccaaacccccccccccccccccccccccccccaaaaccccccccccccccccaaaaa
abccaaacccccccaaacaaacccccccccaaaaaaaacccaaaaaacccaaaaaaaaacccccaaaaaaaaaaaaaacccccccaaaaaccccaaaaaaaaccccccaaaaccccccccccccccccccccccccccaaaccccccccccccccccccaaaa
abcaaaacccccccaaccccccccccccccaaaaaaaacccaaccaacccaaaaaaaaaaccccccccaaaaaaacaacccccccccaaaccccccaaacaaccccccaaaacccccccccccccccccccccccccccccccccccccccccccccaaaaaa

View File

@@ -0,0 +1,3 @@
A Y
B X
C Z

76
src/2022/day2/index.ts Normal file
View File

@@ -0,0 +1,76 @@
import * as fs from 'fs';
import path from 'path';
import {readFile, sum} from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
const roll = (line) => {
const [opp, me] = line.split(" ");
if(opp === "A"){
if(me === "X") return 3 + 1;
if(me === "Y") return 6 + 2;
if(me === "Z") return 0 + 3;
}
if(opp === "B"){
if(me === "X") return 0 + 1;
if(me === "Y") return 3 + 2;
if(me === "Z") return 6 + 3;
}
if(opp === "C"){
if(me === "X") return 6 + 1;
if(me === "Y") return 0 + 2;
if(me === "Z") return 3 + 3;
}
}
const day1 = input.split("\n").map(roll).reduce(sum);
console.log("Day1:", day1);
const getWin = (opp) => {
if(opp === "A") return "Y";
else if(opp === "B") return "Z";
else if(opp === "C") return "X";
}
const getDraw = (opp) => {
//console.log(" Draw", opp)
if(opp === "A") return "X";
//console.log(" fuckmeee")
if(opp === "B") return "Y";
else if(opp === "C") return "Z";
}
const getLose = (opp) => {
// console.log(" verlies dan", opp)
if(opp === "A") return "Z";
if(opp === "B") return "X";
if(opp === "C") return "Y";
}
// X lose, Y draw, Z win
const roll2 = (line) => {
const [opp, res] = line.split(" ");
//console.log(opp, res)
let me, points = 0;
if(res === "Z"){ me = getWin(opp); points = 6;}
else if(res === "Y"){ me = getDraw(opp); points = 3;}
else if(res === "X"){ me = getLose(opp); points = 0;}
// console.log(me, points);
if(me === "X") points = points + 1;
if(me === "Y") points = points + 2;
if(me === "Z") points = points + 3;
// console.log(points)
return points;
}
const day2 = input.split("\n").map(roll2).reduce(sum);
console.log("Day2:", day2);

2500
src/2022/day2/input.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,6 @@
vJrwpWtwJgWrhcsFMMfFFhFp
jqHRNqRjqzjGDLGLrsFMfFZSrLrFZsSL
PmmdzqPrVvPwwTWBwg
wMqvLMZHhHMvwLHjbvcjnnSBnvTQFn
ttgJtRGJQctTZtZT
CrZsJsPPZsGzwwsLwLmpwMDw

30
src/2022/day3/index.ts Normal file
View File

@@ -0,0 +1,30 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
const day1 = input.split("\n")
.map(line => {
const first = line.substring(0, line.length / 2).split('')
const second = line.substring(line.length / 2).split('')
const both = first.filter(ch => second.includes(ch))[0];
const ascii = both.charCodeAt(0);
return ascii > 96 ? ascii - 96 : (ascii - 64 + 26);
}).reduce(sum);
console.log("Day1:", day1)
const day2 = input.split("\n")
.reduce((a, b, c) => {
if (c % 3 === 0) a.push([]);
a[a.length - 1].push(b);
return a;
}, []).map(group => {
const badge = group[0].split('').filter(ch => group[1].includes(ch) && group[2].includes(ch))[0];
const ascii = badge.charCodeAt(0);
return ascii > 96 ? ascii - 96 : (ascii - 64 + 26);
}).reduce(sum);
console.log("Day2:", day2);

300
src/2022/day3/input.txt Normal file
View File

@@ -0,0 +1,300 @@
DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb
rNJMNNbrHrtjHLHjvwtg
fNbNzZdrZnMnMPnQShFPDmnqFm
QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq
mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp
MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW
gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL
CdgpzdgpgnfThHfFRwhfRf
SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ
JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd
tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw
CTGGRftfSGtGTGDLbFchSgSWWWcM
QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC
SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn
LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr
jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ
ZnJHRncHHgnrsrZffTdMdMBfmMvfvR
NWWPnZrVHrZPCDDQtzDCPLCq
jpFjvBZhDFHZdwcmslcslBLLNl
dVtTVVCzzfrrMPNLLcnVcPLRns
CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp
JjJqMctnhtDZDQtf
TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB
HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv
cMfFcMFcrqgJLFZdrTDdthPGsGmtGs
WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld
bWHBjWVzpbRzbmScqgZMFcqf
RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb
ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf
QQpzFrHHQnzHvfTcNshcLRNFJhcR
QrPQDrppBQmCmFQm
TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC
TVHTfzWsfftsZstnbvrbWbrbppPbrmmP
BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV
TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd
jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw
SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB
PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf
pnnhhvphGVpvRPnJlSFRNNJHZHSdSR
hbmDDmwnnVGbhmjNrrWwLNLsWBrw
dMrgvcQqdjlBLlfW
HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ
RwtvdPRvSlTQmHHBQBRL
FjVSjrsFVnFQnTHmnT
VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv
fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ
sWtGCWtpcqqpNnQjjzhVTTVQczhj
tWBGntsCNlqrWswDRfFrbFrPDbPf
dmzmjcbQjjQztFNqsqBcMJqNPF
nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq
wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz
RWZdHvRdBRGbbvCjJnbn
pqqpSwzpSSbCwPwjlwjl
gDzzqSVzqrThpDBtRtCZdQRQLrQQ
GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW
LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD
QznFnLZFvVvHRgsddG
BBHBfBHFdSltmWJvqtNtHq
TQDrrVMzVDnWnNZDJc
gWzprTCrCMQzGGjjhwFwdffjfl
LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm
DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq
gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF
sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb
nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq
hFvvgFcFVzphpTrrwZDp
qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ
jWHPZWWjZsCmCWRDmQ
PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV
RnRsFFdSzmgwvQsqwc
lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ
GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj
VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr
ncnNbGMcPpvHFrssdBHM
cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR
pFWmSSFGQlvTbwWTwH
jdBgNhRgMftNBhPbhHnZHlTTZcwZ
lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG
GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm
pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr
psSsBptpCBdjtcjNVcGG
sssppsmchwspFLtvHhQJMtFb
rRLDqRVLNSMvFSSV
WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc
MtPbwvzzVtzfsqGGVpdSjsLd
DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj
CFRFRFHgDRnRgMtfFvvwzwvwvzWv
PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD
trHSrdTtslWrSWmfzgmMnfBzmn
JsrQsJHHlsVqTjjpbbNnQNNpGG
sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW
DMSfSbHLHbSDBBzLNvccWRcddvPjNj
FSwHfTFdFsmJlnTTmV
FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN
jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ
lRMpBlPmSFRTcvZv
TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL
jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL
SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz
BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR
JtSsSzJssQJJWjRZzgLnDgqLPZgzbg
dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp
zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR
VPVsZMNTLsMvPsmBJhllFpFBTJFQpl
sZtsNsZtdZgjbwggjnbvqr
QpTvrphmDvvddfcJJHTTncMlMG
bRZZPRwjgzzlSSjGlnlSJS
BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF
FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg
WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR
JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP
NfjFNNZPDQVJVWpCbQpJ
lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS
mBTRRmGccRtBwDbrGPbrMMrF
VVQqlsGrVsMWBNFNMQHF
TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd
jzjDgZzjntGJZzCnhrrSlPVsJslpslPq
dVhpjGPdjHhqHgtHJJ
sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT
nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd
wqJCjqChmwMLmMmprNgG
DNTtdsdWcHdNspGQggnrgLnQpc
SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj
VstwZCwslBZQDBjfDDBDfS
rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD
rPFLRLmFvvLvHvTCtqsVVwldGZGPGV
SNZDJGfvwgMgfgmLmLcmBqgWgQWr
hPnPTnVGsPRqLWpTmQqQ
tsbnFhhjhSdGJNCjSf
QSbGgBjfTCMWFNPFFtDghPrP
JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF
zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ
gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv
GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv
sZGPgssMqHZpPptmCcpCrP
CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp
SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl
tVgSvqVbnqDdgQzMQMGMmzthCw
mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF
WnhZsrJhTnWrgZdZgHNLcLtt
hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ
BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh
fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ
WbLnCZnvprpmZrGd
gjMzTGBjWFBCCSSrBC
bddJJndbdJfwPPthrrSSSsFSSg
NJHbZbbvvWGgjWgT
dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn
CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm
TCrTNSScPlplpHrQrQ
lqrCvhWFvMGWgfHPgLfjfdgG
zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf
mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF
mpfNshshflNthWfJCBBdmnQbQBZQdn
VFVRccgGTqTrHTbWBFjJBCFFJCCQ
PvTDHqHqPPGVqqhwfNlWlDhMltlh
HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq
TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts
bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV
sPJFDsSsVLgHjLHPbj
vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL
ChhCCCWTWnnmvmGtztStzScwrcVcFW
NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt
McpmWccMWHZPcLstbt
MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg
hsnnhhLljLPTmZwvdZdZjmmz
RQNNDpNMSZwvsmqstN
QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ
TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR
HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj
VMJJdnMPrMGVrzvCZwZWCzCt
CcQnBBCfBvRzDlsS
PdbPPCbhGGpDSDlDDhvDJl
HmHWPWdbHnCwCHCr
JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw
zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT
bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ
QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf
SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj
WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt
tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC
FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr
SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl
sjzPjLphMSrlppSp
fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm
MVcFGTFtqjsJLjjtCd
jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg
LSLBMBWsbBBCgfdrFd
ShbbzdzQRNNNVhDN
JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh
ZPfQPjZZrffQZszhzTnVGBvntsNz
rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc
cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP
bQwsMTswwVjdZMVRJM
vGWCTDCTQvvtlvQQ
mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB
VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB
FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp
rWWppSStfRBLfHPdHHDzlldZ
QrTnQmmVCqvrvJvzJZPHvzHsDs
qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW
SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg
ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL
rpJJdHZJdZHQSRJbSfVhww
jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb
VmrqszVmgCWWggbPGclPlZbcZCbf
JdrTmVTVsqsRJHvQnnhwhBLH
vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf
tJDGbZHbjRHNrrBj
DnMnzGJJwtzVSzzBzTBSTF
hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq
HjjzcRTnpGVSGGFWHH
pssmjctLzpsRRnhlQbPfPrgDbZls
FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv
pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz
njtpHZnLLQGhTtTWSSSh
NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf
mqRqLFZRVFbtgBSCbGWWHp
LZZRmQhVLLFzZdTQPndPNTTnQW
CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG
DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt
TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr
ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD
LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr
WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT
tGWqthqGVdzBWwdd
BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg
JnNmrHHNrCGBPPnGGc
wvFvZBmppBdSLcvshcLrgl
bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL
TqHHjQnbHTbbmZBBcFMpmBwn
ZFCqSlCPdCRTLWWTQQLLQS
GjggHcvsggHVTVBLnlcpBQ
hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf
cgRwVfVzrgqqwZctTztFMFMTCdPmmF
bWJsSJHpTDRDTWMC
sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr
ttgVBtMbttngmHJVpzlzZlppzw
cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT
sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd
gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB
RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq
NFMRRpHPgzszGppG
WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt
ppDMpdMfSfSSNtlwqbqwwq
dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ
jrqRqfNNhrVvcTVdpTscpd
tGWBlLggWGddTspZZd
JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH
GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF
nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj
SQQHSttRqggmlVsNcvWdRvbWPN
WLNLCWLsSJgHFrSHrM
gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR
dmmzzqZdDqqTLLwjgZgNljws
TCqsDHssmDsDGVGlVcMccGDV
FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN
PpbLLmpgbRzqpCHwChQqwh
lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ
ScCLzdCZdbLSbFdFqvDDdGMQGQ
bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV
GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ
STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR
DzSvzstnszMnjQcqggjPqQBcqq
BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp
mnrJVmRhhvJVcHtsGHMCnZCPZM
bvSmVbRhbgmmSJflzNLrzqzfWfqBWr
qsZLqqFNhfrGnJFv
DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM
lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL
ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj
qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt
vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV
PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW
hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc
dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP
pcphpdrWDmTgHWMtRWqHRVVH
SbGcGGQnvNQGvsjBtVHBLjvqVPVB
lzbQCzbZllSzQslpCJpJJDggcggfDT
ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq
QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc
ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC
NBnrNHQHBscvhfBM
bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS
WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr
lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd
pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd
mDTZvTqtDDHttRPcqhQlwgGlghbqBh
DTspTqssqTbdmCMwVmnmlfCD
PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll
RFztFjjqjQFQTbdTbQ
hTFSVSdhMMVMFjjgbthcbzczcg
DvwCJVJWWJDRnfmbDmccfmmgfb
QrJvPGWWnpVMqdZsZpqM
gRLcHbgnfpgpJjlqqp
SFwrTHFBqlZtBPZq
HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL
PpMgDMDnsWSnjBQnrjbn
LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR
FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt

View File

@@ -0,0 +1,9 @@
[D]
[N] [C]
[Z] [M] [P]
1 2 3
move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

27
src/2022/day4/index.ts Normal file
View File

@@ -0,0 +1,27 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let start, elapsed;
start = process.hrtime.bigint();
const day1 = input.split('\n').filter(row => {
const [firstElf, secondElf] = row.split(',').map(elf => elf.split('-').map(Number));
return (firstElf[0] - secondElf[0] >= 0 && secondElf[1] - firstElf[1] >= 0) || (secondElf[0] - firstElf[0] >= 0 && firstElf[1] - secondElf[1] >= 0);
}).length;
elapsed = (process.hrtime.bigint() - start) / BigInt(1000);
console.log(`Day1: ${day1} - calculated in ${elapsed}μs`)
start = process.hrtime.bigint();
const day2 = input.split('\n').filter(row => {
const [firstElf, secondElf] = row.split(',').map(elf => elf.split('-').map(Number));
return (firstElf[1] >= secondElf[0] && secondElf[1] >= firstElf[0]);
}).length;
elapsed = (process.hrtime.bigint() - start) / BigInt(1000);
console.log(`Day2: ${day2} - calculated in ${elapsed}μs`)

1000
src/2022/day4/input.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,9 @@
[D]
[N] [C]
[Z] [M] [P]
1 2 3
move 1 from 2 to 1
move 3 from 1 to 3
move 2 from 2 to 1
move 1 from 1 to 2

46
src/2022/day5/index.ts Normal file
View File

@@ -0,0 +1,46 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let start, elapsed;
start = process.hrtime.bigint();
const [stack, rules] = input.split('\n\n').map(entry => entry.split('\n'))
let stackInput = stack[stack.length - 1].split(' ').map(idx => idx.split(" ").join("")).map(idx => []);
const indexes = stackInput.map((arr, idx) => stack[stack.length - 1].indexOf(idx + 1).toString()).map(Number);
for (let idx = stack.length - 2; idx >= 0; idx--) {
for (let idx2 = 0; idx2 < indexes.length; idx2++) {
const char = stack[idx][indexes[idx2]];
if (char !== ' ') stackInput[idx2].push(char);
}
}
let stackInputPart2: any[] = JSON.parse(JSON.stringify(stackInput));
for (let idx = 0; idx < rules.length; idx++) {
const [move, from, to] = rules[idx].split(' ').filter(el => !isNaN(Number(el))).map(Number);
for (let num = 0; num < move; num++) stackInput[to - 1].push(stackInput[from - 1].pop());
}
const part1 = stackInput.map(buck => buck[buck.length - 1]).join("");
console.log("Part1:", part1);
elapsed = process.hrtime.bigint() - start;
for (let idx = 0; idx < rules.length; idx++) {
const [move, from, to] = rules[idx].split(' ').filter(el => !isNaN(Number(el))).map(Number);
let cratemover9001: any[] = [];
for (let num = 0; num < move; num++) cratemover9001.push(stackInputPart2[from - 1].pop());
stackInputPart2[to - 1] = stackInputPart2[to - 1].concat(cratemover9001.reverse());
}
const part2 = stackInputPart2.map(buck => buck[buck.length - 1]).join("");
console.log("Part2:", part2);

513
src/2022/day5/input.txt Normal file
View File

@@ -0,0 +1,513 @@
[T] [P] [J]
[F] [S] [T] [R] [B]
[V] [M] [H] [S] [F] [R]
[Z] [P] [Q] [B] [S] [W] [P]
[C] [Q] [R] [D] [Z] [N] [H] [Q]
[W] [B] [T] [F] [L] [T] [M] [F] [T]
[S] [R] [Z] [V] [G] [R] [Q] [N] [Z]
[Q] [Q] [B] [D] [J] [W] [H] [R] [J]
1 2 3 4 5 6 7 8 9
move 3 from 8 to 2
move 3 from 1 to 5
move 3 from 1 to 4
move 2 from 7 to 4
move 3 from 7 to 4
move 8 from 5 to 7
move 2 from 1 to 8
move 7 from 3 to 2
move 1 from 5 to 2
move 1 from 6 to 7
move 2 from 5 to 9
move 1 from 9 to 1
move 3 from 9 to 6
move 5 from 6 to 2
move 10 from 7 to 2
move 3 from 8 to 9
move 7 from 9 to 2
move 1 from 1 to 2
move 1 from 9 to 6
move 1 from 4 to 1
move 1 from 8 to 2
move 11 from 4 to 2
move 1 from 7 to 9
move 1 from 4 to 6
move 1 from 9 to 7
move 1 from 1 to 3
move 1 from 7 to 5
move 1 from 4 to 9
move 1 from 5 to 2
move 1 from 3 to 8
move 1 from 6 to 9
move 1 from 8 to 6
move 11 from 2 to 1
move 1 from 6 to 8
move 7 from 2 to 1
move 14 from 2 to 7
move 1 from 6 to 3
move 1 from 8 to 2
move 1 from 3 to 9
move 7 from 7 to 1
move 1 from 6 to 5
move 5 from 7 to 6
move 4 from 2 to 8
move 3 from 6 to 7
move 3 from 7 to 8
move 9 from 1 to 3
move 8 from 3 to 7
move 1 from 3 to 1
move 2 from 2 to 3
move 1 from 6 to 7
move 2 from 1 to 7
move 7 from 1 to 6
move 1 from 3 to 5
move 2 from 5 to 3
move 7 from 6 to 3
move 9 from 7 to 5
move 1 from 9 to 1
move 4 from 8 to 5
move 7 from 1 to 5
move 4 from 7 to 2
move 1 from 7 to 8
move 1 from 6 to 4
move 10 from 5 to 3
move 8 from 5 to 1
move 2 from 8 to 3
move 2 from 8 to 9
move 8 from 2 to 7
move 4 from 9 to 8
move 13 from 3 to 7
move 1 from 5 to 3
move 6 from 3 to 9
move 10 from 1 to 9
move 1 from 3 to 4
move 6 from 9 to 7
move 1 from 5 to 8
move 14 from 7 to 6
move 14 from 6 to 1
move 13 from 1 to 8
move 1 from 1 to 2
move 9 from 8 to 9
move 6 from 8 to 5
move 2 from 4 to 6
move 1 from 8 to 1
move 2 from 2 to 1
move 2 from 8 to 6
move 3 from 1 to 2
move 3 from 3 to 9
move 16 from 9 to 1
move 3 from 2 to 4
move 3 from 7 to 2
move 6 from 5 to 4
move 5 from 7 to 3
move 4 from 6 to 1
move 10 from 2 to 9
move 13 from 9 to 1
move 5 from 7 to 2
move 2 from 4 to 6
move 1 from 9 to 1
move 2 from 9 to 5
move 2 from 6 to 8
move 2 from 5 to 3
move 1 from 8 to 3
move 31 from 1 to 7
move 2 from 1 to 5
move 12 from 7 to 3
move 11 from 3 to 2
move 1 from 8 to 4
move 6 from 4 to 5
move 1 from 3 to 4
move 8 from 3 to 2
move 5 from 5 to 6
move 2 from 6 to 7
move 4 from 7 to 3
move 1 from 6 to 9
move 13 from 7 to 6
move 13 from 2 to 3
move 1 from 4 to 8
move 10 from 2 to 3
move 3 from 7 to 3
move 2 from 2 to 1
move 1 from 8 to 2
move 2 from 4 to 7
move 1 from 9 to 2
move 3 from 7 to 3
move 1 from 5 to 1
move 2 from 5 to 2
move 15 from 6 to 7
move 4 from 1 to 9
move 22 from 3 to 9
move 7 from 3 to 9
move 4 from 3 to 8
move 4 from 9 to 4
move 3 from 2 to 4
move 5 from 7 to 1
move 7 from 4 to 7
move 2 from 8 to 4
move 1 from 4 to 8
move 3 from 1 to 5
move 2 from 1 to 4
move 1 from 2 to 9
move 2 from 5 to 7
move 1 from 5 to 9
move 3 from 8 to 6
move 8 from 7 to 1
move 6 from 7 to 1
move 10 from 1 to 9
move 3 from 6 to 2
move 2 from 1 to 3
move 2 from 3 to 6
move 3 from 7 to 4
move 2 from 7 to 1
move 1 from 2 to 5
move 13 from 9 to 5
move 12 from 9 to 3
move 6 from 5 to 3
move 2 from 9 to 1
move 11 from 9 to 3
move 1 from 4 to 6
move 2 from 5 to 3
move 1 from 1 to 8
move 24 from 3 to 5
move 2 from 9 to 3
move 2 from 2 to 4
move 1 from 9 to 2
move 2 from 6 to 8
move 5 from 3 to 5
move 2 from 8 to 9
move 1 from 9 to 8
move 4 from 1 to 4
move 1 from 9 to 4
move 1 from 8 to 4
move 1 from 8 to 4
move 7 from 4 to 5
move 1 from 1 to 8
move 1 from 6 to 5
move 35 from 5 to 4
move 18 from 4 to 3
move 6 from 4 to 3
move 8 from 5 to 8
move 8 from 8 to 1
move 2 from 4 to 9
move 23 from 3 to 1
move 1 from 8 to 5
move 1 from 9 to 1
move 1 from 5 to 1
move 1 from 9 to 4
move 11 from 1 to 2
move 16 from 4 to 5
move 3 from 3 to 5
move 9 from 2 to 5
move 1 from 4 to 1
move 2 from 2 to 6
move 1 from 2 to 9
move 1 from 6 to 2
move 1 from 3 to 5
move 1 from 3 to 9
move 1 from 2 to 9
move 23 from 1 to 5
move 1 from 6 to 9
move 1 from 9 to 8
move 27 from 5 to 1
move 1 from 9 to 3
move 18 from 5 to 8
move 6 from 5 to 7
move 1 from 5 to 6
move 1 from 9 to 8
move 12 from 8 to 3
move 1 from 1 to 4
move 6 from 7 to 8
move 1 from 6 to 3
move 1 from 4 to 2
move 2 from 1 to 8
move 1 from 2 to 9
move 8 from 3 to 2
move 2 from 9 to 7
move 5 from 2 to 7
move 7 from 7 to 2
move 2 from 8 to 2
move 3 from 1 to 9
move 5 from 1 to 2
move 3 from 9 to 8
move 3 from 8 to 7
move 5 from 2 to 5
move 2 from 7 to 6
move 12 from 8 to 9
move 12 from 1 to 4
move 9 from 9 to 3
move 4 from 5 to 8
move 12 from 3 to 8
move 1 from 7 to 9
move 3 from 9 to 2
move 1 from 4 to 7
move 3 from 1 to 7
move 7 from 4 to 6
move 3 from 6 to 2
move 2 from 7 to 9
move 18 from 8 to 1
move 2 from 4 to 7
move 1 from 2 to 8
move 1 from 8 to 2
move 10 from 2 to 3
move 3 from 9 to 8
move 2 from 6 to 7
move 13 from 3 to 1
move 2 from 8 to 9
move 28 from 1 to 8
move 1 from 5 to 2
move 1 from 4 to 3
move 4 from 7 to 6
move 5 from 6 to 7
move 7 from 2 to 6
move 1 from 9 to 6
move 2 from 2 to 4
move 1 from 9 to 1
move 4 from 1 to 2
move 3 from 2 to 5
move 3 from 4 to 9
move 3 from 5 to 7
move 1 from 1 to 4
move 6 from 7 to 6
move 1 from 2 to 6
move 1 from 4 to 1
move 1 from 1 to 8
move 3 from 9 to 4
move 18 from 6 to 3
move 4 from 3 to 6
move 1 from 7 to 9
move 1 from 6 to 9
move 2 from 3 to 6
move 1 from 9 to 6
move 1 from 9 to 2
move 6 from 6 to 8
move 3 from 4 to 7
move 2 from 7 to 2
move 35 from 8 to 7
move 3 from 3 to 1
move 26 from 7 to 2
move 10 from 3 to 9
move 6 from 9 to 4
move 3 from 1 to 2
move 1 from 4 to 3
move 4 from 4 to 1
move 1 from 3 to 6
move 1 from 8 to 3
move 1 from 6 to 2
move 1 from 3 to 2
move 13 from 7 to 3
move 3 from 1 to 4
move 4 from 3 to 1
move 3 from 1 to 9
move 2 from 1 to 9
move 10 from 2 to 9
move 19 from 2 to 9
move 6 from 3 to 9
move 2 from 3 to 4
move 2 from 2 to 6
move 17 from 9 to 8
move 1 from 2 to 8
move 2 from 9 to 3
move 2 from 6 to 7
move 8 from 9 to 3
move 5 from 4 to 5
move 14 from 9 to 4
move 1 from 2 to 3
move 1 from 7 to 2
move 2 from 9 to 3
move 1 from 2 to 7
move 5 from 5 to 1
move 1 from 2 to 1
move 1 from 3 to 1
move 1 from 9 to 7
move 3 from 7 to 2
move 3 from 3 to 7
move 1 from 2 to 4
move 1 from 3 to 8
move 1 from 2 to 4
move 4 from 3 to 4
move 16 from 8 to 9
move 3 from 1 to 4
move 21 from 4 to 6
move 1 from 7 to 2
move 1 from 8 to 2
move 1 from 1 to 3
move 6 from 6 to 7
move 3 from 1 to 9
move 3 from 7 to 3
move 1 from 4 to 6
move 1 from 4 to 7
move 2 from 2 to 6
move 1 from 8 to 6
move 13 from 6 to 7
move 1 from 2 to 3
move 15 from 9 to 8
move 6 from 6 to 3
move 13 from 8 to 3
move 4 from 9 to 4
move 5 from 4 to 8
move 19 from 3 to 9
move 3 from 3 to 1
move 5 from 8 to 9
move 17 from 9 to 7
move 1 from 1 to 8
move 4 from 9 to 6
move 3 from 3 to 8
move 1 from 1 to 2
move 3 from 3 to 1
move 36 from 7 to 6
move 1 from 1 to 2
move 7 from 8 to 2
move 24 from 6 to 5
move 2 from 6 to 7
move 1 from 3 to 2
move 4 from 6 to 8
move 19 from 5 to 1
move 8 from 6 to 4
move 7 from 2 to 5
move 3 from 2 to 8
move 15 from 1 to 6
move 2 from 9 to 5
move 2 from 7 to 8
move 3 from 4 to 1
move 4 from 5 to 6
move 1 from 9 to 7
move 1 from 8 to 3
move 3 from 6 to 1
move 2 from 4 to 7
move 13 from 1 to 8
move 1 from 3 to 7
move 1 from 4 to 5
move 19 from 8 to 6
move 1 from 7 to 3
move 8 from 5 to 8
move 1 from 6 to 8
move 3 from 5 to 9
move 1 from 6 to 4
move 3 from 4 to 7
move 1 from 3 to 9
move 4 from 7 to 9
move 20 from 6 to 3
move 1 from 8 to 4
move 2 from 9 to 4
move 2 from 9 to 2
move 2 from 9 to 3
move 13 from 6 to 9
move 9 from 9 to 8
move 2 from 6 to 3
move 8 from 8 to 2
move 2 from 7 to 3
move 5 from 9 to 3
move 12 from 3 to 5
move 1 from 4 to 7
move 8 from 2 to 4
move 8 from 4 to 7
move 2 from 2 to 6
move 2 from 8 to 9
move 2 from 6 to 8
move 2 from 9 to 6
move 2 from 6 to 9
move 2 from 4 to 8
move 2 from 9 to 2
move 6 from 3 to 1
move 2 from 2 to 9
move 3 from 9 to 3
move 8 from 7 to 2
move 6 from 1 to 2
move 8 from 3 to 8
move 1 from 7 to 3
move 5 from 3 to 8
move 6 from 2 to 7
move 3 from 7 to 6
move 2 from 7 to 9
move 1 from 7 to 8
move 8 from 5 to 7
move 7 from 2 to 1
move 7 from 1 to 6
move 7 from 7 to 9
move 1 from 7 to 6
move 2 from 3 to 9
move 2 from 8 to 5
move 25 from 8 to 5
move 5 from 5 to 1
move 1 from 6 to 4
move 17 from 5 to 4
move 5 from 5 to 4
move 23 from 4 to 7
move 2 from 5 to 2
move 4 from 6 to 3
move 6 from 3 to 7
move 1 from 5 to 2
move 1 from 1 to 7
move 2 from 2 to 8
move 2 from 2 to 9
move 1 from 5 to 7
move 4 from 1 to 6
move 2 from 8 to 3
move 2 from 9 to 4
move 1 from 4 to 8
move 7 from 9 to 1
move 2 from 3 to 5
move 28 from 7 to 4
move 4 from 6 to 2
move 2 from 6 to 2
move 3 from 7 to 4
move 2 from 5 to 6
move 4 from 2 to 6
move 9 from 6 to 5
move 4 from 1 to 7
move 1 from 6 to 2
move 3 from 2 to 3
move 1 from 8 to 6
move 1 from 7 to 4
move 2 from 3 to 4
move 1 from 7 to 4
move 2 from 1 to 6
move 1 from 7 to 9
move 1 from 7 to 9
move 1 from 6 to 2
move 7 from 5 to 8
move 1 from 3 to 9
move 1 from 5 to 2
move 7 from 8 to 7
move 4 from 4 to 8
move 2 from 8 to 4
move 2 from 2 to 7
move 1 from 1 to 7
move 1 from 5 to 6
move 32 from 4 to 7
move 2 from 6 to 5
move 2 from 8 to 2
move 1 from 2 to 1
move 2 from 5 to 4
move 1 from 2 to 5
move 1 from 1 to 4
move 4 from 4 to 3
move 1 from 6 to 4
move 1 from 5 to 4
move 5 from 9 to 1
move 4 from 3 to 5
move 3 from 1 to 6
move 2 from 9 to 5
move 2 from 1 to 3
move 15 from 7 to 1
move 5 from 5 to 3
move 1 from 5 to 2
move 3 from 4 to 5
move 2 from 5 to 9
move 3 from 3 to 6
move 3 from 3 to 4
move 1 from 3 to 8
move 1 from 9 to 3
move 2 from 4 to 9
move 1 from 5 to 3
move 2 from 9 to 6
move 1 from 8 to 1
move 1 from 3 to 2
move 1 from 4 to 9
move 2 from 9 to 3
move 9 from 1 to 3
move 5 from 3 to 4
move 2 from 1 to 3
move 4 from 1 to 5
move 1 from 2 to 8
move 3 from 4 to 9

View File

@@ -0,0 +1 @@
mjqjpqmgbljsphdztnvjfqwrcgsmlb

22
src/2022/day6/index.ts Normal file
View File

@@ -0,0 +1,22 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
const find = (input, size) => {
return input.split('')
.reduce((a, b, c, d) => {
a.push(b);
if (a.length === size) {
if (new Set(a).size === size) {
d.splice(1);
return c + 1;
}
a.shift();
}
return a;
}, []);
}
console.log("Part1:", find(input, 4));
console.log("Part2:", find(input, 14));

1
src/2022/day6/input.txt Normal file
View File

@@ -0,0 +1 @@
bfdbbngnvnsvshhhrvrbrtbrrhqrqgrrmmdfmmqttptltntrntrnrcrdcrrctctdtwtrwwmlltcltcllmpprvvtbbmbvbsvvqwvvscswsqqgzqqppvzppnddjwddlrdlllmwllfccdfccswwrhhndhdhfdftdfdcdcllcjjbsbgssvlvrrhfrfjfpjffvnfvfwfzftztwwrhwrhwhwddpjjmhmgmsssstzszqzfqzzprpzpnndttphtpphvvcpcjppdtdwwqgwwwnhwnnvhvsvqqtrrbsscwssgwglgwlldjdzjjbsjbsbvvpbvppvfvqvbqbzzwtwbwpbbbcffdgggpnpfptpfphfhfthfthffzrrbzbcblbmmzmhhnvvqvlvwvzvtztgzznbbcqbccwhcwcnwnhndhhgcghhlthllplvppgngrgsswfsfnfjjswstsrtrhthhqzqggdtggzvvjljddqdzzrmrjmjcmjmrrwlldttrhhfjjgbglgjlldrllppnwpnwnndrddtdqdhhpccbgcgzzswzztgzzrwwzzmtztvvrtrgttvddwvwvmwvmmdjdrdtthqhgqhggldgdfdnnzjnjffmrrnprnpnssjrrbrjjrrzvrvhvllfvlvnlvvhlhrhzrzrsrswrssjvjdjfjwwjmjvjjthhnjnmnppsccmlcclfclcbllldwldwdlwddbddmnmrmgrmmtsszgssqjsqscswwzmwmbwwvqqbtbtwwpbbwdbdbhhqmqgqddflfmfnmffbtfbbsdsffspsjpsspzszccrsrstrtjrjppcrrpqqvttsbbjtbjjpbbccmzznvvzzvnvmmwmhmvmsstlssqtssvggtbgttgvtggfhggbcgcmcrmcmhhbttdlttfrfprrvttrtggcpplccqggcwwdjjjplprrbsrbbjsjbbfhbhphtttpffdgdgjddzldzlzplpnplljttdqqlmlllhzhjhccpwcwhwwbbqtqffjpfpfpjptplltbtzbbwwvggpcpprdprpbpvvgzgczzfffzcfzccjffrmrhmrhhchvhddsvswscsnnpfppdrdcrdrgdgmdgmgllhggjwggvqvmmvrrzpprhhqfhfvffvlvnlngnffbbtccfbfhfwhhhhwcwzwjjbffvrffqrrnsnwswrsrvrjvrvprpsptspttbztzfzlfzlflcflclqlplglmlqqvlvvhccmmddqvqzvvmlllvnlnhnfnwnlndnntrrhvvgjjnpnggfqgqdqqzvvclvclvlfvlvvlzlssqffmrfmfmjjczcmmmnttnfnmfnmmmhmggjgdjjqmjjvsslszlzrrpdpcpfcpfpnpssvtsvtvllbttzzljzzhrrnsnddjgdjgjljzzvhvddmdvvdtdmmpmqmnnwcwfwbfwwsvvbpvvgvnvcvdvtvrrcppwbppcqpccwqqzmqmmzczppwbbrzrjzzcrcvrrpttrjjcdjcjfcclscstthqhfqhffdcfdfqdqldddsswbblppdmdnnjvvhwvhvjhvjhjhlhcclrrcqcgcjgcjjtbtctbcbsccfwwltlrlplpfpjphplhhgtghhrppwhhrprwpwhhdqdpdwpwwtccvncvvvrpvphpssfpplcczttltgltldlmlqmmbsszdszznpprsprsprsppsbppjddjhhnrrfsrffmlmglgmlglccddpssdpsddhhfmfsfrfsfnnlggfrgghmgmrmprmprrnvrnnbqnqddhhfwfmfwfmfpfdfzdzppsbpsbpprfrvvwvtwtltvlttrhhgvhhjttmssdggnzzvmvcczmzbzwzttvtpvpcphcctmmhshjsjbssglsglgtltslscchhhsjjpljjdtdsdpppptlpprmppwdppglgmggnddztdzddzppswwmhfbpqzffjqgmsntwsnrwqrqwgpwgrbpbjwrhbcdcvqjnwslsnwhglcsjbwjhswjvzssfqgwbbdgbwfrblfmmlmsndhtlbwzfwsspqlncspqbgbnzshbwpvrmjqjzbcbzzdgssbtqdzffjphqjvrspfrjhpspbwcjwbfhqzsdnjwqjzjtjgnbrdbwqhzffphzppvlmsmppqcfjbjbdsnbwtvthwqcfrtfrwchnmqmhnwfcjtbwqwwvlnpmwlrvzwljrljzqstzglqwbzfdftzltlcbvmmfwcjqglvznztwnvzvftpndqmngqswppsnqhdbgthrddfbcfpflpndrhmcqwvnbfztsvnjjdwqgpmvdwvdftgbtvrwbnvvrwsdfzhwbwdhlpzbcqdzhbfqtpjqcmrpvcsrmcwvgghqrclfzpfgnppzmhvdhvdfrcrnjbdcwbftcqjhhfdsnfnwjzjllzzqftzsjrqnsbpjdcswhhmwwdzmvmqcjtqnczjcvzmmqwzjhjpcczgpbmcvbwmpmvnghlrgcmrrdnmjvmvnhtpfpgwgmdfzvlbclzjzwdqqcvfhhgfzdhzpdvfmwjlzzrpdgzmttmvvcplbwfzqftcgcwcgcpgwvnmlqsplpqwfnhwvqtlwcspqdzshsqnlcpqhpcpbwdhdjsmvtbqdwbcrscqfjcrcjhbjbpzbshpbmlcthmbjfwhzfphgbfqfnfztptzvdnwrpslmdtpmzmpbsszqshwdghrbtvhwzhcmpcgfqggpgzwmhhdrlhlvnpzvwwhzqvgvhrzngttcnqgjjhnblncnqnjzlwnmwnrtvwjtnrbhthncwmzwqdbdgtwrncljddnbhmphgjzfrrgmmcwfwjwjlcrhvcdtvsrvsfhmlgmzsgjchhrfmqslmdgtdtrlbhdffddvbsdbdwlwdcmcmmpvzpdtmbthjdzlpwftptpfsggmhjfjwvbwljsfhfwtbfwmczwhbmhvzllqtcqqfbrcdqqsrcpfmnswnfzfqghcmcbqwgvzqpwvvmbpddlhgjgzvgmpljznrhqphwcztqzpnhzqdgpwwclmsgpwnwtvtsjsdmcnvmjbqglttrhbzqdbgwnbsqzmsmztndrtmlpszhzgjbbftbsdwwdrlftrbbnrsqshfhdpdrwmztcqzdjlnthnjhppwntmbqdgzpmfmfnccblsdwljqhjfgtlgvpzpjbsndmwzfwrbmdhpnmbchqlwqtbhhhqqbsfnvscjwrzvjdtvbsqwzvfhwbbjgqpzcwqjdrlfmggzmhbcrhtbqdjntbtqdvmvpqflmccfpnbmnmtqbdflsgczpbsqpfphlzqgvwbjlmsgshrhpcljzdvwvdvlqqwchtjmjgtqjhgwtnddmhphwhvwhtrhfbjjjzfgrcqngnnddctzdzlqjlbdwmjqzccwrvctrzgtzqsswggbqdnplclhtdslcvzhppcjjslnshtwjnbrwdprqhdtfqmqpgfgnqtdnnhrnzfrsqhlftpdslgmmvqhvpjqjwpwgtnmgrbhwntdjftfwtjzjtprctbtsjmqmpcbbtrjvsgqgsfjprqmsmdztbhnbgzldqfzgwqwnnccgcfclctrwqmqpgvfglgsmmpjszqnphnzcnvswpsfsrmnsnlqnpmvfdvdtfgzrdmbftdrrrbfsvzfgmnffvjpcpnndrwhtjjrrvnztlfhcvfqjgfrhtbnhmwnrmwdhzmmtvjmsqmghtbtfjwdnvdcqtqjrfhrwscjftmbgjmcsrbpdpttlmvfmnfjhnptqvggnshzqnlqqdpqqsqssppbwpblhgfrwrblpzwvqphpsgfmbpqtqqpjpgnbblzstgcjhqntgpbfwlzzctqbnbvpgwsdsdldqzhvznqcsrrghpwllshqpdlqnqgzfwrnhwsvhftzplspcbqmclplprlthvwjhdndrjblqdgwvgjlbmblbmcnbzwzdlnpnhhppvrtngvqqwsttgwlvtcqmtrvpbnvcnfqdtqrsrsmhclmtgbdwwdvhwgfcqpmprcpdhqwftcchbwvstcdqrlwtgbcfqfgzprgvpbbzlqfzbqtcrlzscnqpqwtgzbbbdvsvmhggdr

23
src/2022/day7/example.txt Normal file
View File

@@ -0,0 +1,23 @@
$ cd /
$ ls
dir a
14848514 b.txt
8504156 c.dat
dir d
$ cd a
$ ls
dir e
29116 f
2557 g
62596 h.lst
$ cd e
$ ls
584 i
$ cd ..
$ cd ..
$ cd d
$ ls
4060174 j
8033020 d.log
5626152 d.ext
7214296 k

149
src/2022/day7/index.ts Normal file
View File

@@ -0,0 +1,149 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
class ElFile {
public name: string;
public size: number;
constructor(name: string, size: number) {
this.name = name;
this.size = size;
}
}
class NodElf {
public path: string;
public parent?: NodElf;
public children: NodElf[] = [];
public files: ElFile[] = [];
constructor(path: string, parent: NodElf) {
this.path = path;
this.parent = parent;
}
public goTo(arg: string): NodElf | undefined {
if (arg === "..") {
if (this.parent)
return this.parent;
}
if (!(arg in this.getFolders())) {
const newNode = new NodElf(arg, this);
this.children.push(newNode)
return newNode;
}
}
public addFolder(path: string) {
if (!(path in this.getFolders())) {
const newNode = new NodElf(path, this);
this.children.push(newNode)
}
}
public addFile(size: string, name: string) {
if (!(name in this.getFiles())) {
const newFile = new ElFile(name, Number(size));
this.files.push(newFile);
}
}
public getFiles() {
return this.files.map(file => file.name);
}
public getFolders() {
return this.children.map(node => node.path);
}
public getAllFolders() {
return this.children.concat(this.children.flatMap(child => child.getAllFolders()));
}
public getSize(): number {
return this.children.reduce((a, b) => a + b.getSize(), 0) + this.files.reduce((a, b) => a + b.size, 0);
}
}
class ExtendedLeetFilesystem {
public root: NodElf;
public currentDir: NodElf | undefined;
constructor() {
this.root = new NodElf('/', null);
this.currentDir = this.root;
}
public cmd(command: string, arg: string) {
if (command === "cd") {
if (arg === "/" && this.currentDir?.path === "/") return;
this.currentDir = this.currentDir?.goTo(arg);
}
else if (command === "ls") {
//console.log("Print content of", this.currentDir?.path);
}
}
public output(type: string, arg: string) {
if (type === "dir") {
this.currentDir?.addFolder(arg)
}
else {
this.currentDir?.addFile(type, arg);
}
}
public getDirectory(path: string) {
const dirs = path.split("/");
return dirs.reduce((a, b, c) => a, this.currentDir);
}
}
const inputLines = input.split("\n");
let currentFolder = [];
const ELF: ExtendedLeetFilesystem = new ExtendedLeetFilesystem();
for (let idx = 0; idx < inputLines.length; idx++) {
const line = inputLines[idx];
if (line.startsWith("$")) {
const [dollah, cmd, path] = line.split(" ");
ELF.cmd(cmd, path);
}
else {
const [type, arg] = line.split(" ");
ELF.output(type, arg);
}
}
const maxSize = 100000;
const total = ELF.root.getAllFolders().filter(node => node.getSize() < maxSize).map(node => node.getSize()).reduce(sum);
console.log("Part 1", total)
const sizeAvailable = 70000000;
const spaceNeeded = 30000000;
const currentSize = ELF.root.getSize();
const toDelete = spaceNeeded - (sizeAvailable - currentSize);
const total2 = ELF.root.getAllFolders().sort((a, b) => a.getSize() - b.getSize()).filter(node => node.getSize() > toDelete)[0].getSize();
console.log("Part2:", total2);

1105
src/2022/day7/input.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,5 @@
30373
25512
65332
33549
35390

109
src/2022/day8/index.ts Normal file
View File

@@ -0,0 +1,109 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let grid: any[] = [];
input.split("\n").forEach(element => {
const arr = element.split("");
grid.push(arr);
});
const checkVisible = (x: any, y: any) => {
// Check up
const treeVal = grid[y][x];
let stillVisible = true;
for (let it = y - 1; it >= 0; it--) {
if (grid[it][x] >= treeVal) stillVisible = false;
}
if (stillVisible) return true;
stillVisible = true;
for (let it = y + 1; it < grid.length; it++) {
if (grid[it][x] >= treeVal) stillVisible = false;
}
if (stillVisible) return true;
stillVisible = true;
for (let it = x - 1; it >= 0; it--) {
if (grid[y][it] >= treeVal) stillVisible = false;
}
if (stillVisible) return true;
stillVisible = true;
for (let it = x + 1; it < grid.length; it++) {
if (grid[y][it] >= treeVal) stillVisible = false;
}
if (stillVisible) return true;
return false;
}
let counter = 0;
for (let x = 1; x < grid.length - 1; x++) {
for (let y = 1; y < grid.length - 1; y++) {
if (checkVisible(x, y)) counter++;
}
}
const edgeTrees = grid.length * 4 - 4;
console.log("Part 1:", counter + edgeTrees);
const getScenicScore = (x: any, y: any): number => {
// Check up
const treeVal = grid[y][x];
let counter = 0;
let score = 0;
for (let it = y - 1; it >= 0; it--) {
counter++;
if (grid[it][x] >= treeVal) break;
}
score = counter;
counter = 0;
for (let it = y + 1; it < grid.length; it++) {
counter++;
if (grid[it][x] >= treeVal) break;
}
score = score * counter;
counter = 0;
for (let it = x - 1; it >= 0; it--) {
counter++;
if (grid[y][it] >= treeVal) break;
}
score = score * counter;
counter = 0;
for (let it = x + 1; it < grid.length; it++) {
counter++;
if (grid[y][it] >= treeVal) break;
}
return score * counter;
// counter = 0;
// return counter;
}
let scores: number[] = [];
for (let x = 1; x < grid.length - 1; x++) {
for (let y = 1; y < grid.length - 1; y++) {
scores.push(getScenicScore(x,y));
}
}
console.log("Part 2:" , Math.max(...scores));

99
src/2022/day8/input.txt Normal file
View File

@@ -0,0 +1,99 @@
213301311230020143114320444110403320013225525311631030063110421431345121304222223004301412232100001
032203111100043323010213335301511304130605406233153314443635022154110215552041255340234040130323222
211033104233224304235521203100252423434120553365402362266533500152442121543412024410024400242202302
013233443223404100042450150455321226633161540105245332600255253210530355343333525022032244210410030
100023412423313250410335224414340304541343205513226532163144253316101245551432014201003142341223120
232241013411335302431133421201615210501105064501562020244216516152310063135512221455045300342211403
001211403144420455554423216332215200446124050665565420055553546105000034160513122231050524220140011
010222034210203122402014343566262222246103065613373733360061263604223104106135234020024543242111403
133113440330510405504554625242222200403366266153277146434533626152126510506334524322514123130210430
101113041432001410142511513526503002532162171436233673475525363642630611162522443352502205024124331
324312213553041030426555020660523457632523764416232512767555566551645346253661665442120340412302333
222123425201320323442604100535316531114411567157656317576577367225171531643603563142005225003430304
230404233442530203464653423224331773327325127722375144767252343327447164151244036263205440245102240
020311403313133205655466214461271263366243355275525631512333123546621214666605403224540121240310404
223432305440325556610201021457211262246351424434658664512646355413752541213342520233125105551331330
410041131121534131115352632731175264753542438584525556827443273227227341353644032545140104543024000
423453033330221431012636112324171513474458778337333686836267386757554467754342542115255232403454502
141503311314266450662537113455732217424265537246342583573854773454123656425412332165232141011402443
234300432213662423462523257572767147464533826775238485872738873855313755143164616151012552443215022
033241031332110563643465311621477762732537565784247833454662525727847541531227547400151244235203533
240224003236231611317717416272324253823854672343372244362284832853474756317737336366405432515551141
044253414432535641343531616777683583443747683557473845555627346482283442342143325272142654451141515
414053450103324521235112631345676573684558268948763749867453426652857573524661772775625535603534203
452331543214300655576765671548836233443573348365895488958888986552454663627672751663623063544153145
213123262132446231133475424568643584667349958744556395357354533357757384556355745247423355145351432
342221165500622631522633663654256837955886839433536678696786657748837377774671514433313266661623225
130525523663122464775524878454547596977765643878496844435439637547575786557583612611151265003051021
052340513053426716457138866685633365633897943973977354954887846375952874745888233531473341566254321
551302462051112655343688535254486759649794957694399376794599363586956664557346654412445441323166111
423314110434112256221674555238787433834639693845964995577597377494776955386853327646756442555444510
011552365334113123648585377225387834796343948497694499984846743648856748248673875362436356643131030
020256210453324157237867264233786435595376465578894967846665837389745665523842772735511735230401305
414103611044274157467628724497537843895695848765959754656769555753737934946468683576713214360041123
433526245602544722152833257988587439889445445556677697744745565449795769495384242545477273223656031
535042251546455362245227649985889898476674985559449558958898867548978656953754247384375772356045111
323611233267761557486537664663454997974544898976574687679659946846478948476457434665442317312022000
316230521014145628676243456554785557548446999847699997896955585649999577677524437423612355506115351
233431152247465456337854474647793964448444896895598667778778977886586858366824426252253276231246145
404014103521614562682335866979974948446875556785969767656758585669745354988763786574741512533625562
556325261143135338658723684954548748574497796665868666555699769757857835743973646256523654252240304
266422162456222134742357585545497865656898785565975797777687675798668987868793755627527272716412640
455002563563223122565674686979694669768589897756676776589979994889496595734434837783346346143450216
423623414476221783674588469588594648549897978796997876765586667888788799455377766468736364172434104
461015352326313587764337768946558646676685575698789678659997955774574676447688826876753362163336656
454301143535414652353245365369994964967576769566899779689689997774557795374734563262787562775060012
653222122731245568566556776985848547968556787679686669879569789644864455634454383364432375535243521
342316353424453765457789959854867655565788786777767789769587758955585444849988572535856114662250155
250055446366322362645884695995797555897869878978866789879755795875895966677947756776764266155654244
355444312633526744883699577599657855885557866766789996876599887759779647979599732827875247133603306
355162377751474644575435897745996464769988698987886888687666856555545976965644336524766776743736625
254133626515278463466897589667596746698997878997878697797768557598696668363844637544382211555636416
360253472354274732737486847668779778565699779896887679689978676579598846458534776876223325777613344
366252652724126345554794996866795676999857566667778779778577866995589777749549487475787272211122413
431342467147246836362775364375899585598957998976787989869955888769495445683934936635824416757641010
146634042466136236774369894774864768596766587699767886867877869796986964585967784682527733236415223
156304456734165226274783349494798495455769775689668799688775958559896465983366587486585214546510053
605206622655775234243663487486755585458887997787688876799655859888594564838739982853787622517046650
423630024631261432424833633564887777468876679966768898695978957564669463675476746456267163626043120
416652052662467458722777939356947478968767765657999676685879795995878796976469668655854466754261205
220024367637577658627779495636364487645958666565757789856885784694646544987687453532241513327314431
001205127227723722658235495649657985496688668778766957998998798794864455548548428355817465523414166
025161664544242365866263435484535744784969979677987979756856584797657359539943238646534427543545433
244045631473162278554572386595375669975856555597887558858964647474989998785563783734436666571035624
353335045651153142532442577843953876787689468686959685568475794765699446555738548335432232450554121
534351561042516364445286348344476866564776585989956875745847495865559949864377745388672675423056350
540405145026441333666346536966747774764948686678756744954767654888755588373534364785112116636432366
310352124627123114353328539488485988645766859746585887776555674793469866749353577236524625202164415
302556262406343647252785226737766869695447799556645996986594999884557567783867558422423434634241154
211616662653431774753648337273939739669445597598598567499698999634858586533835878556437361125533615
213322310145376773757677875437498844399795974564596995697555949834733955347632738712147720025645345
541321441544454414357337667684975575996485879944954889455796373396388797572654885262161174164114144
210116521136412425163348474242489536463548693688568577695359465578777582266853876663474766131111432
440444421253572763622188785355529648358638647573673687439788966944953762338575361334246603164356300
054351113510556462163317846522547487438935688785489478376663949834482363723855432634571000412534200
415304004006217366116355647365825399757479337377973788354755373575483332857751272645472164332645502
525435240504040365515335242682485535453593777959944374675953567553247848654865615214462532062624325
421513461342233446252413525637885564683877795686776666737637754842856378347452214626360461550624343
445211110022304542377331711668252868465579847656559543637984976636772273847434447777513040455425001
302124154303411402267242643588322823363568229589888949467266487378624266732545514654524630362511225
434012041224431221666125342437865823243772555453745443857363576672867874747661743241420321212130504
100134115561650365223124662615754286283234445334825852647834765375247667746624712416412652603245504
132253131224342151537452754232162483446373772738888327822756583445567161173342212362212631430242244
141002023046411154261327625245617625735662275264772823842687844832822441456725161115444254441235253
200553032020156206063203436454516443664846483233468486433667666766457415762323462062450463344313222
201010451225251563362461722113361342618764328454374782643642448326624276154240645532300534152314133
444032143444456452225426623113762543374213652282765487482433537313361316346564006642411354445335302
020342143213005041512255604774164472633331333366228437463563712421513134547351014225565411402514242
422332412253335446146523426227763642635272527343272516342561634646544572211313465325345004130011204
440123035240040516464102063022655255262623463165725261752452217412716246215333530160420454541132140
143323423014024055541430440445462316717323336261624421453346176657765065655202543223211535243321002
133332221053010114200220465260340352674371352121611744231126156721603415356035634351251443041000331
404032402110401515330522443316116601151652142553741456176754127651434134661511225255414401412224430
300223104202155300140023253011351612643321427612315624461765340336455620510150244014335414004342223
230303331103324102513523351221602260544055166522131313540411061216126232512021403023242041242141113
101421341122145002224050506061436405231312566403515452555542525100113200314454334451233442312303301
303031334122345315210233432302103062261562324500250254554303502015306535302122202415335332113422223
323333442324333342200411433124165341334121455446602633255250161540440000210002155250512324214002123
020000401400224230303002512321356354406540161122666225140252401423502424351314403352020313231212111
000130010133444334124411122525303126205322331530363021562050544410330230535525023331433124342133030

View File

@@ -0,0 +1,8 @@
R 4
U 4
L 3
D 1
R 4
D 1
L 5
R 2

70
src/2022/day9/index.ts Normal file
View File

@@ -0,0 +1,70 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'example.txt'));
let THistory: { x: number, y: number }[] = [];
let pos = {
H: { x: 0, y: 0 },
T: { x: 0, y: 0 }
}
input.split("\n").forEach(element => {
const [dir, num] = element.split(" ");
for (let n = 0; n < num; n++) {
const prevH = { x: pos.H.x, y: pos.H.y }
switch (dir) {
case "U":
pos.H = { x: pos.H.x, y: pos.H.y + 1 };
break;
case "D":
pos.H = { x: pos.H.x, y: pos.H.y - 1 };
break;
case "L":
pos.H = { x: pos.H.x - 1, y: pos.H.y };
break;
case "R":
pos.H = { x: pos.H.x + 1, y: pos.H.y };
break;
}
const distX = Math.abs(pos.H.x - pos.T.x);
const distY = Math.abs(pos.H.y - pos.T.y);
if (distX > 1 || distY > 1) pos.T = { x: prevH.x, y: prevH.y };
THistory.push(pos.T);
}
});
console.log("Part 1:", new Set(THistory.map(pos => pos.x + "-" + pos.y)).size);
let snek = Array(10).fill({ x: 0, y: 0 });
input.split("\n").forEach(element => {
const [dir, num] = element.split(" ");
for (let n = 0; n < num; n++) {
switch (dir) {
case "U":
snek[0] = { x: snek[0].x, y: snek[0].y + 1 };
break;
case "D":
snek[0] = { x: snek[0].x, y: snek[0].y - 1 };
break;
case "L":
snek[0] = { x: snek[0].x - 1, y: snek[0].y };
break;
case "R":
snek[0] = { x: snek[0].x + 1, y: snek[0].y };
break;
}
}
console.log(snek);
});

2000
src/2022/day9/input.txt Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -1,34 +0,0 @@
import path from 'path';
import {readFile} from "../utils";
let input = readFile(path.resolve(__dirname, 'input.txt')).map((x: any) => x.split(' '));
let forward = 0;
let depth = 0;
const add = (command: any) => {
if (command[0] === 'forward') forward += Number(command[1]);
else if (command[0] === 'down') depth += Number(command[1]);
else depth -= Number(command[1]);
}
input.map(add)
console.log("Part 1", forward * depth)
forward = 0;
depth = 0;
let aim = 0;
const execute = (command: any) => {
if (command[0] === 'down') aim += Number(command[1]);
else if (command[0] === 'up') aim -= Number(command[1]);
else {
forward += Number(command[1])
depth += Number(command[1]) * aim
}
}
input.map(execute)
console.log("Part 2", forward * depth)

View File

@@ -1,5 +1,14 @@
import * as fs from 'fs' import * as fs from 'fs'
export const readFile = (file: string): any => { export const readFile = (file: string): any => {
return fs.readFileSync(file, {encoding: "utf-8"}).split("\r\n"); return fs.readFileSync(file, {encoding: "utf-8"});
} }
export const print = (array: any[]) => {
array.forEach(x => console.log(x));
}
export const sum = (n1, n2) => {
return n1 + n2;
}

View File

@@ -75,7 +75,7 @@
/* Type Checking */ /* Type Checking */
"strict": true, /* Enable all strict type-checking options. */ "strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */ "noImplicitAny": false, /* Enable error reporting for expressions and declarations with an implied `any` type.. */
// "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */ // "strictNullChecks": true, /* When type checking, take into account `null` and `undefined`. */
// "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */
// "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */ // "strictBindCallApply": true, /* Check that the arguments for `bind`, `call`, and `apply` methods match the original function. */
@@ -97,5 +97,8 @@
/* Completeness */ /* Completeness */
// "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */
"skipLibCheck": true /* Skip type checking all .d.ts files. */ "skipLibCheck": true /* Skip type checking all .d.ts files. */
},
"ts-node": {
"swc": true
} }
} }