commit 62428c885338b4de0fb66292c4809943548a90a4
parent 41a87c1f4049fa0c5a672a487af93e28e8a72701
Author: Robert Russell <robert@rr3.xyz>
Date: Sun, 7 Dec 2025 18:40:48 -0800
Solve 05
Diffstat:
| A | 05/Main.hs | | | 79 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| A | 05/input.txt | | | 1183 | +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
| M | package.yaml | | | 4 | ++++ |
3 files changed, 1266 insertions(+), 0 deletions(-)
diff --git a/05/Main.hs b/05/Main.hs
@@ -0,0 +1,79 @@
+module Main (main) where
+
+import Control.Applicative
+import Data.ByteString qualified as BS
+import Sparsec
+import System.Exit (die)
+
+--------------------------------------------------------------------------------
+-- Util
+
+count :: (a -> Bool) -> [a] -> Int
+count p = length . filter p
+
+--------------------------------------------------------------------------------
+-- Solution
+
+-- It would be better to use an interval tree or similar data structure.
+
+newtype Ingredient = Ingredient Int deriving (Eq, Ord, Num, Enum, Show)
+data Range = Range Ingredient Ingredient deriving (Show)
+data Input = Input [Range] [Ingredient] deriving (Show)
+
+size :: Range -> Int
+size (Range (Ingredient l) (Ingredient u)) = max (u - l + 1) 0
+
+remove :: Range -> Range -> [Range]
+remove (Range p q) (Range l u) = [Range l (min u (p - 1)), Range (max (q + 1) l) u]
+
+disjointify :: [Range] -> [Range]
+disjointify = foldr (\r rs -> r : filter ((> 0) . size) (remove r =<< rs)) []
+
+contains :: Range -> Ingredient -> Bool
+contains (Range l u) i = l <= i && i <= u
+
+part1 :: Input -> Int
+part1 (Input rs is) = count (\i -> any (`contains` i) rs) is
+
+part2 :: Input -> Int
+part2 (Input rs _) = sum . map size . disjointify $ rs
+
+--------------------------------------------------------------------------------
+-- Parsing
+
+newtype ParseError = ErrorUtf8 Loc deriving (Show)
+instance Utf8Error ParseError where
+ utf8Error = ErrorUtf8
+type P a = Parse ParseError a
+
+manyLines :: P a -> P [a]
+manyLines p = many (p <* char '\n')
+
+twoSepBy :: (a -> b -> c) -> P a -> P () -> P b -> P c
+twoSepBy f pa psep pb = (\a () b -> f a b) <$> pa <*> psep <*> pb
+
+pIngredient :: P Ingredient
+pIngredient = Ingredient . fromIntegral <$> natural 10
+
+pRange :: P Range
+pRange = twoSepBy Range pIngredient (char '-') pIngredient
+
+pInput :: P Input
+pInput = twoSepBy Input (manyLines pRange) (char '\n') (manyLines pIngredient)
+
+--------------------------------------------------------------------------------
+-- Main
+
+getInput :: IO Input
+getInput = do
+ raw <- BS.getContents
+ case runParse pInput raw locZero of
+ Ok input _ _ -> pure input
+ Fail -> die "parse failure"
+ Error e -> die $ "parse error: " ++ show e
+
+main :: IO ()
+main = do
+ input <- getInput
+ print . part1 $ input
+ print . part2 $ input
diff --git a/05/input.txt b/05/input.txt
@@ -0,0 +1,1183 @@
+147026054002176-148722820532628
+405816093648050-406348543340995
+108145335897715-108145335897715
+504605303439855-504605303439855
+9336461060727-9336461060727
+414567783571520-417189330414630
+87596216404388-88042094726752
+541538541141727-542273896365233
+404045228579678-404167359993363
+515268224136064-520102523902809
+354911326288346-356004153136992
+185002494588732-185547223229317
+171394982991417-177868771319935
+426628116316669-430392154575571
+545877249906251-551802447025992
+189685683046934-190132980034950
+103897451708970-108145335897714
+185547223229317-185894895530767
+245727634348687-249469249579525
+187587166601839-187921897643842
+258447264144066-259936207978694
+26428223030413-27225313130731
+382563133156839-388251162528579
+82011581063377-82899176943173
+487766135067138-491977135306566
+181588107994114-181830541544351
+203919038977574-203919038977574
+184175611466113-184864651664138
+173995791715028-178750134057296
+540666904097506-540982830008685
+382563133156839-388251162528579
+355801967342027-357024542900226
+285098738899613-288223489159570
+185547223229317-186061892991929
+346023108750258-350759459008450
+186824226150466-187331343847678
+535123467876697-535766823482692
+373470309102070-381462964223567
+254720430535915-256265374384473
+124033519855927-124033519855927
+398242866038743-398242866038743
+411064382385939-411266106836577
+32853514772298-35912375621225
+483546673645989-487766135067136
+229539777187355-229539777187355
+54741812355556-56055181776317
+404902484411740-405304842680690
+81553603708172-82290882877664
+535017507202948-535766823482692
+395225857220347-398242866038743
+81894290659641-82290882877664
+504605303439856-511466604140435
+161511475950036-167212300465649
+252424753556335-254249509032175
+256784707973442-258211282021098
+474082537312288-476164956575333
+81894290659641-82011581063377
+444307992125768-449331507860417
+293055438852220-296746928050769
+332427924465119-338282641633280
+132982251050531-137452338178862
+533726793949828-534018416079315
+467259031253050-470035805650069
+302713900046223-308903802671005
+352153732467066-353538762829133
+186824226150466-187331343847678
+188051516291834-188325333471071
+356589489234717-358001607187609
+22795153642408-26428223030412
+13014008209745-13014008209745
+352841826116744-354227025309918
+3052721314366-9336461060727
+409756951788535-410580890037618
+533726793949828-534018416079315
+358561400834606-359842162588186
+188577779018891-189465843616861
+114153306009090-117017864808497
+523700914989374-523700914989374
+523700914989374-529606372407677
+322152360737057-325454661965918
+251379114566917-253150393528429
+406956152658127-407446264052044
+360266856941108-361826042120760
+338282641633281-338282641633281
+35912375621227-38293005670321
+475893779903458-478058630423491
+342220124925769-347913415593659
+40563812891942-47379617037789
+312312319803823-318832407931537
+224522070876287-229539777187355
+124033519855928-127156418728345
+357671884424702-358925443371260
+81388975511845-81894290659641
+322152360737057-330446712025527
+211435461151197-220804490825099
+296746928050770-299100765805750
+190132980034950-190684408356699
+161511475950035-161511475950035
+181830541544351-182532971787203
+417189330414632-419483745115504
+89183601638373-89860401643630
+438441840585789-439701337248186
+232348303098711-239141627621047
+538270798808987-538925732113641
+541959539867715-542273896365233
+72489132011956-76856328658588
+472817457751419-475048762813225
+214726686668216-216879558004314
+265514296554745-270766216843982
+85744832396248-86323884623839
+515268224136064-518604928210803
+493888391055899-500721543731899
+237311600827294-239141627621047
+264028451845520-265514296554744
+538270798808987-538925732113641
+91617226262917-98430744824388
+117475785167132-120188887075941
+359305541397876-360839864780861
+188931909913550-189685683046934
+61193714235901-69629759100651
+445548023983915-451349198787369
+453939198246555-460688492135913
+410580890037618-411266106836577
+434339023575100-438441840585788
+44456237144659-48513604663845
+285098738899612-285098738899612
+302713900046223-302713900046223
+407352716278275-407781045757980
+259693942784956-261223679445484
+273181531396231-276505676070918
+560350017104686-560350017104686
+132982251050531-137452338178862
+13014008209745-19208188363160
+188577779018891-189159268986080
+257426119381944-258911506363405
+249469249579526-249469249579526
+84482721203503-85062206721336
+188051516291834-188931909913550
+375117820166731-378942174241518
+255407275700158-256924814102263
+316778086637925-318832407931537
+188325333471071-188931909913550
+535849288071548-536672958212781
+557126116959796-560350017104685
+477386094235630-479517712328960
+84482721203503-84758025267134
+86490734330757-87366815427274
+535474757750378-535849288071548
+153447871615763-158515708897409
+50721455017362-59341594629507
+115702122862466-118762478188053
+402694171542882-403302155508771
+253592183539645-254892844274766
+365074885662518-369401675118289
+403496304928217-404167359993363
+539803656167800-540210531124244
+85744832396248-86490734330757
+430392154575571-430392154575571
+404045228579678-404167359993363
+153447871615763-158515708897409
+453939198246555-460688492135913
+142952773118732-147026054002174
+495520762611333-498666807655212
+193065109486232-198942214756055
+181830541544351-182391129847570
+478817233334144-481015787990997
+84230194314046-84482721203503
+464615256435121-470035805650069
+111098631544470-113561825863728
+81098891064645-81553603708172
+404902484411740-405543804186877
+91617226262917-95685230302892
+479988509395995-482247409917260
+81894290659641-82011581063377
+409615388188567-409756951788535
+65874463136534-69629759100651
+273181531396231-278706322697987
+112423809687803-115235755590305
+538722865893879-538925732113641
+81098891064645-81553603708172
+203919038977574-206826466434594
+353795822752757-355234799179947
+
+256599037510259
+257045674285424
+326386632675641
+134298134829500
+345820086993217
+267478047688685
+298052214191178
+232809395498118
+240402361780592
+544303938676229
+127740421614535
+322997056321486
+386988108714180
+323311516865774
+204612688280655
+517981407444688
+200386540245960
+143533150529627
+263522927057391
+217800959193130
+369669455173448
+507329101681745
+433212006499677
+85947058093158
+512609921343768
+210061037712135
+91208266789716
+515258080524117
+415262177834975
+439739845594662
+95967199084903
+332714760482016
+8086536461164
+412587720918414
+163679268889162
+504670156697352
+534891079053670
+551053427545769
+127522195001135
+522136326408657
+249410645002794
+562784864587229
+192144617076408
+384836215084351
+313017443644508
+499880774521956
+320710950198797
+370956493615623
+130218742843629
+495870891853180
+408224914372360
+187229001875521
+478009932340584
+243031229787743
+494310385654669
+254980465798998
+390832921426530
+175656291120445
+558803414432611
+393714487283458
+16391088181902
+231810562898595
+385601054964865
+342450573668816
+198145263069587
+472423564017799
+124576869581404
+403538339109021
+297041730173167
+281647246222884
+535701744339872
+488257594255946
+42687870027666
+363507592763126
+295119793177331
+345385468394789
+282261361628758
+481330009260356
+83180826199710
+225198187193373
+39947182159857
+20006289644794
+534581917747904
+138691207807454
+9278500472677
+50705933144595
+28959269489397
+504500024363804
+327331725951017
+127627111327226
+337673996005971
+112147294589314
+522627605851400
+301293318504786
+532541396589152
+267642095541644
+413256558466757
+361336114066823
+39221994090480
+13886213321149
+368464366754671
+402417367168376
+394509571297991
+199016652249210
+339118736932408
+90432697800890
+496225138617677
+353220085600103
+88100750382555
+52483444708418
+19438610401078
+235449412563523
+503353894737021
+9527956659725
+214384033681052
+419729908993130
+524971715847814
+223029258505212
+367502649209536
+354498141106628
+262867456385224
+102055065851080
+79882713787488
+89236643063989
+205817305625301
+411604775162936
+197512143316520
+144949827219333
+270726450308733
+183486673727421
+473351095125533
+424483489995451
+161627439984205
+389370338226908
+402028589769567
+290858340328110
+500806256353787
+425921919265766
+441493182909332
+475123314035308
+176127199820049
+540737542580202
+29760195703071
+180960045468585
+338342045079576
+98896627322493
+250916762904820
+300401682448355
+20002308446993
+129020372690625
+544883579888208
+248537085338868
+286668805309976
+235236800450989
+536637606659152
+525812617930065
+370894341849524
+275030139389511
+496903087177920
+419453678749131
+126127257985925
+302129593142109
+246051717059752
+111209928757728
+223380435246796
+239398875605820
+192640664852479
+18818506184837
+155895170373928
+537280296348972
+87870195535034
+374940789667644
+280728141145776
+221439644034863
+309576983832839
+38863911127211
+440321747981240
+336464989074674
+41122921419325
+243188014099545
+24706280734977
+192292194178186
+380862698927557
+152169995973453
+496924584509076
+16966829433349
+447442036392985
+2486482920623
+417979560135373
+527278673568661
+78776188530705
+258582430048653
+501310072414638
+511753150918542
+529503681277669
+16359626547139
+313818993130120
+504418855982359
+67092894692312
+37566884425070
+351477475703205
+437878295686312
+107400773747658
+299008375252030
+165596827148130
+523788940836438
+503698016802212
+151946649529421
+516067712622696
+369113578324753
+494669108461894
+176171981613890
+64451222262136
+86005840864002
+286772815992358
+238425760894821
+502349076912881
+424539315986545
+356982176069130
+122677539712503
+444168645646361
+382623739008388
+265467114946876
+251047877237046
+103794725610622
+454201829656241
+123348214375953
+250361015471773
+194122704079015
+202577827173430
+97532740078344
+209563196439914
+500206251681553
+359885492523173
+367303539983052
+536441272396823
+266661382419626
+63308057155621
+186062497093854
+458363379556213
+194305527330408
+30865869581091
+465842461488211
+20634474951353
+433729696239594
+365420175851316
+546659295704076
+261136183010108
+425184200782612
+522783374310638
+49791898942316
+440435630163978
+468504176453488
+304137072443517
+96533435574478
+213008454701450
+511220387441200
+327749273398587
+205524238066739
+522685203942846
+493486845869722
+460384801215666
+172009118655197
+523641994291995
+561548477074126
+362816861710133
+322688661135927
+139318876924482
+245691811070680
+492087771560884
+311841620229962
+339672201038602
+522904482135421
+121080485825194
+487272699926880
+543995733412868
+346184756437397
+236989782703824
+455805059813231
+261201179483584
+57327395376953
+114192696674309
+469704201610240
+392721784031367
+270851420686371
+159328256962742
+149107073648225
+32124467093002
+148518478009853
+502234005612023
+275974853358003
+391339780298882
+332749894393659
+462151627681683
+188833422302122
+48135106068588
+17332048477201
+25197468900959
+408154551509201
+163152597528860
+290385736285129
+96146951174576
+32365929193280
+107054145285762
+156221005769717
+287255388833909
+401250701491282
+545507520587032
+121258120689887
+244019128711583
+345937932000167
+408914336990199
+90625414467278
+101263897139475
+2079452766963
+361190958378477
+226158006527402
+225300226782612
+232563992671131
+313617105063284
+523035110542518
+260713868788477
+389989190642033
+136674237301602
+52976877377674
+146205120088460
+49074508325504
+501952907407662
+189722035598205
+492922697371655
+431471593453903
+481614269130949
+471680887169753
+351578633729467
+471191475386800
+288616613474039
+384834978008884
+60667127013905
+220470592783113
+444267980365645
+210059241076439
+152770795790322
+348016980101456
+304143405666356
+369601808312624
+264483111859041
+292132376432937
+472385718837013
+524542054088857
+308632875292630
+194029449109238
+462502786632441
+70557592126080
+304097077332999
+198527566220668
+331172750267871
+523253758482573
+499251778216230
+80897602434280
+387794804821425
+544908222211762
+326671703691861
+135598883012325
+142365942316538
+492721663086929
+213951563163055
+394393903797874
+290522870292932
+182914477182004
+223198525942220
+75869265279096
+414799095382970
+287490034199474
+523465321532044
+135022913414560
+510461171825598
+311000926685572
+541337017900168
+500641298981547
+120685406799225
+316840736221299
+522131392022750
+477123018135158
+115420588471877
+302237915503073
+447963220630318
+404923093829632
+240831200717587
+400600186863182
+235118413055933
+39004942290708
+479675695229781
+549565736170069
+486754640141634
+46859837041286
+218656062520090
+445549331939386
+223948704192947
+55566371538735
+404905940172373
+541959338612610
+212496898689821
+370895187267202
+316222877805606
+77893555385907
+179829398923634
+426570138778876
+538860158884012
+349591436029128
+442795109733284
+213126739145670
+15348554087411
+394999857150191
+125675725522718
+144541391341975
+175211914359342
+198221293364455
+255731946793186
+532774048891313
+159030871646409
+284824949618143
+475410706253017
+493796957340778
+284035494576161
+470797755446900
+367005165625750
+93807953521499
+294608291644291
+106790900200793
+125691009169558
+63047176729162
+511970597265180
+465077014379805
+417796052955628
+318260901890872
+238352657606585
+497571129409225
+161607873414432
+489118528904132
+44223444580099
+357679706204606
+332122825129455
+25442475099127
+461360583220262
+261747250847474
+432853274991176
+335784849310220
+66865370192237
+503649483444080
+409073840054372
+102025798187812
+120523535582597
+464441274522540
+88923620317176
+144857001834803
+265343093186718
+423187343385785
+394746965208628
+358313310886116
+159728913257092
+391438905059214
+360849222741855
+319264775492793
+363205786676280
+345900302930928
+433491002443610
+463320939591334
+531369525714351
+391443254588774
+461258504001430
+539034747355315
+226885062994304
+339135801797264
+207704127501087
+234842013078217
+410600687278852
+160750189544199
+187617943784288
+313136787361981
+501266171645236
+168130881477827
+377923284848203
+379964633575318
+357628776004886
+295882469898250
+381413062695973
+369930600844199
+29586594292111
+291883022047578
+55706412680266
+527464998055975
+493612541032824
+57288363593916
+356813430082169
+492355181989257
+32292496291549
+429563506501426
+240056118721588
+316321802074394
+209797748924012
+201669688814223
+513296345340099
+172460195914576
+373426778963171
+192173190915589
+511057931122597
+13389316624753
+386742737801437
+107934587011651
+528592913901486
+87510930630343
+557793132276274
+540905592676414
+470529512278360
+549299416997840
+260820622504808
+409177275609323
+120509839609613
+322736210181314
+11856182975776
+91005909372147
+46487542697577
+278679647554882
+199344047399631
+393244601868992
+185292061803842
+378118824938225
+421355721806455
+479660617949864
+372819681563984
+252209798358533
+524649308744885
+280803549548860
+471439026172199
+111179869898338
+273181456094512
+345838589327197
+171321144012242
+408464530449721
+209257629972247
+249481840101088
+385879622213005
+251287468803038
+363992392574902
+155193085658744
+424003545835168
+77856594609715
+200736382712842
+58086968526881
+502884843280754
+192361374926584
+150816200106595
+39346181457910
+353610070887497
+146855444424235
+283584063116897
+326105248780707
+315805838130491
+118863264245797
+366112512539909
+250648198182500
+27676020980962
+67200661461464
+255112240794255
+422874173316204
+518645605478653
+297841993382451
+522465000410692
+12343791492976
+460141654936108
+401422946238802
+410642465041991
+209931770514806
+62863669431617
+272020397747285
+432268826248879
+142569234187618
+391281284831727
+528776261003782
+530373987537162
+456872077961001
+143877478705735
+89357494220755
+87449416851982
+299429589434953
+402003677109693
+259775664066730
+371803039508800
+390492574718593
+51653533515123
+495705884946536
+348029566444949
+31717397621632
+79357124334397
+140161116164327
+253779780626277
+160082644655310
+418470144052696
+561296664156998
+364140041439707
+50589050245379
+318200662541184
+170477088263013
+282245173555887
+36230305244967
+480651589484083
+459293530214437
+365766581179633
+540343139663118
+558603386953946
+298576934755514
+272047361405297
+272804974847136
+149976836051538
+77534942107057
+383316486088625
+527398466623351
+463722205984514
+547267968574772
+381197526950025
+429831671442716
+364270244822417
+15158828772424
+400439187922955
+46214792352722
+283781452786462
+28657293907448
+411454641729031
+450598209973569
+325661486540662
+562365980397548
+77057552794622
+512174327129718
+171477377390814
+453080748879848
+47282551766978
+225047904467804
+507354583487708
+452133953127351
+482363842121704
+556574880716998
+2813583953049
+493605171061962
+541917897398493
+256745227456210
+235288530123606
+373064399326787
+55251400371656
+95186339876970
+161793072200101
+429927068933367
+295357522206866
+52912352535519
+117004352488943
+190206426382221
+43498777979617
+418324227621099
+342632197200803
+244870236168219
+179029137046558
+426225604699232
+249104746935116
+32408580679309
+148701015136357
+158486409562767
+523777284601245
+181274635665011
+98008910190303
+325053362537293
+420180503205720
+35659385515094
+151068141319375
+108205017319853
+438572856183849
+545058424414594
+496145226519990
+509442202371012
+78440020714653
+547082650926595
+221007061292687
+350833363497385
+431233409779983
+272920463376495
+136969801173962
+402543858366335
+369834207606974
+182799814150783
+399747077574945
+476410389584382
+94388873275888
+163999722091194
+301384548565625
+140526902585586
+20946592283827
+248910535577272
+362674268932301
+559048491429359
+366845662601292
+138056695149452
+232040813156125
+240267522836398
+182968004963155
+158137090703620
+245133554958397
+108984822411587
+491286157054600
+454539208187302
+488825714030765
+29513886138152
+163566136121393
+255475143490450
+367855876188427
+450628808615311
+251729765649775
+220935194372434
+295261403788245
+141965824948765
+6688094640583
+8634260570625
+185870254212197
+20509930592910
+494017528048863
+407699895200353
+305459610200483
+361619895873226
+173773652740752
+145814820648124
+148014563736280
+124529323315269
+523048198329855
+100120633149193
+471622220141189
+111050814150670
+522236524532479
+339923886133481
+390855021420657
+212320955023781
+357167515391767
+222230347106576
+339357732488420
+288448098964519
+108928497286990
+293198118354739
+124712072918047
+246077954018496
+144199740014891
+310941613451054
+207242527219624
+111364582979393
+199029324992110
+64735734828909
+202165624661859
+244457176421601
+433694890853839
+394057288765118
+399663400748769
+132884307021331
+57666674633911
+307685474718809
+22502804320856
+38060928026986
+138525594621250
+203696693749312
+424535624708325
+179641654168586
+457402455285831
+221339979158515
+136592467624507
+475097190824473
+486284951829976
+205790543785820
+550957216593426
+284461378132843
+271308071549626
+535158926814062
+511654147930965
+309384315871103
+413191418812683
+522890285950216
+281792823461370
+122559072108477
+413508513565518
+318986927945219
+122437918055460
+290223480475205
+497941618873330
+218197017646192
+364402231530242
+327896327227508
+428726553258181
+370902708007354
+43774960360563
+361278420059350
+115256105561172
+172281199034804
+264879345633815
+323002552806352
+423108623763505
+431935093145770
+6012037673423
+159310475756330
+544302926765753
+139604170255064
+543817796744497
+555409085459962
+349626526090372
+337713819137956
+314978972433145
+530307265143986
+202152776868164
+148527437240880
+471507967260666
+316197161480901
+555195472075728
+123701324387481
+53240208623618
+526293272257685
+386458202177700
+284452282584570
+417541376821966
+433404665439729
+401549038397158
+242269583990498
+514660554612855
+218411755014493
+292654303514044
+258648220415629
+226857612057545
+129202675144622
+473677384723672
+423297782650571
+100675347958449
+409724426983549
+281063668646570
+57391513620658
+371915811358537
+298617508357997
+481895141748356
+157000346734215
+471607452668645
+502090585820229
+430533159015234
+200533269738039
+27201251630712
+324603777532624
+83811511637404
+20266647866945
+233256224976819
+523885097390096
+85682778056962
+439817559850394
+511904587166333
+351094977302027
+584549857031
+437452474271627
+97831920301042
+182579575466913
+125235084158538
+475148717771259
+156695873622789
+375414053790608
+39457166198009
+562633895591616
+115693173456541
+394668457634988
+136733242860074
+222558615308359
+352347540357187
+344943529886204
+504268052602929
+255036380707568
+215143879862451
+252410828551311
+102339420437616
+462474409821781
+456249721238159
+217459368216762
+161885155796593
+152705726063101
+368579089792527
+249309695725868
+331526200894304
+59256823627951
+300689392861024
+143220495186529
+455086999483749
+230958825825411
+292791851226149
+126143882936421
+239496993839586
+227653269319990
+85505467741159
+411086742448603
+200094117693889
+342667166972211
+178466729306667
+90181744561219
+109420275112684
+177323484126989
+149818935228622
+478831737609299
+61423308226335
+338986328996924
+324052632846719
+385945542792413
+140534775190815
+102504989223829
+422747843101819
+178534347982552
+560982174498823
+189223802266815
+250916202466135
+480862738328256
+155275682003472
+487029219266509
+453242000220716
+276609823547167
+469634900966590
+470072877875549
+412023514539875
+445445565636004
+375687067621349
+381515953425829
+22697884849452
+166548120506211
+125387616765580
+263202905537216
+362274032649519
+272931771811428
+516431726958542
+308456144175981
+342965177343316
+89137851204935
+44546940900358
+28097261430184
+151312584425572
+54195626834515
+488920774666216
+356019081082589
+60552616508441
+34326977758050
+377262449319555
+531934512345611
+306696903125088
+409070705413001
+278086952041285
+241475334218792
+60667274657992
+403666255868390
+216199438304091
+41649888279381
+232290211027008
+350862167155945
+227880952570891
+461841518007231
+217693902848632
+39550709754459
+442178285929437
+399792872369258
+394934521177956
+160988907673237
+478513977510611
+241929705455405
+56281591707766
+275365802102760
+492358229420878
+199204074353288
+213376711382733
+271532997955848
+349183760410681
+412570943106394
+10877652825593
+130494918516144
+38262986516822
+286042333962138
+470124447655584
+290229424802935
+525562135943326
+388696627299172
+84737699648678
+359237818305933
+122496835355668
+85463702379839
+304174533307205
+288097517484777
+145066772490515
+410335707905087
+421273513480373
+377640003874851
+562381002137653
+255598870069556
+490413632871037
+124154345267424
+452970699618762
+221352269741163
+549003533228190
+81512892429007
+530133158985307
+60445232385462
+433707444593759
diff --git a/package.yaml b/package.yaml
@@ -34,6 +34,7 @@ default-extensions:
dependencies:
- base
- bytestring
+ - containers
- mtl
- naturals
- sparsec
@@ -52,3 +53,6 @@ executables:
04:
source-dirs: ./04
main: Main.hs
+ 05:
+ source-dirs: ./05
+ main: Main.hs