Day 1: Historian Hysteria
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://blocks.programming.dev if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/22323136
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
You are viewing a single thread.
View all comments 4 points
*
TypeScript
Solution
import { AdventOfCodeSolutionFunction } from "./solutions";
function InstancesOf(sorted_array: Array<number>, value: number) {
const index = sorted_array.indexOf(value);
if(index == -1)
return 0;
let sum = 1;
for (let array_index = index + 1; array_index < sorted_array.length; array_index++) {
if(sorted_array[array_index] != value)
break;
sum += 1;
}
return sum;
}
export const solution_1: AdventOfCodeSolutionFunction = (input) => {
const left: Array<number> = [];
const right: Array<number> = [];
const lines = input.split("\n");
for (let index = 0; index < lines.length; index++) {
const element = lines[index].trim();
if(!element)
continue;
const leftRight = element.split(" ");
left.push(Number(leftRight[0]));
right.push(Number(leftRight[1]));
}
const numSort = (a: number, b: number) => a - b;
left.sort(numSort);
right.sort(numSort);
let sum = 0;
for (let index = 0; index < left.length; index++) {
const leftValue = left[index];
const rightValue = right[index];
sum += Math.abs(leftValue - rightValue);
}
const part1 = `Part 1: ${sum}`;
sum = 0;
for (let index = 0; index < left.length; index++) {
sum += left[index] * InstancesOf(right, left[index]);
}
const part2 = `Part 2: ${sum}`;
return `${part1}\n${part2}`;
};
Not the most elegant solution but it works. Decided to reuse the array since it is sorted for both sides.