From 5eba5d2b339075f51b7255de72d32c8a740614e3 Mon Sep 17 00:00:00 2001 From: Jesse Luehrs Date: Fri, 1 Dec 2023 00:42:45 -0500 Subject: day 1 --- Cargo.toml | 4 + benches/2023.rs | 25 ++ data/2023/1.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/2023/day1.rs | 73 ++++ src/bin/2023/main.rs | 26 ++ 5 files changed, 1128 insertions(+) create mode 100644 benches/2023.rs create mode 100644 data/2023/1.txt create mode 100644 src/bin/2023/day1.rs create mode 100644 src/bin/2023/main.rs diff --git a/Cargo.toml b/Cargo.toml index 37cbdd2..82b1334 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -29,3 +29,7 @@ harness = false [[bench]] name = "2022" harness = false + +[[bench]] +name = "2023" +harness = false diff --git a/benches/2023.rs b/benches/2023.rs new file mode 100644 index 0000000..08d709a --- /dev/null +++ b/benches/2023.rs @@ -0,0 +1,25 @@ +#[macro_use] +mod helpers; + +#[path = "../src/bin/2023/day1.rs"] +mod day1; +// NEXT MOD + +day!(2023, 1, day1); +// NEXT DAY + +fn bench_2023(c: &mut criterion::Criterion) { + c.bench_function("2023", |b| { + b.iter(|| { + day_combined!(2023, 1, day1); + // NEXT DAY COMBINED + }) + }); +} +criterion::criterion_group!(benches_2023, bench_2023); + +criterion::criterion_main!( + benches_2023, + bench_2023day1, + // NEXT GROUP +); diff --git a/data/2023/1.txt b/data/2023/1.txt new file mode 100644 index 0000000..a67973d --- /dev/null +++ b/data/2023/1.txt @@ -0,0 +1,1000 @@ +14gxqgqsqqbxfpxnbccjc33eight +eight2sevenkl +mrjstg5onetwoeightgcczx8vgrgl +9246 +ninetwo2crrqk2grsctqxqbcrmrdsqbrz9eight +five6dlhx1 +29qhsdqqtgrk4 +mjgtrjnlttxjlsixsix5 +bgnnvfsnbpx29vsjrlmgmsqthreeqxvclkhlv +sevennine3gsmxncqlqvfktxrtcone +2mkzrqlmhsveight1sjtwo2 +rrrbvnrvnqfdh86 +94threeqrhkcpkeightfour +four83 +9ninehbsgkcthree1nineeightsix9 +57zfcgpf68 +hbonefourfour8lsnfgvf3 +seven79rqtqvjddc +two6six7eightqnmnppctxjrxbdxbdmbfkmv +9rdvkbxclk9fivecrxmtpzsxn8cmrzttlfour +nztfnthree2 +nxhjcqzlcxgdkmcfggc261gbt +xqfcdfdsrlhdktdjshllqgqshzmf7hpcdgdfcvntczdxxfqbvz +sbf43g +vsm922three7 +nthree1 +3eightjvtqcb1lkgkzhbgvl9eightfn +tfvv2zz5xmckbc1sevenfour7 +fivesix6two7cptgpfpd +3skfjrzbjpeightdkkkjq +68onefourxmznzlfivesixfqmfchn +12rzcscnkxsbc2ninetwo +jrmmvsdjvftgnrz33five +bhdxxmb36ninedmrlrstrmrbvz +1seventhreenbsth136kzrgdvvjp +7nrc6xpl +fourseven4nineone +8zxncrhffcmq9threeeight +5seveneight4three9 +8ghsxbzoneightg +qtwonesixtwosixvjmnhqbbx5 +sp1psqkctzqnldbdhqsmgsixfivepjnnvsxdldtwoseven +9ninethreefqqlztnrtgcbfourxdgltgft +zsix14sevenhqkgfh +nt3 +dhdsktwo9 +8cmjzrsmr +4bdspt8 +qvzgxjp7six +ninethreexqvzzqhjsthreefivetwo1 +kzhsgr5tpzhxeightpqkfj +twozclthmcx1phkcvgrlbj7fhmcph3eight +9lkctcvgxr2two8rxgkdbx +khfgllh7kchfq9xbnrqrseven +ninekqmvfour81seven +xsfpksix65eight +eightf24oneone +24581snlbjpfronenine +nine3eightjqshqxscvzvskspcmdzd49 +6mfqf5one +zrzzlchrfl167n1 +nsxqfspq9 +7mggsvthrnckcsctjsxlmxghqeightsix13 +sbpkxkmjkxcmg4 +eightonethreevqkjkxnnine2 +kntj2vkcnrkjonefnqddll6 +zlbnprltbkgmzpvtqmvzhpvhrb3ntrzhkrbvd6twoltkpsccvbk +6seven5196fivesix +vj8 +seven5fourthreeeight5 +lqzkbvdtxs3hbqr +7gmfzfcnrone66nqvkmthreekdhfkrhone +nsxftsvssone2fivefive1rcvlzltfdzcgsh +8five1eight +7ljfbvnrbghgkhstwo6vmnhxdteightfour +hdnxc4zjqrbr +5ghrjjbfshonek1sixrvnnkhpd5 +threetjxxlvqfvdcj852dkxlthree +xbpqlbrgcbkzvbjdt8 +cbzeightwo7npgjjxfzrvz66 +zktrxkjpchjxzmpq2 +five1lbdhrsix +5qldpfkqjkfjdzpfhf86 +vnbrnsskxphxv22 +4chnggbxmssnine3 +4k9one +2twoneh +6kgbvpsl5threecxf +562six6 +tsdvbzxpkqbkrpvht33hxhvmjnltwo3 +7fourone +ninesix2sixsix1fivenine +fourbqvbqftvzz88sjszkgxhrtlshkdjq +sfsrfsevenpgpmffthreezzsfb3 +8fivekvmzz4rlrscnxmx15 +jvteightwozhqsnvffxg3rsjmszc7fssnbhrtwo +fivenineqsvpgbkdxlp355nine +9jbfive +zsxzdcvsjln65 +nvcc52twonine83fq +gcnpqqfhq2 +jspfdkpxl4fourbstlcvdhxhjdgxvpzbvltwo6 +8sixsix +fourtwohsqhmnjmph7 +one3eighttwo +tshglpdmjbsgsoneplbjqcsrxseven8 +42sgr296mpkdz39 +bxsevenone25two +two8fivefour +three4cgjttdmfqonenine +eight5sixeightmxzzqmt795 +threebtnlmrrqgnine9fivezdzgldkxnbvhsvzqnine +one14tqvqgn1ninevkzhrqfqdjprzxb +cqqnine52cjmteightgbb +vhhkrrbhlp9dseight +fjzfmqv1bsvqbtpvvzcvqvxnlptk +five6three1zvgznsrvnpmnine +cfkxfmeight18hgkclhmcfcfsjzkztwothree +fivesevenonejmmrjvhznffive4jbrvdhlcpj +gbboneight47xfmqzt8 +sixmjnfmjtsszvc4sevennineonexc +kfsnggdldp33four +56hj2lqncdfghdbgdkzpkr +63five519bztrxx5 +3eight3six9xvdfhrcmsm +drcjrlst5ninefourxcm +4five3dmjbnbeightvxtbbvxdpfourjvj3 +lnmqnine855four17twoeightwolx +lnkffrtmv9t +mmhrvrpbvrcmpczvknkfourcqktxx73qbgd +khbrlcvdpxdkljvkhnfrvtpmbeightgzms2 +shbr9fzbvzhhqmnnine76 +x93 +3onec +v5xskfrg19five +ncmtbgdkfour7fiveeightfour4nine1 +3dtdjs38ggfljpdvv +fourthreevfpmztnzzcf96eight1 +onesjmdmmmcgnvhdnczfzznrvrggkgpcpcggqpkkkcfbq6qpsv +5nvhksixtwothree +d4qhmsljqhmcqlxln2dbd64 +zrshqtseven9zkpmzksqcsptfkkn +9pk +51jnqbzgnlhcglfour5three +8snxnxv3817 +tsvd4 +lzfxkxrcktjlvzbnsixfourthreenineeightone4 +lxdz9326threefouroneseven +6zkgmhktdnfive +zonekfbbcqcsdbkc4fivexpnhssdgbbnine +8zcdxcbhm7seven +1fldmtvgnine39eightdrmrtzkcthree7 +8sixxlztjhjkxtppmrtfour +threekvjx68twofiveqtzfg2fbhnhrdztv +6pgvzdbgjnlctwofourxzpc3xzdc +sixdxpnthgkfmddvqhrvsixsevenx4q +ch29onepqnine +sixlnh68 +1one5rqxz6nine7 +cone9 +fourseven3kddtmbjhnkz9kxhzspvtdngvsix +3sixnrjcxv1 +onemdts29zrbh +beightwo2eight816nnzfhptjhfqvqq +lfmxzp44cqkthree +gl4qsevengltwosix +2eight3qqkksrsevenxkndsxt +eightzxrflknj9jpbmt +knqjgjjjmkninezzfnbcdmqctwozskxsgd1655 +qpfdjsmsqfourfiver49f +vsix1xpglmcbdp +vgqjvzzcct7one674 +4csdttrsd58fivesixtwofive +bslfsjhrl8cszqrppqskthreenine +997foursixeighttftrnktp1 +3ndqmpzs6jkpcvjdltgbfgvlcn2 +lsxprcgkfivesix8eight9onenbdxqbl +seveneight3eight +eight7sevencvvshpgfg +8zg7two +5sixsixtwo +six7two +jjcxmsixhbtvfx2twoxs +9xtg +3onelvrpcvxk +ninetqzpbhxsspcfjlvsg3qlnbbqfxdqnine4one3 +xplhfgfour49 +jdrzrkkzdkgvhsvbm6bqfgpjbvhxlhtxhhpmmtmvqbgnmzpkm3 +hrjqkmvv1bzm2krs5 +vfztwonepdlcn96seven5 +1mpkqmccqqdsmhdgjjgrrtsbconehpfgfnjtxtqv5 +one9qn8threeeightnmqvfjkklg3 +5kgkst4ninegnqnjgmtdpfzspmkk +pmggrbfxghr53eight7mjlzgzv +4fourone +lbjfvxjzd7fivevllrtvfkmeight6 +xtl9 +ninevonevljrvx9 +sevensix7sixhbeightone +npzmcdtdqfpvonenine9rsktdrrnz9six +4six55 +eight646gdvfkjqsvnczbxtwo +5seven5jthree +cfourfhmxqjmseventhree2sgkxm18 +mfxnnjjxtjzlljgcnfpvb6cmknzb +4796 +kzxfnrqktwohmp9cclstwo +vgzgmc1zlsch +lvpnb1five216mbdxgvfkcg +3onezjnmv9fourj +two8vmpfmqmq6 +p8 +4oneeight45 +827eightsnvlrskzlbnineeightbtngkb +kdfxtjj2 +csthreesevennine7seven +hqqjrzkkkh84 +six42four +nine259five +8jngjtkdnine +3ph +8gccpsqfourtxtlbvmvb8n +oneonesix7jdkzfxkdvttwo26 +xkfsdgkjt34vq +98twosjrr5eight +foursixfive9 +17vmxlvqpqmvnfchhmxmdcpzgrsjl3nine +pmzscpthreevone3kdgqldjf48 +dzhoneightonevxtzqsqxxpgtgrdl73 +4threebbsttfhbdtwofivezsvspjp +jlstdnkjgdxszmpv2tgvpbdhdrkdjjvdbscv +4mqqxrsfrfhsbxprbxrgqseven +3rklddqfnczjfhjmkrgrkslxninesix +9jpcvnlvb3lzqzkvlnqsseven +8ngm64zxplgcdxzdzgfqmtworprmndddr +fivefzhdggmfslthreejmsrq8dxzdzcxsj1 +75six294xbzhjxd2five +56746 +jjxxqclf6eightfive7 +fiveeight9eight +npdgsll2twoxfzq +66fiveninerrbgrshthree9 +nine124nkcsltwoqdlvr +eight4vlsddsjxqthreep8xd84 +mqsbzgsszonexlhljdhdt9kjvdvbmqc +shpxspqrck441twoxjhgthz3fournjtxzgbs +2threegtqmddnine9two +rbdvrngvrjsllkrc542 +p6dckscjkhzfqvc +qblzhpspf4glsrbxm923six +4mfbjznone5svkgvsr47dvtbltlmns1eightwob +5sixsix1twofivexjn8 +5fivefournine4 +gzhzlbkzrlsix5seven3tm +eightpgqrhfqsix41slrs6three +five3dtfzfour +6813nine +3sevenrnhznczgb +mmcgrkjhbsevensevenvrhclthree2 +pfourthree9ninenine +9fbxvvtbzkttwoftv7 +mmthree94fbm +1vsblnklmm2zqmntkp +oneninefivenineone2threeeight +4sevenxzjfxbfdzgfgvjgjdscninetwo4 +64sixfrmtmjoneightt +gzzlqqjsevenone5 +1twoxpcqcvgmhbcm8thlrzmplqpkrbjrqr +jgjqqn291foursevenonefnrdhxt +3bvznvqd8oneeightzchdjvj +ntqtg1 +hsqkbfnxcbsixmvfhxrvxrvnineseven4 +bkztqhhbdzr1sevenonenine1 +v79zpdqfive +tqtwonesixlhhnvf77one1 +2twofour +eight89seven +7six6fmzlrttxstdrg +seventhreecbldkqd89threesevenpplfv +7hmhxpg +threepmvqfc5rktgjl4xvdzmhrninef +7qnlqhtrrk1sevenqfgpkdfc271seven +4gxrqspvg1 +zdgfscbzbdg8rvqseven +eightsevenfour5 +five8five +xprtcnxztmfgtwosnsix5six5 +zpjrhddxfzhdm7pzhxnzsp2six772 +43five92sixfivefour +6kjknjjrjkdfive5sixsevennjone4twonexr +11sevenhvsrb5fourhzxrmgfsl5six +2kbtkmsdfkdzmfplone +68onesevenone7one1 +one36eight +89srlblvkzrjone1 +7threekmzvhxpsdc1 +3648pmjmj4 +fivetwothree8eightonev7x +jlkvd1tgjvdqv48three5 +tvtwone1rhcbkfcj82eighttwofive63 +rkpvjgsfmhbvd7nckshnmzknine +8md7xh8bvsdmhjdxq +threejzrnnfczgzdmcchv5hv4eight +8lqnnnpmfourkndkf926 +651jfltzffxh +onehzk5foursix5 +three7sixfivefive5twonine +four3fiveonef57 +5seven5pbqmzzkqsp +none8five +6threefpqx9eightkhmrgqm4 +ndgmck187mjkxccsdhknine +2jtwomvxjnnpmcseven +bdfnkbhbbfvztpseven6kgknpxmxdfoureight8 +cxtwoskgklsqkdpfive8twohq +5seven67two8dlzmttpdh +cdkzhtk2fvmdtphsxk +threepqcgj8dkfgjp +56tgggrrgdnveightwolc +ninezsix1rnpponedpkqrpdthree +vmgtq3six9 +nhbjgxsixsrrftdt3fivedcdqqq +6fivevqxphgvrflbvljlone +ninexbjtwothree4 +heightwocjpppfive3vlcpc2bt +tbtxlftsnsnknine5q2 +fivemfqlxlpgbpjgnvpfthreefivejzcpkone2 +5dmzkpmpghsixthreenine4 +two9seventqzb578kmfrvlj +six855three +2kddfgninezgsonedptb +1cbbtg1kffourmjxbnvfgjfiveonemgbjtmd +5threec5nine +pvgd5sf7three1lnrfive +83mtfjsrln6 +khtglxc3 +qckdfjbz289nbhnthreehljqfklhmjvrgxt +5kmslxsixsix72 +jlcfmqh5nine +454fournine +jgbfzxdsfpcjpsdlhs5gbsnjxhsfivesix +scxsgsevenseven6fdkcpzm +cbznsevenddvdql431 +fivefourpj871 +xoneighttwo5css4 +sixsevenone49 +xpvktkbdzc6threenine7nine6cnxsdeight +6nlsg8zczsblcppjmbzlnthree3 +jlhzvzskseighttwo1twofivefournqzeight +smmsszqpv653sixsdp5onefour +8nhgxc +cbskddhjq1fourfourj +vqnjgcml5vvggqqlhvdtwonetg +4gdhf1bxrhlnslpnglcx7rhvgnhzjvstwo3 +8fourfive9fivenine4one9 +5xbggkdbkddmfknsxpv +9fivekkttcpntr +cvltwo4 +1four62 +9ninevc +nmfrttms6czdhrdchfkntonetwogc3 +8dfbqlpz9 +fivesixsix595nine4 +6mmpks71nine +ndhdkddjchhseventwo33fv8q +ninerbnhsxkninemdthft1seventwonvgdcgt +twosixbmthh3srhdtnljqlqsbxssnsix +seven22ninedplffive +xpsh1twoqmhkqqsjz +8vrxzhkq +5ninegr +five9nqcmxngktwothree62threethree +qffhltbnineseven9reight +threerqddxgmjnj2 +seveneightqxxgmrzxvhdnine2seventwomtkdmjbkfh +9vppxpsnpdfourdmtqtbm2hpgqlgr +seventhreeczjngnklxg3nsfqzqqeighthcggbk +fflnhnnzncdnh9twoqhx +fjpqseven5noneseven5nined +kdnhflninenine2eightfivemknllfgqspbcrjklx +jmgfqhchzmdfnpthhhcc291shhdqp +5bphvpcxvdf2five9nine6four +9gfpnzjkmlb76xreight9threeqvjxpssvrs +4hpsix6five1ptrdlkfmgr34 +1sixnkvfkvdfjqtwo36eightjnfz +bzstgfhrmmfourseven6xnfvonegzc +fivesix426vgzshhklnknbclnbbpm +k5threetrkghrbcn +13nine +1vlrvlxrsrznlpf +9tgzzddgr1b2 +6sevenrzvcqzsckkqbtsevensevenninehbmlxbzzlf +1991vkjhdp +9jkhnrjjv +6seven47sstqkbthreefour9bmkfbxrzp +seveneightnprhzf61725 +oneone7eight7cpll67 +8eight7one +23bthc337qxhmfbgsix1 +9r61vtgqklone +oneplh6 +four9kfmzbgxlhlxxjf +mhk95 +csdfsix71seventhreesevenfour +sqhrc39 +6three2 +four11sixtwofmvgjvseven1five +four4ninefourkmz2 +mqm5seven3five +sevennine63sixvtwo +81rrvgzzrkzmgsgffvgxlrfbmqxczhtl5tvj +vq8qmg7geight62 +1twoqmmfcseven4six734 +9ghstzndfnmzbtdscl +88twosix +8five5eightworh +ddqdflzbhr68mrdc9 +2threefdb77 +7nine4rbfknbtnsvljnqdtz47 +xrfdfcrtqssx79dvhzls68 +cvqjp6fxkdx9qvsjqptvs +hbzjllr1 +1985onezp2nine +6sixqk52lpftrt +zfqqj8 +c4rljszsspxnnvjl1two +78phbjhkmjltcrxqdblfthreeeightvndtwosksxsxccqz +453gnjntwosevensixfourtwo +2fpnkqlzvmlbbkfxmqgrgv3tbtrkmprx +ffive5f3two +2grzqfmnrld +twofiverd76566csz +eight4zftjjzrkx +onefour8nvrxkqzrfthree3hvzk +fmzqklgfh76lcpjxlvrmgfqpnine8 +nine9xjvvxdvksqrqlhqvrbjvx1 +vlfcpfvl8msxhnftleightwop +846ninethreetwo6two2 +4mjbcckzrhtwo +blsn3onesixfour8 +14two +five3fivesbhfour +onevpqdqds5eight +pcvcsnhv861oneeightfoursix6 +csix7vjllblmgjg +mmn4threesix5vxdsf +v1vx4fivefive4fivevjfjvkf +53tsbldc9skgcshbvxdd +1595bxscggsspvjnbxx37six +seven883 +35sixone4lbzcbgk +tlmvbhjnkknz3nineltztzpclxsixzjnbfvseventwo +rccrkvsvxjbchfive933 +5shkktwokfkkmrxzsssix +five93three +8six44snhpssteightwomjv +nine1nrrjrvjfml4dcklljns +pclkcskcp428199 +fivepjvbtstwojshbgxmdr24eightsix +6eight4 +mjjghhcqrttcjrzhjjrc2five +xkhxgsqjstsevenfour4 +3one5gvmhcbkkdd6 +v3nine9threepfphnkthree6three +ml8twoxnzgqjx1rxbpjnonezrp +one8dtxklgmlnbqhpxl4 +1foureight9fourkmp9 +6vzzdgtfourxtzglhxzvcs +rg4onejhpgsfgpdql +sqpeight488four7svb +63five +39khkbdllxv +bdnjhtcqrxrnnjflfrx5366ninesix +tworfrqzgl85twotwoeight5 +jxeightwo8ttdxhc6xqphg9ntmrtrmxfnjb9 +933rsixeightzbkqkb +1onesix4onefour6d +three6vxnhgxbdxxmdmmggmnxtwocrvftworpsdrrkx +5nineeightninezvf +5jfour +zftjzrfjz8 +8four5nine84mpcktbm +vgg6five5pr8 +3sixtwotwo7ppfsbfppbkmjtlktrx +sixnhcl6bxjxdmgt +pdqfvzgsps9eightj +sixfive87hjksxxbgz1prvfqnnsfmfive +tztgzrnineseventjqhxn3 +twoeight3zthree +nczc3two +jdklbdr4 +j93mnmsixt1 +2fivenine2two65xhcjfnddbqlbd +six48zsklgprrvklt319 +6seven1threephh2bldxvrlln +88threeone +hqktgxxtwonine2 +14fourtghmvcbbnkxkhrvncskgthqqfkgpbrln +threen7rnk5zgjfvtlcs +nine87two56 +859 +six8q7twohnrphb +93oneninethree4 +one7nbzmqdxmj5qfxzcmxfkx +3two2two96ninecnkbt9 +fvcqktlf8two +six4nine4fiveqjthree +91qgvlq6eight3twofive +79sevenfivetcmcsrvvlsl +6bnssix +threefoursix8eight2fivehpp +tlxmqclgdchq8 +threefourthreelbd15fiveknzhg +ktqk68czbjrbkrlnmg3 +oneonerptgcnqzt6fpthmjhgxc8 +rcbfpqhxgjfgfgjcm3 +bxbbqcvvlfivefiversxqpmcb87r7 +two1eight +96sevencktptc9fmnthrdthree +fivehkzxl9five +twosevengsblkmgfzqndznine2seven +two58rlnjdqninetwo +5fiveonesxhbkcjmctwosix +seventhree8952bpqccspldk +8fourpfcvrvc1one +bpbtcnzk27ninemltwo +five2tkqfivethree88ggmpg9 +seven6seventhreemfmnmmbsn +three61xrfghoned9eight +mcffvkprk1one +hvkxcdqcthreetqcr3threeseven +8nmbnhbdseven +bdzc8eight +bzp292one78rthree +ninexsixone71zdnqlcxrphnnbxsmpc +ninempgdsbbdr7 +8eight2367 +15113onelhgvmp8 +8f7gpjllpllptonecfhhpqvcr +ztjj6nine1xsltr4 +nine27gkkjnkcqzt +9gr28eightthblghdkf9lcs +sevenbbjnprlqh1tphfbhbgvlsix33fournine +3sevenfmccnzqxfsfnctfrfngtone +six9xcvlflj +9fqcz1 +one63one3kpnthgscdmtjprseven6 +tlrkvjcdx7txkzrvzcjcvvljfcljc +rfrsfive2ctdmdnqnpfzvvseven +1trdgtvl648frnstf +bxkqchjmphmbnjrkrxxcntpxjnine3sixnkffxsb +84sxd +397lfjmzbp +sixvqjthree2szblfstz +29six833 +bnfnnine8nvjjprkmfourfourfour1 +gb93b98cxblqxskm +3zmggzvlvscbkblhmj4zsevencxgjxsbsr +smf1 +zghrszzcvb5rtnhzktts4 +265qvrzllrctoneshgcbdsbeight +2eightbjvlsixmseveneight +tqfrgkqzbtxqcbxvjzgtp1four +pmrrnmtt1kcf8two +49bnp1tmcglrtpt +4three2ggmbzgqltsqzzjjn +six7frvkdsxdktwo +7cjsnbps7bgqzc +oneoneeight8xbfnnldvpdv +568 +6rhxfbn +nine5nine9fivekftqqgpttptrfstwonerm +three984 +eight99fourmflfdnxvbbmhqfgqkzhkffvmkjxjtngjb +fivefivetwo28zdjmpjccknine +5jjs5vpjzfznrngeight4 +five8one2xllhvb6six +threeninelnfkjrz14 +mhmqpq3hncgqgm43threefive +tjtcrbklrbzvnc4 +37twofourtwothreefour +htwone2threetwo3xtkgk72 +three9btgdgrpdvxkkb1gck1nine +qgnd4sevenone9one4 +lcstxnqmghgqzszkhnbf7threenine +five8four51ddl613 +3vslhppr +tworkcgshlckqjtxpkgcgbgppq6hdvshlntq35 +1eightfiveg5 +five7ztflnine4two +39two +tgone47pvb +37glxx23nhlmxvmvtwo2 +eightsix86twofour +46gznzktfqhlbsqz +171rldrjxcvbsfqmmzcdrnqhjphjqgktwo +6twob3xpfvfdxv79kqqcgljd +6three8hpjtvmvmjxkkmlvtwo +zdeightwomgvbfourfj6khtbsgttnsixeightstbnjmq6 +fhdcqdskf2 +mjssnpxchsclkhlh1threetwoxrbbxkcpkgsbxdxtxxbg +1jxzvllkb71vxxpkmqtvs +three74sixhcthreemgtbzsrh8 +sixtthfskgnine2three9seven52 +nhqzkththreezzsj8four +54fourtklcqcsltgvgqone +four7eightwoq +k3492scxsbbngtwofourtwo +two3ttwor +8snlnfbczd78sevenchzjdphrskjngfkseight +four1vxpvqk15ttcfkt +4twoqql +fhzj4lsvjg +7hstphfour4jsbcndd +7eight85qmjsixseven +1three6two +fivesevendxznmf9 +two54hkv6eight +tlkthdcfldvtzlnr7551 +168qtpcr +fourjlsmgtlvsevennine44hjcksrdfive9 +5cxtbmsn +2twolmtprmjhgndnkfive8qzrdfive +2vpstbjqlxgtpqkd +4dmcc35525one +486xgkdoneffvrleightnine +six1onefivetwo +b144lvmzmxfgntpjhzrk96 +gkgkgc7cmtghq6gbx5 +three87fiveeight33six +1hpkjqvz363vvzksonelfctrztjctthree +pfqdlvkrs9nfpmtnineone2three2five +48onetwovrnbz1two14 +nine5bgvpnjbltfiveonesixfive +nine4pqknine96spqdb37 +mfgcngxqxb41 +262sevensgfjjmdczrl +qzmthreetvjdxnine1gpjsmxtth5 +ninethreeplzkztkzlk1qhjvl4 +oneeightnine3 +onetk5 +fthkbqqfhrpkprhqmssix43xcgdzhtrf +twobhbtvtwo1three +ftbdrfnffzkllk59vc +6ncvrsm +7ftcmjbdmx +12fdnnnqvrrd3 +eight3fqpqlhfvbrqlhhvpdonedzlfive +fourktscmbltflone92fbcrpqhsevenhnpccrhb3 +qbtz5mdksqshdqxft96dvsix +tfpfour75dtgjjmzgjsgjbqdkpd +pxjvfivevhjbmqz4 +tknhlnldjm8five5bqbhzbsix +45zqht +3jrsvctdzpjjrbxznf25klxbnvhpxskthree +foursevenskzzthntbfivefive5 +eight84jtllflx2five8mqjnnl +5xxkcbgx6952qpzgpmczsc +five3mpqdccdmone +kninezsmvpjfhdeightbcnctnf8twosixone +34lpqxkcfjvsixshpnsixgrm9 +glhtgtsq4threetwo3 +eightjbtpnhvhxk46sevencfklxxvdvveightldqqtdtk +fsdfhthreefivesixrkdrgk1thjlfflx +ninekxr6djghngtqninefivethree +3qszkcdvcdl +9sevenxzcskrpgfiveninevcdmkpqqpp222 +jmgt6vftshlq1 +4mnmtbvdznmpmpkrp +94nine972 +rzthreebsjvthreenxqm2 +dxhrstvj344seven +1eightfivedtsstwojbxpnhjnzrgx9three +jlkt3 +fivethree7rfour1fournine +rzggmhlvfivesxzfour363 +4npxrvmxmmc7qjbcrhzsix5lbvkjpp3 +eight7ninefivernpv4cddqhtvkb5 +5threesevensixonesjvxjp3 +5tppjjgj4five +boneightthree92nine5tjppmvhtrfive +threettgpkqcvjzdbjgzk9four +6nzllfrrqkbgseven4nkgdddzbnhr +czjbvrqkone3 +msffqxbxc4294 +one83dxstl7 +32ghhrdt5 +eightsix27two851 +1pmkltwozrx295 +j5982 +81pspmvbbjninetxvpg +six4pprdn4twozpqndgdninefour +3hfthcgqq8682fivefcrfxxgd +nineqtxeighttnine6dttrznddl +htktrcx6gqv5 +txsixsnls1 +52eight +76fivefour9 +eight8tjtc +four3onejlqvgl11436 +dlpdv36 +7foursvdjchltr7qjsj +pknqzgvv3qsltsixfoursevenzggprjvz +3eightfive8one2two +z2eightwokcx +2sixnlhfbfsfeightseven +884qmtqcdcrd4 +keightnine9lpmspq7ninefour +43eight4five7 +twofourfourfourtjfmflt7hcxfpf12 +sevensjpbqjfnqtgcjtktfjhrdv5cr +6ztdzvcsqm +86xsdx +eighthmfgbvsixxcd35zfblslpthree +seven8twoeightpnzrsqlcv +fivezmbqpxhfnnmvbsv61seven63 +5vvddrt1onemvmdsvvfive +7sixpfblcglgj51 +s29 +qtdbb4oneone1onethreesevenseven +drj7six7 +6cfhssixnnjgcxgnmssevenmbfzxps +xbqdclktfrmlq5eight294zvtqhszfmtzd +8rnrcpphkrmfnc +seven77 +9gntctbb +tjgvxtbcn55mcjhmkgzkb +fiveseven9dfllnqdntjonemdztmclc3five1 +83zxfive +87tjnbrxnhzpnthxpnxgczmlghjppfgghzsixfour +6rfivetwonerhn +3cnzlm9eightlqgtjppxj +onefrttlfjthreefive3eight7brmcdrzdz +threeczbzscthreefive551 +2433sxdfjzshrfdpgseight +92gfsjbjdbd9bhsqjpx3nkdpjxs +71foursevenone +6ninedlf6ldnxdzhdtwoseven +fivegcpj6 +xssdl7 +3kcnqqhc9 +sfsrtwosrpjlhbcng6 +mvgeightwotbnzgrrc2tz22bpv1eightfour +94msix2 +tdzkqnbdrmrxfpm7sevenfivekqmhqldjfour2six +sixthree9three +1953seventhreenv5 +2onemhgmxdktf +5fiveoneseven8 +frfvnqxtmthreeeight4 +rphdqh24eightcpqxfjqqrchbtwo7 +76fivebjmcnfrnvpfour +8nine6mrxvppgvjsevenlhtrtnsxmzdnkhhjfcnfd6 +hfmjnine8 +one3rvbjqtfivecc +five6fbfkpdvvpfjq3kdbvhtrkvgqz +two2sevennined7 +five8fourseven398 +sixqccsqhgvhd3k1five +4fgthreesix +4xqgqfxltzx28jrfpqdmbtwo +three35twozhgkpltmvbfsdzkfpbrkq +zxcdrkhd8onepcmtkfmtkrphbhcfivetqhxrnttwo6 +six36rsvpjcj +9fiveqqdklbkonejpvxxteighthvthdsb +six32 +five83rthcrgdjqxsevenfive3 +ninerdrthxkhnz7hlgllpkgjc +jmzsq3two +seven9kmcmbvztgsseven7foursixfourseven +xpgtcr5hxgjgdxrz +rvgdt1b3sggthcldlsevenseventhree +seveneight5fbljmnfsdqc7sph5 +onetwo1nine8jpgthree9 +6ninekfqhgrtplninefive8 +fxsmdhnjgx3ngqlsjtjnq4vqcrmgfqcnffnvdgt5tmddtbhx +z49 +5eightone +6fivehkv8xtgthreeninesix +hshtfdbf82 +bgvonesevenrdtbhsl6zqxn13 +hnlgrrsmhskmxbmxnineseven55 +kpeightwothreezmdvm35onefiveseven +threefourskjcsmhjr32 +154nine8nineone9 +sixtwo77nfgncfzhbcbthree +dnxddftf7qxnxt +six2qlkmkgsfgdnch35hfqpcbvk +145 +xtqpx8nlzqhmbfpjcqqz9sevenone +kqspr8gbqfsvnttcfnfhjdncteightj4eight +bhrmk5fxdtbqbrzv +eight2prrttwo3five7nine +ninefivenrldsh1smcpzvdgmtzhbone +42dplrfkksn +psixtwoz5 +nvxmgsevennine95eight5 +five2onebxjtkkkzddcxfbpg +87ninebcsmzqjqhrfivevd6 +1eightclgrldksdkzt7 +136tgxrm +smzcxqsspl2hc6eightsixfour4 +51lpvxvzvjpdt72 +5rflgvvkrqlsninefivefoursevenseven +5eightssfq +qrvlvn46threegvcsqnpbbq28mvtvpsmfch +sevensevenfrk7threensxmfn +36fiveeightsixseventhreefour9 +lvxfour4three4q +sixlnrbbcvzdztwo3tj +eightclvcgtcrpmbstpeightmnine7 +2five4five6sevenvhmhk3nine +rjone4btcbrsix +621fiveoneightpt +hlv815fourtfvkr6 +two4657 +one1zninertmjxntmkdgrdsixthree +7one83nqxqdppcsxmlrcdone5 +dlctxttzvz6fiveseventwo96km +8xfkfkbp +79 +eight1three +11rrnrm4vfqjfkmfleights +9xglzqljbqhlseven +8lll2btggdnfsjteight +ddtwonekgrhnsffd8rdlqjmzfv599 +two2sixhdvgjz7three +7flfpmnrl1mhcgzblfourbsvftjkgbg +5sevenzstvcgdvk59nine1vn3 +kpkdqrp3two62six +two2nmpzfour8 +b2fivenine67 +ffgf1pbztdtwo47nzdxrcz +8two4s +tztwone5three +3lzbzqkgkh3four +18twonezps +fivefour4rjnsevenslkqltcdpznmfprnbzbztfvnseven +hmhlkcg6zp +3zcrdv16four +hnnlsknrjk4one9onezcfrx2cddnrbtq +4xbkl +6jdkxcvmx +4four1hb5tgfrntttjszgdhdq +vttlslpjtwo7fourqfzpbrninepr +sevennine5f +bcphcjvp7three +8q9621eight +88tth3 +7gddrxzpsix9jxstksdpkseven +seven3zc72np53eight +txxrlgqm2859 +1sixsevenjpqp +five24seven +6fqjcmngvthreeplxxtrklleight +eightsfpxsix439two4two +2sevennineone +ninexh8four9pdzjpnx +fourninecfzsrmonelcpdnsmhn5nvzp +onecpvhfvxsmnffcxph4 +hbljxvthree5twokxpbbmpnmhtmzbqmnlpnine +threefddbhtseven9qsplgqjkgstwoeightbqchst9 +two5six12 +ninebp962 +1two2eightsixoneightt +nineone1oneninethree9 +sevenone1 +fivegone4three2threefour +plbvtpgvdtwothree1kcnvxndf5 +svkfoureight294 +5nineonenhxfl2prgv7xj +9kjzjtdmcsninesevensmdbsxh +32bbcbggpsdvnjlnm5 +hllsdcxhtqhfkzsixgjb1cnjxzghksllfour +sixkqjkzfxnx6 +4fpmfour4three8 +gzbgcvf523onefivepqsqkqone +8one83 +sixbrcsix8fdhzvxcvchvlhx7ddpbltgxq +4sixhfrdpshdsixlvptxfjcplscxzg8 +fivebrxjceightone7 +twojmbxonefivefourmsqbnzxsgxbbh2 +five5lrzrsv17 +rtsgveightljjrkhskhqkseven6seven1 +74lcrchfoursevensix +49tlnbghzm1 +36nineeight2 +fivecccctcftfourfivetwo41 +foursevenfourmlrcjglthjd9 +94ninetwosixvbqslbxlone +qjjk76 +3six35onesix52 +612dfpgjlgfourfive3fourdmrn +9one2kctccfct +vbsoneightscfiverrvmsrxjcnbvpeight2onekkqhsjtx +742fiveeightnvjjpx4eight +139sixskbgfc2sevennmlsll +2nineztlb6pxgqtreighteight2 +six58bjjhsrxgrheight9 +nrmncthgr4bggpj +1pgjpxjdbhj +four5tjqsv47ninetmpjmmpcgftjmqq +threepnxphfourplcrpjfngjsgdninepv6fzghjjmrvn +756onejrtbpl3 +sixglcb8 +jqcfpvq46xmffour6 +sevenfbhqztmn96eight +2fjlcxsix8d +eight9fourvjjjpninepndvffivenine +mctmpckkjfqmdhgcdng5sfk6bgbg +onethreesevenrdgcqsldlv8jddcfncninetwo +gmkkbtndjlnzhqfeight6sevenggjrlqkzqv7ngtkfdpjr +4tjpqcjjvxndnhrfdllddptwo +lzjzfshq71ndzmpf6ninesixxjgrvqtrp +sevenhxtmvftb38937 +gxnrvjvclckvfkksslzjgf6kvqgpjbtwo +one9sg7jsvgx28threevsmpxtlrc +five4vvvrrmfj +1hkzflszztc45nine29 +36qbhjdxjr +glfmnmdqlfgxrzfsc2vcxmxcvjkrnltjpdsixgsrpgjnrthree7 +jnbgtjcnbvsf7hhmb +three9eightspggt +4f77sevenkrsvzkrlr +ztlrbheightseven6rcsflgpxnvfkrntbsevensbxjgvsb5 +six7nfcsksevenmkxone +zoneightnine3eight5cdgzqfq66one +8threefourkkkhvc68four +fourthreer9eight +dxzxrjptfmttnppfskctvbngmf268eight2 +2onethree +rtwone3seventwo72 +eightninegmfct96seven +4rcjltsng7threebxcsneight +nine54pghqbgrqjgzmjrgeightrzlbghr +nvggfgkzvknfiveeightsixthree43 +4fourjpzglr +83sevenbn9seven9 +mvgxgqvpbgmrcvdsn34 +sfjlninejbckkxlf8seven +three72threebsgtrtb1tmgjbngqxm +jqlx44 +1threexdftqfjcvl +nnkjmmlqvdseveneightkqlmmzzrpfiveonefour8 +9nqjzjjhhps9twonex +lzqxtpvztwo6 +47fiveeight8gnhcgldm2tlpsxfpsb +5one316four +9lzvbtlkzdgzcxrbtlthhqbdvklgkz7nine1 +threehjxknjnthreeseven2one7 +threeninehjbslk13 +sixeightone6pvdkkbvseven3 +gnlszqcmg8twotwo6 +gxttbccg2khzzpkdtonezqsteight3six +vtfjnxjjkmzppsjx9twofour +twoplbfnmkgql5fpfpzndddt +2threeeightjgkfivevcjlmc4onetl +2bzngbghgkdhhgqpgqkonesix1 +2fivenine22 +lhpxstx1mhgpndxlnk +one7ninetwo2fivethree +seven2sevenonenine9 +onezgpeight81ninekzgqsmmtrpqz +681qchvmrdldjs +nzlqbsvteight11nnnbhkdbvp8 +sevenxgqxtjdjpq3 +8ztonetwoeight +9xkmjfourfz +83four6 +m69 +two1blfseven1 +jdmkrkzkjjsdkkdone5 +7six3 +3one27ninethreeninesevenqzfkst +6nineseven9eight3 +one8zfrvtwoshlgvbl5ljrftn +one1165bjcpkpsjfxlnmz6 +72eightwoh +seven1one94eightsqzhnrfbx8z +sixeight2frplhhsxn46two +7gppcfcdl8 +nine94eightkjxpmzvq +nvf8sjqrncflgpdbone3 +68fourlnc +two5ppgttnk +nine28sixzxnhjr +7kdg38 +twol4qmspdsixfiveskjsbrfsxxjpkqdtsmkgpbc +five5nzlcdc45clclzrrkjthreeoneoneightsd +cvmxgrvfddx3rdthreefdqhxlzzb6 +sevenhzxklrz1threebzvgssix8fstqhzn +tfv866fivetlfive +knmzhbvhzfvrbkvsmnl7sixseven +zmbq9 +vqxqnzrpqvtdtmgndhs7eightnqpxcntfmjr +4vzpsdreight337hgvq +jone4ccn8 +nftdkmtmcz4 +nlnineeightmndkqz8nineonenrqm +nrhdxfsqvxcbcghf35eightthreeseven5 diff --git a/src/bin/2023/day1.rs b/src/bin/2023/day1.rs new file mode 100644 index 0000000..af98533 --- /dev/null +++ b/src/bin/2023/day1.rs @@ -0,0 +1,73 @@ +#![allow(dead_code)] +#![allow(unused_variables)] + +use advent_of_code::prelude::*; + +const NUMBERS: [&str; 10] = [ + "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", + "nine", +]; + +pub fn parse(fh: File) -> Result> { + Ok(parse::lines(fh)) +} + +pub fn part1(lines: impl Iterator) -> Result { + let mut total = 0; + for line in lines { + let first = line.chars().find(char::is_ascii_digit).unwrap(); + let last = line.chars().rev().find(char::is_ascii_digit).unwrap(); + let val: i64 = format!("{}{}", first, last).parse().unwrap(); + total += val; + } + Ok(total) +} + +pub fn part2(lines: impl Iterator) -> Result { + let mut total = 0; + for line in lines { + let mut first = 0; + let mut last = 0; + 'c: for idx in 0..line.len() { + let c = line.chars().nth(idx).unwrap(); + if char::is_numeric(c) { + first = i64::from(u32::from(c) - u32::from('0')); + break 'c; + } + for (i, n) in NUMBERS.iter().enumerate() { + if line[idx..].starts_with(n) { + first = i64::try_from(i).unwrap(); + break 'c; + } + } + } + 'c: for idx in (0..line.len()).rev() { + let c = line.chars().nth(idx).unwrap(); + if char::is_numeric(c) { + last = i64::from(u32::from(c) - u32::from('0')); + break 'c; + } + for (i, n) in NUMBERS.iter().enumerate() { + if line[..=idx].ends_with(n) { + last = i64::try_from(i).unwrap(); + break 'c; + } + } + } + let val: i64 = format!("{}{}", first, last).parse().unwrap(); + total += val; + } + Ok(total) +} + +#[test] +fn test() { + assert_eq!( + part1(parse(parse::data(2023, 1).unwrap()).unwrap()).unwrap(), + 54927 + ); + assert_eq!( + part2(parse(parse::data(2023, 1).unwrap()).unwrap()).unwrap(), + 54581 + ); +} diff --git a/src/bin/2023/main.rs b/src/bin/2023/main.rs new file mode 100644 index 0000000..01e0de3 --- /dev/null +++ b/src/bin/2023/main.rs @@ -0,0 +1,26 @@ +#![allow(clippy::cognitive_complexity)] +#![allow(clippy::missing_const_for_fn)] +#![allow(clippy::similar_names)] +#![allow(clippy::struct_excessive_bools)] +#![allow(clippy::too_many_arguments)] +#![allow(clippy::too_many_lines)] +#![allow(clippy::type_complexity)] +#![allow(clippy::collapsible_else_if)] +#![allow(clippy::collapsible_if)] +#![allow(clippy::comparison_chain)] + +use advent_of_code::prelude::*; + +mod day1; +// NEXT MOD + +#[paw::main] +fn main(opt: Opt) -> Result<()> { + #[allow(clippy::match_single_binding)] + match opt.day { + 1 => advent_of_code::day!(2023, opt.day, opt.puzzle, day1), + // NEXT PART + _ => panic!("unknown day {}", opt.day), + } + Ok(()) +} -- cgit v1.2.3-54-g00ecf