summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2023-12-01 00:42:45 -0500
committerJesse Luehrs <doy@tozt.net>2023-12-01 00:42:45 -0500
commit5eba5d2b339075f51b7255de72d32c8a740614e3 (patch)
treee8e8dba235b0a6c4a2bf80aee4ee7ced108a8475
parent18202694cfc4c715de7dab36639373f9deb1abe3 (diff)
downloadadvent-of-code-5eba5d2b339075f51b7255de72d32c8a740614e3.tar.gz
advent-of-code-5eba5d2b339075f51b7255de72d32c8a740614e3.zip
day 1
-rw-r--r--Cargo.toml4
-rw-r--r--benches/2023.rs25
-rw-r--r--data/2023/1.txt1000
-rw-r--r--src/bin/2023/day1.rs73
-rw-r--r--src/bin/2023/main.rs26
5 files changed, 1128 insertions, 0 deletions
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<impl Iterator<Item = String>> {
+ Ok(parse::lines(fh))
+}
+
+pub fn part1(lines: impl Iterator<Item = String>) -> Result<i64> {
+ 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<Item = String>) -> Result<i64> {
+ 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(())
+}