2020: day14: part 1
This commit is contained in:
parent
f9e1306881
commit
514a93213c
564
aoc2020/input/day14.txt
Normal file
564
aoc2020/input/day14.txt
Normal file
|
@ -0,0 +1,564 @@
|
|||
mask = 00000X110010111111X000100XX01010000X
|
||||
mem[20690] = 435
|
||||
mem[54036] = 231
|
||||
mem[27099] = 118644255
|
||||
mem[55683] = 22299263
|
||||
mem[26119] = 2279399
|
||||
mask = 00X000X0001X111111101X1111XX11X001XX
|
||||
mem[42072] = 1658073
|
||||
mem[63234] = 2277
|
||||
mask = 1001X010011011111110101101X0XX11X010
|
||||
mem[31090] = 52291
|
||||
mem[31244] = 377352406
|
||||
mem[10621] = 18801757
|
||||
mem[31666] = 5100853
|
||||
mask = 10X0110X11XX101XX1000011001001010100
|
||||
mem[18680] = 80608039
|
||||
mem[13197] = 7957847
|
||||
mem[17080] = 117501010
|
||||
mask = 1000110011111X11X1XXXX1X000X010011X1
|
||||
mem[25308] = 257586
|
||||
mem[14518] = 62108102
|
||||
mem[21633] = 1544993
|
||||
mem[36955] = 1363
|
||||
mem[45764] = 49755959
|
||||
mem[40967] = 425
|
||||
mem[47858] = 611686
|
||||
mask = 0010111010X0111111011X0110X0101010X1
|
||||
mem[7451] = 1208
|
||||
mem[31918] = 769
|
||||
mem[29313] = 1888678
|
||||
mem[52254] = 32237487
|
||||
mask = 00X001001111X11111X010000X0110XX0X11
|
||||
mem[61531] = 15796066
|
||||
mem[305] = 130785
|
||||
mem[25845] = 197912
|
||||
mem[29251] = 374061
|
||||
mem[37177] = 17950
|
||||
mask = 100100X00110111111100110001X1X100X00
|
||||
mem[40491] = 66538375
|
||||
mem[42244] = 240009051
|
||||
mem[18805] = 33518831
|
||||
mem[17072] = 518835559
|
||||
mask = XX100100X1101X11010001X11001100XX1XX
|
||||
mem[16935] = 1124623
|
||||
mem[45248] = 155461
|
||||
mem[37224] = 5755511
|
||||
mask = 00X011101110101X10X1XXX1100X0001000X
|
||||
mem[6440] = 116801
|
||||
mem[193] = 7318437
|
||||
mem[58568] = 8082803
|
||||
mem[43695] = 909697
|
||||
mem[29001] = 27290
|
||||
mem[29210] = 91241
|
||||
mask = XXX01X001111111111101010000001XX1011
|
||||
mem[21289] = 354401446
|
||||
mem[33814] = 1605382
|
||||
mem[16967] = 242083755
|
||||
mem[60470] = 22550
|
||||
mem[16485] = 3945104
|
||||
mem[37687] = 86474
|
||||
mem[51031] = 5255
|
||||
mask = 00100100111101111100100X0X001XX10011
|
||||
mem[34832] = 191857526
|
||||
mem[30126] = 180246093
|
||||
mem[310] = 1895
|
||||
mem[49300] = 117732
|
||||
mask = 00000100011011X11X10010XX1XX0X1101XX
|
||||
mem[54544] = 1368
|
||||
mem[30126] = 596855
|
||||
mem[18483] = 124319430
|
||||
mem[63246] = 95337119
|
||||
mem[3917] = 1620395
|
||||
mask = 00XX010001101111X110011X010100X10XX1
|
||||
mem[31090] = 203896198
|
||||
mem[36989] = 203
|
||||
mem[8762] = 372392
|
||||
mem[59728] = 486751
|
||||
mask = 00101X00X11X11111X100010XXXX0011011X
|
||||
mem[59728] = 30591660
|
||||
mem[43720] = 315507593
|
||||
mem[39732] = 42157
|
||||
mem[3440] = 242110717
|
||||
mem[36955] = 871544
|
||||
mem[51251] = 2489781
|
||||
mask = 00X00X0X01111111110000001100100X0011
|
||||
mem[51149] = 12451455
|
||||
mem[17566] = 351620601
|
||||
mem[33842] = 1119118
|
||||
mem[23677] = 100601411
|
||||
mem[12826] = 2474316
|
||||
mask = 00X00100XX1111111110111X1X010X10010X
|
||||
mem[43163] = 27012
|
||||
mem[53314] = 2717910
|
||||
mem[20842] = 239857
|
||||
mem[43816] = 3173699
|
||||
mem[11343] = 37315312
|
||||
mem[37493] = 262038
|
||||
mem[25824] = 13598271
|
||||
mask = 00X0X00001101X1X10100000110001110101
|
||||
mem[39732] = 1402
|
||||
mem[50014] = 32437274
|
||||
mem[10770] = 192187204
|
||||
mask = 000101110110X111111011010X11000000XX
|
||||
mem[51283] = 2490405
|
||||
mem[33814] = 471881
|
||||
mem[15119] = 3807095
|
||||
mask = 000X00XX0X10111111X0011XX11X10X00010
|
||||
mem[10405] = 46099021
|
||||
mem[42308] = 1001
|
||||
mem[57329] = 2310
|
||||
mask = 11X10110011XX100XX1010101100010X0000
|
||||
mem[40240] = 28185370
|
||||
mem[43296] = 2212
|
||||
mem[15632] = 3512122
|
||||
mem[61953] = 2534700
|
||||
mem[58797] = 258533
|
||||
mask = 00000X00011X1X11X1X001000010010X1110
|
||||
mem[13671] = 66116
|
||||
mem[5234] = 46868488
|
||||
mem[48068] = 259070
|
||||
mem[35833] = 1904
|
||||
mask = XX1101000XX01111X1100XX10X1000011000
|
||||
mem[58276] = 827
|
||||
mem[29197] = 6552
|
||||
mem[21249] = 173
|
||||
mem[5723] = 4730123
|
||||
mem[59627] = 3299104
|
||||
mem[17008] = 74955518
|
||||
mask = 0X000100111111XX11001000000110X00100
|
||||
mem[53231] = 909153
|
||||
mem[28837] = 1739162
|
||||
mem[21336] = 3932
|
||||
mem[32899] = 872661
|
||||
mem[29051] = 228916
|
||||
mask = 0X1X11000111111X101111100000X10X00XX
|
||||
mem[23121] = 4940
|
||||
mem[64259] = 339599819
|
||||
mem[268] = 2533
|
||||
mem[5725] = 1430
|
||||
mem[56946] = 618
|
||||
mask = 001X1X0001111111101001111001X101XX10
|
||||
mem[46780] = 339675
|
||||
mem[57420] = 10161
|
||||
mem[32105] = 5534
|
||||
mask = X1000X10011001111110110100X01010X011
|
||||
mem[47922] = 892051565
|
||||
mem[50583] = 2962439
|
||||
mem[43673] = 107
|
||||
mask = 000001001X11011111101X00XX1111100111
|
||||
mem[17938] = 29693823
|
||||
mem[27809] = 17197
|
||||
mem[62755] = 6590924
|
||||
mem[26483] = 15837
|
||||
mem[5245] = 486
|
||||
mem[8213] = 1239
|
||||
mask = 0010X0000XX11XX1100010X0X11000101XX1
|
||||
mem[3842] = 3541
|
||||
mem[55663] = 76779528
|
||||
mem[29851] = 2801
|
||||
mask = XX011X0001111111X1XX0000000001X00010
|
||||
mem[20066] = 97384
|
||||
mem[35212] = 10209
|
||||
mem[15847] = 499740
|
||||
mem[9349] = 9638367
|
||||
mask = 001011X00XXX11X111100X1XX00010100X01
|
||||
mem[52845] = 1056563
|
||||
mem[30126] = 13918626
|
||||
mem[17709] = 25538089
|
||||
mem[1413] = 459461
|
||||
mem[59577] = 52944410
|
||||
mask = X1011001X0XX111011100XX010101X01X010
|
||||
mem[56449] = 144
|
||||
mem[8753] = 984864
|
||||
mem[23728] = 173703761
|
||||
mem[34970] = 28269
|
||||
mem[32500] = 49931
|
||||
mask = X0000100111X11111110X10X0101001100X1
|
||||
mem[64582] = 6646737
|
||||
mem[37177] = 10
|
||||
mem[57474] = 313623
|
||||
mem[17322] = 147838906
|
||||
mem[28766] = 15110001
|
||||
mem[49] = 80836580
|
||||
mask = 001010000X11111X10X0X111X0XX00X100X1
|
||||
mem[53163] = 15243
|
||||
mem[61002] = 406400
|
||||
mem[28930] = 465647779
|
||||
mask = 0010000X11101111100010X00XX1XX01XX01
|
||||
mem[1315] = 625209
|
||||
mem[44187] = 14395
|
||||
mask = X0010XX0011011111110110X0101XX0X00XX
|
||||
mem[31859] = 95408
|
||||
mem[16534] = 121119590
|
||||
mem[26550] = 8188494
|
||||
mem[37302] = 407378
|
||||
mask = 001XX1XXX1111X1110100001X00000111001
|
||||
mem[37574] = 31364
|
||||
mem[26443] = 2676291
|
||||
mem[22192] = 26966115
|
||||
mask = 001X010X001X011110001101XXX0X101XX11
|
||||
mem[41368] = 50472035
|
||||
mem[25252] = 3850
|
||||
mem[21011] = 7912441
|
||||
mem[55890] = 2474497
|
||||
mask = 0010010000X11XX111X0101X100000101000
|
||||
mem[57489] = 10006848
|
||||
mem[7880] = 30889
|
||||
mem[54742] = 14408
|
||||
mask = 0010100X00X1X11X101000X1X00X001100XX
|
||||
mem[28474] = 137340532
|
||||
mem[57910] = 3261
|
||||
mem[35212] = 974067528
|
||||
mem[24595] = 15641
|
||||
mask = 0X0X01X00110X11111X0X001X1011010X101
|
||||
mem[1515] = 4597
|
||||
mem[20626] = 483632
|
||||
mem[50912] = 101611112
|
||||
mem[62450] = 463312
|
||||
mask = 00101X000X0111011110X10X10011X100001
|
||||
mem[5378] = 132014
|
||||
mem[13345] = 2058543
|
||||
mem[42684] = 2824
|
||||
mem[34576] = 6385683
|
||||
mem[27201] = 2519
|
||||
mem[9632] = 202081
|
||||
mask = X0X1010001X011X111100001001X01XX1XX1
|
||||
mem[1538] = 2389067
|
||||
mem[4972] = 19131
|
||||
mem[23129] = 256828081
|
||||
mem[17188] = 185346747
|
||||
mem[44295] = 143437003
|
||||
mem[44830] = 5686
|
||||
mem[46528] = 4177799
|
||||
mask = X0010010001X1111110011X011XX11X1X011
|
||||
mem[7033] = 2748
|
||||
mem[2431] = 17997007
|
||||
mem[13924] = 90861
|
||||
mem[63656] = 497878
|
||||
mem[61841] = 891
|
||||
mem[10405] = 6177
|
||||
mem[55811] = 43078384
|
||||
mask = X110XX0011111XX1X11001X000000001X000
|
||||
mem[62283] = 8553774
|
||||
mem[14788] = 308418
|
||||
mem[5878] = 2324
|
||||
mask = 0000010001101111101XX1X00001001101XX
|
||||
mem[23816] = 69720
|
||||
mem[29524] = 197631
|
||||
mask = 10X100100011X111110011010X0X10X10XX1
|
||||
mem[5288] = 1072
|
||||
mem[34681] = 1902
|
||||
mem[47529] = 1012160
|
||||
mem[42117] = 232642695
|
||||
mem[7153] = 420427964
|
||||
mem[23129] = 10261
|
||||
mem[24545] = 1661292
|
||||
mask = X1011X010XX0X1X1X010001001001X001111
|
||||
mem[3984] = 17460969
|
||||
mem[43208] = 1626
|
||||
mem[12288] = 3244
|
||||
mem[1261] = 685777140
|
||||
mem[35662] = 3875
|
||||
mem[13197] = 807702837
|
||||
mem[8450] = 39850899
|
||||
mask = 001X0X00011X11111000000110010X0XXX1X
|
||||
mem[35167] = 3384
|
||||
mem[1969] = 3362919
|
||||
mem[4732] = 99083530
|
||||
mem[58162] = 1382314
|
||||
mask = 10000X10011011X11010000X11X1X0010100
|
||||
mem[50583] = 4112
|
||||
mem[4097] = 907
|
||||
mem[45785] = 1275731
|
||||
mem[31108] = 7733
|
||||
mem[50267] = 2625942
|
||||
mask = X0010X1001X011111110110011000111X0X0
|
||||
mem[35870] = 1100551
|
||||
mem[8514] = 8042956
|
||||
mem[10848] = 96032
|
||||
mem[44678] = 213384
|
||||
mem[25743] = 3586812
|
||||
mem[34074] = 991022
|
||||
mask = X010X1001111X1111110010X000011000011
|
||||
mem[61953] = 3703
|
||||
mem[41415] = 250960289
|
||||
mem[24262] = 14129393
|
||||
mask = 000X010XX11011X111100100110X001000X0
|
||||
mem[51393] = 320156165
|
||||
mem[27955] = 21751009
|
||||
mem[61468] = 8941693
|
||||
mem[24188] = 176466079
|
||||
mem[10717] = 2950
|
||||
mask = 0010XX00X11110101000X0110000X101X100
|
||||
mem[37149] = 18981413
|
||||
mem[12384] = 479738
|
||||
mem[17072] = 5196
|
||||
mem[59325] = 170080
|
||||
mem[3269] = 86268393
|
||||
mem[48598] = 18530
|
||||
mem[11287] = 4082
|
||||
mask = 0X101100X11X11111X10X0X01000X1110010
|
||||
mem[47267] = 12410
|
||||
mem[8609] = 6923289
|
||||
mem[28364] = 23091829
|
||||
mem[63780] = 858
|
||||
mem[21558] = 48929393
|
||||
mem[46110] = 74033138
|
||||
mask = 001011X0011111111010X10100X10X000011
|
||||
mem[30364] = 14013071
|
||||
mem[23121] = 5777
|
||||
mem[54108] = 11707710
|
||||
mask = 0010XX00X11X11111XX010X00X000X010011
|
||||
mem[29453] = 3480476
|
||||
mem[7516] = 869816189
|
||||
mem[57136] = 130673464
|
||||
mem[8609] = 2000
|
||||
mem[45543] = 1014823
|
||||
mem[3249] = 75
|
||||
mem[14460] = 18422415
|
||||
mask = 000X011000111X1X111010X0X10X11X10011
|
||||
mem[14556] = 7853751
|
||||
mem[29755] = 535169084
|
||||
mem[24262] = 4027
|
||||
mem[34051] = 13187123
|
||||
mask = 000X011X0X1X1111X110000000XX0000X11X
|
||||
mem[13879] = 2383
|
||||
mem[57329] = 749
|
||||
mem[54544] = 3055190
|
||||
mask = 00110XX00111111X10010001XX1000101000
|
||||
mem[4852] = 429814346
|
||||
mem[55439] = 7610
|
||||
mem[31685] = 811508716
|
||||
mem[38296] = 185763
|
||||
mem[16482] = 3668
|
||||
mem[47529] = 3803
|
||||
mask = X01011000111111X1011010101101X011X01
|
||||
mem[58499] = 851439
|
||||
mem[38516] = 3082
|
||||
mem[32500] = 364520
|
||||
mask = 001X110001111X10X000001011X001000101
|
||||
mem[44653] = 157371860
|
||||
mem[2226] = 58088617
|
||||
mem[10098] = 67459
|
||||
mem[45739] = 3994
|
||||
mem[4180] = 206930963
|
||||
mask = 001XX0000XX1111010X00011000001011011
|
||||
mem[53876] = 843104
|
||||
mem[56118] = 1019
|
||||
mem[39503] = 6758
|
||||
mem[24134] = 9483199
|
||||
mem[25914] = 26956
|
||||
mem[10098] = 63837172
|
||||
mem[40642] = 2366588
|
||||
mask = 0XX10X1001X1111X1X101010010XX01000X0
|
||||
mem[16432] = 17158914
|
||||
mem[29927] = 9292527
|
||||
mem[57922] = 24395252
|
||||
mem[48327] = 253
|
||||
mem[15450] = 496726
|
||||
mem[57027] = 518857449
|
||||
mask = 0101XXX0011X11111110X0XX01X010000111
|
||||
mem[39393] = 570
|
||||
mem[38893] = 21253926
|
||||
mask = 0010010X01XX1X1101100000010100110101
|
||||
mem[64325] = 416581774
|
||||
mem[26376] = 1666947
|
||||
mem[6276] = 90042
|
||||
mask = 0X00001101101111X11X010010XX1X1XX01X
|
||||
mem[20354] = 2180
|
||||
mem[50761] = 7237731
|
||||
mem[54710] = 5718
|
||||
mem[43883] = 2618938
|
||||
mem[59235] = 22130448
|
||||
mem[59325] = 14410783
|
||||
mask = 00000001X0101X11X110101001X11100X0X1
|
||||
mem[24262] = 10756242
|
||||
mem[59282] = 296121
|
||||
mem[15931] = 49
|
||||
mem[44067] = 339152264
|
||||
mem[22192] = 2750756
|
||||
mem[897] = 639
|
||||
mask = 001011X011111X1110X01X01X0XX0101X101
|
||||
mem[21410] = 5056
|
||||
mem[43472] = 198924166
|
||||
mem[50343] = 5363196
|
||||
mem[7486] = 773744
|
||||
mem[49418] = 77311216
|
||||
mask = 001X0000011011111X00000X1011X1X01XX0
|
||||
mem[19633] = 5522082
|
||||
mem[4682] = 51724569
|
||||
mem[36252] = 260
|
||||
mask = 001011X0111X1X1110XX000X100001X100X0
|
||||
mem[34373] = 803
|
||||
mem[61841] = 25585959
|
||||
mem[29051] = 2011
|
||||
mem[53885] = 4255251
|
||||
mem[55135] = 49781551
|
||||
mem[11748] = 5712
|
||||
mask = 000001000X1011111110X11X0XX11101100X
|
||||
mem[28073] = 257781932
|
||||
mem[32292] = 7788
|
||||
mem[47529] = 21491591
|
||||
mem[26354] = 3991
|
||||
mem[46496] = 225777
|
||||
mem[19054] = 6818
|
||||
mem[46391] = 1804050
|
||||
mask = 0X01X1110011111101X011X1X10010011100
|
||||
mem[8848] = 3301953
|
||||
mem[21325] = 828483041
|
||||
mem[35954] = 393891988
|
||||
mask = 001010XX11X0X11X1010001000001111X1X1
|
||||
mem[14556] = 48978
|
||||
mem[17078] = 3023995
|
||||
mem[41895] = 1263
|
||||
mem[26354] = 982
|
||||
mem[47494] = 9997
|
||||
mem[42458] = 139205796
|
||||
mask = 01011X0X01XX11X11X10001X010X10001100
|
||||
mem[30326] = 230268
|
||||
mem[13671] = 406
|
||||
mem[13219] = 816366
|
||||
mask = 00X0111000101101XX10X010X100X0101X01
|
||||
mem[9172] = 5603
|
||||
mem[10540] = 399
|
||||
mem[6994] = 2969
|
||||
mem[41827] = 157730
|
||||
mem[57564] = 713362
|
||||
mem[16823] = 335722
|
||||
mem[38893] = 724
|
||||
mask = X1X10110011111X01X101X111101X0X1X000
|
||||
mem[5336] = 623
|
||||
mem[31859] = 88241437
|
||||
mem[7282] = 19257561
|
||||
mem[37684] = 5467271
|
||||
mem[50354] = 2120264
|
||||
mask = 0000X100111X1111X1X001X0000X00110001
|
||||
mem[61468] = 9124391
|
||||
mem[35212] = 23096803
|
||||
mem[9949] = 9454
|
||||
mem[1331] = 995
|
||||
mem[39238] = 74423
|
||||
mask = 00100100111X1111111011X1XX010X1X0010
|
||||
mem[39294] = 114968517
|
||||
mem[23155] = 1708
|
||||
mem[29927] = 7693420
|
||||
mem[26742] = 2017
|
||||
mask = 001001001X101111X1X0XX01100X0X0101XX
|
||||
mem[29056] = 30646
|
||||
mem[59210] = 113022
|
||||
mem[43000] = 144138476
|
||||
mem[35167] = 721
|
||||
mem[30809] = 507151422
|
||||
mask = 0001X0100101111010X0100000X0X0100010
|
||||
mem[34554] = 49221
|
||||
mem[7437] = 62877
|
||||
mem[59828] = 184498
|
||||
mem[45586] = 20089049
|
||||
mem[48248] = 98197865
|
||||
mem[44772] = 113026522
|
||||
mask = 00X0X000111X11111010X10X1011010X0X01
|
||||
mem[40499] = 11427785
|
||||
mem[60906] = 496319403
|
||||
mem[55126] = 270707060
|
||||
mask = 001XXXX10011X1111000110X0X000XX10001
|
||||
mem[17938] = 535040
|
||||
mem[59138] = 250862772
|
||||
mem[8507] = 41576622
|
||||
mem[14146] = 1026
|
||||
mem[32774] = 2975
|
||||
mem[39952] = 440004
|
||||
mem[13671] = 2552
|
||||
mask = 00000100X110111X111001X0X10X0XX100X1
|
||||
mem[43163] = 1156
|
||||
mem[35680] = 6039549
|
||||
mem[15378] = 657
|
||||
mem[52635] = 15396
|
||||
mem[25926] = 210
|
||||
mem[28827] = 206264701
|
||||
mask = 001X100X001X1111100011X1XX1000100X01
|
||||
mem[5753] = 1286
|
||||
mem[6271] = 6375
|
||||
mem[47122] = 5264524
|
||||
mask = 0X01100XXX10111X1X100X10000X1000001X
|
||||
mem[51736] = 2480
|
||||
mem[16722] = 663122146
|
||||
mem[18483] = 119830
|
||||
mem[13423] = 136699070
|
||||
mem[65442] = 23484946
|
||||
mem[50742] = 716
|
||||
mem[14788] = 129808
|
||||
mask = 100100000X101111111001000101X00X01X0
|
||||
mem[35279] = 11923915
|
||||
mem[12886] = 216539704
|
||||
mem[29197] = 258471
|
||||
mem[34051] = 24342647
|
||||
mem[34556] = 219870381
|
||||
mask = 0010X100011011X11110X1101X010X1001X1
|
||||
mem[17497] = 684
|
||||
mem[8762] = 255129
|
||||
mem[44486] = 49869056
|
||||
mem[35680] = 210517
|
||||
mem[18805] = 17289
|
||||
mask = 001011101X1011111X01111010001000XX01
|
||||
mem[31918] = 89826257
|
||||
mem[31090] = 57962
|
||||
mem[53807] = 2817
|
||||
mem[12784] = 2137
|
||||
mem[31369] = 64658
|
||||
mask = X000X1X0011011111010X0X111XX00X1X100
|
||||
mem[63989] = 3267
|
||||
mem[23677] = 2600
|
||||
mem[42781] = 125518
|
||||
mem[37480] = 3172
|
||||
mem[23573] = 8287963
|
||||
mask = 0010110001111XXX10XX0X1X0X0000010100
|
||||
mem[1654] = 317418946
|
||||
mem[46425] = 459126
|
||||
mem[31666] = 9190945
|
||||
mem[12079] = 168185843
|
||||
mem[39256] = 178728
|
||||
mem[52287] = 59458806
|
||||
mask = 000001000110111X1010X00000X100110X00
|
||||
mem[55820] = 2071
|
||||
mem[33429] = 821261571
|
||||
mem[16244] = 3215
|
||||
mask = 100110100110X1111110X01101X1XX10X011
|
||||
mem[47796] = 98
|
||||
mem[31040] = 1031334
|
||||
mem[9622] = 1580517
|
||||
mask = 00100X001110XX11110000011101X0011001
|
||||
mem[42781] = 312404
|
||||
mem[39942] = 123252858
|
||||
mem[20867] = 1356
|
||||
mem[14667] = 576
|
||||
mem[35502] = 298476332
|
||||
mem[53427] = 365745
|
||||
mask = 00010X100110111111100010XX00XX000100
|
||||
mem[53876] = 603517
|
||||
mem[10405] = 16459102
|
||||
mem[45543] = 4443
|
||||
mem[41543] = 1411
|
||||
mem[62450] = 6470215
|
||||
mask = 100X110X11111X110X0010000X0X10001X10
|
||||
mem[5336] = 650575
|
||||
mem[50124] = 3080229
|
||||
mem[51618] = 156
|
||||
mem[42185] = 1366
|
||||
mask = 00X0X1101110101110XX1011X001001110X0
|
||||
mem[30736] = 333574460
|
||||
mem[13675] = 8643742
|
||||
mem[12826] = 453315
|
||||
mask = 000X00100X1X1X111XX0101X0X100111000X
|
||||
mem[54995] = 183737953
|
||||
mem[63234] = 679
|
||||
mem[61488] = 337
|
||||
mask = 0XX11111X0111X1X01001111X00X11001XX1
|
||||
mem[10621] = 122118726
|
||||
mem[6109] = 9210
|
||||
mem[15688] = 184799
|
||||
mem[25564] = 367237
|
||||
mask = 00110000011X1111100X000X00XXX1XX1000
|
||||
mem[17938] = 33020705
|
||||
mem[2666] = 88651117
|
||||
mem[21482] = 161753
|
4
aoc2020/input/day14_provided.txt
Normal file
4
aoc2020/input/day14_provided.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0X
|
||||
mem[8] = 11
|
||||
mem[7] = 101
|
||||
mem[8] = 0
|
186
aoc2020/src/day14.rs
Normal file
186
aoc2020/src/day14.rs
Normal file
|
@ -0,0 +1,186 @@
|
|||
use std::collections::HashMap;
|
||||
use std::fmt::Write;
|
||||
|
||||
use aoc::err;
|
||||
|
||||
const INPUT: &str = include_str!("../input/day14.txt");
|
||||
|
||||
pub fn run() -> aoc::Result<String> {
|
||||
let mut res = String::with_capacity(128);
|
||||
|
||||
writeln!(res, "part 1: {}", part1(INPUT)?)?;
|
||||
|
||||
Ok(res)
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> aoc::Result<u64> {
|
||||
let mut program: Program = input.parse()?;
|
||||
|
||||
program.run()?;
|
||||
|
||||
Ok(program.memory_sum())
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone, Copy)]
|
||||
enum MaskType {
|
||||
And,
|
||||
Or,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
struct BitMask {
|
||||
masks: Vec<(MaskType, u64)>,
|
||||
}
|
||||
|
||||
impl BitMask {
|
||||
fn apply(&self, mut n: u64) -> u64 {
|
||||
for (mask_type, mask) in &self.masks {
|
||||
match mask_type {
|
||||
MaskType::And => n &= mask,
|
||||
MaskType::Or => n |= mask,
|
||||
}
|
||||
}
|
||||
|
||||
n
|
||||
}
|
||||
}
|
||||
|
||||
impl std::str::FromStr for BitMask {
|
||||
type Err = aoc::Error;
|
||||
|
||||
fn from_str(s: &str) -> aoc::Result<Self> {
|
||||
let masks = s
|
||||
.chars()
|
||||
.rev()
|
||||
.enumerate()
|
||||
.filter_map(|(idx, c)| match c {
|
||||
'1' => {
|
||||
let m = 1 << idx;
|
||||
Some(Ok((MaskType::Or, m)))
|
||||
}
|
||||
'0' => {
|
||||
let m = !(1 << idx);
|
||||
Some(Ok((MaskType::And, m)))
|
||||
}
|
||||
'X' => None,
|
||||
_ => Some(Err(err!("unknown character in mask: `{}`", c))),
|
||||
})
|
||||
.collect::<aoc::Result<_>>()?;
|
||||
|
||||
Ok(BitMask { masks })
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
enum Instruction {
|
||||
MemWrite { offset: usize, value: u64 },
|
||||
ChangeMask(BitMask),
|
||||
}
|
||||
|
||||
impl std::str::FromStr for Instruction {
|
||||
type Err = aoc::Error;
|
||||
|
||||
fn from_str(s: &str) -> aoc::Result<Self> {
|
||||
let mut words = s.split(' ');
|
||||
|
||||
let first = words
|
||||
.next()
|
||||
.ok_or_else(|| err!("missing first word in instruction"))?;
|
||||
let second = words
|
||||
.next()
|
||||
.ok_or_else(|| err!("missing second word in instruction"))?;
|
||||
let third = words
|
||||
.next()
|
||||
.ok_or_else(|| err!("missing third word in instruction"))?;
|
||||
|
||||
if second != "=" {
|
||||
return Err(err!("expected `=` as second word in instruction: `{}`", s));
|
||||
}
|
||||
|
||||
if first == "mask" {
|
||||
Ok(Self::ChangeMask(third.parse()?))
|
||||
} else {
|
||||
let left_bracket = first
|
||||
.find('[')
|
||||
.ok_or_else(|| err!("couldn't find bracket in memory instruction"))?;
|
||||
let right_bracket = first
|
||||
.find(']')
|
||||
.ok_or_else(|| err!("couldn't find bracket in memory instruction"))?;
|
||||
|
||||
let offset = first[(left_bracket + 1)..right_bracket]
|
||||
.parse()
|
||||
.map_err(|e| err!("couldn't parse memory offset: `{}`", e))?;
|
||||
|
||||
let value = third
|
||||
.parse()
|
||||
.map_err(|e| err!("couldn't parse memory offset: `{}`", e))?;
|
||||
|
||||
Ok(Self::MemWrite { offset, value })
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
struct Program {
|
||||
instructions: Vec<Instruction>,
|
||||
memory: HashMap<usize, u64>,
|
||||
current_mask: Option<BitMask>,
|
||||
}
|
||||
|
||||
impl Program {
|
||||
fn run(&mut self) -> aoc::Result<()> {
|
||||
for inst in &self.instructions {
|
||||
match inst {
|
||||
Instruction::ChangeMask(bitmask) => self.current_mask = Some(bitmask.clone()),
|
||||
|
||||
Instruction::MemWrite { offset, value } => match &self.current_mask {
|
||||
Some(bitmask) => {
|
||||
self.memory.insert(*offset, bitmask.apply(*value));
|
||||
}
|
||||
None => {
|
||||
return Err(err!("tried to execute MemWrite but mask isn't initialized"))
|
||||
}
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
fn memory_sum(&self) -> u64 {
|
||||
self.memory.iter().map(|(_, value)| value).sum()
|
||||
}
|
||||
}
|
||||
|
||||
impl std::str::FromStr for Program {
|
||||
type Err = aoc::Error;
|
||||
|
||||
fn from_str(s: &str) -> aoc::Result<Self> {
|
||||
let instructions = s
|
||||
.lines()
|
||||
.map(|line| line.parse())
|
||||
.collect::<aoc::Result<_>>()?;
|
||||
|
||||
Ok(Program {
|
||||
instructions,
|
||||
memory: HashMap::new(),
|
||||
current_mask: None,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
const PROVIDED: &str = include_str!("../input/day14_provided.txt");
|
||||
|
||||
#[test]
|
||||
fn part1_provided() {
|
||||
assert_eq!(part1(PROVIDED).unwrap(), 165);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn part1_real() {
|
||||
assert_eq!(part1(INPUT).unwrap(), 4297467072083);
|
||||
}
|
||||
}
|
|
@ -11,3 +11,4 @@ pub mod day10;
|
|||
pub mod day11;
|
||||
pub mod day12;
|
||||
pub mod day13;
|
||||
pub mod day14;
|
||||
|
|
|
@ -14,6 +14,7 @@ use aoc2020::day10;
|
|||
use aoc2020::day11;
|
||||
use aoc2020::day12;
|
||||
use aoc2020::day13;
|
||||
use aoc2020::day14;
|
||||
|
||||
fn main() -> Result<()> {
|
||||
let days: &[DayFunc] = &[
|
||||
|
@ -30,6 +31,7 @@ fn main() -> Result<()> {
|
|||
day11::run,
|
||||
day12::run,
|
||||
day13::run,
|
||||
day14::run,
|
||||
];
|
||||
|
||||
aoc::run(days)
|
||||
|
|
Loading…
Reference in a new issue