initial upload
This commit is contained in:
7
2023/day01/example.txt
Normal file
7
2023/day01/example.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
two1nine
|
||||||
|
eightwothree
|
||||||
|
abcone2threexyz
|
||||||
|
xtwone3four
|
||||||
|
4nineeightseven2
|
||||||
|
zoneight234
|
||||||
|
7pqrstsixteen
|
27
2023/day01/index.js
Normal file
27
2023/day01/index.js
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
const numberphiles = new Map([
|
||||||
|
["one", 1],
|
||||||
|
["two", 2],
|
||||||
|
["three", 3],
|
||||||
|
["four", 4],
|
||||||
|
["five", 5],
|
||||||
|
["six", 6],
|
||||||
|
["seven", 7],
|
||||||
|
["eight", 8],
|
||||||
|
["nine", 9]
|
||||||
|
])
|
||||||
|
|
||||||
|
fs.readFile('input.txt', ({ encoding: 'utf-8' }), (err, data) => {
|
||||||
|
const regex1 = /(\d)/gm
|
||||||
|
// let [first, last] = [matches[0], matches[matches.length-1]]
|
||||||
|
const regex = /(?=(one|two|three|four|five|six|seven|eight|nine|\d))/gm
|
||||||
|
let result = 0
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
const matches = [...line.matchAll(regex)]
|
||||||
|
let [first, last] = [matches[0][1], matches[matches.length - 1][1]]
|
||||||
|
first = numberphiles.has(first) ? numberphiles.get(first) : first
|
||||||
|
last = numberphiles.has(last) ? numberphiles.get(last) : last
|
||||||
|
result += parseInt(`${first}${last} `)
|
||||||
|
}
|
||||||
|
console.log(result)
|
||||||
|
})
|
1000
2023/day01/input.txt
Normal file
1000
2023/day01/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
5
2023/day02/example.txt
Normal file
5
2023/day02/example.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Game 1: 3 blue, 4 red; 1 red, 2 green, 6 blue; 2 green
|
||||||
|
Game 2: 1 blue, 2 green; 3 green, 4 blue, 1 red; 1 green, 1 blue
|
||||||
|
Game 3: 8 green, 6 blue, 20 red; 5 blue, 4 red, 13 green; 5 green, 1 red
|
||||||
|
Game 4: 1 green, 3 red, 6 blue; 3 green, 6 red; 3 green, 15 blue, 14 red
|
||||||
|
Game 5: 6 red, 1 blue, 3 green; 2 blue, 1 red, 2 green
|
70
2023/day02/index.js
Normal file
70
2023/day02/index.js
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
const numberphiles = new Map([
|
||||||
|
["red", 12],
|
||||||
|
["blue", 14],
|
||||||
|
["green", 13],
|
||||||
|
])
|
||||||
|
|
||||||
|
fs.readFile('input.txt', ({ encoding: 'utf-8' }), (err, data) => {
|
||||||
|
let result = 0
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
const game_id = parseInt(String(line.split(':')[0]).substring(5))
|
||||||
|
const game = line.split(':')[1].split(',')
|
||||||
|
result += isGamePossible(game) ? game_id : 0
|
||||||
|
}
|
||||||
|
console.log(`
|
||||||
|
|
||||||
|
Part 1 now....
|
||||||
|
|
||||||
|
`)
|
||||||
|
console.log(result)
|
||||||
|
|
||||||
|
function isGamePossible(game) {
|
||||||
|
let possible = true
|
||||||
|
game.forEach(game => {
|
||||||
|
const rounds = game.trim().split(";")
|
||||||
|
//console.log(rounds)
|
||||||
|
rounds.forEach(round => {
|
||||||
|
const [number, color] = round.trim().split(" ")
|
||||||
|
if (number > numberphiles.get(color)) possible = false
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return possible
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
// ---- part 2 -----
|
||||||
|
|
||||||
|
fs.readFile('input.txt', ({ encoding: 'utf-8' }), (err, data) => {
|
||||||
|
let result = 0
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
const game_id = parseInt(String(line.split(':')[0]).substring(5))
|
||||||
|
const game = line.split(':')[1].split(',')
|
||||||
|
result += ([...leastPossible(game).values()].reduce((cur, next) => cur * next))
|
||||||
|
}
|
||||||
|
console.log(`
|
||||||
|
|
||||||
|
Part 2 now....
|
||||||
|
|
||||||
|
`)
|
||||||
|
console.log(result)
|
||||||
|
|
||||||
|
function leastPossible(game) {
|
||||||
|
let possible = true
|
||||||
|
let GameMap = new Map()
|
||||||
|
game.forEach(game => {
|
||||||
|
|
||||||
|
const rounds = game.trim().split(";")
|
||||||
|
//console.log(rounds)
|
||||||
|
rounds.forEach(round => {
|
||||||
|
const [number, color] = round.trim().split(" ")
|
||||||
|
let leastNumber = parseInt(number)
|
||||||
|
if (GameMap.has(color)) {
|
||||||
|
leastNumber = GameMap.get(color) > number ? GameMap.get(color) : leastNumber
|
||||||
|
}
|
||||||
|
GameMap.set(color, leastNumber)
|
||||||
|
})
|
||||||
|
})
|
||||||
|
return GameMap
|
||||||
|
}
|
||||||
|
})
|
100
2023/day02/input.txt
Normal file
100
2023/day02/input.txt
Normal file
@ -0,0 +1,100 @@
|
|||||||
|
Game 1: 4 red, 3 blue; 6 blue, 16 green; 9 blue, 13 green, 1 red; 10 green, 4 red, 6 blue
|
||||||
|
Game 2: 2 green, 3 blue; 11 red; 2 green, 5 red, 1 blue
|
||||||
|
Game 3: 19 green, 4 blue, 13 red; 1 green, 1 blue, 1 red; 17 red, 18 green
|
||||||
|
Game 4: 4 green, 8 blue, 20 red; 19 red, 3 green, 14 blue; 15 red, 4 green, 1 blue; 18 blue, 14 red; 19 red, 10 blue; 3 green, 11 blue, 15 red
|
||||||
|
Game 5: 1 red, 3 blue, 15 green; 13 green, 2 blue; 6 green; 6 green, 8 blue; 4 green, 9 blue, 1 red
|
||||||
|
Game 6: 2 green, 10 red; 4 blue, 1 red, 2 green; 2 red, 2 blue, 1 green; 5 red, 3 green, 1 blue
|
||||||
|
Game 7: 4 green, 2 blue, 10 red; 1 green, 12 red; 5 green, 12 red, 2 blue; 10 red, 1 blue, 5 green; 1 green, 1 blue, 11 red
|
||||||
|
Game 8: 8 blue, 3 red, 1 green; 9 blue, 14 green, 6 red; 3 red, 15 blue, 16 green; 9 red, 4 green, 6 blue
|
||||||
|
Game 9: 9 blue, 9 red, 5 green; 6 red, 1 green, 12 blue; 7 blue, 3 green; 4 red, 12 blue, 1 green; 5 red, 4 green, 1 blue
|
||||||
|
Game 10: 1 blue, 2 red, 19 green; 7 green, 5 blue, 7 red; 2 blue, 1 red, 3 green; 2 blue, 9 red, 10 green
|
||||||
|
Game 11: 2 red, 17 blue, 12 green; 5 green, 3 blue; 14 green, 2 red, 15 blue
|
||||||
|
Game 12: 4 blue, 13 green, 1 red; 5 blue, 3 green, 4 red; 8 blue, 15 green; 12 blue, 5 red, 6 green; 2 green, 5 blue, 4 red; 11 blue, 18 green, 4 red
|
||||||
|
Game 13: 8 blue, 11 red, 2 green; 18 red, 7 blue, 7 green; 6 green, 9 red; 7 green, 3 blue, 12 red; 1 green, 4 red, 4 blue
|
||||||
|
Game 14: 3 green, 11 blue, 1 red; 3 green, 1 red, 13 blue; 5 green, 6 blue, 1 red; 1 red, 5 blue, 5 green; 10 blue, 2 green
|
||||||
|
Game 15: 3 red, 8 green, 1 blue; 8 green, 10 red, 3 blue; 1 blue, 4 green, 2 red; 10 red, 10 green; 3 blue, 4 green, 3 red; 12 green, 7 red
|
||||||
|
Game 16: 13 red, 9 blue; 2 green, 7 red, 7 blue; 9 blue, 7 red, 7 green; 13 blue, 10 red
|
||||||
|
Game 17: 12 red, 19 green, 4 blue; 2 blue, 5 red, 11 green; 4 red, 7 green, 8 blue; 6 red, 10 green; 3 green, 7 red, 10 blue
|
||||||
|
Game 18: 2 blue, 6 red; 5 red, 3 green; 12 red, 1 blue, 3 green; 1 green, 19 red, 5 blue; 3 green, 2 blue, 16 red
|
||||||
|
Game 19: 10 red, 5 green; 10 red; 9 red, 7 blue; 1 blue, 8 red
|
||||||
|
Game 20: 11 green, 5 red, 7 blue; 7 green, 12 red, 11 blue; 13 green, 3 blue, 5 red; 3 red, 3 blue, 1 green
|
||||||
|
Game 21: 10 blue, 10 green, 2 red; 16 blue, 9 green, 1 red; 3 green, 1 blue, 2 red; 17 green, 5 blue, 2 red; 6 blue, 15 green, 2 red
|
||||||
|
Game 22: 2 red, 1 blue, 5 green; 4 blue, 3 red, 6 green; 3 red, 4 blue; 4 blue, 1 green, 1 red; 3 blue, 3 red, 5 green
|
||||||
|
Game 23: 3 red, 7 green; 17 green, 7 red, 5 blue; 4 blue, 4 red; 19 green, 3 red, 9 blue; 3 green, 3 blue, 6 red; 9 red, 7 green, 6 blue
|
||||||
|
Game 24: 2 red, 14 green, 8 blue; 6 red, 12 blue, 15 green; 1 green, 10 red; 3 red, 7 blue, 15 green; 11 red, 13 blue; 1 green, 9 blue, 10 red
|
||||||
|
Game 25: 12 blue, 7 red, 7 green; 2 red, 10 green, 9 blue; 11 blue, 6 green, 6 red; 6 blue, 6 green; 4 red, 8 blue, 2 green; 6 green, 4 blue, 3 red
|
||||||
|
Game 26: 2 blue, 5 red; 9 red, 1 green; 16 red, 2 blue; 4 blue, 1 green, 5 red
|
||||||
|
Game 27: 12 green, 12 red; 15 green, 11 red; 7 red, 19 green; 1 blue, 2 green, 3 red
|
||||||
|
Game 28: 4 blue, 4 green, 7 red; 6 green, 9 red, 10 blue; 5 red, 4 blue, 9 green; 9 red, 6 blue, 2 green
|
||||||
|
Game 29: 1 blue, 3 green, 9 red; 5 green; 3 green, 2 red
|
||||||
|
Game 30: 1 blue, 5 green, 3 red; 2 green, 1 blue, 3 red; 12 green, 4 red; 5 green, 2 red; 8 green, 4 red, 1 blue; 6 green
|
||||||
|
Game 31: 9 blue, 5 green; 3 red, 11 blue, 2 green; 1 green, 4 blue, 2 red; 1 green, 3 blue, 1 red; 11 blue, 5 green
|
||||||
|
Game 32: 3 red, 1 blue, 16 green; 11 green, 4 blue; 2 blue, 4 green, 2 red
|
||||||
|
Game 33: 4 blue, 15 green; 6 green, 11 blue; 5 blue, 1 red, 13 green; 14 green, 1 red, 5 blue; 1 red, 4 blue, 14 green
|
||||||
|
Game 34: 2 green, 10 red, 2 blue; 8 red, 10 green; 3 green, 1 blue, 1 red
|
||||||
|
Game 35: 3 blue, 7 green, 10 red; 4 red, 9 blue; 8 blue, 7 green, 4 red; 2 green, 7 red, 3 blue
|
||||||
|
Game 36: 2 green, 4 red, 4 blue; 1 blue, 6 red; 7 green, 10 red; 10 red, 3 blue
|
||||||
|
Game 37: 1 green, 1 red; 1 blue, 1 red, 9 green; 6 blue, 11 green, 10 red; 17 blue, 3 green; 2 green, 8 red, 6 blue
|
||||||
|
Game 38: 6 blue, 7 green, 2 red; 12 green, 15 blue, 3 red; 7 blue, 3 red, 7 green; 6 blue, 10 green
|
||||||
|
Game 39: 8 green, 4 red, 14 blue; 19 blue, 11 red, 5 green; 15 green, 12 blue, 13 red; 18 green, 5 red, 11 blue; 10 green, 8 blue, 10 red; 8 green, 2 red
|
||||||
|
Game 40: 2 green, 5 red, 4 blue; 1 red, 2 green; 10 blue, 1 green; 8 blue, 8 red, 2 green; 2 red, 6 blue
|
||||||
|
Game 41: 18 red, 2 blue; 17 red, 4 green, 3 blue; 5 blue, 7 red; 3 blue, 3 green, 8 red; 8 red, 2 blue
|
||||||
|
Game 42: 2 blue, 6 green, 7 red; 2 red, 4 blue; 4 green, 4 blue, 10 red; 6 green, 5 red, 8 blue; 3 red, 3 blue
|
||||||
|
Game 43: 1 green, 17 red, 1 blue; 16 red, 8 green; 7 blue, 15 red, 10 green; 1 green, 1 blue, 6 red; 13 green, 13 red; 11 green, 8 blue, 1 red
|
||||||
|
Game 44: 9 blue, 9 green, 19 red; 7 red, 1 blue; 6 blue, 8 green, 9 red; 8 green, 2 blue, 13 red; 1 blue, 5 green, 19 red
|
||||||
|
Game 45: 5 red, 3 green, 10 blue; 4 green, 17 red, 3 blue; 13 blue, 2 red, 10 green; 11 blue, 15 red, 13 green
|
||||||
|
Game 46: 14 green, 1 blue, 6 red; 12 green, 18 red; 10 red, 1 blue, 3 green; 5 red, 8 green
|
||||||
|
Game 47: 8 red, 5 blue, 2 green; 4 red, 4 blue; 3 blue, 9 red, 2 green; 2 red, 2 green, 4 blue; 14 red, 1 green, 2 blue
|
||||||
|
Game 48: 11 red, 2 blue, 1 green; 2 green, 11 blue, 7 red; 2 red, 1 green, 12 blue; 1 green, 7 red, 2 blue
|
||||||
|
Game 49: 7 blue, 8 red, 2 green; 10 red, 5 blue, 2 green; 10 red, 2 blue, 3 green
|
||||||
|
Game 50: 18 red, 3 green; 8 red, 10 blue, 3 green; 11 red, 1 green; 8 red, 9 blue, 1 green; 7 blue, 3 red, 3 green
|
||||||
|
Game 51: 6 green, 2 blue, 3 red; 1 green, 4 red; 1 red, 1 blue; 1 red, 5 green; 6 green, 2 red
|
||||||
|
Game 52: 8 green, 6 blue; 2 blue, 1 red, 17 green; 8 red, 8 green; 2 green, 4 red, 2 blue
|
||||||
|
Game 53: 6 red, 4 blue; 15 red, 4 green; 16 red, 3 green, 7 blue; 1 green, 18 red, 2 blue; 14 red, 8 blue, 1 green
|
||||||
|
Game 54: 9 red, 11 green, 4 blue; 9 blue, 9 green, 14 red; 3 blue, 1 red, 9 green; 7 green, 16 red, 10 blue; 11 green, 3 blue, 11 red; 3 blue
|
||||||
|
Game 55: 9 red; 1 blue, 10 red, 1 green; 15 red, 5 green; 2 blue, 1 green, 14 red; 1 blue, 2 green, 8 red; 6 red, 3 green, 2 blue
|
||||||
|
Game 56: 16 blue, 13 green, 1 red; 7 green, 4 blue; 1 red, 11 blue, 16 green; 10 green, 2 red, 9 blue; 20 green, 1 blue, 1 red; 14 green, 2 blue
|
||||||
|
Game 57: 13 red, 7 blue, 4 green; 19 red, 3 blue, 8 green; 9 red, 2 blue, 13 green
|
||||||
|
Game 58: 5 green, 10 blue; 11 green, 9 blue; 6 green, 11 blue; 8 green, 2 blue; 1 red, 5 blue, 2 green; 6 green, 5 blue
|
||||||
|
Game 59: 7 blue, 4 red; 1 green, 15 red, 7 blue; 6 blue, 15 red; 2 green, 13 red, 7 blue; 6 blue, 15 red
|
||||||
|
Game 60: 6 green, 2 blue, 1 red; 6 green, 8 blue; 11 green, 2 red, 15 blue; 1 red, 4 blue, 9 green
|
||||||
|
Game 61: 2 green, 4 blue; 8 red, 4 blue, 3 green; 4 green, 8 blue, 5 red
|
||||||
|
Game 62: 1 blue, 11 green; 7 green, 3 blue; 7 green, 1 blue, 1 red
|
||||||
|
Game 63: 14 red, 7 green, 1 blue; 2 red, 15 green; 3 green, 6 red; 20 red, 1 blue, 9 green; 11 red, 1 blue, 15 green
|
||||||
|
Game 64: 9 red, 2 green; 9 green, 8 red, 2 blue; 2 red, 2 blue; 1 green; 7 red, 1 blue, 9 green; 12 green, 4 red
|
||||||
|
Game 65: 4 blue, 1 red, 3 green; 7 green, 8 blue; 11 red, 3 green, 1 blue
|
||||||
|
Game 66: 5 red, 2 blue; 2 green, 1 red; 2 green, 13 red, 4 blue; 15 red, 2 blue
|
||||||
|
Game 67: 2 green, 1 blue, 15 red; 8 blue, 10 red, 1 green; 2 green, 6 blue, 18 red
|
||||||
|
Game 68: 6 red, 2 green, 3 blue; 1 blue, 13 red, 5 green; 5 green, 2 blue, 7 red; 2 blue, 8 green, 2 red; 2 red, 1 blue; 8 green, 8 red
|
||||||
|
Game 69: 2 blue, 3 red; 3 green, 1 red, 2 blue; 2 red, 1 green, 5 blue; 3 red, 3 green, 4 blue; 1 blue, 4 green, 7 red; 2 green, 4 blue
|
||||||
|
Game 70: 2 red, 17 green; 8 red, 14 green; 1 blue, 18 green; 5 red, 4 green, 1 blue
|
||||||
|
Game 71: 6 red; 3 green, 9 blue, 18 red; 19 blue, 14 red; 11 blue, 18 red, 5 green
|
||||||
|
Game 72: 13 blue, 10 red, 4 green; 5 green, 13 blue, 13 red; 7 green, 7 red, 5 blue; 9 blue, 6 red; 4 blue, 6 green; 7 red, 2 blue, 4 green
|
||||||
|
Game 73: 3 red, 6 blue; 8 red, 2 blue; 6 blue, 1 green, 4 red; 1 green, 5 red
|
||||||
|
Game 74: 3 red, 3 green, 10 blue; 1 green, 1 red; 7 red, 3 green, 7 blue; 3 blue, 4 red
|
||||||
|
Game 75: 1 green, 10 red, 8 blue; 13 red, 7 green, 9 blue; 18 red, 9 blue; 2 green, 1 blue, 5 red
|
||||||
|
Game 76: 4 green, 4 red; 8 green, 3 red, 3 blue; 1 red, 2 green; 6 blue, 3 red, 3 green; 1 red, 1 green, 1 blue
|
||||||
|
Game 77: 7 red, 8 blue, 7 green; 13 green, 7 blue, 8 red; 2 red, 10 green, 5 blue; 2 red, 5 blue, 3 green
|
||||||
|
Game 78: 2 red, 7 blue; 5 blue, 6 green, 3 red; 16 green, 3 blue, 10 red; 13 green, 2 blue, 2 red
|
||||||
|
Game 79: 1 blue, 8 red; 4 blue, 12 red, 5 green; 14 red, 10 blue; 2 green, 7 red, 2 blue; 14 red, 2 green
|
||||||
|
Game 80: 7 blue, 5 green, 7 red; 2 green, 2 blue, 7 red; 4 red, 1 blue, 18 green; 2 green, 11 red, 3 blue; 4 blue, 9 red, 15 green
|
||||||
|
Game 81: 3 green, 4 red, 14 blue; 11 blue, 4 green, 14 red; 6 blue, 8 red, 5 green
|
||||||
|
Game 82: 2 green, 7 blue, 2 red; 15 blue, 2 green, 1 red; 3 blue, 2 green; 1 red; 2 red, 15 blue, 2 green
|
||||||
|
Game 83: 5 blue, 1 green, 5 red; 12 red, 10 blue; 1 blue, 11 red
|
||||||
|
Game 84: 4 red, 8 green, 14 blue; 1 green, 8 blue, 2 red; 1 red, 6 blue, 9 green; 8 green, 15 blue, 4 red; 4 blue, 4 red, 6 green
|
||||||
|
Game 85: 8 green, 16 red, 5 blue; 10 red, 10 green; 18 green, 10 blue, 1 red; 3 red, 9 blue, 13 green
|
||||||
|
Game 86: 2 blue, 10 green, 6 red; 8 blue, 6 green; 8 blue, 3 red; 8 green, 4 red, 3 blue
|
||||||
|
Game 87: 8 blue, 4 red; 16 red, 20 blue, 4 green; 18 red, 1 green, 1 blue; 6 red, 1 green, 16 blue; 18 blue, 6 red
|
||||||
|
Game 88: 13 green, 8 blue, 5 red; 13 red, 5 green, 9 blue; 10 red, 18 blue, 7 green; 14 green, 9 red, 13 blue
|
||||||
|
Game 89: 14 red, 3 green, 5 blue; 10 blue, 5 red; 9 blue, 12 red, 3 green
|
||||||
|
Game 90: 2 red, 2 blue; 1 blue, 1 green, 3 red; 2 green, 1 blue, 8 red; 4 red, 2 green, 2 blue; 2 blue, 9 red, 6 green
|
||||||
|
Game 91: 1 green, 1 blue, 6 red; 3 blue, 2 red; 2 red, 10 green; 7 green, 2 blue, 4 red; 1 blue, 12 green, 8 red
|
||||||
|
Game 92: 5 red, 6 blue, 14 green; 9 blue, 1 red, 10 green; 2 red, 7 green, 6 blue; 2 red, 10 blue, 4 green
|
||||||
|
Game 93: 11 red, 5 blue, 2 green; 7 green, 8 red, 6 blue; 3 green, 5 blue, 10 red; 16 red, 8 blue, 6 green; 2 green; 1 green, 11 blue, 16 red
|
||||||
|
Game 94: 4 blue, 2 red, 4 green; 5 blue, 1 red, 2 green; 12 blue, 3 red, 3 green
|
||||||
|
Game 95: 1 red, 12 green, 4 blue; 1 blue, 9 green, 3 red; 1 blue, 13 green, 1 red; 3 red, 2 green, 1 blue; 4 blue, 3 red, 15 green
|
||||||
|
Game 96: 1 red, 7 blue, 2 green; 5 green; 3 red, 5 green, 11 blue
|
||||||
|
Game 97: 8 green, 6 red; 1 blue, 6 red, 10 green; 1 blue, 6 red
|
||||||
|
Game 98: 2 green, 8 red, 1 blue; 9 green, 2 blue, 7 red; 1 blue, 2 red, 11 green; 8 red, 10 green, 2 blue
|
||||||
|
Game 99: 3 blue, 2 red; 1 blue, 3 green, 3 red; 1 red, 3 green; 2 green, 2 red, 2 blue
|
||||||
|
Game 100: 7 blue, 6 red, 5 green; 3 blue, 13 green, 11 red; 6 red, 13 green, 14 blue; 8 red, 10 blue, 15 green
|
6
2024/01/example.txt
Normal file
6
2024/01/example.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
3 4
|
||||||
|
4 3
|
||||||
|
2 5
|
||||||
|
1 3
|
||||||
|
3 9
|
||||||
|
3 3
|
36
2024/01/index.js
Normal file
36
2024/01/index.js
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
|
||||||
|
let all_deviation = 0
|
||||||
|
|
||||||
|
fs.readFile('input.txt', ({ encoding: 'utf-8' }), (err, data) => {
|
||||||
|
let left_list = []
|
||||||
|
let right_list = []
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
//console.log(`${line}`)
|
||||||
|
left_list.push(parseInt(line.split(' ')[0]))
|
||||||
|
right_list.push(parseInt(line.split(' ')[1]))
|
||||||
|
}
|
||||||
|
left_list.sort()
|
||||||
|
right_list.sort()
|
||||||
|
|
||||||
|
let difference = 0
|
||||||
|
for (let i = 0; i < left_list.length; i++) {
|
||||||
|
console.log(`left: ${left_list[i]} - right: ${right_list[i]}`)
|
||||||
|
difference += Math.abs(left_list[i] - right_list[i])
|
||||||
|
}
|
||||||
|
let similarity = 0
|
||||||
|
|
||||||
|
|
||||||
|
for (let i = 0; i < left_list.length; i++) {
|
||||||
|
let found = right_list.filter(number => number === left_list[i])
|
||||||
|
//console.log(found)
|
||||||
|
if (found.length > 0) {
|
||||||
|
|
||||||
|
similarity += found.length * left_list[i]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
console.log(`difference: ${difference}`)
|
||||||
|
console.log(`similarity: ${similarity}`)
|
||||||
|
})
|
1000
2024/01/input.txt
Normal file
1000
2024/01/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
11
2024/01/package.json
Normal file
11
2024/01/package.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "y",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
6
2024/02/example.txt
Normal file
6
2024/02/example.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
7 6 4 2 1
|
||||||
|
1 2 7 8 9
|
||||||
|
9 7 6 2 1
|
||||||
|
1 3 2 4 5
|
||||||
|
8 6 4 4 1
|
||||||
|
1 3 6 7 9
|
54
2024/02/index.js
Normal file
54
2024/02/index.js
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
|
||||||
|
const report = []
|
||||||
|
|
||||||
|
|
||||||
|
fs.readFile('example.txt', ({ encoding: "utf-8" }), (err, data) => {
|
||||||
|
//console.log(data)
|
||||||
|
|
||||||
|
// rows = reports
|
||||||
|
const crit = 3
|
||||||
|
let safe_reports = 0
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
// line.split(' ') == levels
|
||||||
|
|
||||||
|
let levels = line.split(' ')
|
||||||
|
let safe = true
|
||||||
|
let safe_text = ""
|
||||||
|
//let sho = (parseInt(levels[0]) > parseInt(levels[1])) ? true : false
|
||||||
|
let shouldIncrease = (parseInt(levels[0]) < parseInt(levels[1])) ? true : false
|
||||||
|
let safe_level = 0
|
||||||
|
for (let i = 1; i < levels.length; i++) {
|
||||||
|
let difference = Math.abs(parseInt(levels[i]) - parseInt(levels[i - 1]))
|
||||||
|
let isIncreasing = parseInt(levels[i]) > parseInt(levels[i - 1]) ? true : false
|
||||||
|
if (!shouldIncrease && isIncreasing) {
|
||||||
|
safe = false
|
||||||
|
safe_level += 1
|
||||||
|
safe_text += " should decrease "
|
||||||
|
}
|
||||||
|
if (shouldIncrease && !isIncreasing) {
|
||||||
|
safe = false
|
||||||
|
safe_level += 1
|
||||||
|
safe_text += " should increase "
|
||||||
|
}
|
||||||
|
if (difference > crit) {
|
||||||
|
safe = false
|
||||||
|
safe_level += 1
|
||||||
|
safe_text += ` too much difference (${difference})`
|
||||||
|
}
|
||||||
|
if (difference < 1) {
|
||||||
|
safe = false
|
||||||
|
safe_level += 1
|
||||||
|
safe_text += ` too little difference (${difference})`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (safe || safe_level === 1) { safe_reports += 1 }
|
||||||
|
console.log(`safe reports so far: ${safe_reports} - ${shouldIncrease ? 'Increasing' : 'Decreasing'} - ${safe_level} - ${levels.join(" ")} - ${safe_text}`)
|
||||||
|
|
||||||
|
|
||||||
|
// for (let i = 0; i < levels.length; i++) {
|
||||||
|
|
||||||
|
// }
|
||||||
|
}
|
||||||
|
|
||||||
|
})
|
1000
2024/02/input.txt
Normal file
1000
2024/02/input.txt
Normal file
File diff suppressed because it is too large
Load Diff
1
2024/03/example.txt
Normal file
1
2024/03/example.txt
Normal file
@ -0,0 +1 @@
|
|||||||
|
xmul(2,4)&mul[3,7]!^don't()_mul(5,5)+mul(32,64](mul(11,8)undo()?mul(8,5))
|
28
2024/03/index.js
Normal file
28
2024/03/index.js
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
fs.readFile('input.txt', ({ encoding: "utf-8" }), (err, data) => {
|
||||||
|
const mul_regex = /mul\((\d+),(\d+)\)/g
|
||||||
|
const instruct_regex = /do(n't)?\(\)/g
|
||||||
|
let do_instruction = true
|
||||||
|
let result = 0
|
||||||
|
let multiplications_done = 0
|
||||||
|
const instructions = [...data.matchAll(instruct_regex)]
|
||||||
|
const matches = [...data.matchAll(mul_regex)]
|
||||||
|
for (let i = 0; i < instructions.length; i++) {
|
||||||
|
const now = instructions[i]
|
||||||
|
const then = (i + 1) in [...instructions.keys()] ? instructions[i + 1].index : data.length
|
||||||
|
do_instruction = now[0] === "do()" ? true : false
|
||||||
|
if (!do_instruction) { continue }
|
||||||
|
matches.forEach(match => {
|
||||||
|
if ((match.index > now.index && match.index < then && do_instruction) || (match.index < now.index && i == 0)) {
|
||||||
|
let [full, x, y] = match
|
||||||
|
result += parseInt(x) * parseInt(y) //mul(x, y)
|
||||||
|
multiplications_done += 1
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
console.log(`total multiplications: ${matches.length}`)
|
||||||
|
console.log(`multiplications done: ${multiplications_done}`)
|
||||||
|
console.log(`multiplications ignored: ${matches.length - multiplications_done}`)
|
||||||
|
console.log(`result: ${result}`)
|
||||||
|
|
||||||
|
})
|
6
2024/03/input.txt
Normal file
6
2024/03/input.txt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
!how()where()*mul(527,340)?why()^?mul(168,100)!^#mul(390,111)>'when()'select())((from()how()mul(412,526)/@what()from()when()-mul(500,980)#&[}]mul(887,503)%,$mul(699,805)what()select())>mul(292,305),'-{,@,how()who()mul(213,633)when()?@who()mul(652,4)*&'what()mul(177,237)&who()why()(@{+;why()<mul(23,321)what()when();from()-do()who() {&}-:(mul(844,162)~from()/mul(77,769)%,how()@%(?who()]<mul(694,833)^from()how()> &mul(193,679),)&mul(565,339)?}what()!who(){mul(705,313)mul(294,50)+mul(201,534) )~how()mul(659,49)!mul(871,788)select()where()from()mul(346,618) *&@'why()&}#mul(483,765)!#select()^*+[what()when()mul(448,525)]>:where()&^who()&mul(611,331):!)*/]}mul(37,42)>mul(538,106)when()why()mul(36,120)~where()-{+from()$'mul(950,456))mul(28,237)what()when(479,124)mul(697,976)):**/]&#how()#mul(424,841)why()'!;~mul(108,859)~%{?!mul(40,521)do()[^when()/%$+ [where()mul(187,953)who()where()select()(select()what()mul(984,77)<@)(/where()from()~;mul(163,398)/who()who()~mul(445,94))what()what()][how(),mul(115,245)--}/#how()what()!mul(366,981)'$why()do()what(565,96)who()mul(128,999):mul(858,772)[,,mul(796,864)why()what()^(mul(136,980)when()?!when()}mul(142,552)(mul(354,328)[(@how() (/~#mul(159,715)where()&mul(567,560)from()$^'$&&+!when()mul(582,489);where();select(),mul(306,841)? ,)how()mul(274,549)@~what()~?*mul(448,441);&<'select()when()when()#select()from()mul(404,209)^/ @who()who()'mul(400,15)';^&&when():{mul(199,543)[from()~+mul(452,787)([select()>/]$!/mul(840,165)when()>^why()~>when()(mul(830,125)from():mul(433,238);%why(){';$mul(494,781),-mul(139,401)&&&+who()>/^select()]do()mul(116,181)+$*[:who() do()how()<what()+mul(392,879)()what()don't()~)&?#*}mul(909,275)mul(695,234):],from()++^how()>;mul(514,117)$who()*)~%mul(859,857)}mul(837,844)>{@-what())-@@mul(574,73)]<[[why(608,495)how()who()when()mul(937,176)(%mul(471,325){'+)?:}mul(695,347)mul(56,888)where()##;#>who()+mul(157,650)mul(847,72):,[(how(144,703):mul(294,627)})>@mul(74,230)@)+what()mulhow()><<,$!(;why()mul(635,532)-select()mul(171,737)?select()[why()&^mul(587,686)$how()from())when()>;where()&mul(600,336)}@&{mul(651,690)from()?->&%mul(454,745)mul(387,378)mul(142,934)]mul(820,891)@#why()&how();;why()mul(337,723)&]from()when(894,39) ,>( mul/%(mul(271,558)#}']what()$-<^(mul(234 [what()when()select()($)+!don't()/ %<?%!]^mul(752,478)]how()mul(719,540)'when() why():(&'from(59,581)~mul(921,696)who()@,**%from(918,170))mul(224,391),where(104,159)do()from(339,837)}<<where()?{&how()mul(329,298)<who()what(937,474)&]@?mul(920,516);mul(438,991);{why()!]~'from()>mul(927,106)why()<%{{&~'<from()mul(950,746)'mul(240,649)?what(827,689)(mul(750,353)select(720,6)^mul(663,218)<,(why()<who()^>%why()mul(617?from()select()<what()mul(873,278)&^where(86,235)mul(170,108)!select()mul(66,5)@$^,~%from()mul(785,826): ~who(){mul(383,166):!![:~}+-'mul(554,291)@^)(^#when()when()why()mul(330,699)[:how(888,93)who()how(863,345)who()mul{how()-why()who()]$^mul(512,474)^@:mul(728,970)%mul(779,946)&& mul(216,667) where()^'%mul(788,642)how()>from()}$mul(915,977)& &mul(477,287){# mul(798,930)]mul(111select()*^@@/what()mul(518,86):('({&~{why()mul(991,855)*%^who()who()$/:{$mul(827,700)-'(mul(377,585)#&mul(171,537)when()@/>{< ,*:mul(349,478)!&^{-/mul(448,750)mul(868,546)mul(893,203)
|
||||||
|
;?++how()$mul(218,402){mul(52,837)&{what()<who()[}<{don't()!mulwhen()!mul(323,214)$-]?'from(443,779)when()~how()mul(394,217)<who()do()# {+$#why()mul(873,360)mul(971,135)*^mul(131,811)/}@:mul(59,937)~select() #mul(657,749)[)mul(982,524)mul(602,483)?*mul(218,526)@{*where(){mul(164,992):what()why()]!*$mul(581,601)what()(#]%when()(how(){]mul(448,35)@^-mul(334,228):/$]<]&]:;mul(719,850)when()*!mul(724,214) from()select(264,396)mul(849,228))what()~;>#$% <mul(968,167);mul(603,611)mul(766,876)&why()mul(693,810)<)&!don't()/;what()+%%mul(666,136)mul(76,902)<how()}where()}select()select()<,mul(886,504)from()'{from()mul(398,932)%~,-)mul(948,141)<,!<*mul(51,426)?)/what()~why()++mul(775,745)from()+,(select())why()when()%%mul(987,730)![when()}!(how()do():%/(+mul(656,106):who()*&mul(599,486),(?*select(842,61)<^!mul(400,798) @[]*/@mul(808,934)]-,mul(542,49)mul(262,237)why()<what()how()$who()&?mul(151,471:from()*&%mul(252,481):select()-}mul(364,841)[~mul(656,650)@'^<^what();do();~from()(!;'mul(837,565) what()mul(695,312){-;^&<when()mul(562,683*/select()select()-%(#^mul(792,201)@@)mul(934,213),when(365,302)&}*'when()mul{>{>%when()mul(997,771)/select()!mul(88,621)when();mul(120,538)&what(592,500)#:*,how()#mul(745,304)$;:&*mul(276,817)/select()'how()'{when()mul(422,988)mul(386,816)what(87,832)-${mul(43,620)mul(271,338)+;why()why()-#*don't()where():],]what()-mul(4,311)' why()?don't()/~from()~select()<[why()mul(37,622)select()^]select()#where()<{mul(910,54,don't(),#^+{mul(153,137))[mul(348,234)::+{mul(710,502)'}'do()~where(722,741)why()!]mul(810,172)@[{from()where())why(230,249)<who()mul(734,174)$<when()what()?mul(729,870)$why()<who()-*>*^+mul(439,248)(?/#how():mul(559,154)!+from(26,260),)!'mul(67,900){>where()select()#~who()#%what()mul(194,100){<[,'(;-mul(421,329'what()@$$?when()<',mul(410,915)]who(672,22)-:*mul(722,311) select()how()~how()!*'mul(114,108)%($$#what(728,367)do()from(),*mul(159,172)>%]mul(358,684)who()&~]when()$mul(791,993)who()++$why()how()&$mul(913,73)-!mul(53,114))([{ select()@]from()(mul(89,340);^-$>?from() mul(184,541)+-%:(# mul(43,872)? # -[mul(984,77)&<+]when()(#;!mul(22,759)how()<how()/,;mul(156,529)-mul(377,400)%@select()^&mul(19,833)mul(68,933)mul:^;what()-@%,>{select()mul(264,832)>/$mul(78,759)]mul(645,838)select()<$& mul(665,217)mul(332,96)where()##mul(410,119)mul(614,640)}-%who()/why()what()mul(514,395)!<+{:%#how()+#mul(169,935)/+who()where()select()*mul(298,793)&@how()?!(who(191,903)when()?mul(492,499)) % $^{when(779,320)select()mul(631,153) ';[from()/^-+mul(669,90)what();^/[mul(275,626)why()&&where()mul(647,52)[ /(;[{[mul(522,127)-)mul(477,645)what(998,194)%:{when()[%%mul(32,779)/from()why();mul(665how()'mul(856,294)%how()*$how(372,599)when()<@ don't()mul(46,719)^where()>+: }(when()@mul:from(393,669)!+;how()[%)how()mul(317,228):!who()/mul(998,368); }mul(156,743)@;'^;$<#[mul(317,438)how()[{)#-why()(+?mul(230,66)!?{:@select()}/mul-:when()@$&mul(575,563)!what(){&$}^^%mul(821,423);@@select(815,842))/?>[mul(838,244)where()/[>mul(299,138){%(-mul(476,161)mul(286,551)~;from()%${mul(479,12)%&&;how()mul(867,436)];mul(742,138)select(205,272)where()from(628,468)mul(284,644)@when()<!how()why()don't()[;)$,mul(420,782)'$;select()why()^?']mul(124,908)#mul(256,912)mul(255,378):'from():who()$><~^mul(254,513)who()@where()-[! mul(458,892)how()'['{mul(875,437)(#^from()mul(431>/}<{#how()mul(453,206)
|
||||||
|
where()]mul(385,96)^~){what()mul(879,45)/-){mul(115,393)!mul(257,133)&<;'mul(35,453);(mul(213,735)*+don't()~['select()?mul(761,741)]:)&from()?mul(648,940)+what()?mul(297,466);what()!mul(232,28)+/-who()%;where()?)mul(305,615)(*$^who()+&!select()mul(538,332)!@how() <${how(){?mul(357,604~when()what()why()~mul(543,859)when()do() mul(129,114),mul(182,648)#]/how()%$mul(974,606) #@)mul(841,177)how()[,from()-]^/mul(91,282)who()}where()+when()&$;why()mul*when()#mul(480,245):what()from()$~mul(885,960)@*what()]mul(656,115) select()select()how(737,324)~* ?mul(108,370);?$(!mul(428,835)+why()>/)mul(863,986)%&mul(840,769when(),{mul(463,323):?:mul(521,574)/when()(mul(362,622)~+'(-mul(904>$@]>?select()mul(511,354))mul(873,772),[,mul(492,786)^mul(113,58),(who()when()who()&</,mul(252,375)}+}what()select(384,157))&mul(257,777)(mul(934,832)how()-<~where()]who()>mul(949,323@when()@)~?mul(913,84)when()-}?<how()(>$+mul(82,683)where()how()->>who()]don't()!{mul(520,514)~+>mul(570,919);from()@!-*+]+where()mul(14,350)mul(577,453))/when()@?{select()%@mul(904,10)%&:>/,mul(632,748)&/#mul(919,899)@>don't()when()?<mul(923,825)-mul(773,944$~' $%:how(){don't() ~]-<]select();>]mul(183*how()select()~what()~+ #mul(301,159)from()(do()#@[who()>{(what(258,705)mul(844,738)mul(412,928)why()&how()}#-}~when()mul(949,165)mul(607,272)~who(931,656)do()&how();mul(594,752){~mul(695,972)<{}#mul(270,571)/,*from(447,32)'&>[mul(924,945),-!mul(539,419what()+<*what(885,804)<$~}~*mul(144,590)what()^<where(420,327){+mul(956,54)^+&'mul(799,92)$mul(939,70):how()select(){mul(414,359)'mul(649,366){+<how(140,173)what():#mul(503,754){*<who()}@*#what()mul(946,836)don't()','when()mul(460,355)where()select())mul(993,832)why() }'from()(~who()?mul(441{]select()?who():where()(mul(950,523) how()from(),::/^mul(382,457)how():what()~how()[:mul(104,980)~%why()what()*#mul(361,914)where()mul(310,662)@@from()from()%@>what()mul(989,595)who(),from(196,894)when(655,793)'*mul(375,733)how()-when()^*mul(272,881)why()mul(570,456)@@how()why())*mul(357&mul(844,880)<mul(348,758)?~{mul(454,846)what()why()'%}*mul(693,537)where()how()*-what()]{):mul(825,136)why()~/how()'mul(952,811)when():select();where()&&select()mul(846,735)mul(333,612)>mul(881,330)]select()~mul(236,135)'where(){why()+{mul(520,254)(:do()mul(645,835[&~from()why() what(){^select()]mul(892,641)@mul(814,94)& ,*how()who()why()&mul(61,560)@$%'mul(599,707)what(439,650)$-[():$!mul(73when()[#<mul(825,421)mul(426,176)@-^where()select()who()why()when()?mul(453,39),mul(724,707)]#@where();mul(925,260):($(;>don't()mul(538,792)<what()*when()~select(){~mul(326,892)@(;}do()when()?when()how()mul(100,121>> #from()why()/mul(460,218)mul(319,652))mul(290,239)%*how()why()(>@where()mul(591,728)@#select()when() )mul(184,663)!]<mul(34,388)%, -* mul(979,738)mul(178,487)))mul(429,189)]mul(820,475)<when()# what(),)where(),when()mul(245,395) mul(97,635)who()-}don't()<from()~:>%<mul(662,837)mul(460,812)mul(856,752):mul(324,499), *]/how(725,450)~when()what())mul(864,735)when()}$mul(49,227)what()where()#mul(576^!@:@+~mul(919,52)]/? how()^mul(383,37))#*mul(631,513)!'~@from()>}}mul(747,180)when()/~why()<,!select()mul(252,522)%*mul(690,254)+'!from()mul?(where()where()&)<!mul(801,852)%};{select(){ what()mul(42,685)<^;;*]!what()don't()>]when();mul(118,112)*?}where(544,721)#mul(721,220)@mul(190,918)+>how()#!/usr/bin/perl)where()]mul(548,120)where()mul(150,935)
|
||||||
|
;?!where()'who()$select()why()&mul(55,883){:+mul(220,196)where()-('from()?select()who()mul(504,565))#mul(745,347)<where()when()mul%'from()#</?*mul(149,109))from()select()'&*%^,mul(986,752)><++/mul(635,120)]~mul(791,406)-mul(724,781),when(144,428) [[mul(718,565)who()why() %mul(328,251)who()+]&mul(707,742)!how()]{from()]'--(mul(96,818)@-(-$how()mul(767,105)^-mul(250,160):}where()mul(966,869)mul(878,876)!;),mul(874,72)why()+#who() )why()where()mul(896,845))?'#mul(585,579)$?~from()]!mulwho()%~select(757,508)'&^?mul(244,631)'how()$}mul(995,939)&why()@from())(+(do()^who()what()$mul(166,376)when(866,717)mul(419,53))]%>}{&{%select()do()from()&/*!'why(443,390))mul(397,885)when()how()who()what()mul(99,988)?,what()&mul(836,347)mul(692 mul(724,602)(mul(250,6)*how()how()'!how()mul(639,245)]mul(81,785)&+~mul(101,124)mul(984,435)what()[,}*mul(347,607)select()<mul^where(393,801)-,when()*$>;&where()mul(80,544){#~&mul(934,254):#+!who()<[mul(357,513)?:>what()~?when()({mul(937,208)]>?who()'when()select()'how()'mul(608,880)do();%:>select();]what();mul(978,885)!+select(195,899)~@*+mul(668when()'how(){>!#~}mul(449,440) !:]mul(908,330)mul(425,622)why()>[where()^**;,mul(373,419)from()%&'how()^,,^who()don't()@?&%select(491,38)mul(162+]*!:#^/ *+mul(390,994)select()#mul(244,23)@from()';where()mul (}when() )mul(16,801)/~^when()+)&-;when()mul(987,488)~@)mul(132,925)mul(959,924)@select(351,211)how()(-^}[mul(398,876)>,mul(492,208)how()what()?{who()where()'+mul(407,996)-)?where():mul(911,656);}/when()&mul(683,608)/why(574,363)mul(771,125)how()who()-~-#*?{&mul(832,987)mul(443*}+$mul(609,538)mul(949,408)how()mul(322,393)!$/&where()'mul(599,249)}#@ mul(858,751)why()+#what()>/-<from()mul(713,3)?why(482,825)&?&/*!*mul(256,486)select()<what()@mul(652,369)?{<select()why(),mul(836,865))<mul(454,939)%>:how()/how()?don't()when()when(){~/]mul(253,448)^^))mul(84>mul(85,415) ]})+why(40,365)}how()mul(11,381)how()%%who()where()why()mul(906,336)how()~where()-who():]where()select(239,576)why()mul(912,508)mul(24 ~^from(718,313)-@mul(517,16)@%mul(55,215) !what();*^/@mul(880,672)where(522,916)mul(804who()what()[(where(286,361)<select():(what()mul(155,258){!+!^mul(423,458)$how(615,130)'&select()don't()^{:$mul(326,138)^#(!mul(932,531)^?select()from()##who()how()who()mul+({<]#who()'{@mul(226,273)~/^why()<*why()mul(689,562)*mul(446,724)why()/when()when(869,266)do())why()mul(812,183)~from()%mul(971,441)when()%+?+^]mul(30,805))why()how()[from()mul(822,234),[?-%&](:$mul(440,835))when()&where()mul(12,352)])& ]-[{({mul(555,778)+mul(882,447)}:[!select()'mul(787,318)mul(539,118)$from()mul(511,100)+'~;+^^when()[mul(916,562)#+select()?]:~mul(506,622)]mul(778,105)(>@}^$:mul(51,378)({${,[from()}mul(543,793)}(}:[select()]mul(772,432)mul(253,865)(from()::?mul(150,306)<mul(62,389)who()#?when()~%/(!mul(146,73) -&#what()mul(114,144)<*&:{when()@how()from()]do(),>+< when()]when(78,385)]what()mul(681,911)}>what()mul(385,561)mul(97,729)$@mul(293,50):-@-mul(471,695)}where()-:^:}mul(566,792)&++[how()#mul(287,219)why()!mul(373,971)when()how()mul(154,605) ^mul(93,56)!@)@from()who(416,376)%$'[mul(472,481)^')select()when() {&mul(303,563)[;;@}~mul(167,624)mul(550,339{mul(626,174)'$;when()-[mul(11,151)how()select()&<when()!$where()<$mul(485,546)who()/(+,,who()#??mul(760,654)'when()why())when()%^do()?>-select())when()mul(951,26)mul(988[[/select()what(195,189)-mul(991,661)([}from()~:[why()^!mul(558,565)select()+*}mul(525,81)
|
||||||
|
?select()mul(457,497)from()who()[how()who()select(){:(>mul(273,631):)' )mul(433,659)/select()$ ??mul(996,214);'&>:(#!don't();<mul(720,546)when(827,349)<#<mul(143,489)mul(674,877)+&!what()'#mul(44})'from()+&where(){!~select(840,430)mul(212,347)why()@@~who()mul(969,631)why()where()select(887,765)%why()~/}}mul(519,309)'@}mulselect(606,267)~don't()'mul(216,53);^who()mul(71,582)[why()select())from()]%>from()mul(806,472)$;why()<who()&:){~mul}{ )! mul(143,398)mul(447,376)](> what()^,?don't()+-#what(220,900)]-from()mul(672,653)where()why()select(){why()*mul(394,630)mul(214,535)}(from()'from()!mul(304,752)who()'{from()from()%;@from(471,425)from()mul(431,414)?from(536,612)*don't()[<mul(679,373)]when()^mul(959,511)where()<[%mul(505,852)from()$!#do()++>mul(494,757),{@mul(864,136)why()%$ mul(901,770)(?how()! !mul(389,250)>:mul(107,240)how()+how(),mul(402,117)^:#,why(432,943)~mul(764,768)</-why()when()],why()$mul(300,720)->%/) mul(486,61)[from()% ~^}how(){mul(436,252))'mul(314,683)what()$@&)mul^what()(how()mul(356,528)+?] %)#mul(945,995);when(336,103)mul(904,121)'),mulwhy()why();why()@<*%+mul(173,177)mul(552,612);,select()%@mul(824,863)@from()mul(151,472)select()when()^}mul(381,33)mul(987,66)mul)+from()]]'mul(484,944),<how()~where()mul(904,715)mul(254,934)from())?!&^$,~mul(95,795)mul(317,265)~why()$;mul(964,988)##@mul(602,81)~from(){,mul(927,985</[+##mul(544,556)~(/how()~mul(816,799)when()[from()why()],mul(357,945)?%,(mul(513,777)from(104,28);>} mul(79,219)mul(645,343)+#select()#what()#>#mul(962,402)^,mul(170,849)+$/[],{ how()*mul!select()#how()do() ~[!{mul(132,291)from()when()^{mul(876,121);@&>?mul(14,405)select()}'why()^!mul(701,908)^]+what()how()%when(),{mul(163,570)why(),where(802,334)from()^mul(203,784)^select()who()^*@when()~/)mul(457,821)how()*!how()%#>[mul(911,205)*}];/]*!select()mul(209,380)why():*@*where()what()]who()mul(158,681)select()from()mul(913,623)select()?,>mul(692,963)>}mul(641,525)why()mul(107,645)from()(+mul(948,423)mul(497,166)from()%'mul(972,376)when()where()[[don't()~}/what()$*what()mul(205,460)</:#@*how()mul(541,537)]mul(974,76)[{)^ {(mul(985,506)(#@why()mul(105,151)from()how():{select()mul(726,399))#(how()mul(166,283);+([~-!,don't()-how()mul(814,281),who(244,221)<^:%:^)how()mul(46,257), @mul(620,932)>,-%:-mul(212,248)when()select()mul(511,961)who()who(694,88)>mul(725,998(<]mul(881,682)select()select()mul(392,740)$>)mul(794,79),;$mul/:};#(>/)mul(60,633)['!~how())who(){$mul(757,172)%how()what()how(),mul(19,116)-'?who();where()when()who():mul(201!]how()-'{#where()<+what()mul(848,314)->from()mul(366,508;^[%why(10,776){~mul(403,696)(~{))why()/mul(61,507),+ }mul(771,565)-}@)mul(726,28)*;when()-$!:,[&mul(672,226)}?]*do()when()[mul(749,250)(mul(514,431)~*when()%what()'how(204,98)how()where()mul(529[]}~mul(204,564)what()++<]}&select()mul(459,244)what()mul(687,827)?when()<~,]<?~<mul(448,423)%mul(660,452)what()mul(111,31),/mul(485,116)select();*>%$+<<*mul(403,7)how()what()^mul(433,321)}%do()where(436,974)^/,+what()who() mul(338,162):(mul(876,575)%why()!+;/^why()mul(588,29)(how()select(350,689)+'^-:-&mul(694,2)what()mul(997,566)from()!]%'?;<-why()mul(540,192)^from()*<):~do()what()from()/{/mul(236,520)#>when()*#)(mul(243,137)mul(483,202)('who()do()when(){>$$what()&)']mul(763,83)>who(744,412)*^who()*) don't()mul(948,448)(:mul(867,155)^^***,+}-^mul(510,656),,;:[^[!mul(37,392where()[mul(67,386)'(^!,~mul+~(+ how(321,247)}$*mul(632,944)
|
||||||
|
{how()mul,how()when()+when()}what()mul(900,270)^:,where()mul(489,842){!what()when()#!mul(243,646)!where()*when();who()mul(67,231)select()*select()do()how()$(**,+how();mul(472,391)select()@'how(630,875)who()>mul(83,172);+$where()+~~mul(163,367)<mul(788,607)from()?&]what() mul(780,691)/@when()((who()+~?mul(323,888)mul(67,878),,):>mul(10,776) ({select()select()~*[mul(216,443)-)select()::(-?@select()mul(938,86)mul(238,475)where() }<(don't() +>;mul(491,189)~[/#;mul(687,66)$+]'-don't()+when()&+$;-]mul(605,671)?;mul(8,465)when()<~:^(what(549,164)[mul(253,71)([?where()from()why()?when()$mul(885,722)~~>what()select()]@%>mul(12,734)(/)[where()select(649,213)from(945,849)(*%mul(948/when()mul(490,837)(@where()'what()}what()why()mul(906,59)when()how()#select(),:}do():#mulwhat(918,618);mul(290,290)mul(894,51)?mul(230,518)*,;select()mul(366,247)[]from(946,647)&!^where()where()how(),mul(94,114)mul(275,889)when(){$#[<?<$when()mul(172,248)$)where()what()mul(292,19)<why()/@@[$@mul(715,134))why()~}'how()~mul(405,534)mul(827,178)when()-mul(349,293){},${[;from()(what()mul(851,954)mul(384,35)$#/mul?+%&,mul(334,901)why()~~(&from()[]mul(497,387)select()!{)]select()when():!mul(57,56)~$**}^how()mul(952,706)~+!what()#$@}]don't()]mul(884,597)+[&(^{what()where()~mul(617,23)what(806,100)where(660,881);)}!don't()$<}mul(630,77))*+mul(366,51,%%:*^+mul(128,254)why()-what()!'where()+%mul(356,640)('(mul(366,919),,how()!why()when()who()%]mul(414,493)&from()?[mul(810,596)>mul(892,356)&[-mul(303,485)*select()how()''mul(738,220)!@mul(371,794)where()mul(380,261)mul(210,796): *{$]why()how()?mul(615,74)select()from()do()from()*how()/'mul(507,36)what()when()#]?#{-mul(398,229)select()}mul(844,299)!<;#^%]+,when()mul(4,527)#when()##!%]when()(mul(708,803)}/when()why(514,182)({mul(336,134);,[}/:mul(899,874)select()how()]#mul(548,253)>^~mul(294,767)#^* mul(444,302)where()how()]{]select()!where()!mul(906,663)mul(656,596){[ & ;^+%-mul(108,609)who()+(why()/how()(@don't()'{-from() mul(364,848),^$ ?] +:mul(889,175)mul(660,583)*!@mul(423,213)mul(311,390)%how()?!{mul(738,520)mul(97,84)?mul(423,763)<'?mul(15,141)mul(300,197)>select()%when()mul(640,732)^}mul(919,588)(}<!select()&}select()select()mul(655,724)),mul(271,552)don't()from()mul(364,12)(%[why(): ]when()mul(106,517)((select()mul(800,445)@when()']mul(325,316)>how(),-]how(),<don't()/+who()<,select(){mul(292,951)mul(966,75)@@?}{+~from();mul(472,867) :*&?/mul(408,687)!+[][[!?$mul(211,912)who()<}mul(826,742)/mul(362,601))mul(823,393)when()~select()!what()mul(144,414)~mul(743,461)*~who()]select()mul(579,413)why(),,?mul(690,917)]<)where()@]%%mul(774,571){!*@don't()^from()how();@~$mul(317,142)select(161,55)mul(636,392)}mul(538,552) when()'#$#mul(580,654){when(46,367)'}]select())mul(775,934)who()%%>select()!select()what()from()mul(231,907)where(799,691)-,:)@]mul(336,972)<what()~* {#-:;mul(500,188)$$%]&!$mul(938,24)*^?)mul(576,582),($how()/when() !mul(701,946)~#^<don't())mul(982,103)?how()* ^from(507,869)'who()select()mul(107,848)why() ')when()when()select(903,770)#who()mul(367,164)}how()mul(869,254)mul(993,910);;mul(969,393)who()<select() :select()?&'[mul(273,219)who());%%^!!-mul(464,515)&;{why()<<)'*mul(73,753)],-/mul(263,676)what()
|
10
2024/04/example.txt
Normal file
10
2024/04/example.txt
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
MMMSXXMASM
|
||||||
|
MSAMXMSMSA
|
||||||
|
AMXSXMAAMM
|
||||||
|
MSAMASMSMX
|
||||||
|
XMASAMXAMM
|
||||||
|
XXAMMXXAMA
|
||||||
|
SMSMSASXSS
|
||||||
|
SAXAMASAAA
|
||||||
|
MAMMMXMMMM
|
||||||
|
MXMXAXMASX
|
51
2024/04/index.js
Normal file
51
2024/04/index.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
fs.readFile('example.txt', ({ encoding: "utf-8" }), (err, data) => {
|
||||||
|
const letters = ["X", "M", "A", "S"]
|
||||||
|
|
||||||
|
const rows = [...data.split('\n')]
|
||||||
|
|
||||||
|
// directions, straight first: east,south,west,north,southeast,southwest,northwest,northeast
|
||||||
|
const dirs = [[1, 0], [0, 1], [-1, 0], [0, -1], [1, 1], [-1, 1], [-1, -1], [-1, 1]]
|
||||||
|
|
||||||
|
let found_words = 0
|
||||||
|
let found_letters = []
|
||||||
|
const width = rows[0].length
|
||||||
|
const height = rows.length
|
||||||
|
// letters.forEach(letter => {
|
||||||
|
// for (i = 0; i < rows.length; i++) {
|
||||||
|
|
||||||
|
|
||||||
|
// }
|
||||||
|
// })
|
||||||
|
for (let letter = 0; letter < letters.length; letter++) {
|
||||||
|
let letter_positions = []
|
||||||
|
for (let x = 1; x <= width; x++) {
|
||||||
|
for (let y = 1; y <= height; y++) {
|
||||||
|
if (rows[y - 1][x - 1] === letters[letter]) {
|
||||||
|
letter_positions.push([x, y])
|
||||||
|
|
||||||
|
// check if there is a next letter
|
||||||
|
dirs.forEach(direction => {
|
||||||
|
let [new_x, new_y] = direction
|
||||||
|
if (x + new_x in [...rows[y - 1]] && y + new_y in [...rows.keys()] && letter + 1 in [...letters.keys()]) {
|
||||||
|
//console.log(`I'm at ${x},${y} with ${letters[letter]}. Looking for letter at ${x + new_x},${y + new_y}`)
|
||||||
|
if (letters[letter + 1] === rows[y - 1 + new_y][x - 1 + new_x]) {
|
||||||
|
console.log(`I am at ${x},${y} with $ ${letters[letter]}. Found ${letters[letter + 1]}.`)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
found_letters[letter] = letter_positions
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(found_letters)
|
||||||
|
console.log(`width: ${width}`)
|
||||||
|
console.log(`height: ${height}`)
|
||||||
|
})
|
||||||
|
|
||||||
|
function findFirstLetter(letter) {
|
||||||
|
const [row, col] = Array
|
||||||
|
return [row, col]
|
||||||
|
}
|
0
2024/04/input.txt
Normal file
0
2024/04/input.txt
Normal file
9
2024/07/example.txt
Normal file
9
2024/07/example.txt
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
190: 10 19
|
||||||
|
3267: 81 40 27
|
||||||
|
83: 17 5
|
||||||
|
156: 15 6
|
||||||
|
7290: 6 8 6 15
|
||||||
|
161011: 16 10 13
|
||||||
|
192: 17 8 14
|
||||||
|
21037: 9 7 18 13
|
||||||
|
292: 11 6 16 20
|
35
2024/07/index.js
Normal file
35
2024/07/index.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
import fs from 'node:fs'
|
||||||
|
function add(a, b) {
|
||||||
|
return a + b
|
||||||
|
}
|
||||||
|
function mul(numbers) {
|
||||||
|
const res = numbers.reduce((acc, next) => { console.log(acc, next); return acc * next }, 0)
|
||||||
|
//console.log(res)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function testMathOperations(product, numbers) {
|
||||||
|
let result = 0
|
||||||
|
const operations = numbers.length - 1
|
||||||
|
|
||||||
|
|
||||||
|
//let res = mul(numbers)
|
||||||
|
//let res = product == numbers.reduce((acc, next) => { acc * next }, 0) ? result : 0
|
||||||
|
|
||||||
|
if (product === result) return product
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
fs.readFile('example.txt', ({ encoding: 'utf-8' }), (err, data) => {
|
||||||
|
const regex = /^(\d+): ([0-9 ]+)/g
|
||||||
|
let result = 0
|
||||||
|
for (let line of data.split('\n')) {
|
||||||
|
const test = line.matchAll(regex).next().value
|
||||||
|
const product = test[1]
|
||||||
|
const numbers = test[2].split(' ')
|
||||||
|
result += testMathOperations(product, numbers)
|
||||||
|
console.log(product, numbers, result)
|
||||||
|
//console.log(`something should happen to ${numbers} for becoming ${result}`)
|
||||||
|
}
|
||||||
|
console.log(result)
|
||||||
|
})
|
0
2024/07/input.txt
Normal file
0
2024/07/input.txt
Normal file
26
2024/09/index.js
Normal file
26
2024/09/index.js
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
let disk_map = "2333133121414131402"
|
||||||
|
// 0..111....22222
|
||||||
|
|
||||||
|
//let fileArray = Array.from(file)
|
||||||
|
|
||||||
|
output = ""
|
||||||
|
hints = ""
|
||||||
|
//output += "".padStart(disk_map[0], 0)
|
||||||
|
let id = -1
|
||||||
|
let is_file = false
|
||||||
|
for (let idx = 0; idx < disk_map.length; idx++) {
|
||||||
|
let length = disk_map[idx]
|
||||||
|
is_file = !is_file
|
||||||
|
id = is_file ? id + 1 : id
|
||||||
|
output += "".padStart(length, (is_file ? id : '.'))
|
||||||
|
new_disk_map =
|
||||||
|
}
|
||||||
|
|
||||||
|
function frag() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
console.log(disk_map)
|
||||||
|
//console.log(hints)
|
||||||
|
console.log(output)
|
11
2024/09/package.json
Normal file
11
2024/09/package.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "09",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
0
2024/10/index.js
Normal file
0
2024/10/index.js
Normal file
11
2024/10/package.json
Normal file
11
2024/10/package.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "10",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
134
2024/11/index.js
Normal file
134
2024/11/index.js
Normal file
@ -0,0 +1,134 @@
|
|||||||
|
/*
|
||||||
|
If the stone is engraved with the number 0, it is replaced by a stone engraved with the number 1.
|
||||||
|
If the stone is engraved with a number that has an even number of digits, it is replaced by two stones. The left half of the digits are engraved on the new left stone, and the right half of the digits are engraved on the new right stone. (The new numbers don't keep extra leading zeroes: 1000 would become stones 10 and 0.)
|
||||||
|
If none of the other rules apply, the stone is replaced by a new stone; the old stone's number multiplied by 2024 is engraved on the new stone.
|
||||||
|
*/
|
||||||
|
|
||||||
|
let initial_stones = "17639 47 3858 0 470624 9467423 5 188" //"1 2 4 6921 7 823 2219 31 0 4500 22 111 0 9213 44 1 23 1";
|
||||||
|
//let initial_stones = "125 17"
|
||||||
|
|
||||||
|
const cache = []//new Map()
|
||||||
|
|
||||||
|
const Bisect = (input => {
|
||||||
|
let text = String(input)
|
||||||
|
let len = text.length
|
||||||
|
let left = text.slice(0, len / 2)
|
||||||
|
let right = text.slice(len / 2, len)
|
||||||
|
return [parseInt(left), parseInt(right)]
|
||||||
|
})
|
||||||
|
const Blink = ((stone, numberOfTimes) => {
|
||||||
|
//console.log(`----------${numberOfTimes}----------`)
|
||||||
|
if (numberOfTimes === 0) return 1
|
||||||
|
if (cache[`${stone}.${numberOfTimes}`]) {
|
||||||
|
console.log(`Found cached value for ${stone}: ${cache[`${stone}.${numberOfTimes}`]}`)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
if (stone === 0) {
|
||||||
|
//console.log(`Stone with value 0 turned to 1`)
|
||||||
|
cache[`${stone}.${numberOfTimes}`] = Blink(1, numberOfTimes - 1)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
if (String(stone).length % 2 === 0) {
|
||||||
|
let stones = Bisect(stone)
|
||||||
|
let left = stones[0]
|
||||||
|
let right = stones[1]
|
||||||
|
cache[`${left}.${numberOfTimes}`] = Blink(left, numberOfTimes - 1)
|
||||||
|
cache[`${right}.${numberOfTimes}`] = Blink(right, numberOfTimes - 1)
|
||||||
|
//console.log(`Found left value: ${left}, right value: ${right}`)
|
||||||
|
return cache[`${left}.${numberOfTimes}`], cache[`${right}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
cache[`${stone}.${numberOfTimes}`] = Blink(stone * 2024, numberOfTimes - 1)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
})
|
||||||
|
function startBlinking(stone, numberOfTimes) {
|
||||||
|
if (numberOfTimes === 0) return 1
|
||||||
|
|
||||||
|
const key = `${stone}:${numberOfTimes}`
|
||||||
|
if (key in cache) return cache[key]
|
||||||
|
if (typeof stone == 'object') { }
|
||||||
|
if (stone === 0) { cache[key] = 1; startBlinking(stone, numberOfTimes - 1) }
|
||||||
|
if (String(stone).length % 2 === 0) {
|
||||||
|
[left, right] = [...Bisect(stones)]
|
||||||
|
cache[key] = [left, right]
|
||||||
|
return Blink([left, right], numberOfTimes - 1)
|
||||||
|
}
|
||||||
|
cache[key] = startBlinking(stone * 2024, numberOfTimes - 1)
|
||||||
|
return startBlinking(stone, numberOfTimes)
|
||||||
|
}
|
||||||
|
|
||||||
|
function transform(stone) {
|
||||||
|
if (stone === 0) {
|
||||||
|
return [1]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stone.toString().length % 2 === 0) {
|
||||||
|
const str = stone.toString()
|
||||||
|
const midIndex = Math.ceil(str.length / 2)
|
||||||
|
const [left, right] = Bisect(stone.toString())
|
||||||
|
//const left = str.slice(0, midIndex)
|
||||||
|
//const right = str.slice(midIndex)
|
||||||
|
|
||||||
|
return [Number(left), Number(right)]
|
||||||
|
}
|
||||||
|
|
||||||
|
return [stone * 2024]
|
||||||
|
}
|
||||||
|
|
||||||
|
function simulation(stone, ticks) {
|
||||||
|
const key = `${ticks}-${stone}`
|
||||||
|
|
||||||
|
if (cache[key]) return cache[key]
|
||||||
|
if (ticks === 0) return 1
|
||||||
|
|
||||||
|
const nextStones = transform(stone)
|
||||||
|
console.log(`stone ${stone}, received ${nextStones}`)
|
||||||
|
const result = nextStones.reduce(
|
||||||
|
(acc, nextStone) => acc + simulation(nextStone, ticks - 1),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
cache[key] = result
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
//let num = "125 7 0 91".split(' ').forEach(stone => { num += simulation(stone, 25) })
|
||||||
|
let num = 0
|
||||||
|
for (stone of "17639 47 3858 0 470624 9467423 5 188".split(' ')) {
|
||||||
|
num += simulation(stone, 75)
|
||||||
|
}
|
||||||
|
console.log(num)
|
||||||
|
//console.log(cache)
|
||||||
|
//let num = Blink("125 17", 5)
|
||||||
|
//console.log(num)
|
||||||
|
// function blink(stones) {
|
||||||
|
// let new_stones = []
|
||||||
|
// stones.split(' ').forEach(element => {
|
||||||
|
// let changed = false
|
||||||
|
// let new_element = 0
|
||||||
|
// if (element == 0) {
|
||||||
|
// // switch place with a 1
|
||||||
|
// //console.log(`${element} is a 0, turn into 1`)
|
||||||
|
// new_element = 1
|
||||||
|
// changed = true
|
||||||
|
// }
|
||||||
|
// if (element.length % 2 === 0) {
|
||||||
|
// let right = parseInt(element.slice(element.length / 2, element.length))
|
||||||
|
// let left = parseInt(element.slice(0, element.length / 2))
|
||||||
|
// new_stones.push(left)
|
||||||
|
// new_element = right
|
||||||
|
// changed = true
|
||||||
|
// }
|
||||||
|
// if (!changed) new_element = element * 2024
|
||||||
|
// new_stones.push(parseInt(new_element))
|
||||||
|
// });
|
||||||
|
// return new_stones.join(" ");
|
||||||
|
// console.log(`${i + 1}: ${new_stones.join(" ")}`)
|
||||||
|
// }
|
||||||
|
|
||||||
|
//for (let i = 0; i < 75; i++) {
|
||||||
|
// console.log(`------------------------`)
|
||||||
|
// initial_stones = blink(initial_stones)
|
||||||
|
// console.log(`${i + 1}: ${initial_stones.split(' ').length}`)
|
||||||
|
//console.log(`${initial_stones}`)
|
||||||
|
//}
|
||||||
|
|
123
2024/11/index_old.js
Normal file
123
2024/11/index_old.js
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
/*
|
||||||
|
If the stone is engraved with the number 0, it is replaced by a stone engraved with the number 1.
|
||||||
|
If the stone is engraved with a number that has an even number of digits, it is replaced by two stones. The left half of the digits are engraved on the new left stone, and the right half of the digits are engraved on the new right stone. (The new numbers don't keep extra leading zeroes: 1000 would become stones 10 and 0.)
|
||||||
|
If none of the other rules apply, the stone is replaced by a new stone; the old stone's number multiplied by 2024 is engraved on the new stone.
|
||||||
|
*/
|
||||||
|
|
||||||
|
let initial_stones = "17639 47 3858 0 470624 9467423 5 188" //"1 2 4 6921 7 823 2219 31 0 4500 22 111 0 9213 44 1 23 1";
|
||||||
|
//let initial_stones = "125 17"
|
||||||
|
|
||||||
|
const cache = []//new Map()
|
||||||
|
|
||||||
|
const Bisect = (input => {
|
||||||
|
let text = String(input)
|
||||||
|
let len = text.length
|
||||||
|
let left = text.slice(0, len / 2)
|
||||||
|
let right = text.slice(len / 2, len)
|
||||||
|
return [parseInt(left), parseInt(right)]
|
||||||
|
})
|
||||||
|
const Blink = ((stone, numberOfTimes) => {
|
||||||
|
//console.log(`----------${numberOfTimes}----------`)
|
||||||
|
if (numberOfTimes === 0) return 1
|
||||||
|
if (cache[`${stone}.${numberOfTimes}`]) {
|
||||||
|
console.log(`Found cached value for ${stone}: ${cache[`${stone}.${numberOfTimes}`]}`)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
if (stone === 0) {
|
||||||
|
//console.log(`Stone with value 0 turned to 1`)
|
||||||
|
cache[`${stone}.${numberOfTimes}`] = Blink(1, numberOfTimes - 1)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
if (String(stone).length % 2 === 0) {
|
||||||
|
let stones = Bisect(stone)
|
||||||
|
let left = stones[0]
|
||||||
|
let right = stones[1]
|
||||||
|
cache[`${left}.${numberOfTimes}`] = Blink(left, numberOfTimes - 1)
|
||||||
|
cache[`${right}.${numberOfTimes}`] = Blink(right, numberOfTimes - 1)
|
||||||
|
//console.log(`Found left value: ${left}, right value: ${right}`)
|
||||||
|
return cache[`${left}.${numberOfTimes}`], cache[`${right}.${numberOfTimes}`]
|
||||||
|
}
|
||||||
|
cache[`${stone}.${numberOfTimes}`] = Blink(stone * 2024, numberOfTimes - 1)
|
||||||
|
return cache[`${stone}.${numberOfTimes}`]
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
function transform(stone) {
|
||||||
|
if (stone === 0) {
|
||||||
|
return [1]
|
||||||
|
}
|
||||||
|
|
||||||
|
if (stone.toString().length % 2 === 0) {
|
||||||
|
const str = stone.toString()
|
||||||
|
const midIndex = Math.ceil(str.length / 2)
|
||||||
|
const left = str.slice(0, midIndex)
|
||||||
|
const right = str.slice(midIndex)
|
||||||
|
|
||||||
|
return [Number(left), Number(right)]
|
||||||
|
}
|
||||||
|
|
||||||
|
return [stone * 2024]
|
||||||
|
}
|
||||||
|
|
||||||
|
function simulation(stone, ticks) {
|
||||||
|
const key = `${ticks}-${stone}`
|
||||||
|
|
||||||
|
if (cache[key]) return cache[key]
|
||||||
|
if (ticks === 0) return 1
|
||||||
|
|
||||||
|
const nextStones = transform(stone)
|
||||||
|
console.log(`stone ${stone}, received ${nextStones}`)
|
||||||
|
const result = nextStones.reduce(
|
||||||
|
(acc, nextStone) => acc + simulation(nextStone, ticks - 1),
|
||||||
|
0
|
||||||
|
)
|
||||||
|
|
||||||
|
cache[key] = result
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
let num = "125 7 0 91".split(' ').forEach(stone => { num += simulation(stone, 25) })
|
||||||
|
//let num = 0
|
||||||
|
//for (stone of "17639 47 3858 0 470624 9467423 5 188".split(' ')) {
|
||||||
|
// num += simulation(stone, 25)
|
||||||
|
//}
|
||||||
|
console.log(num)
|
||||||
|
//console.log(cache)
|
||||||
|
//let num = Blink("125 17", 5)
|
||||||
|
//console.log(num)
|
||||||
|
// function blink(stones) {
|
||||||
|
// let new_stones = []
|
||||||
|
// stones.split(' ').forEach(element => {
|
||||||
|
// let changed = false
|
||||||
|
// let new_element = 0
|
||||||
|
// if (element == 0) {
|
||||||
|
// // switch place with a 1
|
||||||
|
// //console.log(`${element} is a 0, turn into 1`)
|
||||||
|
// new_element = 1
|
||||||
|
// changed = true
|
||||||
|
// }
|
||||||
|
// if (element.length % 2 === 0) {
|
||||||
|
// let right = parseInt(element.slice(element.length / 2, element.length))
|
||||||
|
// let left = parseInt(element.slice(0, element.length / 2))
|
||||||
|
// new_stones.push(left)
|
||||||
|
// new_element = right
|
||||||
|
// changed = true
|
||||||
|
// }
|
||||||
|
// if (!changed) new_element = element * 2024
|
||||||
|
// new_stones.push(parseInt(new_element))
|
||||||
|
// });
|
||||||
|
// return new_stones.join(" ");
|
||||||
|
// console.log(`${i + 1}: ${new_stones.join(" ")}`)
|
||||||
|
// }
|
||||||
|
|
||||||
|
//for (let i = 0; i < 75; i++) {
|
||||||
|
// console.log(`------------------------`)
|
||||||
|
// initial_stones = blink(initial_stones)
|
||||||
|
// console.log(`${i + 1}: ${initial_stones.split(' ').length}`)
|
||||||
|
//console.log(`${initial_stones}`)
|
||||||
|
//}
|
||||||
|
|
11
2024/11/package.json
Normal file
11
2024/11/package.json
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"name": "day-11",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "index.js",
|
||||||
|
"scripts": {
|
||||||
|
"test": "echo \"Error: no test specified\" && exit 1"
|
||||||
|
},
|
||||||
|
"author": "",
|
||||||
|
"license": "ISC",
|
||||||
|
"description": ""
|
||||||
|
}
|
Reference in New Issue
Block a user