This commit is contained in:
2017-12-25 23:22:40 +00:00
parent d5fbba3277
commit 47510ec0ff
24 changed files with 2002 additions and 0 deletions

108
day21/input.txt Normal file
View File

@ -0,0 +1,108 @@
../.. => ..#/#../.#.
#./.. => #../#../...
##/.. => ###/#.#/#..
.#/#. => ###/##./.#.
##/#. => .../.#./..#
##/## => ##./#.#/###
.../.../... => ##../.#../#.#./....
#../.../... => ..../##.#/...#/##.#
.#./.../... => ###./####/#.../#..#
##./.../... => ###./.##./...#/..##
#.#/.../... => .###/.##./#.../#.##
###/.../... => ##.#/#..#/#.#./#.##
.#./#../... => #.#./.###/#.../#.##
##./#../... => #.../####/#.##/....
..#/#../... => #.##/..#./...#/...#
#.#/#../... => #.##/####/.#.#/#.#.
.##/#../... => #.../##../##.#/.##.
###/#../... => ..../#.#./.###/#...
.../.#./... => .#.#/#..#/##../#.##
#../.#./... => ###./.###/.#.#/..#.
.#./.#./... => ..##/.##./..##/.#.#
##./.#./... => ..#./##../###./...#
#.#/.#./... => ..##/.##./.###/###.
###/.#./... => ..#./.###/###./#.##
.#./##./... => ###./..../.#../#...
##./##./... => .#.#/##../##.#/...#
..#/##./... => ##.#/.##./.###/..##
#.#/##./... => .###/..#./#.##/####
.##/##./... => ##.#/..#./..##/###.
###/##./... => ..../.#.#/.#../#...
.../#.#/... => ###./.#.#/.#../#.##
#../#.#/... => ####/#..#/..../....
.#./#.#/... => #.../..##/#.##/#.#.
##./#.#/... => #.#./###./##../#.#.
#.#/#.#/... => ...#/.##./.##./.#..
###/#.#/... => ..../.##./####/#.#.
.../###/... => .###/.#../.###/#.##
#../###/... => ..##/..##/.##./##..
.#./###/... => .#.#/..#./..##/##.#
##./###/... => ...#/#.##/#.#./##.#
#.#/###/... => #.##/.##./...#/###.
###/###/... => ##../...#/..##/####
..#/.../#.. => #.##/#.../.#../#.#.
#.#/.../#.. => .##./.##./.#.#/.##.
.##/.../#.. => .#.#/#.##/...#/##.#
###/.../#.. => ##../..#./...#/##..
.##/#../#.. => ##../..##/#..#/#..#
###/#../#.. => ##../..#./#.#./....
..#/.#./#.. => .##./##.#/##../####
#.#/.#./#.. => ####/...#/.#.#/..#.
.##/.#./#.. => .#.#/..#./##.#/.#..
###/.#./#.. => #.../#.##/..../##.#
.##/##./#.. => #.#./#.#./#.##/#.#.
###/##./#.. => ...#/###./.##./.#.#
#../..#/#.. => ####/####/..../.##.
.#./..#/#.. => #.##/...#/..#./####
##./..#/#.. => ..#./#.../..##/####
#.#/..#/#.. => #.../#.##/#.##/..##
.##/..#/#.. => ####/..../##../####
###/..#/#.. => ..../##.#/.##./####
#../#.#/#.. => ...#/..##/###./#..#
.#./#.#/#.. => #..#/..#./.###/##.#
##./#.#/#.. => ###./####/#.##/..#.
..#/#.#/#.. => ##../##.#/..##/.##.
#.#/#.#/#.. => .#.#/.##./#.../##.#
.##/#.#/#.. => .#.#/#..#/.##./..#.
###/#.#/#.. => ...#/.#../.##./##.#
#../.##/#.. => ###./##../#.#./####
.#./.##/#.. => .#../##../#.#./.#.#
##./.##/#.. => ##.#/.#../.#.#/####
#.#/.##/#.. => ####/.#.#/..../....
.##/.##/#.. => ####/##../#..#/####
###/.##/#.. => .###/##.#/.#../#.##
#../###/#.. => #..#/###./####/.#.#
.#./###/#.. => ..##/##../##.#/.#.#
##./###/#.. => #..#/.#../####/...#
..#/###/#.. => ##../##.#/...#/#..#
#.#/###/#.. => ..#./.##./#..#/....
.##/###/#.. => #..#/#.../..../.#..
###/###/#.. => ..#./#.##/.##./#...
.#./#.#/.#. => .#.#/.##./##.#/.##.
##./#.#/.#. => #..#/.###/.#.#/.##.
#.#/#.#/.#. => #.../##../#.../.###
###/#.#/.#. => ###./.###/###./....
.#./###/.#. => .#../####/...#/##..
##./###/.#. => ####/###./..../....
#.#/###/.#. => ...#/.###/..../####
###/###/.#. => ..../#.../..#./.###
#.#/..#/##. => #.#./#.../####/#.##
###/..#/##. => .#.#/#..#/.###/#...
.##/#.#/##. => ..##/..#./..../##..
###/#.#/##. => #.#./##.#/####/#..#
#.#/.##/##. => ..../.#../#.#./##.#
###/.##/##. => ..../..../.#../##.#
.##/###/##. => #.#./.###/#.#./#.##
###/###/##. => ##.#/##.#/.###/..#.
#.#/.../#.# => #..#/.#../#.../...#
###/.../#.# => ##../.#../##.#/..#.
###/#../#.# => ..##/#.#./####/.#..
#.#/.#./#.# => ...#/...#/#..#/#.#.
###/.#./#.# => ..../####/.##./.#.#
###/##./#.# => #..#/.#.#/..##/####
#.#/#.#/#.# => #.#./..#./...#/.#..
###/#.#/#.# => ...#/##.#/.###/.#..
#.#/###/#.# => .#.#/###./.#../.##.
###/###/#.# => ...#/.###/.#.#/###.
###/#.#/### => #.##/.#.#/...#/.#..
###/###/### => ..##/.#../#.#./.#..

