diff --git a/src/main/kotlin/no/rodland/advent_2024/Day09.kt b/src/main/kotlin/no/rodland/advent_2024/Day09.kt new file mode 100644 index 0000000..9b9ad45 --- /dev/null +++ b/src/main/kotlin/no/rodland/advent_2024/Day09.kt @@ -0,0 +1,27 @@ +package no.rodland.advent_2024 + +import no.rodland.advent.Day + +// template generated: 09/12/2024 +// Fredrik Rødland 2024 + +class Day09(val input: List) : Day> { + + private val parsed = input.parse() + + override fun partOne(): Long { + return 2 + } + + override fun partTwo(): Long { + return 2 + } + + override fun List.parse(): List { + return map { line -> + line + } + } + + override val day = "09".toInt() +} diff --git a/src/test/kotlin/no/rodland/advent_2024/Day09Test.kt b/src/test/kotlin/no/rodland/advent_2024/Day09Test.kt new file mode 100644 index 0000000..0663492 --- /dev/null +++ b/src/test/kotlin/no/rodland/advent_2024/Day09Test.kt @@ -0,0 +1,82 @@ +package no.rodland.advent_2024 + +import no.rodland.advent.* +import org.junit.jupiter.api.Nested +import org.junit.jupiter.api.Test +import readFile + +// +// run: download_aoc_input.sh to download input +// + +@Suppress("ClassName") +@DisableSlow +internal class Day09Test { + private val data09 = "2024/input_09.txt".readFile() + private val test09 = "2024/input_09_test.txt".readFile() + + private val resultTestOne = 2L + private val resultTestTwo = 2L + private val resultOne = 2L + private val resultTwo = 2L + + val test = defaultTestSuiteParseOnInit( + Day09(data09), + Day09(test09), + resultTestOne, + resultOne, + resultTestTwo, + resultTwo, + { Day09(data09) }, + { Day09(test09) }, + ) + + @Nested + inner class Init { + @Test + fun `09,-,example,1`() { + report(AOCTest({ "123".toInt() }, Unit, 123, 5, "09".toInt(), Part.TWO, false, "example")) + } + + @Test + fun `09,-,example,2`() { + report(test.initTest.copy()) + } + + @Test + fun `09,-,test,init`() { + report(test.initTest) + } + + @Test + fun `09,-,live,init`() { + report(test.initLive) + } + } + + @Nested + inner class `Part 1` { + @Test + fun `09,1,test`() { + report(test.testPart1) + } + + @Test + fun `09,1,live,1`() { + report(test.livePart1) + } + } + + @Nested + inner class `Part 2` { + @Test + fun `09,2,test`() { + report(test.testPart2) + } + + @Test + fun `09,2,live,1`() { + report(test.livePart2) + } + } +} diff --git a/src/test/resources/2024/input_09.txt b/src/test/resources/2024/input_09.txt index e69de29..3967d2f 100644 --- a/src/test/resources/2024/input_09.txt +++ b/src/test/resources/2024/input_09.txt @@ -0,0 +1 @@ +3717792164495193827799926938437569456956301889731483883672141255597191206053703329869827327746675521425223355972353524664152772881773671371548985187801633507898634867626492184833668996524380755271607747444747985385913033579536971259525076177140157113996554357663555522945077926891117562337729808518292286898015656290565173829932796891117420265445916060771976776546233079683418533874875086938057504747392785868381344721252786992669782438919045919085461827403481191278612791698550236345772276434656351110971193285347431885424939845441735264359081918013156038239670257725655553564224248799986732218090677424518218822147367027937780504068546750319852131312208184967318665173896146187894254145988841956085667426438420902820131513645121894530413367698691782798917787306269485284358258529375637013221164409877609889274716827646485076465827386998967221564647319983796541377089128075584926513867226731459765119462148556115656457324129288899857794988776877501980588774449845751724294992383117256069926887274398527057666153763819811723905657898951423797317217994859445494897162236445498655247662303386759694165744288456967450358926422639984616548825362340393310811937231374115823846079972550973537303411355290532812826124582714173528521124325737716487933978409988951924398330193781167445426488732150598099736293186934998374189777989275369239997268466691876140135089314588526481271432471598509218383438341651794797992184144635708387995375357526449091989942248035197089155343136664772412788736784376214473201963404377991266999193908567164863755235303076753137629062195993791975929215465363154291321053175524631486506967861740149817677185511551767237137442579777622831513245136343692225772425425675614313216295667797545420756983258923656115416834946749756363717937475533624266462931622858102541579876775610508076119941706114306153737978605021578912484358115753343681797441661392265671195143808698888225337248464735978487117357975047523129461579516069639831994199871951279756733288273963929274337835989265657796684453971055115834997915851317308274469518542047474669867731162350838413648070153380118482549628658686632176154236857062491948224054537057334029959370909367858324894388863892819713389896971783643219748341116977455340548199307535668352435190238127487237246011132566382514739491819730887525229984677764725921915861422226636542539095398349123620665529926747365425853745586980878787744677188248622932736069606364384875598371401282317388765317292371956963547861818559708481271221499865421352964137243194269018935350918320957149529577685332948948732741753532821335901080661743487397208487129184134564977394899898343691405174652435955370177458702295368856585883785027463734473826619726599780623870178546412614978975336028859037837769845730838611791272589578633454937312784310634540594130461680686241725622215136717873877717896987616827177552678662367053734584341223972532382974786433928484821150129941315853203426386332349456125555123325591415189633104316314437107147816533642820416388896256769173687242729677144758434022172161318829969192992564159612866138558991958544191343903911475987763654247992652316575763289135413548547285995180761943155290503884343482436839481745973685533890773080422943796377453153134787661354499763189196532124389070647275273765739849648882803041278715653690824862108544293231485915577421223274963024682293328252331495169694917291529955743584551119851352812645703974537323232429947151581676166650166766498065526238656751897590906782419643258068646916327828439013418838963456269743881749205846952550484487546846901450366338276197553640363090218771959296453788928086988751669868615546515853428781622946546122618416112657741130129597859077495736284921189840982472215361798879874243447631755519191330796637429870114459435986289369109355909230922262871379302019372375283248871655674081272414738468251371112245195081469384713793552352114635592879612622799967488625272590309593225251421851511986786591162526142128413645605172681849795816711626125919416052205097871515965727359570401628833295185825628162738561692419886914466780976510444282924231657145824255544028841480379295682319869649477924588537294470865211289879212726514454327668627590608764237975739376738214662775172345775675885348229480531243712451706452609018521118449565474024609513218664748034483058104960237685493664231482953325148670507014373146556095236595547436439291622791545719186870926265395987686415103459418368301899191166366150673049654857927055593853516632892973358539791957905572722830724558466840176667578668834599113885979433673117861436855564376569239552834712203190663035975419988655126543982481513288273563829217495154364434732325194817268770419352642297596517991221731093696064163963425816454756953552986668509830349073136634851879962263578968694870892297307360157556694383254819959949264771434672764679933432458025387596576263123795968096504582606435624618478311145448456676159165882532699693617579904542452644185877607580663380437034791363166483509511267123624896843463946271168237368375809588327143184586428465478912789462983779955133172034182236407146583571832823386679526934361147836889341250883569881424206372881513416982991954658120158622846539694784899573381164794212261070794897662617433029546988703439639459829495658084339581258955805870554786855381327696955415112068389227309969516938748157981831631071194932878881535992814420884014217023756541258166915421505493209649863373363851751538771073229927761778506881452080598142569332227287711641795457648040388990819190109414262652935999668873579666879984892583194667244880389624725829612464712192947756977225892728447260576271981823432391963651642711211357394915393975166920874886283944779719101034208687939492907777324613731323711352422144755266196260151533854697272031416670429820287271163567533991325147104546234326688210918067911536443160875341378953198024235582648785238744395760192072771730823986797638239522935856344794475338704367171857871535457547583882623049624842501187231358329868111545126545436394808541825338194417281049595540183083398615125813176670746326322721402048208072876499445796704740659261812015418216127272569386115757807176223097847237835120979285325296427392138769644170359231726230475179374157908769155531826181101283876956389320201568383176633468374238952591626772406363527560705193829323164890562281839997615684323530884028975413792483688087224571574926703394883396784173193283337289863545972511355730738379104147658945802166549579345352599717519674742894243766989717522685669613889611748356451647486510648478564450311618228031958443276895673476157718364748757625808423377077957695302974369352979416311333683156909680154915113774858640389786388321984194474697465474655883477565327154706218945095862921945717201224858843881912286277715529976688382073462968384914423969911741764853314441529169208877529123655657294262699139974921382120319180932334992424962368365262606252548163382894492084968173245548195940364392644821665235149861102847147313664023629831368487165986479192514382843745419475654279609988839871463396549683484862541189277427602547489345781989157380115357605071435026564365472549715028818879948810473970965531209839138525529073722990898626701971568275915650444819664817677850507229264544528952933764924610727132479316814062731980249178744537592297652050686069192347642013791082144961886169459022562294682254387836773931342395143243417849497576606799453551671282966436132173821839554341843198635277411854755423499850343596915692714083603251141973374282465521489260694834257941481610917721815587385667544962318617254078561557566368658237661873673682636182895519272843112223521358226697352475163364518444808516555332726722871171654375736598512918975480135178993793432871766296888465432869344998919124604889864399732352273996803813835875411938488211426836287180128011572220319162512995343397153538482395451922161223278145335578153170401768759166274355306154546610153289355518121026256338683672452458543231933949682750196691978530965117645386605668803215199337328031119827275112199165493158256033943640718831975727656253446145872654619732938535334079676439226036638937382627466254181349174722696737475145965632106688121680405829633219688726696328278037505393332863661345999670388618654087773950722738171589791595172653463166222038626846825169643315403380288465245086176075269940423289209088345435425234752519401043706520425945696180803374361132969439561182392235541929224423881193854943812376237044922854759751556378134558616713837243292231522268323669331626225847754954742952347537399839272662986386907362131443131719898310856051382137712829395531608136759228227235235491509745166689476546658869979996661855783486901815151391568854162644159956834159897354633866659390771379685879816723973431147827747131596787387174815328379014741817924652647545272339688939392786176057481178313626441057173610211611687663313118205880288492188077288939154113194244563574962346649332607280893763653099525522851485967639729788195689364958988268425217236433578083943994929580826876788742197951681036867919929996609730914867188855782067996960235629869883358771231778156394269321486743284874374823236474521592511716198085949827551953198720728563972472392143363587375328312394227369166411163923596022972658354483166981154139973674962454261541842091111010694970299083891256397511798292305864152917623896466165986975154081968039472088301127602092488325509128687815161342289174975064297940315466287245199973915832648232705261517050754514699297865826778617703887511520458037364289208227792182211436462435652872349915486386544428835023158419601453739016179996366975176862427222736147991123443329219883737384427324324284893330397265949421716118572599466165386451705320948994363085144259105227788216909838748083528551696281312397625840397238305616607535853278997324827645974914125561168796937373908541619820175142227463399676743848772956821038707935282347817239875878785597406525749925756069982214288839182121962986961638514957857853911623907678843110872464662634677161104666728017458840346812823258606324885232262431652635345925132572755233487767401716654774752046656641225973336276812844239641377813738720147155442254232392924724874672712872544878498892521521185273997227954482647825715030304131882072184739547429108756591080509275443050172810377876208282622255764720256783542483291451797039103973752698927359602329906968298750473277871760367132548433381823157475705355124941932940287757525467532884852886594684577859571167804348882212701934601413522321292866651091511991531348506717886975399155247553969288994088428050338795987332455420882911729091404828173517247078818497647082458781884933276020367926561156256839134455568847237158209956797595838558584453986446802756895799932357753237694721767563466481211126529046505397536498851731779485982537293552767441155255411239983085111915577934964710454558712062455029836178469514573112354669575898771133313373365843366713717317528291969862865279158953228448468978181616304917686954519072148712208042847687172617853533289999325250899321185632127588886217513268319534368189778788574385389321102453551240965429225231389452296327756744524769581235301175478789754949301710122633256561845875421059676633639520791782456035612595358737868679501955506612994643942075703540633695235423134495339361722683599622626127399883747897634197991888246253155730417367431134587631241042169055236351723790786626173094633954448958287928383460889221922881237232818011148840424252615059524367672342193594968597429150514110213449891032358493164234911647123512384419698334283427875369105045234697722130314312668862417279912899877643692264571996824557648431487993267091653424531893237764108642331248231976935278903559519257825829625010719574277247517842166725537594901384262592125571651995768199422527761856843960508478179551935347879842291673875981652032316229829173928179925016251879167877595342862669479658517712213463981128156712545149509080944733104727827989153025544850725735609797269766133678169997598243837921824134659626705731448376661935927618113581987341537533985974199079525053856656201028998252254966597281122992501843977076311787428395894687202762427741254711443861878469296586531580863321682156483271306734752345266563784297674976735368432690562528289926873297134623293555334487272323686718297246812526148386212938149834872454942434531774143792911048835645381984365097664298728487881815682728401845621577732527416996578461743943495367597578173638561245123114889525223047888177253214938285697096609584803899926394543395512989446632157233781980993145843276605167516523274751652367413294773323444723843695879846351887516130583379698973313651923898426758386035377277838816259649159032577456376872654532802748943533313165571584218993731852353112122538892943936038199596202233736161578532185848161550802386793190361546779940528498245862688038213770213950446525159831199845999096116036674088616340577281252490556482723628992717745269509762167432699880152477806917643163755993314453979950916193776461455925677491233340191016229063487367515377732990198181382575778992244747132826254827601037579089796213446585663684337367336937313353906117522550483733839582603943434520928771871699633371534328184712924894489290729937239343842529664571249964699220261783889962632025106721369246552824575984471153729595253117203498624295996846412827891875711323587869722388769568784991926454456721861593641053553583557251317217582751805126636495228563981859169651515223292995289034313119981771663827819919877746548617954896731990939125191459204191605480933533446993346457725773735551549538239842138517229578489147874847205223892814206015938087343516391264551587913345869544564237119552423590608962807143371929665187593297658823296889371271219581614176298670138632707519741622639625907721813117772228166393963832676264384861581654392217326392498856125253835957593919618926269062515281245264906858636094585588756647977162495995847291624582941846875657928520947966526150328599399834105099503658642786868495156494508249321942879156117659123086303746595649104352326616294326192792585247211570671059238634501730808284308279665080354873668068399467385327201191798720309798104278979351656191452249522255897598557782962091275413669362333750582713762248924780686876459687168959147856207243776346467827387095782495747333401026931553394377185975315042701050262951651489449044846251909195285367235746686296199294718839469320605660794625877827389942486832691918479697272177514082664666842124623356962060753356316625193486101519785298874149548120387588501832546773672118451138667229978521655320948043402869662665282624204471878794191011926434719326911226157617689079722355405456968090897547646771852554959683456816527869715410794052915477802558685341322059583082716097689170629567718175503857835414497974686026837821849318809569729980436463165145136099516055768859533585682264858119625086311410204374406525728925211471383211129267983115238842597445328859158294284972217699201726919915554446459038236080598846544083415242124362914082921038485450369930216465611320102529105413794690913837653215636281927520903383545984704332884042733432442426681267748467568295815122809265576151287329289586503334699380604043547944153155816834739568595011122166465120764948643056478148943214148294867755979118205735899626783599184063762259844379714385957933965823337638426730756377876823636488582830858317384625626092397620922397349088957366339147456241519531261718609757912546903111714193839620418390343038808574309329166918205094283830503538489397868649278714733681856662645346706016383653779125443718613077447337637312219448293824448127692275999274637919784257409011302218732086876923595811297674567618671880733781446987635940257484875436945710384045231355862644549174126697131752682711259076186021221339219766614389722236272381937418522732644961438583413434153380699820451115712634557737124155592645957874136473808485582337237480305515813497289011738151503253137569445250849035599698637918309024434192311836659624103269886856622486296393188098306955983358277170491254186586343250717825418519979937806465224018381667318141463462873423293560749722761019182068835310602733276454519956935596533113339852213230387286365027294181987352561467895742812282411329389566936693913368632139122337635520741473979346586412977675774040156466177857618192572132217849201759674132972461342510695681619612425732836429116199536914868342636991878767904423821990463452625927635391718212826585137128105677344017993810735086833698955045774175251262499140112971782164119594412127971071148387788824337749918335751287136223153040836342714745476265708492416247357384866591569762929931326766864556611659495533348856708323654457274850429629299552863695185447456679776556943760251549964676523795906787289554879630595260225620599366747726695525908439931721654488733826788822568389632311652044488829115444762797882592966525245525488475109158592848294746808714724371689346763884534211449867177862123915468111261331611046191354302774443533939818642293753991701274646596707910837991815828187696402955884879112286449750934183325412305249174339666736816429861521857259783417766759326686447658438318264132188478294591181466355539401033797532583461291685694827229226918745933086619161911546955197927656774239518629359713936755388585641834171128828696893258116095877735192513781071643860284695286934768686337868616959567990806462271620419636929773554029758718104366722517218863901291923351674166843772131575959153261615815129885874358186947853516772631237821790758243335652354679738553826248356086936163953726967214525633378719368128428243213677248865849653848660155840774616297595437393781650339336392877306138345357541270323370269296117332393080899424608845506852244099656127402646677147794839964011846665945647744563398398721117593930441994766680755590511321156310652822449279688245279027728352458760794411121439436416538173507932376098696231611650593123975362395423139527779149449826672213281844689446304361763370706795792823295427493957497239277780408670231165641929173347973083737646932068259851195725844552544011851911366272409034407080832733133397629157174898518535391128884131451579608176784092524088974655303451693925918395147950528564196410437819629750526624743068256518409085798487847858739622808659169436211536265539895259406683431089615569659982417383387682734952907360334611907457201031785250297290953338905767933573745111448497871334592248849367607370518663995662668163549985412629679918193298779396379357108462386664996584775092912570779143936816303872461945349389687656661126159690899723606832252413987382485142994761755137435755826894979566767572245849537693268297553889643411872352265494656081538239457756442165809718383980809318332452954022403712992148175534169820675859761148258457433912649091597258592583192999308520527752843697866280482237102826785836919748389216954193645831804962626394539260696629592711111384373243464723188127239136238284699114236216457890623750815681636076264914954471867277236977508310581454187670126236837743262865255926894724856716589217778426991175363026953723298220273939446323245649547129726946904189492297289599297139962014391682497598557174783681161617884462671791522057969357553370589411229187245768926914562959561587284322414595591281853072569217136050228775171082468024359459835811784641538429102267116539795565152333892269246980751423882382136811562114467717136026141114772385265569254314908249752931666375637937628719549815611958161836963674275912218195552668819274649376254873775036926150814933166661107721652788908878514756416824457786434176339074521141262039836772681719246436358773478364398557579531823969156423401686171087426074799372164485614914517550305156269869271177496394231520663523654143491242194539855850907331963176451942117771327612915954104481683522817883711389644022727477992926946521647642414812935189252834415948695170215086859987375649782756683494834434377188854814558586484888572021297785108630449920951767115158539320429258393141797138538452808980921740613766844369354535781028591069994598633356553885672281142452817461337180595937859826919517166786494674769273372096898975664087601927206425686719901784113033679388439965694171307 diff --git a/src/test/resources/2024/input_09_test.txt b/src/test/resources/2024/input_09_test.txt new file mode 100644 index 0000000..5ff5aae --- /dev/null +++ b/src/test/resources/2024/input_09_test.txt @@ -0,0 +1 @@ +2333133121414131402 \ No newline at end of file