Skip to content

Instantly share code, notes, and snippets.

@ninnypants
Created December 7, 2015 17:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ninnypants/9d3bd7e4979daaf631d8 to your computer and use it in GitHub Desktop.
Save ninnypants/9d3bd7e4979daaf631d8 to your computer and use it in GitHub Desktop.
Solutions to advent of code day 6. http://adventofcode.com/day/6
var y, x, off = 0, on = 0, lights = [], brightness = 0,
commands = [ 'turn on 489,959 through 759,964', 'turn off 820,516 through 871,914', 'turn off 427,423 through 929,502', 'turn on 774,14 through 977,877', 'turn on 410,146 through 864,337', 'turn on 931,331 through 939,812', 'turn off 756,53 through 923,339', 'turn off 313,787 through 545,979', 'turn off 12,823 through 102,934', 'toggle 756,965 through 812,992', 'turn off 743,684 through 789,958', 'toggle 120,314 through 745,489', 'toggle 692,845 through 866,994', 'turn off 587,176 through 850,273', 'turn off 674,321 through 793,388', 'toggle 749,672 through 973,965', 'turn on 943,30 through 990,907', 'turn on 296,50 through 729,664', 'turn on 212,957 through 490,987', 'toggle 171,31 through 688,88', 'turn off 991,989 through 994,998', 'turn off 913,943 through 958,953', 'turn off 278,258 through 367,386', 'toggle 275,796 through 493,971', 'turn off 70,873 through 798,923', 'toggle 258,985 through 663,998', 'turn on 601,259 through 831,486', 'turn off 914,94 through 941,102', 'turn off 558,161 through 994,647', 'turn on 119,662 through 760,838', 'toggle 378,775 through 526,852', 'turn off 384,670 through 674,972', 'turn off 249,41 through 270,936', 'turn on 614,742 through 769,780', 'turn on 427,70 through 575,441', 'turn on 410,478 through 985,753', 'turn off 619,46 through 931,342', 'turn on 284,55 through 768,922', 'turn off 40,592 through 728,685', 'turn on 825,291 through 956,950', 'turn on 147,843 through 592,909', 'turn off 218,675 through 972,911', 'toggle 249,291 through 350,960', 'turn off 556,80 through 967,675', 'toggle 609,148 through 968,279', 'toggle 217,605 through 961,862', 'toggle 407,177 through 548,910', 'toggle 400,936 through 599,938', 'turn off 721,101 through 925,455', 'turn on 268,631 through 735,814', 'toggle 549,969 through 612,991', 'toggle 553,268 through 689,432', 'turn off 817,668 through 889,897', 'toggle 801,544 through 858,556', 'toggle 615,729 through 832,951', 'turn off 427,477 through 958,948', 'turn on 164,49 through 852,946', 'turn on 542,449 through 774,776', 'turn off 923,196 through 980,446', 'toggle 90,310 through 718,846', 'turn off 657,215 through 744,252', 'turn off 800,239 through 811,712', 'turn on 502,90 through 619,760', 'toggle 649,512 through 862,844', 'turn off 334,903 through 823,935', 'turn off 630,233 through 839,445', 'turn on 713,67 through 839,865', 'turn on 932,50 through 982,411', 'turn off 480,729 through 984,910', 'turn on 100,219 through 796,395', 'turn on 758,108 through 850,950', 'turn off 427,276 through 439,938', 'turn on 178,284 through 670,536', 'toggle 540,27 through 625,102', 'turn off 906,722 through 936,948', 'toggle 345,418 through 859,627', 'toggle 175,775 through 580,781', 'toggle 863,28 through 929,735', 'turn off 824,858 through 905,973', 'toggle 752,312 through 863,425', 'turn on 985,716 through 988,852', 'turn off 68,504 through 763,745', 'toggle 76,209 through 810,720', 'turn off 657,607 through 676,664', 'toggle 596,869 through 896,921', 'turn off 915,411 through 968,945', 'turn off 368,39 through 902,986', 'turn on 11,549 through 393,597', 'turn off 842,893 through 976,911', 'toggle 274,106 through 581,329', 'toggle 406,403 through 780,950', 'toggle 408,988 through 500,994', 'toggle 217,73 through 826,951', 'turn on 917,872 through 961,911', 'toggle 394,34 through 510,572', 'toggle 424,603 through 583,626', 'toggle 106,159 through 755,738', 'turn off 244,610 through 472,709', 'turn on 350,265 through 884,690', 'turn on 688,184 through 928,280', 'toggle 279,443 through 720,797', 'turn off 615,493 through 888,610', 'toggle 118,413 through 736,632', 'turn on 798,782 through 829,813', 'turn off 250,934 through 442,972', 'turn on 68,503 through 400,949', 'toggle 297,482 through 313,871', 'toggle 710,3 through 839,859', 'turn on 125,300 through 546,888', 'toggle 482,39 through 584,159', 'turn off 536,89 through 765,962', 'turn on 530,518 through 843,676', 'turn on 994,467 through 994,676', 'turn on 623,628 through 744,927', 'toggle 704,912 through 837,983', 'turn on 154,364 through 517,412', 'toggle 344,409 through 780,524', 'turn off 578,740 through 725,879', 'turn on 251,933 through 632,957', 'turn on 827,705 through 971,789', 'toggle 191,282 through 470,929', 'toggle 324,525 through 446,867', 'toggle 534,343 through 874,971', 'toggle 550,650 through 633,980', 'toggle 837,404 through 881,915', 'toggle 338,881 through 845,905', 'turn on 469,462 through 750,696', 'turn on 741,703 through 892,870', 'turn off 570,215 through 733,562', 'turn on 445,576 through 870,775', 'turn on 466,747 through 554,878', 'turn off 820,453 through 868,712', 'turn off 892,706 through 938,792', 'turn off 300,238 through 894,746', 'turn off 306,44 through 457,444', 'turn off 912,569 through 967,963', 'toggle 109,756 through 297,867', 'turn on 37,546 through 41,951', 'turn on 321,637 through 790,910', 'toggle 66,50 through 579,301', 'toggle 933,221 through 933,791', 'turn on 486,676 through 878,797', 'turn on 417,231 through 556,317', 'toggle 904,468 through 981,873', 'turn on 417,675 through 749,712', 'turn on 692,371 through 821,842', 'toggle 324,73 through 830,543', 'turn on 912,490 through 977,757', 'turn off 634,872 through 902,949', 'toggle 266,779 through 870,798', 'turn on 772,982 through 990,996', 'turn off 607,46 through 798,559', 'turn on 295,602 through 963,987', 'turn on 657,86 through 944,742', 'turn off 334,639 through 456,821', 'turn off 997,667 through 997,670', 'turn off 725,832 through 951,945', 'turn off 30,120 through 952,984', 'turn on 860,965 through 917,976', 'toggle 471,997 through 840,998', 'turn off 319,307 through 928,504', 'toggle 823,631 through 940,908', 'toggle 969,984 through 981,993', 'turn off 691,319 through 865,954', 'toggle 911,926 through 938,929', 'turn on 953,937 through 968,991', 'toggle 914,643 through 975,840', 'turn on 266,982 through 436,996', 'turn off 101,896 through 321,932', 'turn off 193,852 through 751,885', 'turn off 576,532 through 863,684', 'turn on 761,456 through 940,783', 'turn on 20,290 through 398,933', 'turn off 435,335 through 644,652', 'turn on 830,569 through 905,770', 'turn off 630,517 through 905,654', 'turn on 664,53 through 886,976', 'toggle 275,416 through 408,719', 'turn on 370,621 through 515,793', 'turn on 483,373 through 654,749', 'turn on 656,786 through 847,928', 'turn off 532,752 through 945,974', 'toggle 301,150 through 880,792', 'turn off 951,488 through 958,952', 'turn on 207,729 through 882,828', 'toggle 694,532 through 973,961', 'toggle 676,639 through 891,802', 'turn off 653,6 through 905,519', 'toggle 391,109 through 418,312', 'turn on 877,423 through 957,932', 'turn on 340,145 through 563,522', 'turn off 978,467 through 988,895', 'turn off 396,418 through 420,885', 'turn off 31,308 through 816,316', 'turn on 107,675 through 758,824', 'turn on 61,82 through 789,876', 'turn on 750,743 through 754,760', 'toggle 88,733 through 736,968', 'turn off 754,349 through 849,897', 'toggle 157,50 through 975,781', 'turn off 230,231 through 865,842', 'turn off 516,317 through 630,329', 'turn off 697,820 through 829,903', 'turn on 218,250 through 271,732', 'toggle 56,167 through 404,431', 'toggle 626,891 through 680,927', 'toggle 370,207 through 791,514', 'toggle 860,74 through 949,888', 'turn on 416,527 through 616,541', 'turn off 745,449 through 786,908', 'turn on 485,554 through 689,689', 'turn on 586,62 through 693,141', 'toggle 506,759 through 768,829', 'turn on 473,109 through 929,166', 'turn on 760,617 through 773,789', 'toggle 595,683 through 618,789', 'turn off 210,775 through 825,972', 'toggle 12,426 through 179,982', 'turn on 774,539 through 778,786', 'turn on 102,498 through 121,807', 'turn off 706,897 through 834,965', 'turn off 678,529 through 824,627', 'turn on 7,765 through 615,870', 'turn off 730,872 through 974,943', 'turn off 595,626 through 836,711', 'turn off 215,424 through 841,959', 'toggle 341,780 through 861,813', 'toggle 507,503 through 568,822', 'turn on 252,603 through 349,655', 'toggle 93,521 through 154,834', 'turn on 565,682 through 951,954', 'turn on 544,318 through 703,418', 'toggle 756,953 through 891,964', 'turn on 531,123 through 856,991', 'turn on 148,315 through 776,559', 'turn off 925,835 through 963,971', 'turn on 895,944 through 967,964', 'turn off 102,527 through 650,747', 'toggle 626,105 through 738,720', 'turn off 160,75 through 384,922', 'toggle 813,724 through 903,941', 'turn on 207,107 through 982,849', 'toggle 750,505 through 961,697', 'toggle 105,410 through 885,819', 'turn on 226,104 through 298,283', 'turn off 224,604 through 508,762', 'turn on 477,368 through 523,506', 'turn off 477,901 through 627,936', 'turn off 887,131 through 889,670', 'turn on 896,994 through 938,999', 'toggle 401,580 through 493,728', 'toggle 987,184 through 991,205', 'turn on 821,643 through 882,674', 'toggle 784,940 through 968,959', 'turn off 251,293 through 274,632', 'turn off 339,840 through 341,844', 'turn off 675,351 through 675,836', 'toggle 918,857 through 944,886', 'toggle 70,253 through 918,736', 'turn off 612,604 through 772,680', 'turn off 277,40 through 828,348', 'toggle 692,139 through 698,880', 'toggle 124,446 through 883,453', 'toggle 969,932 through 990,945', 'toggle 855,692 through 993,693', 'toggle 722,472 through 887,899', 'toggle 978,149 through 985,442', 'toggle 837,540 through 916,889', 'turn off 612,2 through 835,82', 'toggle 560,767 through 878,856', 'turn on 461,734 through 524,991', 'toggle 206,824 through 976,912', 'turn on 826,610 through 879,892', 'turn on 577,699 through 956,933', 'turn off 9,250 through 50,529', 'turn off 77,657 through 817,677', 'turn on 68,419 through 86,426', 'turn on 991,720 through 992,784', 'turn on 668,20 through 935,470', 'turn off 133,418 through 613,458', 'turn off 487,286 through 540,328', 'toggle 247,874 through 840,955', 'toggle 301,808 through 754,970', 'turn off 34,194 through 578,203', 'turn off 451,49 through 492,921', 'turn on 907,256 through 912,737', 'turn off 479,305 through 702,587', 'turn on 545,583 through 732,749', 'toggle 11,16 through 725,868', 'turn on 965,343 through 986,908', 'turn on 674,953 through 820,965', 'toggle 398,147 through 504,583', 'turn off 778,194 through 898,298', 'turn on 179,140 through 350,852', 'turn off 241,118 through 530,832', 'turn off 41,447 through 932,737', 'turn off 820,663 through 832,982', 'turn on 550,460 through 964,782', 'turn on 31,760 through 655,892', 'toggle 628,958 through 811,992', ];
// Build grid.
for ( y = 0; y < 1000; y++ ) {
lights[ y ] = [];
for ( x = 0; x < 1000; x++ ) {
lights[ y ][ x ] = { on: false, brightness: 0 };
}
}
/**
* Parse command into a usable structure.
*
* @param {string} command Command for what lights to turn on/off.
* @return {object} Usable command object.
*/
function parseCommand( command ) {
var parts = /turn (off|on) (\d+),(\d+) through (\d+),(\d+)/.exec( command );
if ( null === parts ) {
parts = /(toggle) (\d+),(\d+) through (\d+),(\d+)/.exec( command );
}
return {
action: parts[1],
start: {
x: parseInt( parts[2], 10 ),
y: parseInt( parts[3], 10 )
},
end: {
x: parseInt( parts[4], 10 ),
y: parseInt( parts[5], 10 )
}
};
}
/**
* Turn lights within a set of coordinates on, and calculate brightness.
*
* @param {object} start X and Y coordinates to start at.
* @param {object} end X and Y coordinates to stop at.
* @return {void}
*/
function lightsOn( start, end ) {
var x, y;
for( y = start.y; y <= end.y; y++ ) {
for ( x = start.x; x <= end.x; x++ ) {
lights[ y ][ x ].on = true;
lights[ y ][ x ].brightness++;
}
}
}
/**
* Turn lights within a set of coordinates to turn off, and decrease brightness.
*
* @param {object} start X and Y coordinates to start at.
* @param {object} end X and Y coordinates to stop at.
* @return {void}
*/
function lightsOff( start, end ) {
var x, y;
for( y = start.y; y <= end.y; y++ ) {
for ( x = start.x; x <= end.x; x++ ) {
lights[ y ][ x ].on = false;
lights[ y ][ x ].brightness--;
if ( lights[ y ][ x ].brightness < 0 ) {
lights[ y ][ x ].brightness = 0;
}
}
}
}
/**
* Toggle light status within an area, and increse brightness by 2.
*
* @param {object} start X and Y coordinates to start at.
* @param {object} end X and Y coordinates to stop at.
* @return {void}
*/
function lightsToggle( start, end ) {
var x, y;
for( y = start.y; y <= end.y; y++ ) {
for ( x = start.x; x <= end.x; x++ ) {
lights[ y ][ x ].on = ! lights[ y ][ x ].on;
lights[ y ][ x ].brightness += 2;
}
}
}
// Process instructions.
commands.forEach( function( command ) {
var instructions = parseCommand( command );
switch ( instructions.action ) {
case 'on':
lightsOn( instructions.start, instructions.end );
break;
case 'off':
lightsOff( instructions.start, instructions.end );
break;
case 'toggle':
lightsToggle( instructions.start, instructions.end );
break;
}
} );
// Parse on/off.
for ( y = 0; y < 1000; y++ ) {
for ( x = 0; x < 1000; x++ ) {
if ( lights[ y ][ x ] ) {
on++;
} else {
off++;
}
brightness += lights[ y ][ x ].brightness;
}
}
console.log( 'On: ' + on, 'Off: ' + off, 'Brightness: ' + brightness );
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment