Day 2
This commit is contained in:
45
Day 02/Part 1/index.ts
Normal file
45
Day 02/Part 1/index.ts
Normal 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
62
Day 02/Part 2/index.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user