Day 25: Code Chronicle
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://topaz.github.io/paste/ 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/6637268
- 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
Spent 10 minutes debugging my solution until I reread and found out they wanted the number of keys that fit, not the ones that overlapped. Reading comprehension is not it tonight.
const [locks, keys] = require('fs').readFileSync(0, 'utf-8').split(/\r?\n\r?\n/g).filter(v => v.length > 0).map(s => s.split(/\r?\n/g).filter(v => v.length > 0)).reduce((acc, s) => { const lock = s[0].split('').every(v => v === '#'); const schema = s.slice(1, -1); let rotated = []; for (let i = 0; i < schema[0].length; i += 1) { for (let j = 0; j < schema.length; j += 1) { if (!rotated[i]) rotated[i] = []; rotated[i].push(schema[j][i]); } } if (!lock) { rotated = rotated.map(v => v.reverse()); } const pinHeights = []; for (const row of rotated) { const height = row.indexOf('.'); pinHeights.push(height !== -1 ? height : 5); } if (lock) { acc[0].push(pinHeights); } else { acc[1].push(pinHeights); } return acc; }, [[],[]]); let fits = 0; for (const lock of locks) { for (const key of keys) { let overlapped = false; for (let i = 0; i < lock.length; i += 1) { if ((lock[i] + key[i]) > 5) { overlapped = true; } } if (!overlapped) { fits += 1; } } } console.log('Part One', fits);