diff --git a/.gitignore b/.gitignore index 6fa170c..6fa164a 100644 --- a/.gitignore +++ b/.gitignore @@ -227,3 +227,4 @@ dmypy.json # End of https://www.gitignore.io/api/osx,pycharm,python .direnv/ +.venv diff --git a/.rtx.toml b/.rtx.toml new file mode 100644 index 0000000..ebbf8d3 --- /dev/null +++ b/.rtx.toml @@ -0,0 +1,2 @@ +[tools] +python = {version = "latest", virtualenv = ".venv"} diff --git a/.tool-versions b/.tool-versions deleted file mode 100644 index 2ab8199..0000000 --- a/.tool-versions +++ /dev/null @@ -1 +0,0 @@ -python 3.11.2 diff --git a/2023/day01_trebuchet.go b/2023/day01_trebuchet.go new file mode 100644 index 0000000..0fde970 --- /dev/null +++ b/2023/day01_trebuchet.go @@ -0,0 +1,104 @@ +package _023 + +import ( + "bufio" + "io" + "regexp" + "strconv" +) + +func Part1(input io.Reader) (int, error) { + scanner := bufio.NewScanner(input) + sum := 0 + + for scanner.Scan() { + begValue, endValue := 0, 0 + line := scanner.Text() + + for i := 0; i < len(line); i++ { + beg := line[i] + if val, err := strconv.Atoi(string(beg)); err == nil && begValue == 0 { + begValue = val + } + + j := len(line) - 1 - i + end := line[j] + if val, err := strconv.Atoi(string(end)); err == nil && endValue == 0 { + endValue = val + } + + if begValue > 0 && endValue > 0 { + break + } + } + + sum += begValue*10 + endValue + } + + return sum, nil +} + +func Part2(input io.Reader) (int, error) { + reg, err := regexp.Compile(`[0-9]|one|two|three|four|five|six|seven|eight|nine`) + if err != nil { + return 0, err + } + + scanner := bufio.NewScanner(input) + sum := 0 + + for scanner.Scan() { + line := scanner.Text() + begValue, endValue := 0, 0 + + for i := 0; i < len(line); i++ { + beg := reg.FindString(line[:i]) + if value := translate(beg); value > 0 && begValue == 0 { + begValue = value + } + + j := len(line) - i - 1 + end := reg.FindString(line[j:]) + if value := translate(end); value > 0 && endValue == 0 { + endValue = value + } + + if begValue > 0 && endValue > 0 { + break + } + } + + if begValue == 0 { + begValue = endValue + } + + sum += begValue*10 + endValue + } + + return sum, nil +} + +func translate(digit string) int { + switch digit { + case "1", "one": + return 1 + case "2", "two": + return 2 + case "3", "three": + return 3 + case "4", "four": + return 4 + case "5", "five": + return 5 + case "6", "six": + return 6 + case "7", "seven": + return 7 + case "8", "eight": + return 8 + case "9", "nine": + return 9 + default: + return 0 + } +} diff --git a/2023/day01_trebuchet_test.go b/2023/day01_trebuchet_test.go new file mode 100644 index 0000000..ac79419 --- /dev/null +++ b/2023/day01_trebuchet_test.go @@ -0,0 +1,39 @@ +package _023 + +import ( + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + "os" + "testing" +) + +func TestPart1(t *testing.T) { + tests := []testCase{ + {"inputs/day01_test1", 142}, + {"inputs/day01", 53974}, + } + for _, test := range tests { + t.Run(test.filename, check(test, Part1)) + } +} + +func TestPart2(t *testing.T) { + tests := []testCase{ + {"inputs/day01_test2", 281}, + {"inputs/day01_test3", 277}, + {"inputs/day01", 52840}, + } + for _, test := range tests { + t.Run(test.filename, check(test, Part2)) + } +} + +func check(test testCase, fn solveFunc) func(t *testing.T) { + return func(t *testing.T) { + file, err := os.Open(test.filename) + require.NoError(t, err) + got, err := fn(file) + require.NoError(t, err) + assert.Equal(t, test.want, got) + } +} diff --git a/2023/inputs/day01 b/2023/inputs/day01 new file mode 100644 index 0000000..397f90f --- /dev/null +++ b/2023/inputs/day01 @@ -0,0 +1,1000 @@ +tmmnhlxzpj1eightldxhjnone97 +9fivekfpl855mjmfdqzvbn +two29eighteight1 +4md +sixbrqklb347 +6sevenninexpnbgbr11three15 +4zggkljkcqthree7 +7lxjkqhmxcxsevennhszsbxzdfsonehnsrcfour9 +jtpmfoureightvtjmlshbfour6nvjkqnddp3 +twofive2fourfive1dvnrrvjr +twoeightnq6ninepxv +39sixgphfvninexts71five +seven3two8 +six59jhtfvv1five6 +7871three915 +prrvrjlpgxpjdxfchqonepchqbhqxx9nbrvh +gneightwo5txxzpkctwojvrcgbd9 +329 +5mnmpsevenseven +ccshz8 +threeqthree5eight6blzzh +moneight3onepkjskr9 +ctdk8zkhzzkt +nbfrmvlnmbeightbxs55 +six5mrrvsxqhqj162sevenntsnztmsdbnine +78dlfqtsplmnbrtfive3tskrrjnqktrkrfdxps +rljhmtwotwo5sevenfourtwo +6drnzxz9fourfourfourxfxsxhlzqx +7two8dvhghtd +five277 +four7mfhfcpqjjvlxvbs +sixhdxxhrzrsjthree2zddffivevzkcppvpshh +hnsnbldnp5hdfzqnine +kbdfmgjtfxzszl6fourtwo72eight +4fourxrtvjh +dzbfkvzlg6ngnrsevenzfqmlldc7 +eighthg62txtxhkl9 +5dckmbonetwolgsixvvftfive +twordkznxxffour3jgxhl95 +eightsix4twofoursgdlfkjonefoureight +9qlh1ztk9 +fourrmbrseventwo4pmdmlkp +sevenfive6gbcfslxhkmqlvspvgjgpsrffive22 +34threejhd9one83 +577twomg +threethreezcl9tkhjgqhknrmscpppjnnlnrtrx1 +tjxtcnxbq1sevensixfhhnfour +4six3kcnkonegxpfj +knhpcljnjhfive5seveneightck7three +rvrr1 +jjqvphczpqdmszgbqnsevennine81 +54568 +97zvmkrslhzvvrjgknjsevenfive1four +8onenine4mpfdsixfzhtpz7 +rdgjphdxkmmrh6fiver9ninetwojgxpghhp +gdhk3twonine91zzzmmone4 +qsxvlxkfnpvdthqteight24nine4 +sixeightthreesixfivevf3qfpvzvnt +five4nkqfcdpqn3fourcqfjjkdnjxf +xkpmtmhxlxfourvdsjmpsltr1xk7 +threezqkb4 +h2ckfnlk +kzngqxt27fourtwo +lgzhoneeight7fivenineseven5 +2fivesmzgdnsqcm +4n442ptkfx +sbkdpn2nhdjqc +bh22eightdqvhpspx +hdmdg7kjr4 +three3jttm7fourfourckm7spkhqdtv +1twoone2911 +dvhmdbjlhfqllkrgnine1ttjvczdsrk5trngnvlnfnone +two3pbdvzqonefour3bzktxlgdeight +7eightjcjkqldhpqfrlt9nine +2jvdfdcsnnsonejbxqrmhdjthreesix +7pxbhzglcb283sixnine4 +38npgninefive2two6 +jqeightwo7dzfcxppxgtsixfl966qzlbpczz +sevennine3bvdzkrjff +25hninehtwothreeseven +xdrkprvdmd8fiveftwopkcbfhtxmtkjmklzpphjjtqjfvvh +2slfjzgflnhmc +2bqnbkd +twothreeeighteight8gnhccvzfour8 +3six2two3btddfjt1 +eightbcmnpnmq7hcqd1kkbjmtnlcjsixoneightvrh +v99zsseven92five +fourzngffive1five5threethree +onesix36 +sixtwo6qlfm6onetwogfive +pkzjfive4sqknbg4gqbqmdzczcqrds +9sdgnqdnxqpjgmfourfour8lbrskpnglp +sevennpxtlltn7eightzfhkltfsixsixtwo +xjhfour9 +7rmtwo +nine1seven8 +oneqcnrjbqnbzfbxz4eight68 +seven5four968five +lhzgtxxdr7seven +lgconeighthtrvbkp17one8jsxhbxhvqr +41three +seventstcfbjbmsixtwothreefourtwojsbrdlml2 +8one5nbpmdhcfjhtwohbjhmzttmr9 +cvcl644eightmzzsqstzjkn +mxgj1seventwolttplthree +33nine63twosixrgrrzsgj +seveneight1 +jqdp16six +893plhbfvfc2threetwo3 +6qhfhzsclsmvcpxfjxkl +two8nine +sevenfivetwo1pn +threeone4fkpdk81trqfivepgrvdbd +8rtwofhfthngbnphrsn8fr1mq +235 +pztmvdb9fiveeighthgqvnine6 +8jqv +9sevenhcdntl4eight +682onepdphj5 +fstfvxrxt86jkzmlvnzfivethreecbnsevenfive +eightfive4ninenine3ktndjdhb4 +7twoflphhdcs +9thvn912mdcpfn8 +pxfvghsvtxsevenfivesevenninecck7onenine +sixvd2xmnxrtvfhcng +fiveoneseven96eighttwo +eighttwo6fourgggthreefzpbxmq +9zlkfnbfb +nhmssnx2 +oneeighteightfive5mlzbnxlgthree7nzkhl +rqrxzkpmglsixvmvrcgtlptkz9grhvhstknq +three12five44onevglccksrpgxkc +3oneseven4mjtwofour +fmcmjgvbfonesix3ninemninefivethree +sixvlvxxtwo77 +fivefour4 +51six +37lrmmfmjjn8six +twozzfcz3nineslvv8one +1fourninesix6sixmjngkmsntrnvmtwonehrn +oneeight3four12hqnjxlfxtg1 +9dlqkqgbsvxqnrk +1cxfptmfnschgkdl +threefccrrscjcg194 +seven65kn34five9 +2lrnxvs1 +nine91bqvl2six8five +twoeight9xkmmgkmkhx +rpspvmxkfqtknqpbvcmb9zrqvkzgszbkcone21 +5oneklx3 +fkjsjg5seven75gjkh3 +eightrccsmczqbn92eightcxgrmpsljztwo +pktwopzqjjmsixshkkqkkxglbzqrxr6 +4mdfqlone43nine99 +34fnkjkfbqfbfmnbskfzvspgrslljmmseven +89one72nine4g6 +two5fjzmceighttworqjlsdt6five6 +pneightssjlhtzqvvzcgxjczqb8 +9jnlthv2djkxqgcfmlzvtwonek +fivesevencqmhsd2zdmld +fmnmqbnhkg1nnsnsdjhfivenvvztkfournine +8zxcqlrftmvvmvg1ttcpclfvjggblp6four +prlrhh8sevensixthree +kmdnxq3 +653 +l6vntwo9 +lmkqjnxjrqqcd2two +vpfvlklftthreevdnsnvsix2 +33ninembqcjndfl6 +two6rqvdctwo +521onethreepsqbgd1six +8k +qxqhpv2sixfxzlcdnfhdj +six8gpxkmlqvsvx2eightfour7 +dxfrgznlvtsxj2fourdzdml +tnjfm2onetwo92two5 +eightfiveninejncfknkkone825prnmmxzcdp +9sevenfive23 +sixninelclnzpdhd7vrfvsksrnine1z +sevencqsleightone6 +nine9seven495eight7 +xvf6xdsrlqcchrzpskgvfiveseven +three8t22eightmhbsfnkhqdmsqpfzhthree +6oneldljnzdsevenbvkcmgvhstqslblgfxrkfour +9ftkbeight6rpf +8lsmnpbdt6fourgbrfhpmjgkrlc +2five1hlgtjplhfive +ninesixhqdcsxlsm4991cmlmrkgrgqmdbmtxd +zznhdgkcrq21three +qdgtfbzxh1 +loneight7ninesvjgvfsmfjd +3mj7313gbxcdcnmvjzqkbg9 +vnxknklscmhjrxnzbp9qzfiveeight +2lxbtvthreetczjsonepjmrsflhndone +jsixbqxkjlzxone8onefbqgnhjmnq +fpsbqpx5drptgkvtwothreeninexcrm8four +rhlcnnzvcone484three5 +6threefive +sevenrkldjeight1 +16744qgmmpxxn3nine +xq1eight +sgrfourc6grhd +9three944six5rnzj +ztjfqjzzsq6sixsevenseventwosbztgl32 +eightztmtzkmjdvjxhrnbrph3dsdmkrndd8zflhmtpx +two3onevgrjshfl5mkdxmdkkrtthreesix +srkgcdmrpd5 +4ltngqjpt2five +seventvxkdvqlbd3eightpmjpk +3three5 +nine5d +mrrbl8 +frvtwojcvppjbtpp3kpzzf +eight4oneonefour +nineptjfjfourthree1six +jvlmgcpxgckgzjpczfvjkthree2 +twotwoeighteighttwo7 +cbpf5threedsvlvxfcx3fourone9six +17seven62sixjklrjqphfcbvmnscttwo +jsix75qcrrcjthz5jnmxqsfoursix +sevensrkcschst2 +two7nine888fourthreenine +3threethreepnx5 +sevensevenvlttfbxmjg1five +233eightmxbmdgdthgxgv +6three27one +fouronecqgspprhgt8rzshnskmn +364dclhtvrkptqlnmjkpkpjxtrfm1seven +3cdf61fttxmkpbh63c +eight1dpdmptdnineeightsixeight7rvzz +four8sixsixfourldrxfszpnlcmkjxnsrqrone +krhgrd2ninesixxftmtq2sevenmkld3 +79onesix +twozjgx1qdznxdgzpzghqf +rvpfz675fpzvmskq6 +dnnnfxcrxhninefourjgdkprtqbv63 +rhndq8zvftnvqm8 +5onetvnhptcqlm9z1 +49nineqgsjrz +28kbcjbkmrvqninetmmqdjjhxoneprtkhdsllc +threesixonenine9 +threevthxddrxzqbcninepmfczcppskbj7 +blnxkpbbgndjdsx6 +vloneightninesixsixchp3eightnine9 +srgcvgghjjsixgsnqmlfive672svfb +glkzvd84 +vr7two24threethree +xlfdr1fivelfxvnjpz +3frsxgsmzrh7 +4one6hrtnb3 +eight44fivesevenrhsxbfbntseven +9two9cfffqd +pbqp3ninegqgxvpkdtjnqsb3zshhlxsrkrvjm +7seventwothreecgbbvqftwo +3h +7bgfrqgmqsix2nine5xgbr +zdkqfshrthree4nrttmzjb2one +one15 +2sixdx4 +128ninenzcfmbgq3sckqrcnkvgthreektk +seven2zqgrjjsq1four8sixeight9 +4four11two9dszblknpzgrcxbsmp +hcxcxjpndpeightfourf82three +sevenrpsevenxzcrp18five +rcklcnqxgbtszdxseven6 +znbkksfjtltngpdgsz2grsixxszeight3 +59cvcvfourvcvvshxone4bqnmdpr +sevenseven7 +2sixone9gkzkxone58mpvpsj +2bhhzpkjvtbpqf7mkrskcqfourdbqfkkxzqbk +three6fourtrqpjxzgfones8 +oneeightfive19seveneight8 +hhjsqdqhsqdvkmnqeight26scjgksix +sixfourfivetkmvpdvdkfhvfourthree8 +6264fivendcxsmjdninetwo +ssixsevenfmmzpxddc4zbvcvb46 +tqfgpdsqccdfvhjtwovsnine1seven +ninesvdlpthree29k +gnoneightqpsgskpqsjsmfiveffzfklltxthree7vf +fourgvonelxrqbddksnqljsmqr18four +four18threethreeeightnine +nz7mhblpprsgpg +nine3two5glbgtkhdhv87lptxgnbsl +5onetwoone78 +6fourtwo3smkssmcvpsv3five +ps7xxfxmqmvkzjtwo +nbsbfqqqpt52jvphpgp +zgxvgqjklftvtrmfour2twoone5hknxfkr +4two6sevenninehpcpbtvrgc +seven4one22ztmlsc5six +rvtlfsktxp7four74foursixlvg3 +threetwo4seven +kdnstttczthreeonetwotwosevensevenccq2 +9sixqjvcnxkvbmqrqvsskf81 +3jrdhvjsknddqdgzfmhqcdmkskxfnxvxlqtp7 +39brqqqlcjqk4one +onedddpmznxcd7three +415nineonerbpvzxszfone +fivekfvsxdstm8 +47sixcdsstnjldeight6 +6threerhtchlzbpssjqdhs22seven +foursix9 +mqqdrpzmqrsixqsdndm6mbgvkone +czreightcjlznine9cpdtdhcp +298onespqbfmmm +39onefrfkvknine9 +7hsdbsbfrft +shfpxrfrb45rgnpcrqdtsonethreezcgngh +zbeightwobtdhr9 +9lone2zrbfzqthzkrrnine +lvhlkdzqsvfive4bpqvkdmscfivem7seven +fcknbkcqrxclntnine445four1 +five57gnsfiveonejqtzkcjmzp +threeseventxbszffourtwokztjpcbvv3three +mspeight48fourxxvxmxc88 +one67 +gkl3three2mcljzvkpx +threengltpjhdhmjr6sevenntcsqqf5 +meightwofggvmkr7six7 +twoxjcbfjjcmq1kf +four7mseventwoone64 +7hnhhcjnrxsevenffmjlvhnjvjbkgzqmhmonesixhhczncfnhbgsg +hppxtkvseven8g314 +fivenine7sixfivesixlmnlqcg +4gdzjjjsvkl5sevenfour7 +bgkldxbvsqtpdf17lgvbl4 +3zfm +dvoneight4 +three1eight1xpmvzlfiveseven +5ninethree6dvq +69lgmqxpmdxtq +6one8xszfmzfvpxmhv +three971 +tdklrczbqgjhhpz2gkh92two96 +6lrxbnvlh5kqqzbksixmkhfkc +5ninetpqplfour4 +eightgjfjqbzlht742 +lvjtvngcpl2four +nineoneeight9twofivevpfhtkkdmzz +sixcdncmsrzzt97five8tqjthree +tnchfkdmfzjsonesix76 +fourl8ninepjbmkxzdsjsxdj +twozqs7 +zgsggdkgkpdlr5one +zzdkcsevenqggrdzrcdllqqpdnrbsevenvhsfnr68 +5sevennine6t +4rlmrv +six5mlgsevenrflgjfsn1lrtcnhhsc7six +6ff1six +nine87eightsxrqxj +vnvsfqllfbh6fivesixsjpgzrvdzb +six5twoseven +5fourthree3pszxtfivesixtjfdnrxt +seven7jmngpvqnkf979lkgzhbvbltztcsqhr +fmrjztlfsqrone88 +ggjpbpjmdgsix9one +76fourlnjlthhnsix5qqjsxxznr2 +1ninesevenhlbeightfour +1slsghqc +five4dhdkdvrcpvzcckjrrrjfsonesix5 +2lgkbfbbfour3 +5lgkccrp3djlrhzdxck +5kst8fourkljsstq4fbvjmfznk2mhd +3ffmlqrxnc +khxq29 +gxqbkhrone22371lvfsbdvgxt5 +ntfpgz1 +mnbvfqbrgncqlgk5eightxnjgslfqq +four8txcjdvjcqxzdhlthreezslht +933fiveonetwofkprnvkd5 +5pjcpqnqsmfqbtp85kk +6hcvfgzpl7six61 +3fzpgdtxpntlcfptlks4 +5five8 +two2mfgrdn56sixfour +llrgftj52tpdxttlnqzpzfsix +twothreeeight2nine1gmz4five +kgmjhhxl3vk55six32five +twotwo2ninethree +nine6dgxbvljkpcfourrrc28three +one1rspjbqx +7lxmkdvhhseven +sevenninethree51 +fxbstzjvtffive185five2 +one1fivefivexhkngdtnkrbkone5two +7skdzgrpcreightwokq +6znrpdhnine6621four +xsztwo2gjmqtfqfrjhtzjbeightqhgzbpcdeight +one597pbr11 +lhnlmjml2onetwoonesix +86fourdgnbvgsnrd53four +2dnfour4mhmkxtlnrjone3ninefpthhxn +1m +8pmszqtgzcz44four +bplgrtzvvqhjgdgfourqbt6one +3three3sixfdtqkmsnc6 +8fsfthree2onebjntcx7bsghgxphp +three2779sevenfive1zt +seven7gxntwotwo +1tmknl +4fourckhl5pvkjhzqnxp3xzjzcrgbdct +rzddzgbeightxxmgspvfprpkpmsixtwothree5 +8xdqsjqxddhxqvszjjqbsqgpkfour1dxckbnsgfn +582jxgfivedmtwo7 +drsoneight61 +9nqhrrtqrsbbjmlpftpggkmsvhd8 +oneeight55four7 +lkgfnd9leight9sevenfourpcxr +3fourmtmsgtwothfgbxcs2tvvzcsshb8 +2onehtgthreexfnbfrhnhrpq5six +threetwoonen3fivedbzbkzqdxs +gjeightwofourqonesix5nine +54oneights +threesixckkpbcqtgjninellm4dhvc +sevengnxhjjmjbstvlp94sevenfiveqprntdkmn +qchrbptnr4sixfourdzgfxkzsgq55 +lzddtfgthreefive26 +12nine +cfvscrfive6seven +kmvpjtmhhv2one8 +5eight342 +frfngfnx1ctxzxfztptxs89sevennkdvbkq4 +vhtbh1twopngjtq +75kfdrjsnvccninethreebqjh +rjgbkhrd3three8two +psgdspjqqqmd5cdpznxfrsshk +7fourqmtbg5hrgxrhrm8 +threeonepdgrrpblg2xhpqjrbppfive +sixjtfzlnmninerztjlpcjpcxrj3ms2 +csmqjmrb53sevenninefourthree +onetwo423 +c5fivethree86fiveeight3 +2pdpllthree53dxbmmrvn276 +onelnhg4hlbsgzhcm1seveneight +stwoneeightpqzflflfmvmqone7 +86fs3zzsfrn4 +xtlzjxthree9sixtskggjtzkt2 +brjnsc7sixlrmfgzdgktsix5rhtxt +eight7cb +hp6one89zpeighttwo +threenlgmsfzn4 +1msjbpksxqmfoursixthree4three9 +zkhkpttm5seven +p8 +frjrvnone9two +5sixpvfmvfivevtr4 +qbptwoneqcdkqqtnmfjrpplseven13one +5four2one891hvnl +nineonethree1 +beightwo55sscfxvjmqrbcsix5five +sixseveneight82m8dlg +f5six +fivedsjjnpbmgckfpvbfqmhd7 +eighteightthree7nine1four8 +nine2cnxqxvlzt7frsbmtfcfive5 +one8eightfivejdg742 +twoone6 +jqsrmzj1seveneightsix +two7five9rfs12threejmg +rjgggrmxkzrpjmtt4fouronesevenninepppdtd +257sgqvjghcneighttwo8five +threepgshzbxvpfivexmlfg176 +lxlncztzvdzvx1hmjgxkv9twonec +ppfftlnksfmbhntb1twoone4qpgpxjrdqf +tdrthree5gxfq7gv +fourmfl8zl +ckhf9cvcghxj3 +vcnfvsvvrbninemf3jpnbqdv +37ztslhzzlv6blm86z6 +glgsgtfhhx7gpxfnfckdjhkxsfourhhv +twoqmtzzktfjs9vpvpfqxtlf1nine +two8two6twozfgvlrdjj +seven7k7pcprskqtp5seven +1bvgceightoneqvhppcfjsf +4qjonekhqjsprx +rmeightwosixhhthree484 +6two6five6ninefournine +one2864onerbcfdfnr8 +threesixoneone3mbz9threestddhjz +rprmjtmjtmfourzpmfqptwoone533 +one6foursix +fiveeight9njclrmrksdqonefivelvc +three1qkrvgcbnxfour +5ssqddjjmmrkjzgtklztpdnpd +four7qnnfnvgkzlldmcnnine88 +four58fivesevenztqcxrzzqhgjlzt +one24onecxxlzllskdtvsevenbq4 +ccjjht34483 +8onefourfour8gqh53szjqrdhzk +18six +8vvbqzhkgz84four318 +mzxzsjfour64seven +t1 +89sixthreexhtbnlcfnthree +hdxqjnine5xp +seven542nkngvnndrrlrmfbxdntwonehhc +ptwone6nb58nine94twocmkf +six64ninesix73seven +seven91sfnbjsccqdtzgleighteightwovqr +vkcvdone49fourkbm1one +9sevenrg94 +foursixsfvrvhgvc1qvjkj +fnvtfttwo847 +vgxjts7 +6bxjvpksix5 +qxlpjg38qkmxfivesixeightqcffhsxnrk +1mgjfrfv8onetwoxrscgjlcdhnine +rmpvtfkmxnzrfsxtcdj36one +569fourfivessrblkq +threethreezvvkdjzkx5xjxnlglfrt9qdkscsdf13 +qcgd4cbrjprvnineqtfcxnninethree +6six9fhhgnvfghsix +ccjrrbkj56zqzbsf797mxsq +3ddqxrm6one +39four2ninetjcvfzhmgpsmsxrjjseven +fourtq95fourfourfive9 +threemz96onezsqjzbrb +txzgzgcc8threejthree1 +four4ninethree6cqfbfffptwo +one3kntwothreemzklllzfourcjlrnmb +sixone9fivesix +8jsddhfppj99 +5threekmxdglktv +onemxgbhqzjtgcxdmkr994 +2vsgrxcrjbkkp15 +2two7rfvfkzzmpdgqtfourtq5one +ninecqveight5tntgtm37 +38ngqrvhjkfmcl +2fiveeight5 +one5ckh4jtjcqcjr54bphzndqrvnine +8bnine1fourone +nine1sixpbckqsixthree +one7zllzvvgklbkgphtpv +6fivecgrlfcheightonebbonetwo +dgchmmqfbzcjcnpvttcp6 +1seven73ltpgbts +1xsdvdt +qphknjcb4lkzcqdghd3threethree +8eightjxplnt +six5fnnrzghlnjsevendmpnnonethreejvmzgkck +threesix2jjseven +8twotkzfbzbbfive +6onehjqdvpbbmgpnzjjbxltwotwochb +seventhree5four7vgl +seven9fivefive7lxqsldd +xjlkbctseven1 +5sevenpslbmmqnrnztgmdtkzf9gbs1 +bsndznhdfjeightonetwo58 +rxzf7n9vb +4pjhkklkhvsix8 +one11fivetcnzcpzxcssevenseven +one6eightonesixeightnineeight +7xgkhtrpmtwo6five48six +dgs4 +pdb1gtnxthxqeightthree2njhzjtnzfthree +6bstmrhdhhtgvfbqjq +xt68 +1seventwo +79qtjd6 +rhcrhmtmmxcnbjdhqtd7cdblltsljntkbcqnfrchbfbkhclseven +hnlhz15six263nine8 +gxfvnsdqjdsoneccthxvtbxxzqbzplfldxx9 +3sixgsdt4ninefivemxtzzqrztsix +onethreeninethreetwo6pldp8 +n88 +sixseventhree5seven1 +jzrzbhvvpg881 +niner6sixthree4 +4sixfour9 +twodm3dhsxlvvrghqbvfpqvqlvtxdjzjhqvzmb8 +one67three17eight +onefour1 +sevenseven5four23 +qcvddc8rmmmffhjvthree8 +68fmf6 +xcn5 +nineqbqhkxhrfourfive7lftzls +zkkntfcrpthreefive8five3 +ngnzlh81two5 +ninebkxxrvrnh4five +7327sevenspjjxxcxbzgsztgnr +7l7ngrhkvzqftmrkd +2rbthreedtdlvgfthfive +onenine5dzvznlkht1zfnbspkg2 +33tpfdsevenfour8four +19four5 +twotwoone398eight6nine +dcqgn86sixglgbxnp2 +six9vksix5273 +fivefourseven12sevenjmdhpjpeighteightwolzl +1fmqcg3lponetwo9 +tlgbv6fqpqbxskfdmqfour7 +9hqbtt6sevenfour5pfgjktbjhzr +ljlfssmk8pbmdrzd +ffmthzmtwo67fourfivethreefive +kjrnrgqfseven2mtcgtwo +hkgeightwofiveeight3rdtxkfvtwoldvxcdm1 +seven72k52 +xnqf8two7 +sixone5two3 +5eighteight5bsxlgbrpjh +dzgngckszf8fivekpjdbfl7cxprlclfiveseven +threesixthreepmglrtrvxkrzzkq59 +fivenine1eight7nine +9mljfqfjxhzone548 +7soneightpkz +6qq64gfscshkthh8eightsgcmpstwo +dsrvbxvgjf8 +7zzndrkdkmeight3zhgnpgfmrnine +7sixzqmthree5frgxzlkm +3threefivefbplhjtwo +rspdqldldtsr7seven7tzzhcbghtr +1sevenfivejrlzn +threeeight3cjjmr5 +858shrxcprbzjpblfmqpxxgqsjcvr1one +zsttpjninezbkxnvzcdhxhprmrxnrqmvl9 +eightfivefour99seven9vlchs +four1dpgsptmvvqsb +rzbvrst5rone5 +7eighttwo4sixthreebgpskqdkq99 +vskgbh1pj +4vpsznm4nine +onemplzkfckh7pdlqrbeight +6fourkrxslrpqdsthree9eightczfkk +2xbmjgjfour5four4four +fpckvttjznoneptkmtbtgsg12knbzkxgsr68 +twoxmjmqdfxjptwoqzpdcrcfkplklthree3fourfour +8sixnine +l6 +rpskpftttthree2bthreeeight5three +five28fivedpf82eight3eightwoqnl +lgdgpnrn7mklfpcggninefivejvsix +vtdpfp21p +fivefourlnbjf8 +bqnx98sqdpqeight1 +sevenghmdbgvninetwo57 +jx9onetgbjjvhgqvqrstztbthree39 +ptgxlzrp858jkdzgkthreetqlr +2threebmjmzflthreebrzfxrfive +twoonekrkkbbjrfdbpx9 +43bf +eight5five1ninep8three +fournqvnzhklffivexbxpd5dmshsx1 +fournineeight572 +zx7kqgtqv +1fivethreevkzvnn9five +5rjjcz3sixninesixkrjnblg9pnnhzkjd +97sevencplhfngjpc8four +onenjgphpfqr8oneninefvhzcpmdmbsix +threefiveone2snbmscbmkxlcqqqcggflvcgjrnt +pzzhl5 +xfour2mltvkkclcrzptdfldgone +4llllgkdft1sdsixeighttsbxtg +3onesevencrrkrdlbg5 +7eight6fcfive +xbpzhnp6threetwodflsfr +lfkjqcvvlcpxbvp8dnnxrjzklj2strggkjxzkncs +8one2xqjdnine +ninecdcql828four +pbfg1sbfxcjvthreesevenhzdtwohnxdoneightsb +1fbcmzflvkhrkkj3veightonetwo +4threethree632fourzqczbxz +1sevenfour38 +mlrjnpd7eightgnjnxhgz5seven +fiveone9 +two78 +9683klkrcvjz +nineplcvqlvrninenine95 +148hzeightwor +ns6fivemzqp6 +58fourxqsqdg8 +rmjrxhzbhnzn6jgpgvjtwo1hone +xhzphxb1xlqkktxtljmrfour +five6txgsfvnxqbnxljrblgnvc +1threelzq +4gclpljthreerqpbpdhftonetwofivevqm +six5js +twobzktcpscjlfbttxbbtgqvrldrksbvxzrxjffh9 +five1142sixninetwo +8vxclrfive7hxvlgr +62sixxpnbhlhmnlgctgqnqppdczm +9zvfzssqhhjqleight3ncm4two7 +cvsix7cts +eightqnjbnflkqsmdcqrv299 +sixjqlmpkgcmcmcp6qsdpqpdseven8eight +79gnncbfivethreevgfscv +sb4gbzcvtp7foursmtdszdrg8 +fourthree6546 +2nzjtvpsr53 +9pc +nine3eight25eightmeight +pmninezgk5nine +xnrthreeseven9threetzmg +7one5gfbn2 +vtsqhzclv89fh +6sevenfivefiveeight1 +vxcnbtnine8two4tvttnmfjntxmxnqgbhhlonegvkpgs +peight5shvjcng2 +szlpphx277nineone +bhbvtsjpsflkcmktnpqjlzsixhhhxl9xtkbvmszqseven +nine3five2dmgjkbctnnnsix +8threexgklkrz1 +fxfrqrxbrkdfivepstvtqhlrnhvqbtzvfnineh6 +five6gzcdrjxngf6zhsvxgeightninegp +kgqcnddc88eightonetwoeightxs7 +eightsmgmfourmdjzvtd7 +sevenseven836 +sbnrfqzhk7eight +1hkxbb65two7mh +dkczbhqtpvcqfrbmcdcrsixsix37jlqfninenbqmtfzcb +zcqrcpbfttmslbssbpklfrcngmszvvpjqf4rlvqxlnchrxkndbrtxcnm +7kxmzxbhdqsix8 +13 +lqlbfzxzfkxsdbz3six6 +sevenfscdrdvtjeight9threeffrvxdbc +fivebnn246dlbbhphqqgm +hrfqnlcvltfour2 +vtjfour3five4jqtwo1 +fivejkvczdmqzmfourthreetwo6fourtwo +ninesixsixsix3785 +six3sevenninebcvdltmcvgn +rdjqktrmtwo8cnvzv49twoneppp +eightjmcc4onefive3 +3mszqhnzqdhbbplcnq1tmchrgcltnq +sixsevenfivefour5ninesevennpjqzndjx +15fiveeight1fourqprkldhs +one1rbn1lnmdmdf7sixbjxv +pseightwo3jrvcfiveninefive +rzvjn16 +55eight7285ninedf +ninedgone9 +1two9onetwosix6nklsjdbr +9four8xbgnxgs4 +prqkonexszxfpqr9eighteight84three +xkgpnzsptwoseven1foursix39 +ntpkrjggj2sixkznljqzljonemvq5four +4nineeightsevenhgkflgvgqs +zmchljrjpxoner7tgxjdkmcctzrdcrqvkmlnftvm +439sevensix7 +91xkrmztdbpkpdxtrzkrtwothree +tfive11l +htxzbxmlthreesgmbh4ninenine6onefour +4dtcxqrv63glbpmznm9 +3shdcdzzqld4sixfxdmnmjlz7 +8strtbonenine7sevenpcqjvqclcc +nccnc1vjslvtddgcddrfcztqbxvxdnineeight +826nineninelpvnkxzfive3 +7llqfvftl7 +twobdnbnine3fourbsrvpkqsdjxcvk +onefivespnhqrxjzmfive6nine5 +9lfpchffgxthvheight +brqjss6six8six +sevenrfsix7sixfourfourxbjzvtwo +cdtwone863 +eightzvn3 +8252nkkndmhpgtqnb +1pqmbdcrfour4 +263vmbrqqdtrn45ninesix +sevennine4ldhlmdnhzjqksbkrg62 +eightone5ffprsmqfzq6 +fiveeightnpfbdtdbhtwosix11mghg +2seven82six3one6 +81five18nineonemmbsj +4eightbjjjqnc +sevendstdrhpfxfnnhrddppms9 +kgtptmpfhk4 +seventhree6hllpmnqr +cpn38vlpclqzqcgpbdmlbzfssx +96fiveflq +bqcxmrpzql5vxfnpvtwo74kdhsvlkzz +pgxqcskz611bzkhmnn46 +fourfrl7mxvtkthreecfkpmxqlxhdf4tcgrp +3dhzm +58fivenine1nmhjdzlctj8fplnhmtwonexh +one69 +fivethreenzsgqpsmhronetwo18 +five866sevenninejbvm +fourmtnkh4 +9ninelzqf54 +727 +ttwonentrmkxckfxonenine4mdpjhpkbrfzc +fmsix45fivesix +767klvdthjtwo +pnrlxt6hpttnlp +rbtgqmgmthree44ttvone +cgspmnlsl47nine85 +threell6dqsnn67 +486mz4mqpgkxlmdkp +rgvlcpnbnch7flgrm4twofive +hsevenfourcxseven4three +87fnbcfftwozxnnqmqtmp +3qjfnzhhmxt7 +leightwomtzt36sevenhgcfivetwomskfour +sixsix6nzznseighttflzgcbzcthreek3 +eight4725nrpbxfonetwo +scfiveeight7three +onethreezvxbfdklnhone9sixeighteight +sevenhcone5nineb +dkmmhkhsmnmtonetwopdcx6seventthhgkdx +rskzlrdm2six +one8cstbffccz +eightsevenzkkhlcxhmxthreetwosixone51 +82pgkjcxmcmv11ninetwoneld +ftmhgvdrfxdzrbhqx78 +xlsbhctwocvzcxxsixfourtnvjnhrn9one +6jsdgbtbzsbxvdkdlrdk2btonellsdxzfrvvknsrgml +fivepkblscprv49qdztfjtwo +one59795foureight +five96 +6mqj +sixtwonhjhcjhmvkjndzphgkb7dbmngxbthdbkqbpeight6 +569 +4svnndr +xbsfhvsq22three24 +1mms2nbmlsmpkrjvlz5 +gstwo25ldvfzjonetwo4 +mkbsmtrrxljdrxlnrpcrhjtvtmqbzvkld5zvphtjflvmvhqxzrnine +one59twofive5gkvpjlxczb +c5ktp7sixfoursix +mdlrxxfour4pxfour +78hkbqnggsix2sixnrmx +nine2mnxlh +brvkttkjvrp8qpnfgfjhpn +threeseventtpsmm2eight42 +grrxjpcxstwo19ninek6 +kmprxnf1seven8trnb7 +onexmrjpkhdvmfour7seven +2fivetncrt +four5qpbmfxssixbjfdcdsixlcjmhsxx +two87three43 +hjkrr5nxsczthree5bskmeightln +18threesixhjqz6four7lcrrzr +onezfourv1 +rglmnronesix7sixone +6cffcmlfkfbqgfivegkxsf4 +3twoeight3 +six4five19rpjvktvxlqczkcxttssgxcztk +7threethreetwospzk4 +gkhgv3 +plhsjbdhchzzhztdgt4dfkxeightngnxtgqqrvgj +sevensjkvk15qvpckmlh +znvljxmvjc7eightthree66fourrzgkvrxb +72pvpmlflqj4two4klbjmbrfxrcs +mcpvlfpb39 +3sevenlbfrflzeight +126 +78one4hqphnvntqt +9rmpzrfsthbfourthreefive4d4 +one7eightthreecsxj24 +ffmk2gvdngdjxzgtwo55275 +2threefour8qtlhnj987 +gxslxqkf4gmpfpqtvnfourf +3vjmbtpvdzvcpfour8bsppd6 +lfpzvmmnf8six8sixrvmhmg1dcqbc6 +7ppssvcpkpvvp +48twoxgndlgkfzqndkcdzcnr6hzb6pplx +sroneight9lxb6sixfivenmmcnh +tnpdqnqfgs7bhhpponesgmbvrmcsixglddfpbpxvp8 +twogsbzkvslnmfzbt3 +jjlqpfhthree524eight822 +six246fhhczntfvdcxjfqcxzmgdn +6threexgs7 +njxmonehnzjqfnsgbf3rmmldfive +one77eightxgdxghzrtgzddr +ninerxqzqzhjxf5 +4sevensix8onept89 +4onefnnrkljbm84rdeight +ln3253 +ninekvzvmhvmnj7fourchlfggglbcrjs +gdhrt7tjmgmqgcbblx98six +ninefour7onetwomcgjhgcgdl +fourtwo1fiverd +1three7twosix +sevenzgpmc2glhbfcczzg +3fivesevenfive +cshghdvkthree18 +19four5hsnsjkmrrsix +4xcqlfvnxninefourzzhfzkdfdg6mfmp +tqrjmt9zsctcbkpdlkqd2 +2zvpsevenlhzj86eight +xkfzftj5nfjlb7onenineone92 +9bqkbsjccmeightninefmnmfour6jstqgfcfdtqr +ninexlqcltkmdeight64one +7eightfour7two +three6tflgzsphcpbqgvmqnvn8 +threejdlgm8293three +pppm8dzvd8onefourtwo +ninetfkqhmckv581 +eight91twofourvzbpmf +1tgrgfourseven +phpfxdrlcjpshbrhrktwo2kzrcngmsmdfpvlmmbjzbrrxznkv +57one8two +fourglsthreenbzdfddhdh3sqkh +2glpbhskt8526s +455dxvmvjhh1skbrrf9ck +ninez6 +pdcsjdkc4nine +nineonesixsix26qsmkfctbhx +five9two +4ktptmhxfivefour5svlfvsgjsvgseven1 +eighteight8ninethreefourlqhln3 +seven3hffspxvklheightrx +eightjqjhzvzsixfour5llnhdvmf2 +5lptnqzmk99kdqqqjmthreeone +rv1 +5sixfive +cninethreeone1sevengpgqdnpk +4vphpshpsqngthree65fiveeight +3zkvgntwo3sixtwo +1gqxgxbdvmrgd64 +threemctclrrzvqzdnmkpgffive3snhxseven +dfngrsix5nninetwoneng +7ctbp7hhgtsevennine +9jrnsp3threehvnzn3 +48onepxlrpf +threegrhsffmlv5sevenseven +two7eightthreedmsfeightsslvfour +xfdljlbdjckkdzczr362 +four7mfppkmklgrmpmt91threenplqff4 +3cszpvddndjfmszrf +qoneightntdzfsix5lcz +fnthree1 +two4sixbmrndhsevensvxddjbdgmgdtlncpzph +9ptssvrgv +twov5 +4three2xqz3 +xxqrmhzdp2gnxscfourgkbkgntgr +2nzxdfxcvfive +sixninebtmtrvpmfnpdvceight3 +four8sixthreedsm9 +9blpvdpfqkghvh +3oneeighttwo2tflmpdjzq +fn3oneninesix3n +jgcd4qnbbxcvjqlthree49bfchjz1 +glj8sixdpbdpbqhh1rvgmbcqx +threeqfj66 +5qvhpfjkkbhjbkkzrlgfourlzvrvpn2nineq +3btvbbpvpl7ltf +bfxmkcn4sixfourglqjtmzlgj2eightfiveeight +twotqfpfive3eight +3threebzmcvtknthree8fiveone +gzkrdr1 +4cgvpfljq4szjk2bxlmn +tfdkhxtgj9 +one64llx9zjznbtxphn +7twoninenineseven19qjhhjg3 +cxflp2two2eight +vrhlzfsnfqzfqf3dcvzhbtpdkqdxn8nine +bsddhtzbpgn1llfcgm38 +one66twofddhjrkxjssixkeight +hmsevencnltvthree68twonezmc +3fsrrn +twofourseventxbcqzz8p +4121knflgt +tplkfivejlvtfm3tmcgsevenseven +vhhfhsfkqqeightone22four +98sevenfournine +nineone199 +2sixnbvpfrdvcctmdzxl +8gfbsrmhpnsclvrntwosevenseven2three +3dnhgfvhdffllnine +3frbnkjjbhrsixonesevenxph7 +five2gmxjthkksfiveonerj2nine +bjkvk6three5jtccbcvntwothree6 +4snlgnj6ctnzvqmphkzdcj335 +5bhhjhrnzftwonine4 +m8sixone7 +twomrhtklhdsdsglpncmffcqhthree4svxsln7 +sevenmzqn2hstdtfivehjhone +vqdhc8twocztspvsdpskgxtjhgk +4fourhthdppjz +446gfskjqrlvnqbm8xpnvq1 +jzcdttwo8xggone8fivezkzrjzn +gqfhjhkf7 +ds51sevengpjjnmxtdninetwo9 +twopbqhjnjpkl8mdrkleightrtlrhqn +3seven3fkb9qcrfkknht8sevensix +hvzrpbbbeight72jpvkhkjxgvxqjfqfour +eightthreeonev4vtpnbpfzch1one +sixdlds5twothree +eightjtrpdfxvdlkqmrrbxbc6 +5mtqkkxsqf78nineseven +dkkrkxxonevjqdthreen21ztnzlghmttxmblpp +ninethree43mrgng6jtjm +fiveg2three +6prj9four4rtm21 +one2vgvklpcqnxssjbone1six +8glktlgcfsevenmkjvone3dgjjfkd8 +threeone6ninefive7three +zfv2c2four5one6b +qxtbbtwo7jrdgxlcpxbczxhnpjthreetwogcfl +vfhgqjfqfc78eight +1x5 +six5four1four4 +2fiveshtds4oneightsjg +962seven58two7 +7mrtndknxzlzdkqcfjxgz9f66 +fqckxpqrjk8eighteighttwo6fivejps4 +drvglmnine7three8one7twodxtr +mbnfjkxptbtjmgcrtkhxjvjhjnine83mpnsixfcmxcbnspx diff --git a/2023/inputs/day01_test1 b/2023/inputs/day01_test1 new file mode 100644 index 0000000..7bbc69a --- /dev/null +++ b/2023/inputs/day01_test1 @@ -0,0 +1,4 @@ +1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet diff --git a/2023/inputs/day01_test2 b/2023/inputs/day01_test2 new file mode 100644 index 0000000..41aa89c --- /dev/null +++ b/2023/inputs/day01_test2 @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen diff --git a/2023/inputs/day01_test3 b/2023/inputs/day01_test3 new file mode 100644 index 0000000..e962ccc --- /dev/null +++ b/2023/inputs/day01_test3 @@ -0,0 +1,7 @@ +two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrsteightwo diff --git a/2023/types.go b/2023/types.go new file mode 100644 index 0000000..a7358f8 --- /dev/null +++ b/2023/types.go @@ -0,0 +1,10 @@ +package _023 + +import "io" + +type testCase struct { + filename string + want int +} + +type solveFunc func(reader io.Reader) (int, error) diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..4e06332 --- /dev/null +++ b/go.mod @@ -0,0 +1,11 @@ +module github.com/Crocmagnon/advent-of-code + +go 1.21.4 + +require github.com/stretchr/testify v1.8.4 + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..fa4b6e6 --- /dev/null +++ b/go.sum @@ -0,0 +1,10 @@ +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= +github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=