This commit is contained in:
2024-12-09 07:41:16 +01:00
parent d2dc8fcd69
commit 1272e7a5a5
2 changed files with 107 additions and 0 deletions

45
Day 02/Part 1/index.ts Normal file
View File

@@ -0,0 +1,45 @@
import fs from 'node:fs';
export default function runner(input: string) {
fs.readFile(`./${input}`, 'utf8', (err, data) => {
if (err) throw err;
let count = 0;
data.split('\n').forEach(line => {
let safe = true;
let positive = undefined;
const spLine = line.split(' ');
if (!spLine[0] || !spLine[1]) throw new Error()
for(let i = 0; i<spLine.length-1;i++){
if(!spLine[i] || !spLine[i+1]) throw new Error();
if (!safe) continue;
let i1 = parseInt((spLine[i]??"0"))
let i2 = parseInt((spLine[i+1]??"0"))
console.log(`i1: ${i1} | i2: ${i2} | diff: ${i1-i2} | safe: ${safe}`)
if(i1-i2>3 || i2-i1>3 || i2-i1 == 0) {
safe = false;
continue;
}
if(i1-i2 > 0) {
if(!positive && positive !== undefined){
safe = false;
continue;
}
positive = true;
}
if(i1-i2 < 0) {
if(positive){
safe = false;
continue;
}
positive = false;
}
}
if(safe) count++
console.log(`---- safe=${count} ----`)
})
console.log(count)
})
}

62
Day 02/Part 2/index.ts Normal file
View File

@@ -0,0 +1,62 @@
import fs from 'node:fs';
export default function runner(input: string) {
fs.readFile(`./${input}`, 'utf8', (err, data) => {
if (err) throw err;
let count = 0;
data.split('\n').forEach(line => {
const spLine = line.split(' ');
let safe = checkIsSafe(spLine)
if(safe) count++
if(!safe){
let safeMinusOne = false;
for(let j = 0; j<spLine.length; j++){
if(safeMinusOne) continue;
console.log(`-- unsafe - checking without value #${j} --`)
let spLineF = spLine;
spLineF = spLineF.filter((_value, index) => index !== j);
safeMinusOne = checkIsSafe(spLineF)
}
if(safeMinusOne) {
safe = safeMinusOne
count++
}
}
if (safe) console.log(`---- safe=${count} ----`)
if (!safe) console.log("---- unsafe, even filtered ----")
})
console.log(count)
})
}
function checkIsSafe(spLine:string[]){
let safe = true;
let positive = undefined;
if (!spLine[0] || !spLine[1]) throw new Error()
for(let i = 0; i<spLine.length-1;i++){
if (!safe) continue;
if(!spLine[i] || !spLine[i+1]) throw new Error();
let i1 = parseInt((spLine[i]??"0"))
let i2 = parseInt((spLine[i+1]??"0"))
if(i1-i2>3 || i2-i1>3 || i2-i1 == 0) {
safe = false;
}
if(i1-i2 > 0) {
if(!positive && positive !== undefined){
safe = false;
}
positive = true;
}
if(i1-i2 < 0) {
if(positive){
safe = false;
}
positive = false;
}
console.log(`i1: ${i1} | i2: ${i2} | diff: ${i1-i2} | safe: ${safe} | positive: ${positive}`)
}
return safe;
}