Return to using ranges for day 5
This commit is contained in:
45
05/part1.js
45
05/part1.js
@@ -6,47 +6,24 @@ const readInterface = readline.createInterface({
|
|||||||
console: false
|
console: false
|
||||||
});
|
});
|
||||||
|
|
||||||
// [[x,y], [x,y], ...]
|
let seats = []; // [[x,y], [x,y], ...]
|
||||||
let seats = [];
|
|
||||||
|
|
||||||
function makeArray(n) {
|
|
||||||
let ary = new Array(n);
|
|
||||||
for(i=0; i<n; i++) {
|
|
||||||
ary[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ary;
|
|
||||||
}
|
|
||||||
|
|
||||||
readInterface.on('line', function(line) {
|
readInterface.on('line', function(line) {
|
||||||
const rowSpec = line.substring(0, 7);
|
let result = line.split('').reduce(function(sp, char) {
|
||||||
const colSpec = line.substring(7, 10);
|
const halfX = Math.floor((1 + sp[2] - sp[0]) / 2);
|
||||||
|
const halfY = Math.floor((1 + sp[3] - sp[1]) / 2);
|
||||||
|
|
||||||
let row = rowSpec.split('').reduce(function(range, char) {
|
|
||||||
const half = Math.floor(range.length / 2);
|
|
||||||
|
|
||||||
let r2 = range;
|
|
||||||
switch(char) {
|
switch(char) {
|
||||||
case 'F': r2 = range.slice(0, half+1); break;
|
case 'F': sp[3] -= halfY; break;
|
||||||
case 'B': r2 = range.slice(half, range.length); break;
|
case 'B': sp[1] += halfY; break;
|
||||||
|
case 'L': sp[2] -= halfX; break;
|
||||||
|
case 'R': sp[0] += halfX; break;
|
||||||
};
|
};
|
||||||
|
|
||||||
return r2;
|
return sp;
|
||||||
}, makeArray(128));
|
}, [0,0,7,127]);
|
||||||
|
|
||||||
let col = colSpec.split('').reduce(function(range, char) {
|
seats.push([result[0], result[1]]);
|
||||||
const half = Math.floor(range.length / 2);
|
|
||||||
|
|
||||||
let r2 = range;
|
|
||||||
switch(char) {
|
|
||||||
case 'L': r2 = range.slice(0, half+1); break;
|
|
||||||
case 'R': r2 = range.slice(half,range.length); break;
|
|
||||||
};
|
|
||||||
|
|
||||||
return r2;
|
|
||||||
}, makeArray(8));
|
|
||||||
|
|
||||||
seats.push([col[0], row[0]]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
readInterface.on('close', function(line) {
|
readInterface.on('close', function(line) {
|
||||||
|
45
05/part2.js
45
05/part2.js
@@ -6,47 +6,24 @@ const readInterface = readline.createInterface({
|
|||||||
console: false
|
console: false
|
||||||
});
|
});
|
||||||
|
|
||||||
// [[x,y], [x,y], ...]
|
let seats = []; // [[x,y], [x,y], ...]
|
||||||
let seats = [];
|
|
||||||
|
|
||||||
function makeArray(n) {
|
|
||||||
let ary = new Array(n);
|
|
||||||
for(i=0; i<n; i++) {
|
|
||||||
ary[i] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ary;
|
|
||||||
}
|
|
||||||
|
|
||||||
readInterface.on('line', function(line) {
|
readInterface.on('line', function(line) {
|
||||||
const rowSpec = line.substring(0, 7);
|
let result = line.split('').reduce(function(sp, char) {
|
||||||
const colSpec = line.substring(7, 10);
|
const halfX = Math.floor((1 + sp[2] - sp[0]) / 2);
|
||||||
|
const halfY = Math.floor((1 + sp[3] - sp[1]) / 2);
|
||||||
|
|
||||||
let row = rowSpec.split('').reduce(function(range, char) {
|
|
||||||
const half = Math.floor(range.length / 2);
|
|
||||||
|
|
||||||
let r2 = range;
|
|
||||||
switch(char) {
|
switch(char) {
|
||||||
case 'F': r2 = range.slice(0, half+1); break;
|
case 'F': sp[3] -= halfY; break;
|
||||||
case 'B': r2 = range.slice(half, range.length); break;
|
case 'B': sp[1] += halfY; break;
|
||||||
|
case 'L': sp[2] -= halfX; break;
|
||||||
|
case 'R': sp[0] += halfX; break;
|
||||||
};
|
};
|
||||||
|
|
||||||
return r2;
|
return sp;
|
||||||
}, makeArray(128));
|
}, [0,0,7,127]);
|
||||||
|
|
||||||
let col = colSpec.split('').reduce(function(range, char) {
|
seats.push([result[0], result[1]]);
|
||||||
const half = Math.floor(range.length / 2);
|
|
||||||
|
|
||||||
let r2 = range;
|
|
||||||
switch(char) {
|
|
||||||
case 'L': r2 = range.slice(0, half+1); break;
|
|
||||||
case 'R': r2 = range.slice(half,range.length); break;
|
|
||||||
};
|
|
||||||
|
|
||||||
return r2;
|
|
||||||
}, makeArray(8));
|
|
||||||
|
|
||||||
seats.push([col[0], row[0]]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
readInterface.on('close', function(line) {
|
readInterface.on('close', function(line) {
|
||||||
|
Reference in New Issue
Block a user