-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathday_05.mjs
25 lines (20 loc) · 1.19 KB
/
day_05.mjs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
import fs from 'node:fs';
const inputData = fs.readFileSync('input.txt', 'utf-8').trim().split('\n');
const rules = {
hasMinimumThreeVowels: (string) => [...string].filter(char => [...'aeiou'].includes(char)).length >= 3,
hasDoubleLetter: (string) => [...string].some((char, i) => char === string[i + 1]),
avoidsBannedSubstrings: (string) => ['ab', 'cd', 'pq', 'xy'].every(subString => !string.includes(subString)),
hasDisjoinedDoubleLetter: (string) => [...string].some((char, i) => char === string[i + 2]),
hasRepeatingDoubleLetters: (string) => {
for (let i = 0; i < string.length - 1; i++) {
const subString = string.substring(i, i + 2);
if (string.lastIndexOf(subString) - string.indexOf(subString) >= 2) return true;
}
return false;
},
};
const oldRules = [rules.hasMinimumThreeVowels, rules.hasDoubleLetter, rules.avoidsBannedSubstrings];
const newRules = [rules.hasDisjoinedDoubleLetter, rules.hasRepeatingDoubleLetters];
const isNice = (string, rules) => rules.every(rule => rule(string));
console.log(`Part 1: ${inputData.reduce((acc, cur) => acc + isNice(cur, oldRules), 0)}`);
console.log(`Part 2: ${inputData.reduce((acc, cur) => acc + isNice(cur, newRules), 0)}`);