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
JavaScript
After writing a procedural to-the-point version in C, tried a JavaScript solution too because it’s just perfect for list comprehension. The part 2 search is inefficient but the data size is small.
Code
const fs = require("fs"); const U = require("./util"); const pairs = fs .readFileSync(process.argv[2] || process.stdin.fd, "utf8") .split("\n") .filter(x => x != "") .map(x => x.split(/ +/).map(Number)); const ls = pairs.map(x => x[0]); ls.sort(); const rs = pairs.map(x => x[1]); rs.sort(); const p1 = U.sum(ls.map((l, i) => Math.abs(l - rs[i]))); const p2 = U.sum(ls.map(l => l * U.count(rs, l))); console.log("01:", p1, p2);
https://github.com/sjmulder/aoc/blob/master/2024/js/day01.js