add stuff form last year (gave up quickly)

This commit is contained in:
2024-12-01 16:42:05 +01:00
commit c2b35be668
23 changed files with 968 additions and 0 deletions

58
2023/03/index.ts Normal file
View File

@@ -0,0 +1,58 @@
const args = Bun.argv.slice(2)
if(args.length !== 1) {
console.error('Please, provide an input file')
process.exit(1)
}
const filename = args[0];
const input = Bun.file(filename)
const text = await input.text()
let count = 0
let prevNums: Array<[string, number]> = []
let prevSyms: Array<[number, string[]]> = []
text.split('\n').forEach(ln => {
const line = ln.trim()
if(!line) return
let tokens = line.matchAll(/\d+|\*/g)
let nums: Array<[string, number]> = [], syms: Array<[number, string[]]> = []
for(const token of tokens) {
/\d/.test(token.toString()) ?
nums.push([token.toString(), token.index as number]) :
syms.push([token.index as number, []])
}
pushNums(prevSyms, nums)
.map(([_index, attached]) => attached)
.filter(attached => attached.length == 2)
.forEach(attached => {
count += attached
.map(e => parseInt(e))
.reduce((a = 1, b = 1) => a * b, 1)
})
syms = pushNums(syms, nums)
syms = pushNums(syms, prevNums)
prevNums = nums
prevSyms = syms
})
console.log(count)
function pushNums(symbols: Array<[number, string[]]>, nums: Array<[string, number]>): [number, string[]][] {
return symbols.map(([index, attached]) => {
attached.push(
...nums.filter(([num, nindex]) => {
return index >= nindex - 1 && index <= nindex + num.length
}).map(([num]) => num)
)
return [index, attached]
})
}