54 lines
1.1 KiB
JavaScript
54 lines
1.1 KiB
JavaScript
|
const fs = require('fs')
|
||
|
const readline = require('readline');
|
||
|
|
||
|
const readInterface = readline.createInterface({
|
||
|
input: fs.createReadStream('input'),
|
||
|
console: false
|
||
|
});
|
||
|
|
||
|
|
||
|
let passports = [];
|
||
|
let cPass = {};
|
||
|
|
||
|
readInterface.on('line', function(line) {
|
||
|
if (line.length == 0) {
|
||
|
passports.push(cPass);
|
||
|
cPass = {};
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
line.split(' ').forEach(function(kv) {
|
||
|
parts = kv.split(':');
|
||
|
cPass[parts[0]] = parts[1];
|
||
|
});
|
||
|
|
||
|
// console.log(cPass);
|
||
|
});
|
||
|
|
||
|
let required = new Set(['byr', 'iyr', 'eyr', 'hgt', 'hcl', 'ecl', 'pid' ]);
|
||
|
let optional = new Set([ 'cid' ]);
|
||
|
|
||
|
readInterface.on('close', function(line) {
|
||
|
// Save the last passport if it has any fields
|
||
|
if (Object.keys(cPass).length > 0) {
|
||
|
passports.push(cPass);
|
||
|
}
|
||
|
|
||
|
let count = 0;
|
||
|
passports.forEach(function(passport) {
|
||
|
let keys = new Set(Object.keys(passport));
|
||
|
let missing = new Set([...required].filter(x => !keys.has(x)))
|
||
|
|
||
|
console.log(passport);
|
||
|
console.log(missing);
|
||
|
console.log("");
|
||
|
|
||
|
if (missing.size == 0) {
|
||
|
count++;
|
||
|
}
|
||
|
});
|
||
|
|
||
|
console.log(count);
|
||
|
});
|
||
|
|