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); });