Day 5
This commit is contained in:
52
Day 05/Part 1/index.ts
Normal file
52
Day 05/Part 1/index.ts
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
import fs from 'node:fs';
|
||||||
|
|
||||||
|
export default function runner(input: string) {
|
||||||
|
fs.readFile(`./${input}`, 'utf8', (err, data) => {
|
||||||
|
if (err) throw err;
|
||||||
|
const [rawRules, rawPages] = data.split('\n\n')
|
||||||
|
|
||||||
|
|
||||||
|
var rules :Map<string, number> = new Map();
|
||||||
|
|
||||||
|
const parsedRules = (rawRules??"").split("\n")
|
||||||
|
parsedRules.map(pRule => {
|
||||||
|
const [v1, v2] = pRule.split("|")
|
||||||
|
rules.set(pRule, -1)
|
||||||
|
rules.set(`${v2}|${v1}`, 1)
|
||||||
|
})
|
||||||
|
|
||||||
|
let splitPages = (rawPages??"").split("\n")
|
||||||
|
splitPages = splitPages.filter(value => {
|
||||||
|
const aPages = value.split(",");
|
||||||
|
const bPages = value.split(",");
|
||||||
|
|
||||||
|
|
||||||
|
aPages.sort((a, b) => {
|
||||||
|
return rules.get(`${a}|${b}`)??0
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
return compareArrays(aPages, bPages);
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(splitPages)
|
||||||
|
|
||||||
|
let sum = 0;
|
||||||
|
|
||||||
|
splitPages.forEach(value => {
|
||||||
|
const pag = value.split(',')
|
||||||
|
const mid = ((pag.length-1)/2)
|
||||||
|
console.log(mid, pag[mid])
|
||||||
|
sum += parseInt(pag[mid]??"");
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(sum)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function compareArrays (x: any[], y: any[]): boolean{
|
||||||
|
return (x.length == y.length && x.every((value, index) => {
|
||||||
|
return value === y[index];
|
||||||
|
}))
|
||||||
|
}
|
||||||
56
Day 05/Part 2/index.ts
Normal file
56
Day 05/Part 2/index.ts
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
import fs from 'node:fs';
|
||||||
|
|
||||||
|
export default function runner(input: string) {
|
||||||
|
fs.readFile(`./${input}`, 'utf8', (err, data) => {
|
||||||
|
if (err) throw err;
|
||||||
|
const [rawRules, rawPages] = data.split('\n\n')
|
||||||
|
|
||||||
|
|
||||||
|
var rules :Map<string, number> = new Map();
|
||||||
|
|
||||||
|
const parsedRules = (rawRules??"").split("\n")
|
||||||
|
parsedRules.map(pRule => {
|
||||||
|
const [v1, v2] = pRule.split("|")
|
||||||
|
rules.set(pRule, -1)
|
||||||
|
rules.set(`${v2}|${v1}`, 1)
|
||||||
|
})
|
||||||
|
|
||||||
|
let splitPages = (rawPages??"").split("\n")
|
||||||
|
splitPages = splitPages.filter(value => {
|
||||||
|
const aPages = value.split(",");
|
||||||
|
const bPages = value.split(",");
|
||||||
|
|
||||||
|
|
||||||
|
aPages.sort((a, b) => {
|
||||||
|
return rules.get(`${a}|${b}`)??0
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
return !compareArrays(aPages, bPages);
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
let sortedPages : string[][] = []
|
||||||
|
splitPages.forEach(value => {
|
||||||
|
sortedPages.push(value.split(',').sort((a, b) => rules.get(`${a}|${b}`)??0))
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(sortedPages)
|
||||||
|
let sum = 0;
|
||||||
|
|
||||||
|
sortedPages.forEach(value => {
|
||||||
|
const mid = ((value.length-1)/2)
|
||||||
|
console.log(mid, value[mid])
|
||||||
|
sum += parseInt(value[mid]??"");
|
||||||
|
})
|
||||||
|
|
||||||
|
console.log(sum)
|
||||||
|
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
function compareArrays (x: any[], y: any[]): boolean{
|
||||||
|
return (x.length == y.length && x.every((value, index) => {
|
||||||
|
return value === y[index];
|
||||||
|
}))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user