days 11-16
This commit is contained in:
32
day14/part1.js
Normal file
32
day14/part1.js
Normal file
@ -0,0 +1,32 @@
|
||||
function hash(input){
|
||||
var list = [];
|
||||
for(var i = 0; i < 256; i++){
|
||||
list.push(i);
|
||||
}
|
||||
var pos = 0;
|
||||
var lengths = input.split("").filter((a)=>(a)).map((a)=>(a.charCodeAt(0))).concat([17, 31, 73, 47, 23]);
|
||||
var skip = 0;
|
||||
for(var x = 0; x < 64; x++){
|
||||
for(var length of lengths){
|
||||
for(var i = 0; i < (length/2); i++){
|
||||
var a = list[(pos+i)%list.length];
|
||||
var b = list[(pos+length-1-i)%list.length];
|
||||
list[(pos+i)%list.length] = b;
|
||||
list[(pos+length-1-i)%list.length] = a;
|
||||
}
|
||||
pos += length + skip;
|
||||
pos = pos % list.length;
|
||||
skip += 1;
|
||||
}
|
||||
}
|
||||
|
||||
var hash = list.reduce((arr, a, i)=>{arr[Math.floor(i/16)] = arr[Math.floor(i/16)] ^ a; return arr;}, []);
|
||||
return hash.map((a)=>(a.toString(2).split("").map((b)=>(parseInt(b))).reduce((a,b)=>(a+b)))).reduce((a, b)=>(a+b));
|
||||
}
|
||||
|
||||
var total = 0;
|
||||
for(var i = 0; i < 128; i++){
|
||||
total += hash("xlqgujun-" + i);
|
||||
}
|
||||
|
||||
console.log(total);
|
61
day14/part2.js
Normal file
61
day14/part2.js
Normal file
@ -0,0 +1,61 @@
|
||||
function hash(input){
|
||||
var list = [];
|
||||
for(var i = 0; i < 256; i++){
|
||||
list.push(i);
|
||||
}
|
||||
var pos = 0;
|
||||
var lengths = input.split("").filter((a)=>(a)).map((a)=>(a.charCodeAt(0))).concat([17, 31, 73, 47, 23]);
|
||||
var skip = 0;
|
||||
for(var x = 0; x < 64; x++){
|
||||
for(var length of lengths){
|
||||
for(var i = 0; i < (length/2); i++){
|
||||
var a = list[(pos+i)%list.length];
|
||||
var b = list[(pos+length-1-i)%list.length];
|
||||
list[(pos+i)%list.length] = b;
|
||||
list[(pos+length-1-i)%list.length] = a;
|
||||
}
|
||||
pos += length + skip;
|
||||
pos = pos % list.length;
|
||||
skip += 1;
|
||||
}
|
||||
}
|
||||
|
||||
var hash = list.reduce((arr, a, i)=>{arr[Math.floor(i/16)] = arr[Math.floor(i/16)] ^ a; return arr;}, []);
|
||||
return hash.map((a)=>(("00000000" + a.toString(2)).slice(-8).split("").map((b)=>(parseInt(b))))).reduce((a, b)=>(a.concat(b)));
|
||||
}
|
||||
|
||||
var grid = [];
|
||||
for(var i = 0; i < 128; i++){
|
||||
grid.push(hash("xlqgujun-" + i));
|
||||
}
|
||||
|
||||
var seen = [];
|
||||
function calc(x, y){
|
||||
return (x + (128 * y));
|
||||
}
|
||||
function scanNeighbours(x, y){
|
||||
if(grid[x]){
|
||||
if(grid[x][y]){
|
||||
if(seen.indexOf(calc(x,y)) == -1){
|
||||
seen.push(calc(x,y));
|
||||
scanNeighbours(x+1,y);
|
||||
scanNeighbours(x-1,y);
|
||||
scanNeighbours(x,y+1);
|
||||
scanNeighbours(x,y-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var total = 0;
|
||||
for(var x = 0; x < 128; x++){
|
||||
for(var y = 0; y < 128; y++){
|
||||
if(grid[x][y]){
|
||||
if(seen.indexOf(calc(x,y)) == -1){
|
||||
total++;
|
||||
scanNeighbours(x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
console.log(total);
|
Reference in New Issue
Block a user