const fs = require('fs') const readline = require('readline'); const readInterface = readline.createInterface({ input: fs.createReadStream('input'), console: false }); let seats = []; // [[x,y], [x,y], ...] readInterface.on('line', function(line) { let result = line.split('').reduce(function(sp, char) { const halfX = Math.floor((1 + sp[2] - sp[0]) / 2); const halfY = Math.floor((1 + sp[3] - sp[1]) / 2); switch(char) { case 'F': sp[3] -= halfY; break; case 'B': sp[1] += halfY; break; case 'L': sp[2] -= halfX; break; case 'R': sp[0] += halfX; break; }; return sp; }, [0,0,7,127]); seats.push([result[0], result[1]]); }); readInterface.on('close', function(line) { let seatIDs = new Set( seats.map((seat) => seat[1]*8 + seat[0]).sort((a,b) => a-b ) ); for (x=0; x<8; x++) { for(y=0; y<128; y++) { let seatID = y*8+x; if (!seatIDs.has(seatID) && seatIDs.has(seatID-1) && seatIDs.has(seatID+1)) { console.log(seatID); } } } });