2020-12-02 22:42:11 +01:00
|
|
|
import * as fs from "fs";
|
|
|
|
|
|
|
|
const ENTRY_REGEX = /^(\d+?)-(\d+?) (\w?): (\w+)$/;
|
|
|
|
|
|
|
|
/**
|
2020-12-07 08:13:46 +01:00
|
|
|
* Main function for Puzzle B
|
2020-12-02 22:42:11 +01:00
|
|
|
*
|
|
|
|
* @param {string} data Puzzle input as a single string.
|
|
|
|
* @returns {number} Amount of valid passwords in puzzle input.
|
|
|
|
*/
|
|
|
|
async function main(data) {
|
|
|
|
const lines = data.split("\n").map((line) => line.trim());
|
|
|
|
const pass_data = lines.map((line) => line.match(ENTRY_REGEX));
|
|
|
|
|
|
|
|
let valid_passwords = [];
|
|
|
|
for (const entry of pass_data) {
|
|
|
|
if (!entry) throw new Error(`Failed to parse some data. ${entry}`);
|
|
|
|
const index1 = parseInt(entry[1]) - 1;
|
|
|
|
const index2 = parseInt(entry[2]) - 1;
|
|
|
|
const char = entry[3];
|
|
|
|
const pass = entry[4];
|
|
|
|
|
|
|
|
if ((pass[index1] === char) !== (pass[index2] === char)) {
|
|
|
|
valid_passwords.push(entry);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
return valid_passwords.length;
|
|
|
|
}
|
|
|
|
|
|
|
|
fs.readFile("input", (err, data) => {
|
|
|
|
if (err) throw err;
|
|
|
|
main(data.toString()).then(console.log).catch(console.error);
|
|
|
|
});
|