add day 14
[?]
Dec 14, 2020, 10:08 PM
WKDYPIFFZEJJMOSHO762UWJRDLFI5K4W2EOJA2JT3TBLKFCSS4CACDependencies
Change contents
- file addition: 14[1.0]
- file addition: small2.txt[0.5]
mask = 000000000000000000000000000000X1001Xmem[42] = 100mask = 00000000000000000000000000000000X0XXmem[26] = 1 - file addition: small.txt[0.5]
mask = XXXXXXXXXXXXXXXXXXXXXXXXXXXXX1XXXX0Xmem[8] = 11mem[7] = 101mem[8] = 0 - file addition: mask.hs[0.5]
import Control.Applicativeimport Data.Listimport qualified Data.Map.Strict as Mdata Bit = Zero | One deriving (Show)type Mask = [Maybe Bit]data State = St{ getMemory :: M.Map Integer [Bit],getMask :: Mask}parseMask :: String -> MaskparseMask = map indivwhereindiv 'X' = Nothingindiv '1' = Just Oneindiv '0' = Just ZeroapplyMask :: Mask -> [Bit] -> [Bit]applyMask = zipWith maskBitwheremaskBit Nothing x = xmaskBit (Just y) _ = yintToBits :: Integer -> [Bit]intToBits = leftpad 36 . reverse . gowherego 0 = []go n = (if n `mod` 2 == 1 then One else Zero) : go (n `div` 2)leftpad m xs = replicate (m - length xs) Zero ++ xsbitsToInt :: [Bit] -> IntegerbitsToInt = go . reversewherego [] = 0go (Zero : xs) = 2 * go xsgo (One : xs) = 1 + 2 * go xsrunInstr :: State -> String -> StaterunInstr (St mem mask) s =case words s of"mask" : "=" : rest -> St mem (parseMask $ concat rest)('m' : 'e' : 'm' : '[' : num) : "=" : rest ->let index = read $ take (length num - 1) numn = intToBits $ read $ concat $ restmem' = M.insert index (applyMask mask n) memin St mem' mask_ -> undefinedsolveOne :: String -> IntegersolveOne =M.foldr ((+) . bitsToInt) 0. getMemory. foldl runInstr (St M.empty (replicate 36 Nothing)). linesapplyMaskV2 :: Mask -> [Bit] -> [Integer]applyMaskV2 m = map bitsToInt . foldr (liftA2 (:)) [[]] . zipWith maskBit mwheremaskBit Nothing _ = [Zero, One]maskBit (Just One) _ = [One]maskBit (Just Zero) n = [n]runInstrV2 :: State -> String -> StaterunInstrV2 (St mem mask) s =case words s of"mask" : "=" : rest -> St mem (parseMask $ concat rest)('m' : 'e' : 'm' : '[' : num) : "=" : rest ->let index = intToBits $ read $ take (length num - 1) numindices = applyMaskV2 mask indexn = intToBits $ read $ concat $ restmem' = foldr (flip M.insert n) mem indicesin St mem' mask_ -> undefinedsolveTwo :: String -> IntegersolveTwo =M.foldr ((+) . bitsToInt) 0. getMemory. foldl runInstrV2 (St M.empty (replicate 36 Nothing)). lines - file addition: input.txt[0.5]
mask = 0101111110011010X110100010X100000XX0mem[46424] = 216719mem[43628] = 6647mem[21582] = 4737255mem[62945] = 25540mem[14304] = 1226mask = X100010101X111100X1000000000X1X01101mem[61719] = 43mem[29889] = 539182mem[20432] = 81037mem[19130] = 84833888mem[62957] = 257066mask = 1100110100000X01011100X011X10111101Xmem[23466] = 760341642mem[52847] = 2953mem[19579] = 337454817mask = 11000100X00X101X0101000X101011X10010mem[11088] = 486068mem[20832] = 1783932mem[40903] = 22837mem[52523] = 916767mem[33536] = 69899mem[29213] = 922168mem[19898] = 2527744mask = 0X0000010X011X100000011XX1XX10001000mem[30153] = 10168mem[10353] = 99745mem[64464] = 228084499mask = 01X0XX010011X1100X11010010X0X100100Xmem[39767] = 183317mem[8681] = 31397mem[26082] = 214138mem[7692] = 1784975mask = 0100X1X01X010011X1110000011001100000mem[37247] = 260760mem[14360] = 2426139mem[47677] = 7192080mask = 00001XX1100X0010110011X0XX0001X0010Xmem[4309] = 297242075mem[64075] = 893494359mask = 110X1011100000X0XX00110100X00001XXXXmem[55914] = 438425130mem[49344] = 16510528mem[2674] = 28909mem[35317] = 238296302mem[18530] = 109875262mask = X10X01010011101X0X1000101X1111X0X0X0mem[12244] = 2199mem[56582] = 2862764mem[8393] = 3831mem[54761] = 16511mem[23804] = 311190mem[2775] = 28757mem[2635] = 1816435mask = 0X001X11100X10100X10X1X010X1101X0011mem[39770] = 124269mem[42638] = 52020mem[19450] = 864925mem[6838] = 8985514mem[17628] = 1212mask = 010001110111000111X0X01X00000000X001mem[18199] = 1424733mem[32849] = 234584243mem[6180] = 1017017mask = 0100000100X1X110X0000001XX0010X01X00mem[56497] = 6674mem[30862] = 13749640mem[24832] = 3266046mem[7480] = 19674454mem[50124] = 475830721mem[41122] = 59014242mem[56513] = 2403mask = 010010010001X00011100100000XX10100X0mem[50501] = 591395mem[34019] = 18696205mem[53288] = 5905mem[61133] = 92733mem[22325] = 13533198mem[36300] = 298891mem[59419] = 27121mask = 0X0001011001100XX11001000X1XX0001100mem[50238] = 46859845mem[65438] = 42469mem[23966] = 416mem[5730] = 15529mem[61033] = 194705034mem[54747] = 467381mem[38123] = 1472mask = 01000X010X011X100XX001X1010X11001XX0mem[50501] = 3572mem[4293] = 3456022mem[19192] = 1372334mem[11565] = 326290168mem[51595] = 18690mask = XX00X0X11000X01011001100X00011X1X0X0mem[51539] = 768mem[20597] = 12720mem[23426] = 324mem[39084] = 50404mask = 11X011011001X00XX111X00X10001X111000mem[18530] = 29878596mem[22804] = 347574684mem[22057] = 84333mem[2158] = 181745mask = 00XX00X110001010110X1101101001100010mem[9903] = 188600558mem[34677] = 15095860mem[44413] = 28541mem[35346] = 3955mem[58279] = 3413218mem[16962] = 9299049mask = 0100010101X11010X1000X0100X01X0010X1mem[42770] = 92786mem[29697] = 41035mem[37048] = 76494mask = 1000XX0X000011111X00110010XX10X1X110mem[38455] = 14997231mem[13916] = 191608mem[42447] = 37002175mem[50769] = 11134486mask = 11000100X0001XX0110XX1X11110X100X01Xmem[27059] = 70716919mem[20721] = 24389442mem[6528] = 20075mem[22804] = 530695189mask = 1100X1X0X0X11100X1110110010111000000mem[34446] = 6853mem[6030] = 22765mem[33379] = 2375mem[5227] = 752687947mask = 1X000100X0001X10110000X000101XXX0110mem[21606] = 262401340mem[60001] = 1568637mem[19993] = 4349mask = 1X0X10000011X0001X1001101100000X1100mem[10542] = 217555392mem[14979] = 509322mem[59366] = 750mem[27370] = 541mem[8868] = 218418760mem[34962] = 5044mask = 1110X001X01010X11X10XX01000X1XX11101mem[58614] = 5182291mem[58120] = 1120048mem[23196] = 3963mem[42638] = 8965505mem[40895] = 4284430mask = 11X1100000111000X110X1X001110XX11X10mem[63215] = 8080556mem[61017] = 32038853mem[16644] = 944501mask = 1100X10X100X101XX1X10001X01011110000mem[52847] = 3803671mem[20850] = 7808415mem[8712] = 144288mem[58787] = 6mem[64997] = 445837702mem[41100] = 37513016mem[13520] = 973mask = 1X100X0X00XX1X011X1000001X0110X01110mem[32333] = 1744mem[56029] = 299mem[25784] = 31286mem[43862] = 51049mem[58782] = 2944mem[17428] = 75751931mask = X100X10X00X11000111X0000100X010X1X11mem[12260] = 6122mem[48663] = 460mem[64075] = 183608631mem[63027] = 13796mask = X10001X1000010XX11000X11011110X10001mem[49801] = 67831561mem[54914] = 10434056mask = 11X0X1X10001100X111XX10X010110011000mem[7898] = 458939mem[23966] = 79878872mem[19878] = 3625210mem[58431] = 540mem[3348] = 7862654mem[3412] = 118574mask = 1100010X100X1XX0110X0X10XX0010101011mem[12015] = 731mem[8185] = 209550192mem[29616] = 17919178mem[6158] = 1618787mem[31085] = 2050168mem[49943] = 905915mask = 01X0X00XX0X11011X1000X00XX0011010010mem[7308] = 2041mem[2769] = 264056059mem[52380] = 7334932mem[53511] = 2554mask = XX0001X10001100X1110X10X100110011100mem[26838] = 5813mem[50268] = 264384570mem[130] = 87338mem[413] = 1000391mem[17628] = 65356685mem[55309] = 165547mask = 01X0X10X11011X100XX001X00101X11X1001mem[16368] = 4140505mem[44899] = 1721205mem[27560] = 133mask = 01000X01011X0001111001111XXX01110X0Xmem[11565] = 13877443mem[28465] = 66870471mem[5232] = 537178mem[62602] = 27657281mask = 1100110010011X00111X000011XXX0X010XXmem[2576] = 971803mem[36877] = 5560mem[40103] = 643868mask = X100110X1X01X01X11110X110X00X1111000mem[56749] = 81mem[15008] = 182232225mem[3329] = 11184975mask = 01X001X10111X0011X10001100000001X0X1mem[24430] = 874925389mem[33402] = 23932396mem[7393] = 2756629mem[45138] = 974627mask = 0X000X0100011X1XX1100X0000X111X01000mem[16564] = 811253mem[23329] = 81876mem[17685] = 43268701mem[27546] = 1472091mem[2102] = 445258mask = 0X00X101XX01111000X0100011X10X00011Xmem[61642] = 3296mem[61163] = 162776570mem[59415] = 3057mask = 01X00001X01X111X00000X0X0XX1100X0010mem[51782] = 103mem[37951] = 1911mem[38455] = 1691mask = 1X0001XX00001X1X1100X10101101XX1X010mem[39885] = 350996156mem[2248] = 1302mem[4174] = 1746120mem[7046] = 387007mem[7898] = 200mem[62427] = 219368mask = 1100110X100110001110000X101X00010X00mem[52738] = 3017585mem[60907] = 274499319mem[44127] = 198066mem[7008] = 15737mem[5838] = 24930mem[1196] = 626mem[760] = 125926mask = 110X11X1001X1000111010101X1X001101X1mem[58787] = 131362883mem[63206] = 1662mem[16764] = 29008042mem[44650] = 11562940mask = 010001X00001XX100XX0111011X000101101mem[20597] = 8035mem[24694] = 21315464mem[21329] = 25433146mem[11666] = 501845791mem[13072] = 46538mask = 00001X1XX0001010011X0100XX111X11010Xmem[34466] = 17022332mem[43116] = 759445mem[49228] = 1468mem[50795] = 905170mask = X10X01010X11100110101001X00XX1X10011mem[14354] = 44435828mem[13870] = 57828837mem[46810] = 9681mem[55942] = 12919869mem[30769] = 1601943mem[55514] = 966mem[37519] = 77989mask = 010001010XX11X10XX1X0X0X1X0111001001mem[31633] = 642267mem[31180] = 256848mem[3262] = 53074205mem[4176] = 27542042mem[30177] = 660mem[16257] = 7236mask = X100110110X110X0111X0XX0001010X010X0mem[6360] = 92130236mem[28850] = 46594mem[15985] = 397101mem[49228] = 80mask = X100110010011X00111X10X0X11000X0X1X0mem[55502] = 6202150mem[26082] = 314mem[39594] = 6635685mem[60628] = 186878mem[26354] = 26627mask = 11001101000X100XX11X0100010001XX0001mem[32489] = 421676mem[54747] = 776369mem[5568] = 161mem[56323] = 46mem[21580] = 513mem[22504] = 425mem[16855] = 840mask = 1110110X100X0X0X01111X11011001001X0Xmem[45789] = 637584mem[30970] = 1057424mem[23657] = 22302mem[26082] = 877466mask = 0X000101100110100X100100XX0110X01000mem[24512] = 9678mem[54196] = 187mem[5120] = 4093605mem[24945] = 751mem[44317] = 1926mask = X10XX101X101100101X0X10110XX110X1100mem[26837] = 164343201mem[27917] = 7656mem[38564] = 513678mem[50795] = 76758852mem[43436] = 377041mask = X11X111X0X011000111X01000X011X001010mem[62853] = 7257mem[64609] = 3359628mem[19612] = 7400536mask = X1000101111XXX10001100011101010010X1mem[11544] = 19164015mem[89] = 15427mem[7510] = 177830mem[38182] = 3493289mem[38761] = 98839912mem[41629] = 36133346mem[64464] = 11351848mask = 01000101X1011010X100X11X01001X0X1001mem[62024] = 6787mem[37961] = 239020169mem[11048] = 30241mem[12021] = 37370mem[7504] = 130958613mem[15985] = 547735mem[24593] = 26754mask = 11X01101X00XX001X111010001XXX01010X1mem[2769] = 36617mem[15841] = 32395988mem[14184] = 1230mem[53415] = 192565609mem[65353] = 1103mem[21988] = 93037470mem[5899] = 318043mask = 110101XX01111X0X1010X00X0X110X0110X0mem[61629] = 8487mem[22606] = 229956mem[4869] = 2889mem[22702] = 2964611mem[51436] = 1447mem[39022] = 218429mask = 1100X10XX0X1100X1X10101X111001X11111mem[44127] = 28480880mem[23797] = 7200980mem[42770] = 134215352mask = 0100000X000X101X010001X011X010X11X10mem[14052] = 2132mem[54344] = 283mem[50501] = 228mask = 11XX100X100110X0111011100X0000100X11mem[3096] = 56107mem[41528] = 136050659mem[61642] = 27190672mem[14184] = 2443414mask = 0X0X0011100X1010110X0101001XX11100X0mem[61017] = 579168mem[13520] = 753mem[8723] = 1450259mem[62331] = 40126mem[41759] = 150938mem[35794] = 7868mem[8688] = 11717126mask = X1001X0010011XX0X110101XX1000X111X11mem[61163] = 2017mem[59484] = 365949812mem[18300] = 7976052mask = 01001001100X101011XX110X100111000000mem[57866] = 98060156mem[50268] = 945963mem[2775] = 50053mem[47406] = 154534009mask = 010000010101X110XX1001XX010111001001mem[18692] = 129964mem[15203] = 10499mem[46399] = 62751mem[21701] = 409829mask = 0100000100XX10100XX00010110010001XX0mem[53321] = 237286923mem[6885] = 12836105mask = 0100010X100X101001100X100000111X1XX1mem[56749] = 20323mem[24754] = 3110mem[6549] = 6911933mem[19817] = 902749mem[41862] = 141653872mask = 01X0000100X1111X0X000XX1000010111100mem[62817] = 24212mem[47588] = 88272mem[40843] = 15421mem[2344] = 84933mem[58787] = 39045mask = 11XX1X00X01110X01110011X0X00001011XXmem[26894] = 267mem[21329] = 105884mem[47335] = 199007575mem[45542] = 42702501mask = 010X01X1000111101X1000001X1X110X00X0mem[54035] = 250mem[18530] = 817mem[817] = 6197248mem[24075] = 70967mem[3138] = 1757mem[11977] = 3139118mem[27233] = 62004mask = X100X1XX110111100X101000100101000010mem[36703] = 321859730mem[28466] = 1329578mem[63529] = 841665mem[25621] = 86565892mem[19817] = 22768mask = 11100XX100X110011111110101011001X110mem[21830] = 63889233mem[27233] = 111377mem[31085] = 16480896mem[34637] = 2351346mem[44889] = 251mem[50401] = 130227708mem[52668] = 1684548mask = 0100011XXX011010X1X001101X00XX111010mem[7480] = 10145mem[28850] = 10692762mem[43245] = 50413255mem[39257] = 1768041mask = 0100X1X1100X1010011001X1X00111101000mem[41148] = 4200404mem[6369] = 25745796mem[44881] = 111919mem[5128] = 535961743mask = 010011011001X00011XX00000100100XX000mem[20676] = 267025408mem[6180] = 251317mask = 0100010101X11XXX011X001100011010100Xmem[14528] = 256867985mem[6360] = 27062543mem[60004] = 291mask = 01X00101X11X1010001X0000X001X101XX01mem[24593] = 262mem[3272] = 132mem[32191] = 20587mem[7172] = 51454362mem[11375] = 6051mask = 11001X0X00010001XX11010010000X1010X1mem[6831] = 11190mem[14841] = 2503mem[60207] = 36858958mem[21151] = 29467mem[46209] = 22081mask = 010001010X11X1100110X0001X0001011001mem[38897] = 46352057mem[7175] = 46467491mem[219] = 17121502mem[38980] = 3723671mem[457] = 671215mem[30417] = 156865588mask = 110101110X1X110X10100X00001100110110mem[18104] = 454788463mem[19452] = 18162mask = 110X11001X0110001111X000X1001001X001mem[46488] = 1260mem[3329] = 426654mem[46810] = 3870mem[8621] = 12925mask = 110001011000X0X1X11X1011X0001011110Xmem[60718] = 34740816mem[60977] = 709578014mem[37624] = 93226078mem[6054] = 1887mem[26175] = 430mask = 0101111110X1X01001X000110100X110X110mem[1214] = 57810mem[28249] = 143169mem[44390] = 112mask = 01XX0101000110001X10000000XX1XX10X00mem[48350] = 16212mem[29573] = 238mem[40903] = 1795848mask = 011000X10011111X010X01XX01X1101X111Xmem[47677] = 182253mem[23334] = 68758mask = 0100XX01X00110X0X110010000X011X0010Xmem[29649] = 105432234mem[53208] = 792257mem[21582] = 658154042mem[56134] = 1972mem[21732] = 4324466mem[17340] = 2613mem[57866] = 1243mask = 01X01001100XXX1011001X00000111010X01mem[18530] = 586mem[23426] = 1429648mem[15985] = 24011949mem[57590] = 360529mask = 010000010001100X01100001X0000X000X10mem[8249] = 920087mem[19925] = 1290454mem[49639] = 70486mem[22798] = 564mem[50238] = 1879mem[62463] = 16312mem[21732] = 5818962mask = 1XX0110010X1100011X00XX01XX1001X1010mem[12606] = 27185mem[7401] = 6832mem[46415] = 1438965mem[9614] = 229076295mem[62024] = 851916mem[3371] = 41841107mask = X11011X01X01111000000000101111000X01mem[25319] = 731128mem[32664] = 118900mem[38482] = 42385058mem[19832] = 2590687mem[33249] = 165555036mask = 1110XX01XXX0101X11100X1001101X011110mem[20621] = 726479117mem[4685] = 120830mem[12606] = 1154853mask = X100X1XX100X101X1111X00001010X100100mem[53048] = 5427mem[45481] = 167379930mem[15481] = 4434mask = 1100100X1001X0X01110111X1X10101X1011mem[43851] = 74972mem[16171] = 495748mem[35546] = 1035895mem[8868] = 8088024mem[15153] = 1779573mask = 010X11X110X1101011101000001XX1000100mem[25292] = 672982926mem[53441] = 37mem[60907] = 5981763mem[43566] = 1207mask = 0X00010101X111101X11010011111100100Xmem[34938] = 10429mem[20850] = 78396156mem[11841] = 13100745mask = 0100X1X1100X1010011000X000XX11111XX1mem[16764] = 7659044mem[51446] = 24687135mem[413] = 522098mask = 1100010X1X0111X0011000X011100101011Xmem[40985] = 27938mem[33039] = 2705710