adventofcode/2021/07/main.ts

54 lines
1.7 KiB
TypeScript

import { readFileSync } from "fs"
import { argv, exit } from "process"
// too low 92772307
//
// too high 92949057
function second(input: number[]): void {
const average = (input.reduce((a, x) => a += x) / input.length)
console.log(`Average: ${average}`)
console.log(`Summed Distance Rounded: ${input.map(x => increasingDistanceToAverage(x, Math.floor(average))).reduce((a, x) => a += x)}`)
console.log(`Summed Distance +1: ${input.map(x => increasingDistanceToAverage(x, Math.floor(average) + 1)).reduce((a, x) => a += x)}`)
console.log(`Summed Distance -1: ${input.map(x => increasingDistanceToAverage(x, Math.floor(average) - 1)).reduce((a, x) => a += x)}`)
}
function first(input: number[]): void {
const med = findMedian(input.sort((a, b) => compareInt(a, b)))
console.log(`Median: ${med}`)
const distance = distanceToMedian(input, med)
console.log(`Fuel: ${distance}`)
}
function increasingDistanceToAverage(input: number, average: number): number {
const diff = difference(input, average)
console.log(JSON.stringify(diff))
return diff
}
function distanceToMedian(input: number[], median: number): number {
let fuel = 0
input.forEach(x => fuel += difference(x, median))
return fuel
}
function findMedian(input: number[]): number {
const length = input.length
let location = Math.floor(length / 2)
const value = input[location]
return value
}
const difference = (a: number, b: number) => { return Math.abs(a - b) }
const compareInt = (a: number, b: number) => { return a - b }
function main(): void {
if (argv[2] && argv[2] != "") {
const values = readFileSync(argv[2], "utf8")
const inputs = values.replace('\n', '').split(',').map(x => parseInt(x))
first(inputs)
second(inputs)
} else {
console.error("No filename")
exit()
}
}
main()