Mooie dingen

This commit is contained in:
2022-12-13 08:01:47 +00:00
parent f640da25f8
commit 538259ffd4
8 changed files with 278 additions and 14 deletions

View File

@@ -9,6 +9,6 @@
"typescript": "^4.9.3"
},
"scripts": {
"start": "nodemon src/2022/day10/index.ts"
"start": "nodemon src/2022/day12/index.ts"
}
}

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

@@ -1,17 +1,11 @@
import path from 'path';
import { readFile, sum } from "../../utils";
let input = readFile(path.resolve(__dirname, 'input.txt'));
let input = readFile(path.resolve(__dirname, 'example.txt'));
let grid: any[] = [];
let right = 0;
let up = 0;
let THistory: {x:number, y:number}[] = [];
let THistory: { x: number, y: number }[] = [];
let pos = {
H: { x: 0, y: 0 },
T: { x: 0, y: 0 }
}
@@ -20,12 +14,12 @@ 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}
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":
case "D":
pos.H = { x: pos.H.x, y: pos.H.y - 1 };
break;
case "L":
@@ -38,10 +32,39 @@ input.split("\n").forEach(element => {
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};
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);
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);
});