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

  • @sjmulder
    link
    123 hours ago

    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