From 2f7c1f10323a26dea066eecb52b1c3fae746c0f5 Mon Sep 17 00:00:00 2001 From: Piotr Russ Date: Mon, 14 Dec 2020 12:10:49 +0100 Subject: day14 --- day14/data.js | 592 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ day14/day14-1.js | 19 ++ day14/day14-2.js | 48 +++++ 3 files changed, 659 insertions(+) create mode 100644 day14/data.js create mode 100644 day14/day14-1.js create mode 100644 day14/day14-2.js (limited to 'day14') diff --git a/day14/data.js b/day14/data.js new file mode 100644 index 0000000..93e094c --- /dev/null +++ b/day14/data.js @@ -0,0 +1,592 @@ +data =` +mask = 11100010111110X010100001X00000011XXX +mem[6540] = 1053547115 +mem[7184] = 10509 +mem[13014] = 7128 +mask = 110110X110100X10001X110110001000100X +mem[23173] = 12045 +mem[414] = 4313357 +mem[18580] = 213079949 +mem[22303] = 1714 +mask = 1X01101X0110011XX1001X1XX001X00X1100 +mem[38327] = 97337978 +mem[24290] = 12593688 +mem[63524] = 3392 +mem[4214] = 243223 +mem[5420] = 935740301 +mem[18031] = 632714698 +mask = X10110101X1X011001100X11010010X00111 +mem[61349] = 1336335 +mem[50853] = 1269 +mem[58635] = 59668009 +mem[41045] = 18639 +mem[11918] = 57288 +mem[45645] = 14996953 +mem[26134] = 100867777 +mask = 11011010011XX110X10010X010011XX10000 +mem[10191] = 44785522 +mem[58901] = 12733 +mem[10035] = 11490 +mem[47614] = 20548428 +mem[31150] = 3738 +mem[4130] = 50709924 +mask = 1X0X101X01100100X101X11XX00X00X10000 +mem[49047] = 151086476 +mem[19156] = 271697 +mem[2453] = 498179 +mem[35232] = 401613 +mask = 110X0XX010XXX1001010011101011X00010X +mem[46908] = 324 +mem[58098] = 7082 +mem[33784] = 87754344 +mem[55455] = 13375 +mem[7412] = 407 +mem[40954] = 287953968 +mem[8750] = 4872 +mask = X1011010X1X00X1001001110000110111010 +mem[16588] = 240485130 +mem[26942] = 4653 +mem[49588] = 2929 +mask = 010010X0X10X0X00X000X11010100011000X +mem[20819] = 16307212 +mem[43449] = 110081329 +mem[53732] = 218919035 +mem[33252] = 1410886 +mem[9342] = 367201704 +mask = 1X01X010011XX11011000X10011XX1X0X100 +mem[31007] = 4767916 +mem[28355] = 6523 +mem[43831] = 522189 +mem[50230] = 25123775 +mem[9436] = 2916444 +mem[34444] = 29463 +mask = 010X101010XX011XX0110X001XX0X0001001 +mem[5352] = 766573 +mem[2337] = 1421026 +mem[16462] = 1440669 +mem[57643] = 243578224 +mem[37865] = 9557133 +mask = 11001010XXX0X11100100X011X0100010000 +mem[10674] = 92911 +mem[52874] = 314 +mem[4175] = 7882105 +mem[4647] = 437962 +mem[54577] = 6350 +mask = X1011110X1X1X1011000XXX1X1100X000001 +mem[8939] = 152882660 +mem[32991] = 1900820 +mem[26566] = 6277291 +mem[3398] = 338 +mem[198] = 1092255 +mem[42779] = 706535 +mask = 110110X100100110110X00XX000110001100 +mem[41624] = 107699 +mem[136] = 10907 +mem[59881] = 1639653 +mem[10152] = 13541233 +mem[29192] = 569789 +mask = 110011X10001XX0X00X11011111110111010 +mem[29497] = 61196354 +mem[33642] = 1690 +mem[3924] = 10240 +mem[30991] = 321393 +mem[6007] = 8252 +mem[10529] = 383134 +mem[22419] = 439560 +mask = 11011011001X00X00110X00111011X001011 +mem[9085] = 1844781 +mem[21531] = 14606246 +mem[6151] = 346328157 +mask = 1XX110X00011111011X100X000X00011X111 +mem[20254] = 4775875 +mem[18751] = 34439 +mem[51931] = 10866 +mem[13884] = 1396272 +mem[38876] = 110002 +mem[10554] = 3811164 +mask = 110X10101X1101110010X01X1001X000000X +mem[24882] = 5606803 +mem[60456] = 235252 +mem[29117] = 1172 +mask = 11111010X10X011010100001X10010XXXX10 +mem[22085] = 3767 +mem[35246] = 637281 +mem[57643] = 1015666 +mask = 010X1010X00X011110X1X1X100000110X0X1 +mem[2766] = 1017781 +mem[18472] = 65544229 +mem[60177] = 44130 +mem[49328] = 252860 +mem[63588] = 2718 +mem[25385] = 1040 +mask = 1X1101X01X10XX0010101X101101X00X1101 +mem[1085] = 1816 +mem[19718] = 2409 +mem[61449] = 466156 +mask = 11011000100X01X1000000X0010X01001001 +mem[27929] = 169017783 +mem[3960] = 138790 +mem[49378] = 3765 +mem[56654] = 395338 +mem[64888] = 11900103 +mask = 11X01010XXX001X0101010X0010110101X11 +mem[44604] = 28291214 +mem[22847] = 316570 +mask = X111X11X11X111001X1011X101000X100000 +mem[45942] = 2947119 +mem[14974] = 2025710 +mem[24828] = 2567 +mem[10597] = 765995 +mem[45790] = 461 +mem[4860] = 621896 +mask = X10X1X110XX1000X001X11100111001100X1 +mem[34726] = 1325661 +mem[15011] = 13271770 +mem[49977] = 455 +mem[13385] = 359763 +mem[64427] = 442514062 +mem[37436] = 240727423 +mask = X10X10X00X1001000X0X10X000011010X0X1 +mem[5887] = 567410 +mem[15160] = 51659 +mask = 110X1X10100101110000X10X110X0X011XX1 +mem[48320] = 1175498 +mem[8272] = 829060 +mem[62848] = 373913 +mem[51709] = 1454 +mem[7351] = 28999323 +mask = 110X1010X11X011XX010X101X0001001XX10 +mem[5420] = 194080 +mem[64003] = 114629 +mem[47520] = 30982831 +mem[9857] = 9284958 +mem[54577] = 1423 +mem[48414] = 5845567 +mem[40311] = 19305 +mask = 11X110X10011000100X01110XX1100X11011 +mem[6785] = 55956876 +mem[27761] = 2895313 +mem[48178] = 815 +mem[42069] = 264595943 +mem[18031] = 42 +mem[40874] = 974080914 +mask = 0X0110100X10010X0X01100X0111XX1XX010 +mem[27948] = 238815667 +mem[4959] = 142720651 +mem[62738] = 28494 +mask = 1101X01001100X10X0X01X11001000XX00XX +mem[54937] = 1139391 +mem[25222] = 2512343 +mem[9470] = 120874 +mem[26552] = 3096 +mem[24626] = 51146359 +mem[60877] = 1405 +mask = 1X00101001X1011110XXX1010101101X0X10 +mem[29192] = 1147 +mem[5280] = 64971 +mem[59069] = 18787283 +mem[8736] = 252 +mem[27948] = 7736001 +mask = 110110X00110X1X00101XX10010XX0111001 +mem[39600] = 150148438 +mem[19510] = 2028 +mem[10561] = 760736 +mem[33637] = 3786 +mem[27840] = 19776 +mem[43173] = 113509213 +mask = 0101X010100X0111001100001X00010X1101 +mem[19019] = 109550 +mem[61970] = 9527643 +mem[54718] = 146897567 +mem[34440] = 23504976 +mask = X101101010X10111001X0XX01X000XXX1001 +mem[27559] = 32347 +mem[31834] = 5553 +mem[25888] = 816 +mem[50958] = 143680145 +mem[40800] = 1579721 +mem[3365] = 7205751 +mask = 11011X101110X1111X1011XX101X00000000 +mem[39744] = 1628496 +mem[26998] = 174246124 +mem[55100] = 78394066 +mem[41107] = 515946 +mem[11859] = 6199516 +mem[6466] = 49035 +mem[9382] = 132658816 +mask = 1001X010011001X1010011X01X0X0XX11110 +mem[43573] = 261285686 +mem[62900] = 80070 +mem[39087] = 711323353 +mem[3697] = 2909066 +mem[30760] = 42870790 +mem[19499] = 380182 +mask = 1101101XXX100110X100X011X00000X01000 +mem[48681] = 42494 +mem[58173] = 6444223 +mem[42666] = 167047779 +mem[55462] = 4061450 +mem[4524] = 2982705 +mem[25898] = 122811236 +mask = X10010X00X00011X10111111100001001100 +mem[55341] = 907685 +mem[25896] = 5234228 +mem[46456] = 205011032 +mask = 110X10X001X1111011000000011X0101110X +mem[14875] = 1333 +mem[56659] = 15180 +mem[45783] = 104761 +mem[4214] = 26033 +mask = 0X001X0001010100X000010010X100101000 +mem[2356] = 182 +mem[12067] = 524650703 +mem[14111] = 5231 +mem[46413] = 60005 +mem[14331] = 221755997 +mem[10416] = 589456 +mask = 1101101010010X11001110101X110X01X0X0 +mem[3517] = 125300 +mem[48255] = 4322 +mem[25758] = 724 +mem[3620] = 780 +mem[35335] = 3264540 +mask = 011X0X10111X1100101X0010X101XXX1X110 +mem[50922] = 1340 +mem[49956] = 7971 +mem[16765] = 117074 +mem[37341] = 101880 +mem[6382] = 270794 +mem[62129] = 3524 +mask = X1110X10111X110010101X111100X0XX01X1 +mem[29143] = 51870362 +mem[44539] = 5471456 +mem[17812] = 555343768 +mem[25896] = 76993 +mem[61860] = 5583277 +mem[33249] = 1649382 +mask = 10X110X00X111XX01X110X001001X0X00101 +mem[60418] = 40765 +mem[9791] = 276 +mem[20819] = 1939 +mem[16099] = 50776 +mem[44908] = 13705675 +mem[3842] = 12939 +mask = 1100101X1X000110101000011101X0XX1001 +mem[64795] = 7473 +mem[20801] = 10933303 +mem[45749] = 15523455 +mem[4130] = 14179780 +mem[24197] = 22821 +mem[5171] = 1847 +mem[56522] = 80 +mask = X0X1X011011001001101011X1XX00111X000 +mem[23931] = 391795 +mem[62129] = 46071660 +mem[10529] = 340467299 +mem[22948] = 590 +mem[18580] = 986058 +mem[23943] = 6228242 +mask = 111X10101X1101X01010X1010X0100000101 +mem[22045] = 1236872 +mem[43412] = 11981 +mem[51116] = 228048 +mem[4214] = 34658 +mem[14961] = 28301063 +mem[19718] = 125855455 +mask = 110110110XX101X0011001X10100001110X1 +mem[29192] = 375215772 +mem[43812] = 106881120 +mem[22916] = 11512817 +mem[35299] = 161518 +mem[39569] = 390 +mask = 1X0110100110X100X101011X1101X0010X11 +mem[5014] = 15731815 +mem[42765] = 90079 +mem[44656] = 360472556 +mem[4214] = 2023626 +mem[5777] = 15044384 +mem[35463] = 1668 +mask = 1X10X010X01X011010X0X00X00X100101011 +mem[29192] = 975691 +mem[3256] = 478673 +mem[3960] = 4314 +mem[56647] = 827 +mem[4162] = 228123 +mask = X101001001100110XX101010011010001X00 +mem[3719] = 312891161 +mem[44656] = 19029928 +mem[45713] = 23393 +mem[45594] = 1879 +mem[20653] = 392 +mem[55312] = 115889500 +mask = 01X01010XX0X0100000X0100X010XX0110X1 +mem[1085] = 466780 +mem[27568] = 13308 +mem[6034] = 362313775 +mask = 10011X1001X0X100010110100001100X0101 +mem[49413] = 422627 +mem[29467] = 25028765 +mem[11378] = 11086 +mask = 0X0110X0100101110011X1X0X10X01100010 +mem[62515] = 10720832 +mem[55462] = 1012292 +mem[21513] = 762797 +mem[2053] = 21634153 +mem[11742] = 168511869 +mem[38283] = 90760561 +mem[36076] = 23295980 +mask = 11110010110111X010X0X00111111010X011 +mem[1828] = 3667 +mem[11358] = 522202 +mem[41729] = 28977762 +mem[37384] = 25384 +mem[33843] = 450 +mem[3188] = 71694 +mem[43265] = 107204037 +mask = 1XX110100X111110X10XX000X00000X1111X +mem[51454] = 15544 +mem[30926] = 3747088 +mem[57622] = 3670672 +mem[37268] = 1355 +mem[31994] = 492591 +mask = 1X01X0100X1X0X10X000011110X11100X1X0 +mem[3719] = 889 +mem[60942] = 4205 +mem[5426] = 1425 +mem[39400] = 1357 +mem[48231] = 110916 +mask = X1XX0X10111011X0101X01X00X01000001X0 +mem[25222] = 565 +mem[25657] = 4325 +mem[6319] = 358 +mask = 1X1X101010000110X0X01111110X0010001X +mem[10685] = 354498 +mem[40671] = 1078 +mem[20831] = 694693 +mem[56347] = 2893 +mem[41145] = 38570 +mem[877] = 24807 +mask = 100110X001111X10X1111010X101010010X1 +mem[59369] = 1536028 +mem[12650] = 31302991 +mem[62737] = 1063 +mem[44908] = 1121896 +mem[50981] = 1793 +mem[41549] = 467 +mask = 1101X01X1110011000X001X1000011X11000 +mem[7888] = 23809 +mem[51709] = 94998 +mem[57643] = 5739 +mem[4860] = 58006462 +mem[9555] = 172891 +mem[44267] = 17211850 +mem[40597] = 28094 +mask = 10011011X11001X0X100010X000110001100 +mem[61860] = 4412269 +mem[7888] = 113388380 +mem[57911] = 100615718 +mask = 1101101X0X110XX00X100101X10110X01X10 +mem[58901] = 337510 +mem[20507] = 14011947 +mem[1297] = 7190797 +mask = 1100101X0X100100010X10XX110X101XX011 +mem[58901] = 338413 +mem[29192] = 18405358 +mem[14356] = 1740 +mask = X10X1010X1100111011X101000X101110100 +mem[63588] = 62 +mem[37958] = 10875 +mem[57170] = 11532 +mask = 11001011011X0100110101X00000100100XX +mem[23685] = 4073432 +mem[52476] = 48853 +mem[8464] = 1362 +mask = 110X10X011X111X0101010X1000110100101 +mem[58112] = 202002 +mem[31524] = 348910462 +mem[7463] = 379275 +mem[46783] = 516 +mask = 1XXX00XX1XX11X001010000X010000000100 +mem[59845] = 1705 +mem[29610] = 908 +mem[38876] = 7419 +mem[50665] = 27526 +mem[55828] = 239766 +mem[7198] = 2332510 +mask = 1101101X111001100X10X101010X1XX10010 +mem[58901] = 4157116 +mem[30155] = 2181 +mem[27948] = 167505 +mem[5615] = 6191 +mem[10685] = 6718001 +mem[10907] = 8060 +mask = 11001010X111X11X10100000X10011010111 +mem[7185] = 199563702 +mem[21941] = 381 +mem[58901] = 5536 +mem[57911] = 16158 +mem[61179] = 43997 +mask = 110110X0011X01XX01X10001101100110011 +mem[37515] = 733 +mem[21609] = 4275 +mem[60877] = 24488 +mask = 11X1101110100110XX10000X0X100111X100 +mem[62234] = 5991 +mem[18480] = 60587 +mask = X0X11X1000100110000010010011111001X0 +mem[54105] = 6396 +mem[26916] = 65750915 +mask = 1001101001X0011100000X111111000011XX +mem[10709] = 1636726 +mem[64283] = 8450605 +mem[36506] = 2982695 +mem[16588] = 84253 +mem[20114] = 2702 +mask = 010X1X1001XXX100X00001000X1000X10000 +mem[41718] = 849 +mem[55828] = 198795786 +mem[44985] = 238093315 +mask = 1X0110101110X111011001011X0X0100X100 +mem[61680] = 1953 +mem[1986] = 28915429 +mem[50342] = 453382485 +mem[30946] = 901529185 +mem[61748] = 349278 +mem[48297] = 78511621 +mask = 1101111101100111110000001XXX10101X00 +mem[34726] = 424077 +mem[662] = 6076351 +mem[36217] = 6631187 +mem[40090] = 55913370 +mask = 1X01101001X00X110000100010X000100000 +mem[48146] = 7118 +mem[47902] = 793 +mem[42824] = 612043 +mem[55984] = 49827115 +mem[2356] = 2180174 +mem[5352] = 156 +mask = X001101101X00X10110X1X1X11X100101100 +mem[7853] = 16332563 +mem[14356] = 792 +mem[17700] = 9478 +mask = 010110100010010000XX111X1X1110X00000 +mem[47094] = 295 +mem[43272] = 321261 +mem[48398] = 791 +mask = 10011010011001000X011X1011011000X0X1 +mem[59153] = 359805 +mem[59453] = 2389171 +mem[34721] = 1050 +mem[25615] = 205647 +mask = 11011010011001XX0XXX111X10010011XXX0 +mem[49588] = 24258309 +mem[9857] = 125489601 +mem[26998] = 57828611 +mem[30155] = 1226221 +mask = X10X10X001100100000X0001X010X01100X0 +mem[61349] = 7180 +mem[21835] = 22741 +mem[40954] = 191961 +mem[57643] = 482698 +mem[41411] = 17811 +mem[55462] = 21319776 +mem[47515] = 2615187 +mask = X1111010XX1101XX10101X001X0X00000100 +mem[6151] = 1463126 +mem[52644] = 7783778 +mask = 11X110111X100110XX1011010XX00X01111X +mem[30760] = 64 +mem[53149] = 225556464 +mem[28495] = 124093 +mem[14116] = 18796146 +mem[16522] = 1185502 +mask = 01X0XX1X1110110X1011X011X10110000100 +mem[2511] = 1415 +mem[6645] = 21276 +mem[15382] = 14111452 +mask = X1XX1010011101110X1010X11X10X0000X11 +mem[52197] = 1486281 +mem[64632] = 12145559 +mem[61183] = 74388 +mem[51657] = 6708652 +mem[57489] = 62339532 +mask = 110010100XX0X1X0010X000010001000XXX1 +mem[57761] = 2008492 +mem[27948] = 247057 +mem[33843] = 92966018 +mem[44458] = 278 +mem[52801] = 437 +mask = 11011X1101100X1X11X01001XXXX00011100 +mem[24290] = 1456055 +mem[23630] = 20246 +mem[33978] = 352201 +mem[12584] = 1718047 +mask = 1X0110X0100X011100XX0110100001X010X1 +mem[2513] = 4373 +mem[16175] = 26467036 +mem[19792] = 19895 +mem[40664] = 28643 +mem[57643] = 264 +mem[45471] = 6119525 +mem[35127] = 5644595 +mask = 1X01X010011001X101000101000000111X10 +mem[52859] = 1753381 +mem[42765] = 62301101 +mem[30314] = 13618 +mem[19897] = 2528961 +mem[44693] = 14301 +mem[51386] = 3407 +mem[29467] = 244447 +mask = 1X01101001X0011X0100X000010100101001 +mem[43014] = 7202 +mem[55776] = 255530898 +mem[58195] = 10425 +mem[43482] = 57072363 +mem[17185] = 237800057 +mask = 1XX11XXX1101110X10X000011X100000X111 +mem[7170] = 16343221 +mem[7498] = 52010 +mem[14356] = 11739 +mask = 1X0X0000X111X1X010X0011XX1010100X000 +mem[64110] = 318 +mem[36357] = 10409392 +mem[27061] = 17517 +mem[42437] = 15677 +mem[49032] = 9620714 +mask = X10110101011011100X01X01101101000X01 +mem[55980] = 134072224 +mem[4807] = 6332 +mem[23989] = 1457360 +mem[16588] = 1148127 +mem[65214] = 634126 +mem[56601] = 198043 +mem[1770] = 860 +mask = 1X01101001X00111010010010X10000X1101 +mem[10101] = 495754815 +mem[48259] = 1648 +mem[45883] = 84939765 +mem[10110] = 10261 +mask = 1X0110100110011100X01XX010X10XX1X000 +mem[34342] = 4318 +mem[49853] = 19927 +mem[49142] = 105722641 +mem[2453] = 110009314 +mem[26988] = 55762 +mem[26552] = 10874 +mask = 1001X0XX1101100X101XX00111000000X100 +mem[29409] = 6718 +mem[42621] = 26872185 +mem[2074] = 509 +mem[30155] = 161238 +mem[11121] = 115558625 +mem[18317] = 62070 +mask = 11X1X01011X1X1X01010000110X0000XX11X +mem[54718] = 3211036 +mem[34679] = 107269681 +mem[37648] = 32371325 +mem[34726] = 1541 +mem[63265] = 1069841040 +mem[7185] = 1112080 +` + +module.exports = data diff --git a/day14/day14-1.js b/day14/day14-1.js new file mode 100644 index 0000000..6e72909 --- /dev/null +++ b/day14/day14-1.js @@ -0,0 +1,19 @@ +const data = require('./data') +const splitted = data + .split(/mask = /g) + .filter(d => d !== '\n') + .map(d => d.split(/\n/g)) + .map(d => d.map((a, i) => (i > 0 ? a.match(/\d+/g) : a)).filter(a => a)) + .map(d => d.map((a, i) => (i > 0 ? a.map((b, i) => i > 0 ? parseInt(b).toString(2).padStart(36, '0') : parseInt(b)) : a))) + +let mem = [] +splitted.forEach(s => { + const mask = s[0] + const applyMask = (str) => ( + str.split('').map((v, i) => (mask[i] !== 'X' ? mask[i] : v)).join('') + ) + + s.forEach((m, i) => (i > 0 && (mem[m[0]] = parseInt(applyMask(m[1]), 2)))) +}) + +console.log('Answer: ', mem.reduce((a, b) => a + b, 0)) diff --git a/day14/day14-2.js b/day14/day14-2.js new file mode 100644 index 0000000..c9b2f0c --- /dev/null +++ b/day14/day14-2.js @@ -0,0 +1,48 @@ +const data = require('./data') +const splitted = data + .split(/mask = /g) + .filter(d => d !== '\n') + .map(d => d.split(/\n/g)) + .map(d => d.map((a, i) => (i > 0 ? a.match(/\d+/g) : a)).filter(a => a)) + .map(d => d.map((a, i) => (i > 0 ? a.map(b => parseInt(b).toString(2).padStart(36, '0')) : a))) + +const allVariations = (str, arr) => { + let i = str.indexOf('X'); + + if (i < 0) { + arr.push(str); + return; + } + + const splitStr = str.split(''); + let addZero = splitStr.slice(); + let addOne = splitStr.slice(); + + addZero.splice(i, 1, '0'); + addOne.splice(i, 1, '1'); + + allVariations(addZero.join(''), arr); + allVariations(addOne.join(''), arr ); +} + +const mem = {} +splitted.forEach(s => { + const mask = s[0] + const applyMask = (str) => ( + str.split('').map((v, i) => (mask[i] === '0' ? v : mask[i])).join('') + ) + + let variations + s.forEach((m, i) => { + variations = [] + if (i > 0) { + allVariations(applyMask(m[0]), variations) + variations.forEach(a => { + mem[parseInt(a, 2)] = parseInt(m[1], 2) + }) + } + }) +}) + +const sum = Object.values(mem).reduce((a, b) => a + b, 0) +console.log('Answer: ', sum) -- cgit v1.2.3