Skip to content

Instantly share code, notes, and snippets.

@skejeton
Created December 9, 2020 12:15
Show Gist options
  • Save skejeton/4771d98807ff430ece593ad1c9c06ad2 to your computer and use it in GitHub Desktop.
Save skejeton/4771d98807ff430ece593ad1c9c06ad2 to your computer and use it in GitHub Desktop.
AOC day 9
testData :: [Int]
testData = [11,6,42,19,23,20,26,4,2,36,35,41,18,38,28,1,48,5,17,10,32,15,46,50,24,3,7,6,8,68,83,23,11,16,4,36,9,78,12,29,13,25,42,14,84,10,17,15,18,28,19,21,20,22,35,24,45,30,67,50,23,40,27,26,31,38,33,25,42,29,32,34,57,41,70,43,44,46,65,75,47,48,89,49,51,61,60,52,54,56,99,86,90,72,104,77,78,84,85,95,87,109,132,126,96,108,101,129,233,103,106,172,153,110,128,175,149,150,155,165,161,181,222,180,242,422,238,403,204,258,209,207,213,528,216,635,303,260,259,304,482,299,693,342,326,361,435,384,467,429,607,844,420,842,474,422,762,558,475,476,564,519,620,660,625,1100,641,668,837,745,781,804,903,1167,851,895,894,1587,950,1034,897,951,1039,994,1221,1083,1285,1245,1429,1472,1309,2061,1413,1695,1933,2423,1698,2172,1745,1985,3242,2738,1847,1848,1891,2239,1945,2328,2077,2304,2368,2530,3490,3170,3260,3004,3108,3111,3393,4313,3876,3443,3592,3593,3695,3738,3739,3968,3793,3836,6901,4249,4381,4445,5476,4898,5534,7871,6447,6112,6836,6219,10428,7132,7035,9857,7629,7185,7288,7477,9272,7532,7761,8042,15962,8630,8694,9279,15391,11981,13011,11646,12331,16304,14124,13404,13254,15049,14167,15293,14473,22034,19178,16756,16107,22515,16391,21025,41212,17324,35498,17973,20925,23627,23977,24657,24900,66112,27571,27421,26658,27727,29460,28640,29766,30580,32498,33147,32863,35297,34364,37316,38249,38898,44895,41600,41950,44552,57155,48634,49557,100476,61022,60590,54079,54385,89653,58100,62629,67227,74813,70463,67511,102190,83550,124017,118177,80498,172562,112063,91507,99105,108464,98191,129198,103636,160127,112179,181160,112485,117014,120729,125327,130140,224664,166320,137974,254988,172005,164048,195143,178689,192561,367051,189698,190612,197296,298162,315872,215815,242341,229193,394504,354826,552122,250869,263301,255467,268114,304294,856416,526831,414346,336053,342737,385755,369301,426489,380310,386994,465410,448165,740581,585078,458156,648424,480062,506336,518768,518983,514170,523581,559761,572408,640347,678790,705354,729731,1212755,712038,749611,756295,905977,999045,1275063,906321,962335,1104061,938218,964492,986398,994232,1066097,1037751,1033153,1384144,1083342,1638505,1284446,1319137,1839637,1441769,1461649,1468333,2096182,1787362,2030589,2121093,2024149,1844539,1870813,1900553,2501486,1902710,2248938,1980630,2027385,4054738,3299767,2317599,2845793,2525111,2603583,2726215,4065232,2903418,3717271,2929982,4438692,3631901,3658175,3715352,4051534,4427821,4008015,4276323,3881183,6900531,3883340,5975774,5327152,4552496,5656197,4842710,8257134,6609555,5128694,5329798,6995214,7206305,7357803,7541515,13604769,7598692,17236670,9180228,7596535,10656950,7764523,24261719,8157506,12670209,8435836,16021657,9395206,9681190,9882294,9971404,17277725,10458492,12325012,12334999,12536103,27934675,21716331,17240097,15138050,17646817,15195227,20089535,15361058,16991741,17838696,17552712,40470778,16593342,22296416,30163708,19076396,19366610,19563484,22418397,38708072,24861115,22783504,55699813,27473049,34437454,30333277,54069130,30499108,32747939,30556285,31788569,31954400,32352799,33585083,34146054,35669738,38889758,35959952,38443006,43937511,38639880,71456011,56003480,45201901,50256553,47644619,53116781,57806326,57972157,60832385,60889562,64141368,61055393,70231575,77529638,63742969,94640476,93932109,89139412,69815792,83841781,74402958,116169518,77082886,102781248,86284499,92846520,105616776,120072345,97901172,144897174,111088938,115778483,118861719,121721947,166922616,194475303,179912487,191833281,162662312,133558761,144218750,146898678,151485844,158244739,189065747,358755897,163367385,169929406,231181673,329584928,295690970,203517948,208990110,288791125,229950657,232810885,331398331,240583666,255280708,277777511,285044605,307586135,280457439,291117428,291803500,442589648,298384522,328174145,321612124,433468605,491541530,569581011,504681080,847358522,473394551,649786269,653010455,764201772,462761542,470534323,488091593,741054740,1183644388,533058219,562822116,755578928,571574867,572260939,590188022,613415624,626558667,961486144,784373666,1216746689,896230147,1040115334,933295865,936156093,943928874,950853135,1980948461,958625916,1033356439,1211589063,2173075207,1508417032,1189380783,1968018054,1153010138,1134396983,1143835806,1184990491,1720529759,2070553076,1869451958,1410932333,1884149000,1717669531,1847083282,1829526012,1877224739,1880084967,1887009228,1894782009,1909479051,2982536150,1991982355,3712512114,2278232789,2600313116,4155457528,1930745883,2287407121,2296845944,5589736853,2328826297,2595922824,3128601864,3258015615,3240458345,3295081333,3547195543,3789564018,3709610979,3774866976,4158317756,7084645351,3781791237,7877143974,3840224934,6006456923,3922728238,4208978672,4218153004,4227591827,4259572180,4526668707,4584253065,6553096948,6169051231,7504060005,5724524688,7163186583,7098240549,6535539678,7697595214,8366893641,7491402216,8041363417,10164774679,7622016171,7704519475,8802406069,10938465483,10458267916,9933503360,13228584693,12268955244,8445744831,11062208385,8786240887,9110921772,10308777753,11893575919,13873570706,12260064366,12822765237,13633780227,14157555849,16071413116,15113418387,15532765633,15195921691,15326535646,16067761002,16150264306,16490760362,17248150900,17231985718,17556666603,17897162659,18754522584,29701541229,19419699525,27791336076,27089497610,25082829603,30364331068,24153640285,60065872297,28018686928,28960315873,32562173478,29270974236,55108184538,30309340078,30522457337,34904786890,33706930909,33398415206,49121240754,33722746080,34788652321,48261493727,35453829262,36651685243,43837352187,43573339810,58231290109,49236469888,92958592941,52172327213,53113956158,62667246782,63865102763,56979002801,145130920154,62871513556,62977905145,60831797415,84025122209,63920872543,79291181449,112998112358,176983715150,68511398401,104405137225,94882975352,72105514505,137139078367,80225025053,93073822075,106240586592,107467759997,101408797101,113004124628,167383042370,110092958959,117810800216,250143202995,119850516357,167072384007,125849418701,126898777688,289987839778,132432270944,197478959300,151396695954,140616912906,148736423454,165179336580,152330539558,193229149681,173298847128,274707644229,181633822154,194482619176,312293419392,273049183850,211501756060,266466331607,227903759175,229943475316,237661316573,320127927369,297611607524,252748196389,258281689645,316576032534,281168694398,426104340183,300133119408,376116441330,289353336360,346813158734,380234298733,462802516552,354932669282,367781466304,646700630340,393135578214,405984375236,439405515235,441445231376,584876144598,518830010971,457847234491,467604791889,490409512962,558414809053,684386029828,570522030758,747200570851,581301813806,657285135728,773765841540,589486455768,636166495094,865643169705,701745828016,735166968015,858190979266,722714135586,799119953450,832541093449,834580809590,1028891971003,1028369265249,1266030581822,948256747453,925452026380,1413842907255,958014304851,1048824322015,1320552524922,1539316118657,1371333463109,1776092541854,1293451630822,1225652950862,1588357305291,1660618994395,1501809664799,1424459963602,1580905114852,1457881103601,1521834089036,1555255229035,1724571979830,2550633986814,2251465935673,1997081069468,1873708773833,1883466331231,1906271052304,1974276348395,2006838626866,2183667255713,2342275952837,3057064893834,3496110437431,4275205966644,2683534054463,3405300420267,2650112914464,4057376029546,2926269628401,2882341067203,2946294052638,3305477094682,3077089318071,4867201310176,3857742679626,3598280753663,5740598948297,3757175105064,3779979826137,3880547400699,6187818161885,3913109679170,3981114975261,6362541988516,4525943208550,5333646968927,6507855594090,5532453981667,5828635119841,5565875121666,5576382542865,10354578328391,7134465347617,5808610695604,5959430385274,6023383370709,6382566412753,7637722505763,8406490609249,10420965273260,7355455858727,8283118313614,7894224654431,7660527226836,7793657079869,12745108401269,9246756648097,10102325751415,9859590177477,10549326579259,10866100950594,14242548698888,11098329103333,17740048257178,23489305346985,13982873152114,11831994066313,13378839229436,28838377360511,11982813755983,14306501684323,18827455882509,24791875278147,15149112938596,20725691128071,17904782437986,15454184306705,17653247257346,16907283874933,17040413727966,20651652330674,19106346825574,22848914706577,27599638434655,21964430053927,40791885936436,22930323169646,23081142859316,23814807822296,25210833295749,40665017602454,25361652985419,26289315440306,27131926694579,29023227483949,29455614622919,32802360195942,30603297245301,33053895376582,34693660985312,32361468181638,32494598034671,33947697602899,36013630700507,58164013181361,52385937792565,41070776879501,44813344760504,44894753223573,55984218546228,70174997745923,62509509999501,46895950681612,50572486281168,52342759990328,51650968425725,54817267608338,53421242134885]
main :: IO ()
slice :: Int -> Int -> [a] -> [a]
slice from to xs = drop (from-1) (take to xs)
anySumOf xs x = (x `elem` [ x+y | x <- xs, y <- xs], x)
chunkSize = 25
lazySum x xs = if sum v /= x then [] else v where v = [xs !! z | z <- [0..((length xs) - 1)], sum (take z xs) < x, xs !! 0 /= x]
main = do
let slices = [0..(length testData) - chunkSize]
let slicesEnd = (+chunkSize) <$> [0..(length testData) - chunkSize]
let xs = tail $ (\(x, y) -> slice x y testData) <$> zip slices slicesEnd
let culprit = snd $ head $ filter (\(x, y) -> x == False) $ (\x -> anySumOf (take chunkSize x) (head $ drop chunkSize x)) <$> xs
print $ "Solution p1:"
print $ culprit
let chunks = (\x -> drop x testData) <$> [0..(length testData)]
let x = head $ filter (/=[]) $ (\x -> lazySum culprit x) <$> chunks
let min = foldl (\x y -> if x < y then y else x) (head x) x
let max = foldl (\x y -> if x > y then y else x) (head x) x
print $ "Solution p2:"
print $ min + max
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment