Day 2: Red-Nosed Reports
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
Also wrote a solution in JavaScript to play around with list comprehension. Wrote some utility functions for expressiveness (and lazy evaluation).
Code
const fs = require("fs"); const U = require("./util"); const isSafe = xs => U.pairwise(xs).every(([a,b]) => a!==b && a-b > -4 && a-b < 4) && new Set(U.pairwise(xs).map(([a,b]) => a < b)).size === 1; const rows = fs .readFileSync(process.argv[2] || process.stdin.fd, "utf8") .split("\n") .filter(x => x != "") .map(x => x.split(/ +/).map(Number)); const p1 = U.countBy(rows, isSafe); const p2 = U.countBy(rows, row => isSafe(row) || U.someBy(U.indices(row), i => isSafe([...row.slice(0, i), ...row.slice(i+1)]))); console.log("02:", p1, p2);
https://github.com/sjmulder/aoc/blob/master/2024/js/day02.js