66
day21/part1.js Normal file
View File

@ -0,0 +1,66 @@
var maps = {};
for(var map of require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>(a))){
map = map.split(" => ");
maps[map[0]] = map[1];
}
for(var i = 0; i < 1; i++){
for(var input of Object.keys(maps)){
var lines = input.split("/");
rotated = input.split("/").map((line,y)=>(line.split("").map((a, x)=>(lines[lines.length-1-x][y])).join(""))).join("/");
maps[rotated] = maps[input];
}
}
for(var input of Object.keys(maps)){
maps[input.split("/").reverse().join("/")] = maps[input];
}
for(var input of Object.keys(maps)){
maps[input.split("/").map(line=>(line.split("").reverse().join(""))).join("/")] = maps[input];
}
function runRound(textInput){
var oldGrid = textInput.split("/").map((a)=>(a.split("")));
var sideLen = oldGrid[0].length;
if(sideLen%2 == 0){
var sideSquares = sideLen/2;
var squareLen = 2;
var newSquareLen = 3;
}
else if(sideLen%3 == 0){
var sideSquares = sideLen/3;
var squareLen = 3;
var newSquareLen = 4;
}
var newGrid = [];
for(var i = 0; i < (sideSquares * newSquareLen); i++){
newGrid[i] = [];
}
for(var x = 0; x < sideSquares; x++){
for(var y = 0; y < sideSquares; y++){
var section = [];
for(var i = 0; i < squareLen; i++){
section.push(oldGrid[(y*squareLen) + i].slice(x*squareLen, (x+1)*squareLen));
}
var sectionText = section.map((a)=>(a.join(""))).join("/");
var newSectionText = maps[sectionText];
var newSection = newSectionText.split("/").map(a=>(a.split("")));
for(var x1 = 0; x1 < newSquareLen; x1++){
for(var y1= 0; y1 < newSquareLen; y1++){
newGrid[(y*newSquareLen) + y1][(x*newSquareLen) + x1] = newSection[y1][x1];
}
}
}
}
return newGrid.map(a=>(a.join(""))).join("/")
}
var currentGrid = ".#./..#/###";
var iters = 5;
for(var i = 0; i < iters; i++){
currentGrid = runRound(currentGrid);
}
console.log(currentGrid.split("").filter(a=>(a=="#")).length);

66
day21/part2.js Normal file
View File

@ -0,0 +1,66 @@
var maps = {};
for(var map of require("fs").readFileSync("input.txt").toString().split("\n").filter(a=>(a))){
map = map.split(" => ");
maps[map[0]] = map[1];
}
for(var i = 0; i < 1; i++){
for(var input of Object.keys(maps)){
var lines = input.split("/");
rotated = input.split("/").map((line,y)=>(line.split("").map((a, x)=>(lines[lines.length-1-x][y])).join(""))).join("/");
maps[rotated] = maps[input];
}
}
for(var input of Object.keys(maps)){
maps[input.split("/").reverse().join("/")] = maps[input];
}
for(var input of Object.keys(maps)){
maps[input.split("/").map(line=>(line.split("").reverse().join(""))).join("/")] = maps[input];
}
function runRound(textInput){
var oldGrid = textInput.split("/").map((a)=>(a.split("")));
var sideLen = oldGrid[0].length;
if(sideLen%2 == 0){
var sideSquares = sideLen/2;
var squareLen = 2;
var newSquareLen = 3;
}
else if(sideLen%3 == 0){
var sideSquares = sideLen/3;
var squareLen = 3;
var newSquareLen = 4;
}
var newGrid = [];
for(var i = 0; i < (sideSquares * newSquareLen); i++){
newGrid[i] = [];
}
for(var x = 0; x < sideSquares; x++){
for(var y = 0; y < sideSquares; y++){
var section = [];
for(var i = 0; i < squareLen; i++){
section.push(oldGrid[(y*squareLen) + i].slice(x*squareLen, (x+1)*squareLen));
}
var sectionText = section.map((a)=>(a.join(""))).join("/");
var newSectionText = maps[sectionText];
var newSection = newSectionText.split("/").map(a=>(a.split("")));
for(var x1 = 0; x1 < newSquareLen; x1++){
for(var y1= 0; y1 < newSquareLen; y1++){
newGrid[(y*newSquareLen) + y1][(x*newSquareLen) + x1] = newSection[y1][x1];
}
}
}
}
return newGrid.map(a=>(a.join(""))).join("/")
}
var currentGrid = ".#./..#/###";
var iters = 18;
for(var i = 0; i < iters; i++){
currentGrid = runRound(currentGrid);
}
console.log(currentGrid.split("").filter(a=>(a=="#")).length);