commit 6e60a3f2e61000d7efc275d6ad61ef6b3c7a5ec7 Author: Christian Date: Sun Dec 3 21:20:45 2023 +0100 Setup + Days 1, 2, 3 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +/target diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..493e2d2 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,61 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aho-corasick" +version = "1.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0" +dependencies = [ + "memchr", +] + +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + +[[package]] +name = "aoc-2023" +version = "0.1.0" +dependencies = [ + "anyhow", + "regex", +] + +[[package]] +name = "memchr" +version = "2.6.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167" + +[[package]] +name = "regex" +version = "1.10.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343" +dependencies = [ + "aho-corasick", + "memchr", + "regex-automata", + "regex-syntax", +] + +[[package]] +name = "regex-automata" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.8.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f" diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..0c835e1 --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "aoc-2023" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +anyhow = "1.0.75" +regex = "1.10.2" diff --git a/data/01.in b/data/01.in new file mode 100644 index 0000000..a528eeb --- /dev/null +++ b/data/01.in @@ -0,0 +1,1000 @@ +2qlljdqcbeight +eight47srvbfive +slconeightfoureight557m38 +xvqeightwosixnine61eightsn2tdczfhx +msixonexch1twokjbdlhchqk1 +112ninejlhhjmjzkzgdsix +6six7jr +878eightgvsqvzfthree +2jxzhlkhdktxfjjleightdfpgfxjv +mxbzgzg5three +33fivehcxcxhsqhtwo +bhfive4ths1811seven +eightfxkpsqjlpjgjcp12twoxkhllqzq7 +sixkvvhvgtcnjhjtmxnr7seven8 +csdeightwobtsxflml4eightbxbzmvhq2four +twoplpbhq3mkkhb2 +1sevenrsgrl76rqtsqqzkncrgznine +6twolnlq +nine567 +qjvhrrtdqgsp8pxrlslvtwothree9three3 +ninekxpninedjx7phcncpzq +onegmzclftbt8sixmkfnqpeight +one53foureightzpvseven9 +315foursixonefcvttgrknrgf1 +ldjx34four +fournr8ltltldqsmcd5threetwothree +seven6mffiverqgsxdxjgg6 +xzsix9vnrgczsrhcnine +2sevensevenone4eight3 +48jlqz +1sevenmpbvtgfivefive +8six1 +4plvb +mxf2ninemkrvpseven4ms +3twojhgqlfx64two3five +8six7two +msnsone25 +3dpvknhqnkpvsgrpfpfpfive2hv +4sevenrnrlndhlmmone +blzrjrgq2cmrcr2sthree5ghvlrrlxngrk +726rspnj1six6 +kmlxhrff98 +hnpcczfdc6hr2tworvqqkkzqld +53oneeighttwofourthree +mnbrf3fourfpbrdgltf2xbmbmrbjltdxbklsixoneightq +rzlj22gppksvxtkmd +1jdxsbn +tg8 +79mfzzhctvqgk +fivethreezj45d752 +hsbdxl4 +fournffclthree9fourseventhree +rnlccx4 +gtm8kqfourfsix +2sevenfivesevenvqshqjdvhz +zljs5twofour2three71three +61lppssjcmhchkdhbnlqznrbxkprkhrjlvgmk +xxnxtff9eightzzhpfgscgxrbkdgdvfivejgn +five2twonine745four +nqjbtrc5 +one8xgcshpjfknb57 +sixninevtmvnxmq1fivexsjltpxgseven +ssfzbthree8twoneqqn +2235nine +eightsixone4gf7fourckdfdvcxn +seven9zmpb +cpfthree87onellxlgjjhgshr +64threevpmszkxs +7rmxlsdqnvvmkzvjr4jjmgjrfivesixfour +4tfgdr5two1mtjbmthld5 +741two +qtfive3one +kctwo4ptmgnbr8bpjrckscfour +6four6sevensixfivetpfmjvvfdt +1fivethree4two5threetmm +ptpxxkxq72sevengbn9six2 +vcfhscnfplfive7seven5qnsdcgdmqzninekmhthklf +nine9znfmxkfnrqdgjh6kmninethree8 +4eight3 +eighttwo6threefourpqzbqfourtwonxksmbqt +638fourseven21btmxnq3 +mnljhhgmcqnz4four +vhhgjdjkcqseven59 +29cq4tvl8 +threeonethreefive85eighteighteightwolb +kdhpb381four +4one8twoxmvzfjzbqoneightcx +ptkmzzzzfcnjfctlkpdtwotwo4 +gdkzeightjbmgffzqrseight862mstxshpg +53hzzqone +slpvjsbvjkv3 +6eightnine2 +qcrq5one23 +3hlzkglq +18pjqmlfkgsqstmnine +6twotwofqblrone +qkhdk45 +sixdqkgpzrppg6dk5lgsqtwo +6four9fourpppplfcxxsevenfsqvr +hmfq83four6eightfccnjqxxh +jeight5twothreesevenqgcctwo5 +39gzc75one2ncm +3zrqbgqf5hs5five2 +seventwo4fzbbdndzcvdgxbchthreerchfvcbndncsv +1813n7rqnzbhqmkqonemqkjcmfz +5eightsevenlxxshdkh +pcb7twoninesix6five +eightfourjzdmcmrmjtqfdkhlmfcmnnsevenjtzch2 +threeeightsixdjzrssevengnine8 +zsknqnvqsx6cfqdfivezkmmgrtc +4lhkblmrpgonethree8six48five +s7gnfcfour7sspnfoureight +sixtwotwosjbskxfbjnkt3three57 +ninekhhx9gp +xksttksixone9one9 +eightsevenqdkqrkcsh8gtseven +eight45 +qqtrfqlcdqfivevcgnzjvbl1threesngjgljkq4ctbzlsdfspc +onefoureight51rrxlffourthreekbfjmkzzvn +fivexndcxfivesixthree6gdsvsxmhq +sprbznpqhjqvh749four +hcbsdlnckk6lmhmngdrfmsbtddtxmeight +frfxfivesvprl5eightthreefourjbxtkrg +seven8two +tvndjhqx7foureightxkc3f +rfbeightwortqzmsixxcrjponerznbhx3113 +jmrdxonelvlpz9three2qrklvhrbdfnpqqdhnmjlsv +2qpbcdsqtdvxmq4gqxkdptbvc +54656gl3 +gnmkdm7sevenseven3four7fhrhppmtkpzvtlfqoneighth +mvggxccshsix8one +211 +sixseven299 +pdjeight3sixqjndl +4nvjkpqbv8seventwosevenfxhrm +9rrkjff44fivethreervt +1qqvbsfghdbttrxbpvjjbsnsevenfivetthree +fhhksevenfour215 +66vqnbtonefour2qpd +spone1ninendxnqxfqvh +96hfphsnpmbx6rv +ninesevensixsix5g +7jttgkv +3gfsnineqbbfsrgpgtcjone +qtwoneeight7oneone1four +837threepzkxqfgdrml +fivejmhlvn1sevencrccgdhqzkbjt1 +nine9seven5897threehmccnbldr +four24four62hrkhpf +9drdtfcvcxll28tkrjmtwo +six9kkkrhtwo +1six7eightfivenine +ninefive78twonesz +eight95 +6fivefour1fivekvhqfxrc +16threefourfivesix +7zskvk9vv47pr7bpzz +pmptwo8sixqsqninensxqlrp +onehkfs9twochdn +6five8fivefivefive89 +sixonefourrpxrrvlxfour4ggcpnseight +seveneightblltkljcthreeone2nine +7xmlglrghhcchqhmknzn27 +4cphpdpdhxsthreetwoxgzzxvkthreethree +9kdgqtwo +5fourtmstdtone2five +gtgzkxbngmsixsone2pzrhfqfour8four +3hltczsix9kvqldhoneqrtmtmghrc +one5jdvgrlphbhone +vbns2fourqnbvfrnpr +8eightvddvoneqs +thngklbdfourpjxkhfivesevenkjbtnine3vsshx +kmbgxvpmfivevngxcr16eight +9xvvcjzcrh +9vvgrr1 +three79kszslzdzlbjmd +tcst4sixfour +293four +seven9qhjpbneight29znbctmpcqxkp8 +oneninethree72bkjksztwogt +five2sixn9kptcmqdtwo +pkqeightwo1plzbdmzdvt9 +jxxqhcxlnkm4nvbgmj +1psqeightnine87589 +threefive5jfrptftvknzsevenqtzfpmkrj +fivethree5 +sixfdjjjq93vtvcsdrvpc +srvvrvbjccnine76hlfdqksheightworkk +onefoursixfive3two9vvnbmqbrncpnztqcgjmf +3sevenqtfjxcbgeightzccnfl +llnkpfsqk2 +brlgeight2xblbvdlonejzqtlj +five9ktrljseven9pzfkqsrf6five +onepmbltmkkfr2 +sppgk1threevzlxftfklbvkvdpsonebtbbjeightn +threeseven9 +threenine1 +clpfmf3fourtwofiveeightkrn +ninexhcdsbhqrrl52lmsfour +zvthreeonetseven25four2 +eight2csevenncfzgkbdxb3hkrhjlsdlxmlfnv8 +7xzlp +4twomsthree22324 +9gzf3vfour4 +7eightvdr +7sknmjmdppfkl9 +5fnine7mjpdlrseven5xlghtk +1four6sevensixeight4lnvz +three1fivefive39 +xkrxtzdhvf8kxscmqh +9ppk4 +84threepmqzvgfhjnmbxkfgjlgnpncdf +jlf7712 +qzvxgxv4gjqprxdsc26sixsixfsbfts +22ninehjq +5xn6 +5pgzztrtgh +5kpdthjkfour +7six199fivefivelvmzsxq +5sixfour73fzmhsgxpbrqmbprhdq6gvpp +26two3 +fnoneightdxznmf46 +2threethreemskfpdsgsixseven3 +d58fivecfdfivejgkknbcxfour +9qsmvtvk4gkdmlfz1 +pzdgjbcktk5bfctqphc +fivemtwo382nqrbgqn8 +nine96bcpxxcdbnrfivekhcqnx7six +six9eight2nine7rqjbvd +6xnkllrlphfivetwo73three +6twoninenineglgpvfheightfive +fivelxhxjqkmlhrzkz6nzdrlrfthv +vbkxjhxsf56five +7676one +22sixtsvzfsl1mqzsczrflnine7 +6one1893dh +jtlvfpxnv134 +2cdnxjvzpzqhthreeninerggxgxctthnzrzrghqv7vlf +8grlzfplzdpthree59threefourrlhjcsbqmz +lvxztxseven5pksrqcq82 +ninedgkm97v +9sixeight1hmqhzvzgnzgrrbmfm +2three5ninefqx +45svbccvbdfstzfqmfiveeight5k4 +ntwone9zctzkkpbdjthreetwovgf +8kpshzspdls8nineeighteightgqzgr +fivetchvsrqk1twosevenftz9six5 +72mhgqtnpksbcvfcfivehfnhfourthreesix +694tmgkbvhf9one +2vhctqvtmqlrpvxjfive55 +onefscmpn6sixoneighttt +6fbcpl13five +jztwonesix42n9gfxnone34 +nineoneftmtwofour4eight +8ndt +thfivedsevenxqlqxpffsv22two +5fiveknzd1eight +fivefivesqggqcctfdhxdfzrtn9 +sevenninecmxhtjshqm29922nine +79lnvct6 +vtqrpdjqtbbzpjgv4eightkcpggmq37sdhbnsnkp2 +7874three +ml9tpngfshkx247 +four2vqzjeight9kvlmvkm +one9pczrqb7jnxvssnqngdktbcjbhhsx +5plrkfiveseven4 +threespprdsklbszqxkkrcseven2 +one2ncjrsrq6fgmhxpvmvnine4 +hsevenmnjknphqkvseven2nineeight +rsqt9six +kvgljgskt1shjtthree +ninejtbdntj75bmxndbqvbsixrcsxbcdkbsthree +8ninepzglkbrbl54fivefour6 +seven8five84sjchnqcjfzninehkqfxjvtrfive +8eightrfournine5 +vkmfbd8rzjtnvfour3jsmjpsjgxnpgqb7dzcmtdg +fivedzbgnrseven2gsvhvtvffs +s2 +cvcjntbhcfivethree9oneightz +7eighttwofivethreekkrhqnrseven +ninefivekxjp5 +5twofive4onenine +8khbqlcsvhsevenkzp54seveneight +sixone7nine +one2gzxn88 +zjzsvdnmn77 +sjnzcsbbg66ctl1ninenine7nine +three3htlrblqvfgbqzldhvvhzvshfour +12drgqcqtq5 +5fourlpsixonedtzkpt95xxntdcrx +73ninefiveninemrcgl +7seven6fivetwo7six +28xtpfn1 +six7rt +c8four +bql2eightsevenfoursix2gjcncmjscdfive +tqxgzjfg4fourbxgsrhpfzsevenhljrjbqgrskcgprmqzkpds8 +4dsjds +7jskqgjtqzfhllzjbfnninenine9cgmhkllmdj +mgmsbk85fiverzxtwold +5ncgnhqh6bmlvtg1smcb6xhkvh +f23snine +3strppjqhdtmg9gljptpjxmx +fourfcpjsfiveckmzgt482nine +3hrf1oneeight4dtxftngxvsixeightwokqc +nine2dxdmlj +fvqsltrpsixsixf2 +711nine4741 +three67rthree9 +seven82nine8577 +two5four7foursixtwo19 +5twothree7cmkj +32mkgcpnh +twonine4kzrpbtcbh +eight8fourmjlpmglh6 +27eightpj7xkp +dhgvjqqsqfourpvtnbcrxdznineggm2hmtrl86 +2schnfh +64htzghlseven6 +64eight7eightczzmmpjxhz +1rjgpkrr2sfzvjrsthree67 +7onenine9eightfoursix5rzmh +3btzf5fivevzfqgmrdpvklsptlfp3 +ffiveeight9 +fourpdmxflnx7dxx1bzgmnht +ncmj6seven +2npbfiveqlpfzdp +onesevenngnfrv7 +clqgrbzm81four5mrrkbbmlhb +828 +7q68one +sevenvlsggsc7khvshfpql +r1lxgpgx2six +9crtt5ll +25nine +ftwonefiveonethreetqfbtppmpd5lzskxt4 +2txtddtg782 +xxtfhkcgtwothreenine8sixseven +68ctd +3n3fivefour9ninefive7 +qdoneightseventwosixfivetwo8gfivenrfhvvz +rnfcxlhdktjnxpthreethree8 +8schm +3zhcfive2 +qptwonemnvb5 +onethreefxz9 +rrsbvsfour5 +9nkxddqqlqzkdhbxc35krntjnpxrfour +twop1nineonefourninefive +pvgcsqxvrcrtsgtrsmrcsix2seven +237eightbszvlrjteight6 +45eight +mltnhsd88rdldqqmtmd2sixthree6 +3zchm2mzsmdmdqjs7one1mmpnlg +51bbtpfdjlgznfive9 +onerkkczm17775seven +four63one38fivergcgtqrleight +6ggpxmvc +12six43nrcdxtdsfive5 +knctwone363 +fiveeight3oneeighttwo5 +31fourndmngleight927two +2km2oneonenine +six7gknpdftxnq243 +pvllkgzmkzfive2rmzcnrxxbghd97seven +ggpbvmlgrv3 +1htjzxxhbrrtrmpnine +sixvqctcfmlz5 +6fouronesevenninezfltgfour5 +mcfrsgrbpsfourfiveeight8 +ktrlthgxzpb6five +sevenfour8 +eightfjlfcr4nineqdnvndbknmzvjhnqfhqzd7 +9threeclpdskczbl +ghhst19 +seven9fivetfivefivefive +eighteight5five +3eight1fivexmpstdtf +1six12 +1eight4ninetwobxtkzsrlsq7 +5bfour33fourzb5 +9khcntftzhzthree +572nc99five +71khpfnine3tndvzmxlnkoneeightsvqc +8934chtvkqzxfive4 +ninetwo2one +eighteight1six3lzkzmhvksxfm8flpjjxlckg +fourtwo8rhbdcxcmjtoneqbcqvzvh +onethreetwo28eight +twothree23fourfourvjxmdhmthbvbone +six57xgdnsevenhqs +4jjmjbtrfourfiveonesixddveightwoqm +2djdm5vgqxtsixsevenfknfzvrlkq +17twotqlkqkf17fntlcqdtbeight +foursevenonennthxkdxx9sixhlxdcntwo +qxrbhtn6kxr1cdnjktphbb +jtk2vfsqsdhcpq9eightwojsc +6ppfntdkkj3six54rdthree +six4dcchlqlvhhqqxvqxbqspttwo +six38three74nnbmmjgx7smc +dshfcone34jjhlhpsvgzpdr +lbgzbsgxq8 +4vxpbhjhvzjqbdzseven686 +7tgjzkrltthreexbkcrzsixsix3six +7eightkrtqvzdp92six +szkslvjxxhseven9two315xpxg +3dthreevkl7kf732 +mhqs42twoseventhree69seven +mjcgnjphtk2six +xsqdccbxldfs5onenine +1threetwovgslnseven3 +27five6two +fhgoneightfour8686 +six6eightfour71 +pvnqhcgdrtwo2hdfldftthree +threeone2vdxnkfsix +xhtwonenineseven6two4 +82csvthreethree +1threemglzrkbvjzfivethree8 +qkfcfourninetwofzjqq4mhcvfnx +zcvhlhhfcts13sevendjqvllmjqp +djxc55two +3gzpkjqmtzlsevensevenfour3tqs +sixggpj4five +fiveeightngstjsdoneczkg5 +nine45ninegrhtnfvbtn5ffjmtscxjf +2zdrxtmcmr +4ninesix7five8cxvkktdsrpjjlhpbmprb +2twoseven +six5hlmzlm1one2qfbljtjconefour +qkqncxkpbqcqt6sixeightfiverpz +4fivesixnineeighteight7 +fivethreetwo7czqhsl69 +2threepkbjrfivethreensqpzkchmbgfd9lcnfchf +2zsixseveneightxlcttbrldbfthjmpzc2 +gv4vzbrh45twosix +lmznsixninesixjdvhkclxdcgfzqclrxpcrljskmn7 +73tmvtwo9eight3 +8five9one +dkjx8nnpnfxgonethree91 +rcbeightfivechrchcfzh3eight2trc +fivelnmf4threeoneqsdkmj +7fbl3fiveqgkqkhrr +2nbpg +six64onekthrflnine +2kpcfl8ninethreeldmqnxzpg83five +g484sevenrblzqhrphfsevengd +sevenqrsevencsbcqdnqzv4 +59sixkk +sevenfhs3cvgjxzfft1kpqbxffhtwojst +rtqqseven1four2threefivesnjn +pzgcxqdpb9j +5fourfivethreeeightsix5threeeighteightwofs +nine7dxhdbgnn774one4 +8four94rmzjknkc91 +35gzlsgqgf5 +seven5dvpnslnzcrxdznine +3zkbxqnpcrdkkmdkbfbv1one7 +4gxlpbkjsc32htjxvzdfiveoneseven1 +8vnlkmqkfmnpthree65zljcsevenhcddqgjbsj +1sevenseven6sixseven3dllmjljblc6 +sixfvsqtxslmone73eight1 +seven58bpbdmtwon +khptmktwotlvvh8sljppmxtm15five +qqtbmvbbdtkfmxkqhoneeight981 +fiveckxltrbstq7929 +foursixsix6mpzvlhcsix +four2dprpl7tjplddnpt73zxxbdcnlpdb +dh1ninefive +59hpfmhfour3qjfivenbhlkkjgp +6nhldbjxdfour4gtpfcgdsfm +cqvfivekgsxfive9qsgxnv +eight4eight7 +one9gtfndld +549two2ldssk8bvsrhgstppdvj +sixone7bgxqvchcb3fivehjbclpg +6ktfxxvjhtl1 +fivethree5tlhnmbqtnl241 +one8gtrkrvhkqeightwot +bxhsxn4ninejvlrcgngonefiveseven9 +zrqdzghqjbone5jcfsone +zqsixzsmszksx112xshfkkrfzr +twosfggctdjfour5gsvtninebjjxttrbhk5 +fourtwo4vblrmtqj5 +sevennine9seven1dkbcn58 +8pbztltskcpl79hjgxsixztplzgc +pnine6rhdgbhfsqnconeightsss +five647 +3xghrx1two9 +sevenfourfour1nineeight49xnb +6eightvnfsjzjk1fivemjnz +rq9rbdt +5seven8gtrnmthj +eightone5threefiveonetbcsevenjdbm +twoonefive5eight +665one9ninecrgvnh71 +3fivepscflhn8sixsfgq3 +45sqcjonecxbzqfgdsix78seven +4fs +mdnkmfkj4six474 +bqlhlmbg46sixthree9nine +47onetwobpxvnnzqzlj67 +seventwothreefive2bgfdvchvdg515 +mbveightwotwo5onethree1dmhfq35 +p5kglzfkdrc3xm2threefour1 +n57oneeighttwotwotftgxt +1sixz1rrpkmmbqbhdcmdsevennjlltklndztwo +jl5eighttcpczp5 +m4four71 +fivezkfpjrdp121vqkbhsp +mxtxcsevenfoursixszcgqtfsj5nine +three8eight +qzbgcpjj9 +vhkgcrxtxtwo14sixfour7hchprqtfseven +onetwocxnq3fivejljbgv2 +fiveonegcslmmgtwofivetwozrfxzpjvxljgq1 +cnttseven3ninepskfours +zsj4 +s5mjgshg78 +fourtwoseven9threeeightgvkgdrhq +five1qvj2six +one4nlbddxrhnineth +seven4rrfconemkkpkone373 +999one7b1 +oneeight4tkt3 +7eightk +five6seven83 +nmtqmfl662phgfqfgvs3fourtwo +57qjprxmvllqgdf3lbh +sixnjjg5ltvtrggbm +fxfbhsbls17fzcctwoninetwo +eightjbsfdh5threesevenfzgqpxfvkghzntfrplpg7oneighthh +gbfivesevenonetwo4eight2 +eight5eightxggnbdfvnrr +six6three6sixeightone +zrjnv5threeninefour6fivefivefive +two41two7hrpxrzhvcseventwo +4hzgjpfvknjseventwogt3 +htfrtmxthn6sevenddsmdnseven +fivepqkvhnphdm8seven5fourf +395dntdk4five +7stqfkzlhmqg17one +mzlheightbjqlknkhkphxkfhcrkk17 +2fivepkdhkxplcteight +5six3two4 +1ninetwo +9lzsbhhjssix89 +2six9sixntncshzbkflh +fourjdbq8nl1five +4fiveeightclrnzrpltwoeight42 +bcfshxxkr6kzppmc4nfpzpdrfmnthreezxkjppzthree +kmpsixbvjpvdgkvgcqqtb9llfclrseven +htkhpzxbcphprzzmqthree3six9 +1cnpsix8r +nslvshhkeighteighttwo3fourchvcpcfgkcseven +foureightppdqhfdzlsix4vhtpztdeightseventbfmkk +nines7nine4csfzfxlqtcxs7 +nine79bp +khkeightcbqcdhthreeclfsc4fourfive1 +9five93eightcjntlksdqtvneight +four3jcfpckfourvkgxpxbkqv11jqfvlgmhx +sixthree47twofivethreefive9 +364eightsrlbbsrtptwofour +bxskfour4nineeightqjj +gqvsn574 +six99tjcqjvdvmtbp5onenine +jpnone9 +hdtwosix189bjgpfjtwo +7seven3mbrrhnfg +zsxfvhftszgjmbkxqp824 +twosixgbntjknzf9kvldgqv8lx +rthgvmvfhzrqplxjbh5qjqbpzrm +phrlkkl4 +twofrfmx2onerg64fqjsdxpqsixtwonetx +7eighttwoqrjf +fivefive2rzlqjkhbm86 +mphzxmckxeight5zgzhkdpfhvmbdbpffive47 +sl8 +zggtwone82tnbvqqzpkm +7sevenxhmqzqk +hzfzrrqc93eightfour1 +msztmvmgxeightninenmf97xxrdzhznkc5 +8njmlqrsevenseven41bjdzxbeight +7eightonetwoxzktcgghghg +xseightwo2jpmhnttoneztczkjbnqts +onef73sevensevenmzrbvc +3hgxkfqtfourfournskgb1 +5knjskch4skgbjsixone7 +hflrdfourpdhlrzlnq42dmqeight5one +7ninestwo +6dvtfl +9two497 +eightfnnmhs2 +jbmhszmfthreeone73dqcvjqrpbnp +98seven1eight +cpqgprqcc32ninesix1eight +fiveonebvrqmf9four5 +943smzjdc +9nslnjlzcbqfj +two6gxkqvghvdlgthree3 +nine77seven41tqf +6threeeightninefive1sevensevend +rone4five1sevenonexxqpbsdjr +sixclgfzfjqq3 +2eightsevenfnoneqdssvjkt +dhcgmvg1sevenvsqhbh +gbtdppgldnd6fgkkdgxzgeightx +fivefour5five3jmxmf5 +twoone4sbsmpdtqlone +twotwo2seven7five9 +zsix2nine7qhmfiveone6 +zbtxdrrgqlzngnn5 +64xgmvsvzdvnssixkzpdcnskfive +pcshsdtrjk5kkdcjpmmeightkvcsm +5nvvnncsevenonexln4six +eightseven5four3 +zk8oneszssdfjcxlcggcnvnzqmkt6 +fivefoursevenqplbeightx3 +jdtgszhf9 +5seven2 +fxkplfive7five +4oner +two53two +v48 +9foureightsevengmpthreebxth +dccdkmjhdtzpmlhx3 +pdd5six1sixqgnjh94rpp +nine94vbvrmnlsnine +5kxkkltwokmzfourhmqlhrs7sjltthree +eightsvsix6nfqrcvfdx7 +5vfsqkstfiveninefivesix9 +4onervseventwo7 +8mfsdgkppjjzdfrrqdcl7two6vtffour +hjsg2rkk8seventhree +hkbznnhhdtfourone1sixeight +one3vnntbscbzseighttwonek +fiveninenineszpkfmsevendfxfxg5 +qchrrrbzlsjzk8xvjxgkvvvqns3 +eightseven1 +92dpjztwofourfourcrrtrpdx9 +3three81gppshcns8c +9943nine8ninetppvpmz +fourmbscxpslsbtqzzmdjbsr18six +tdlbcgpq6766fiveeight +2nrnsc5eight +seveneightgzhtfourhz5 +nm3ninezbbbxxpk +8sixnine6ninethree +13sfmkkct73pmncdxclnn +vgsjpmstwob64six +two7twoseven5xqxjbfqnbfivefive +1zxgnkgdkseven +sevenljnineninefvvkxznt596dghfjzgdf +1threebngjvlnninefzlbvjj +fourjndnhk2five9 +8sixmhvjtvdkg +1pcgctlhkxggq6 +8hfq +eight66xndjgone8seven4 +nbmljkxzs5s1 +bnkssmdlninefivetksfbhns7vpqt +4hjnjqccmbmnine +3rclvqqfxhlqm +gdtxcrjvrfourone8qpmxfivetvd6 +8sevensix35jpdfourfdthree +1tdhsxbch +3759lg +zsxmb7one2prxjxpsix +cfjfxx4ppbqhjpvfsix +nine67fzqrqcztwo1four34 +1seven6khdn6oneseveneightwoxz +kzgpsclvrn44sixvjqmhrsr +2zvqbtdxcxvgqdtrs +bt81898nfpgxrpggsone +gbveightwohqztxvbgngtwopdbdnfzbhbrjsixthree3 +threejlgmfljn15 +3fourone132eightvhtdssxnzfcnt +4three9d9seven +qbzj5kgglthxgv +ljttvvpqdbd4seven +9threetwo +blxpddqgeightfour4977jskbr +2fpvqbmnjlg +22tone +xrstdqhlgnrmdntxttzt1 +four7ntjlbn +5mqhhtkldtwo +zfstz49two +gljszpg67 +xxddtfrseven2fiveninethreemlxghjzj +mmeightwosevenzllrjkqjktgvj1gn6nmrsc9 +qsdmsql8twoxdzrhhc +1cdqxhsnkkmpk1b +six9hfzfhs +threegbsnineqsixsix9jdvfour +two83fourpxnpgmnnjxdpsfgdd +eight5kftxcsevenseven59rdfpqcx +fourtwooneninesgkvbbsdq4kfvtk +ttwonepsfspjsp3 +3625eighteightthree4 +ninefourseven9eight4nsfmhsng +2bcfzninefivethreenine +zvsixnine2eight4hgnvzgv +52threetwoeight3 +fivegvngchprmmj4tqnqvjh4three +dmkmdtrseven2onefivenineone +seven5hvtmkklsnineqgsxglsp6 +ddjfrfq3lgrxkfourptxftxfc +mmtwo9five1gtrcc8 +2jcqzlbthstzttllks2vlnkmpfour6 +jpjtzjf2 +fourgseven8 +seventhreexmtpr2 +82twoseven6 +6bkppqrcvfourfourvqlvctgcpl5rhqcxfour +threesdcdbhjgcjhrtvseven8 +664 +7kxdkrdfour +3ktxgspnhrndzptfxzmrgkdp +eight9dvsbxjtrzcjk +nrrlxvddcvm361one +35 +7tpmjdmqnzzpctjxl +voneightonevpkonegzzslxdjjmzvvpc73 +twoone9fivefour +1ldpkzznonessixmck5 +nine4grkzsmcvlzlqzqdp2nffcklvhsn92 +4two9rhvrfsxvc +nineqlqxdvd9two6two9rthree +spdeight799qgt +1sixtwogzeightz3five +xcqrntvsz2frjqgnqxblnr +ninerkbrgrzqeight65txshjcrsghfbprjtgdp +fourbcgjqpjbp64four +jpt51rmpbf +7twosix8twothree3pzzdzbls +686 +51fivemhnkcbpnz1lghkgdtztbtqrd4 +9jkn6xtq35ninelqrsksmb9 +466zqxzlsqteightsix2eightwon +7517onetwothree +5mmsppmqnnxxjvfxxxlbtwo +ninenine53gckztmtwonedb +eight6tpjdzhqd9fourzsqdpqxtf94dc +35xvpbfour +ljsfnzq5drgsbk2hlnrgsjcjn +twoone59twofrskhscjc9nine +654pntx5eightxhkzltgdz7szfvhr +seven15nine +bqpfiven9trzmqqbsl2smrh5two +eight85seven5 +pkdlsckpkbtznlngsrxqdz1mhfsthree8nine +96eight +5one1nqjdcjgs9jzzsgnxtk +8rgxkmmlz +mjfmvvc6 +nine4seven613 +4one9two +five813 +six17xphchsevenpvrmbrlmsqbnbzpmdvm +five717 +jrteightninefivefour7fppstftgcqjfs +clcjgtzkgvhvn7vsix3 +mzcvrvtxtf62ninetwo1one3 +nineeight5five7 +btrxqfqnzgcdpbtqrd1 +jjjlfdjvgplnineflxpg3 +foursevenvjxcv4jqqcsngcrz +cdvx9mbhcbjlnine17twosix +gzfbzdglstwothreergrxvvlblh9czslhgxpninekone +zbdxcsix5five +8bbdqzlfbsssix2 +6twoone +one6twotwogv7 +rfxzbsfive6mzlftvqqdj7 +2eight2eightfivevmsixqllmhf +46two9 +14jvrfqlskz333jbsix3 +52fiveeight +hqn1three +ninenine4four +seven2two3pthreehqhbbz8rsf +fivefivextnpd7sevenkbjnnlsixninetnvjrllf +nine2fivecxttgcsbqvjgxj +twotwofjndhnfzscgxfjqxklmbtmhvdjtbrknfive1 +cqdhhscnone9eight4lvgbrnfgcbbfour +srjqtfpvnjkbqdrm26srzrtk +sevenonefourseven2 +3tlhfd +fourqsnlsfiveeight5gngdxvvbone2 +qslkxd6 +6jxgvknvbbbmqbjkkbnineninenjnkxnbpvf +tzxrgthree8sixtzszjscq +dcjgzzrnlx237887xvnkbg +mpqpxsix8dssfkt5sixqshsqpsbghqvvt +qrjoneightqqpf8 +v1 +fivefourgpkqbmhzkdtmxnrrkjq1jrlj +4vdcdcsseightxdskczksldfour31dlgcpq +four6six +bzztktdmdnine2seven34 +sixone464 +zjbctfournineninenmgssix7 +fourddspxzcsixlfourphtfpcvcjxhmkbkfqszjqdkk8 +coneight3kxqnknpgfqmcbfhrmspv1 +4cxrd5eightfivezbkkbvxmklzhbg +3gzhthqlvgklrsvzlrldxeight +twoseven4eightpgzmdjmthreethree +zrvdone9eightjfddpv5 +onenkrdbvsfdd8dxtfjrkvlldbltqthreectgseven +xrrrtshfourxsznhllcnljggnf8 +18fivethreethree +twosevensix62bjjfqbgfour1 +sixhvmrjsxbtvpttnvsvkkdjbrkz8 +63seventwofive6nj +tworpmdqcdjfknine5zbbctfdxjfivepsbls +8onebcffzl +six4eight +534zclfpftggfzj3 +5threespcbkb +qjvmhltqtvxkntwo3mmnqjtc1msmcrvdsixb +lnlkdvhsgdslmlkdmzgfdtjmldxpp4 +fiveninetmktpq7frcksixsixjxfmgkpcx +seven7xlqzjkmpr +1pdbjpbjldpxfgzjgch8 +6two361vbtzntk +sevenfourfivefivethreesq19five +xhvmcfzqvmlplc6xgsxgzhjfsvhzr6sevenbzhchqqxvq +ninehmc7mgcspncsm +84gtvlrxx23 +2lllgqjlntgctxrpvhhmxgtzpg +6twosevenvpgngr7 +ppjmthreetrnbrzd6two5lqnmhj +1eightfourtwo93 +lg7nine8three18 +onecp3 +8hnqgvgrfk8fivedgjqcmht9 +bcfmtxzgkjsfffntwoglcqj9 +bconeight5vqkndkxxpsevenfiverxvdf +826 +dgdfjnbq2 +9hkrnrstvjonephgsh4 +sevenrmmnhhzqpxvpns7vbfjxsixtdvvzcd +nine93pbhzvpzkxfourfive3 +9bhplv5ljnzxzj4d6tzdzk +ninenjq6six +frthreefzzxkjv3fivesixeighteight +1zmbmqlgxtwoltfxfncckxkznine +qfh2fiveq6sjvbtrc +2twojbzgbqp2 +58fzjtzrmzrtnhsix7seven +76seven +1nine685rhlltpqmonetwolfqbnbz +lhlnzjvptsix1one19fiveqvc +mxlnjnkpcjcl9seven +gseightwo6 +hmfour9zxscbsix +15hx +lxrptwo6four23brqnsmpnv1six +sevenj486 +1kdt57four +threefourqsjjfmqzgm7 +rlkfjspbb79eightlgsb78 +273sixninelpbfnjkrlninethree +6xkrjrqthree8 +fourthreehtone11jmjt +1hpfqhtkglk +nine15hjn3nbrteightwoxst +9jrphvqgqfour22one +threerdrvrgkvr2 +1bhqngdlfqpltwo7 +four8threegbkpthree +fouronejeight2 +two1ks69367two +brtm64ljnqpnnkxxpdneight +nine6rcsixtwoninethreesix +ninetpmbdnine8 +rhkrrrvslxz6seventhreethreenine7five +11vm51fvzgthjdcxb44 +5crqfourkksdcbxhhgndmqkxrthree +qmmnpdm67 +shrdmggszgxknp9msixkkppzbheight +6jllfcrhseven28lhfxbqone +rblgzsfxhtdkfoursix38hl +nine5rkjvchtnsrsevencrhvmfourgsix9 +fourmgz9 +four2rvftpfng +s5ctjmqhtfqbknrvhnb7 +fgdprp1sjkhdccmtbninethreeeight +7xj3vone +hlh6rlpsscd +8nmrzdrjbcp9fdvsix7zmfzx5 +2eight2jztrnx2vbkkbqxpdbgxqmhtnxbjs +1gxkrbnxvcpr6eightbtnptvzczp2 +kktm5seven82onehkkgsevenczfpgz +skmkfthree538zzmjd19 +eight61onezsevenbone +28eightonesix7onenine +hh61lfspfx4fvtxqshzchllphnkz5seven +9kfkz +8fiveseven33j6nine7 +7xkvvtxvtmltpv +xxjpndkcbbhkrqc4fivenine1 +2tvpthree4onelbqkeightzdvvxseven +sixsix7 +5eightjmrxhghb79tworqfour +snbgknvfctggnteightthreenine5 +two6nine +rsc23sgztzmkvnqqnsevenfour2 +9tcdqdcccjldfvxttvhtnbtzm +8sxthstcmonefive6one193 +fdppcjkrptxbmvvmlhthreevzsxqcrmzl8 +onedxjg8rvqdszg7 +9vsvctbbm +ffpxgrtwodbnpvfckbb8rjfmpngp7six +8ljxjseventwoeight66 +threelzhqgtzfljdjcddsix5nhtzbvrpdprxdtgcql +gnkkcdbtcd4 +5fiveslqchsix3 +6zfxp +5758ffddzjxjr4nzgqllfive +386threebhfpxsvn2tncfcjbrlv +vth77897ninesix +six2hbbrlggsixbtzctqdmjsixphvtnxfphmmmkscg +jszfbjvsthreefive8eight28hpfztclxczsgnksgchd +vdlfxdfhgfourfivelzxlhmhng1krv1 +1rfsfiveeightsevenseven +dxzbfive7 +ctcgsevenqcrgscpqgvxglqfgckzbdn7hvzpg +5zcfrbsdgqbbzkgfrgtg4four6 +six5ninesevenfour +gszmtz5pzxrgnzfxtvcnnhznhplg7fivetwo +fivegdxbmxxgmkqxgfv9jtkcnfour1sevenr +2ninetwoxtmtf4gjbm7xdq +9hfshgqrvmheightsix96 +fqjrlq27pqqbxjqtwo +threefour44dsjtdhm9chjx8vrsp +fourthreeqz1nine +3ftjxdfxp +sixsixone2oneone +ninesix55 +five24seven +6ninejrvzccxxgq +n46tsseight +nineseven44three +nsstnhvdkxnbsrpnxfknbjffpngz36twofiveseven +4sixxqrngkhxbktwocnnjqphcdceightsl +knqmkjnrseventhree9eightjfjl6lmjfddg +42eightdvrlrzhsix4 +1bzqrcmb1krmhtwo +845sixslqxh49 +four2jtndvcfhnmfourjmcjlxtjkzfour +65z +twocxpqljhdmnjdnine62svmmfdhhrzdznf +827 +52threebrhssdltmrthkvqfm6kgh +fjqntgg8ninexxxdmxhgfivexnvxv +three96 +51rtc8threeeight +mrqpvstpsjhb98nine +nqzrgxhvjzqblvsbhtssrzkvmrppkqfnrvpsltseven74 +bhgnxlpfkrseven2onebjxxxqnkkd4 +onesevenzxxninefcghtwoqvrgmsthree7 +four5ffourzcmshx +f6gqhvfp55cpb3six +7eighttlqzvggsksix1lbxdbrfivebfgznsck +dtsgq2seven89four3five +4mcstshfive8eight92 +vfnlxhf99fivenkcqlrttwov +96vjxjvmzpqtwo +5kffpqfour2kfour6 +5dsz2fjkvzkpgstfive7six6 +fourlmzvktshjpgqnhq3673nine +3svfczsvvnfour61 +k2jfhgf +7vmhmsv7three6three8phqbcm +cfjktbxhsixeight9 +zqmseven3four6 +2four4eightskhbeightvrone +51tcrbl6ninezvhckfxqphcd +xnntnqstwoeight3twoonefour4nine +sixfiveninefiveksxspqthree4 +sgtwo7 +97tdzhqdxtqctksix +3fiveeightfour +fivemsjhxqpgbt3eightk9 +four698ninef +3nkqmpmg7eight +7gksfive +41nine +rflzmfs1 +nszxcthree8hsqqmhfive2 +jbhkgkgjtd4rpnzjrhqfournznljmhvjtnzsix +six83 +81btctxpmvmnine7 +qqqnnkq7five +foureight6 +crjgvsjxcpgtx8one +nvfive8hvdth6fgnfgh +8hl5eight diff --git a/data/02.in b/data/02.in new file mode 100644 index 0000000..145b929 --- /dev/null +++ b/data/02.in @@ -0,0 +1,100 @@ +Game 1: 1 green, 2 red, 6 blue; 4 red, 1 green, 3 blue; 7 blue, 5 green; 6 blue, 2 red, 1 green +Game 2: 1 green, 17 red; 1 blue, 6 red, 7 green; 2 blue, 4 red, 7 green; 1 green, 6 red, 2 blue +Game 3: 6 red, 15 blue, 15 green; 1 green, 4 red, 12 blue; 14 blue, 9 red, 1 green; 2 red, 15 blue, 12 green +Game 4: 8 green, 10 blue, 6 red; 20 blue, 4 red; 17 blue, 2 green, 3 red; 4 blue, 2 green, 3 red; 10 red, 3 blue, 3 green; 5 green, 14 blue, 6 red +Game 5: 3 green, 8 blue, 2 red; 11 red, 6 green, 11 blue; 8 red, 5 blue, 2 green +Game 6: 2 blue, 12 red, 2 green; 3 green, 2 red; 3 green, 3 blue, 10 red; 7 red, 2 blue, 4 green; 1 red, 2 blue, 5 green +Game 7: 1 red, 8 blue, 2 green; 1 red, 2 blue, 12 green; 1 blue; 3 blue, 3 green +Game 8: 10 green, 4 red, 4 blue; 12 green, 1 blue; 1 red, 13 green, 2 blue; 12 green, 3 blue; 9 green, 7 red +Game 9: 1 green, 1 blue, 3 red; 3 blue, 3 red, 8 green; 6 blue, 4 red, 6 green; 2 red, 7 green; 1 red, 10 green, 13 blue; 5 red, 1 blue, 1 green +Game 10: 9 green, 3 red, 3 blue; 12 green, 2 blue; 18 green, 1 blue; 14 green; 2 blue, 9 green, 2 red +Game 11: 14 green; 2 green, 2 red, 11 blue; 9 blue, 3 green +Game 12: 9 green, 3 blue, 8 red; 1 green, 2 blue, 3 red; 4 blue, 8 red, 10 green; 3 blue, 7 red, 8 green; 3 blue, 5 red, 7 green; 2 blue, 5 green +Game 13: 6 red, 1 blue, 10 green; 7 red, 1 green; 8 red, 2 green, 1 blue +Game 14: 2 red, 4 blue, 2 green; 2 green, 5 red, 1 blue; 1 red, 6 blue +Game 15: 7 blue, 3 red; 13 blue, 8 red, 1 green; 1 green, 5 red, 13 blue; 8 red, 5 blue; 4 red, 3 blue, 1 green; 12 blue, 8 red, 1 green +Game 16: 5 blue, 1 green, 2 red; 2 blue, 20 green; 4 blue, 1 red, 17 green; 10 green, 5 blue, 2 red +Game 17: 6 red, 13 blue, 8 green; 12 blue, 7 green, 9 red; 19 blue, 5 red; 2 green, 8 red, 14 blue +Game 18: 5 red, 2 green, 1 blue; 8 blue, 17 red, 9 green; 2 blue, 1 green; 4 blue, 10 red; 5 blue, 4 red, 6 green +Game 19: 5 red, 12 green; 8 red, 13 green, 1 blue; 1 red, 1 green, 3 blue; 5 green, 5 red +Game 20: 11 red, 8 blue; 9 red, 2 green, 13 blue; 2 red, 1 green, 2 blue; 1 green, 9 blue, 13 red; 3 blue, 5 red, 1 green +Game 21: 1 red, 4 green, 11 blue; 3 green, 15 blue; 6 green, 7 red, 14 blue; 15 blue, 6 green, 10 red; 6 red, 16 blue, 2 green +Game 22: 2 blue, 15 green, 2 red; 3 blue, 6 green, 1 red; 2 blue, 5 green, 1 red; 6 green, 2 red, 2 blue; 4 green, 2 blue; 4 blue, 1 red, 15 green +Game 23: 2 blue, 1 green, 12 red; 5 blue, 11 red, 4 green; 12 red, 4 blue; 12 red, 2 green, 5 blue +Game 24: 4 blue, 7 red; 3 red, 3 blue; 1 red, 4 blue; 2 green, 6 red, 6 blue; 7 red, 1 green, 2 blue; 6 red, 1 blue, 1 green +Game 25: 5 green, 9 blue; 6 green, 7 red, 2 blue; 1 red, 3 blue, 7 green; 9 blue, 3 red; 5 green, 9 blue, 2 red +Game 26: 6 red, 4 blue; 2 blue, 4 green; 3 green, 5 red, 5 blue; 4 green, 6 red, 3 blue; 4 green, 7 red, 4 blue +Game 27: 15 green, 1 blue, 12 red; 12 red, 1 green; 1 red, 1 blue, 5 green; 13 green, 6 red, 1 blue; 5 red, 1 blue, 1 green; 11 red, 14 green +Game 28: 3 blue, 2 green, 10 red; 5 blue, 2 green; 4 green, 3 blue, 11 red +Game 29: 10 blue, 2 red; 17 green, 7 blue, 2 red; 1 blue, 8 green, 1 red; 10 green, 2 red, 3 blue +Game 30: 10 green, 8 red, 1 blue; 4 blue, 7 green, 14 red; 2 blue, 14 red, 11 green; 1 blue, 13 green, 12 red; 5 blue, 2 red, 4 green; 4 green, 5 red +Game 31: 4 green, 11 red, 11 blue; 3 blue, 11 red; 5 blue, 7 red, 3 green; 10 blue, 5 green, 1 red +Game 32: 4 red, 8 blue, 1 green; 14 red, 7 blue, 4 green; 13 red, 3 blue, 9 green; 3 red, 1 green, 8 blue; 8 green, 8 red, 5 blue +Game 33: 6 red, 10 blue, 7 green; 19 blue, 1 red; 6 green, 11 red, 11 blue; 2 green, 2 blue, 12 red; 3 red, 13 blue, 7 green; 6 green, 4 red, 2 blue +Game 34: 3 red, 3 green, 15 blue; 7 green, 15 blue; 3 red, 2 green, 8 blue; 19 green, 18 blue +Game 35: 2 green, 1 blue; 2 green, 2 blue, 1 red; 3 blue, 1 red, 1 green; 4 blue, 1 red +Game 36: 1 red, 11 green; 1 green, 1 blue; 8 blue; 2 green, 3 red; 1 red +Game 37: 4 blue, 3 red; 12 blue, 13 red; 2 red, 2 green, 8 blue +Game 38: 8 red, 2 blue; 1 green, 2 red; 8 red, 2 green, 1 blue; 16 red, 2 green; 7 red, 2 blue, 2 green +Game 39: 6 green, 1 blue, 5 red; 14 green, 8 blue, 6 red; 8 red, 10 blue, 1 green; 14 green, 9 red; 17 blue, 5 red; 1 blue, 7 green, 1 red +Game 40: 4 red, 8 blue, 3 green; 13 blue, 1 red; 3 blue, 7 red, 3 green; 3 green, 8 blue, 10 red; 3 green, 20 blue, 5 red +Game 41: 1 blue, 2 green; 11 green, 2 blue; 5 blue; 15 red, 8 green, 5 blue +Game 42: 1 green, 12 blue, 1 red; 6 blue, 1 green, 5 red; 1 red, 11 blue, 4 green; 3 red, 17 blue, 1 green; 1 red, 11 blue; 9 blue, 6 green, 3 red +Game 43: 16 blue, 13 green, 1 red; 17 blue, 7 red, 10 green; 13 green, 5 red, 7 blue +Game 44: 2 blue, 4 red; 15 green, 7 red; 2 green, 1 blue; 6 red, 13 green +Game 45: 5 green, 1 blue, 8 red; 4 red, 1 blue, 5 green; 1 green, 3 red; 1 green, 2 blue, 6 red; 4 red, 3 green, 2 blue; 2 red, 2 blue, 5 green +Game 46: 1 green, 1 red, 6 blue; 11 blue; 1 red, 1 green, 7 blue; 8 blue; 1 green, 7 blue, 2 red +Game 47: 7 green, 9 blue, 7 red; 11 red, 13 blue, 5 green; 12 green, 12 blue, 5 red; 4 blue, 8 green, 7 red +Game 48: 11 green, 7 red, 2 blue; 2 blue, 10 green, 3 red; 1 blue, 2 red, 1 green; 4 green, 2 red, 7 blue; 7 red, 4 green, 2 blue +Game 49: 1 red, 2 blue, 5 green; 2 green, 4 blue; 5 blue, 2 green, 1 red; 9 blue, 1 green; 7 blue +Game 50: 8 green, 9 blue, 2 red; 2 green, 5 blue; 14 green, 1 red, 8 blue +Game 51: 1 green, 2 blue; 12 blue, 1 red; 2 blue +Game 52: 3 red, 2 blue, 2 green; 4 red, 4 green, 7 blue; 2 blue, 4 red, 1 green; 3 green; 1 red, 9 green, 7 blue +Game 53: 9 blue, 12 red, 7 green; 8 blue, 6 green; 1 green, 8 blue, 9 red; 12 red, 6 green; 9 blue, 14 red, 10 green; 7 red, 3 green, 5 blue +Game 54: 8 green, 5 blue, 5 red; 4 green, 13 blue, 2 red; 2 blue, 5 red, 1 green; 3 red, 3 green, 10 blue +Game 55: 17 red, 15 green, 17 blue; 6 red, 5 green, 7 blue; 17 green, 6 blue, 5 red +Game 56: 7 blue, 6 red, 7 green; 10 green, 3 red; 9 red, 3 blue, 5 green +Game 57: 5 blue, 11 red, 1 green; 13 red, 1 green, 2 blue; 2 blue, 4 red; 1 green, 10 red, 1 blue; 1 green, 8 red +Game 58: 1 red, 2 green, 9 blue; 1 green, 1 blue, 1 red; 2 red, 6 blue, 2 green; 14 blue, 1 green, 1 red; 5 blue, 1 red, 2 green; 14 blue, 2 green +Game 59: 9 green, 2 blue, 5 red; 9 red, 5 green; 10 red, 1 blue, 8 green +Game 60: 8 blue, 6 red, 4 green; 3 red, 12 green, 9 blue; 4 blue, 5 red, 5 green; 4 red, 8 blue; 7 green, 12 blue, 6 red +Game 61: 5 blue, 13 red, 1 green; 5 red, 5 blue; 1 red, 3 blue; 1 green, 9 red; 10 red, 3 blue, 1 green +Game 62: 1 blue, 13 red; 4 blue, 5 red; 11 blue, 8 red, 1 green +Game 63: 14 blue, 5 red; 9 blue, 14 green, 5 red; 3 red, 8 green, 15 blue; 4 blue, 15 green, 6 red +Game 64: 13 red, 6 blue, 11 green; 12 red, 1 blue, 8 green; 1 red, 17 green; 13 red, 12 green, 7 blue +Game 65: 4 red, 17 blue, 3 green; 2 green, 12 blue, 9 red; 2 green, 17 blue, 5 red; 1 red, 1 green, 4 blue; 9 red, 16 blue; 7 blue, 9 red +Game 66: 10 blue, 10 green, 5 red; 10 green, 3 blue, 5 red; 1 red, 1 green, 10 blue; 2 green, 5 red, 20 blue; 8 blue, 11 green, 13 red; 2 green, 18 blue, 2 red +Game 67: 6 red, 1 green; 5 red, 10 blue; 6 blue, 6 red +Game 68: 4 green, 1 red, 5 blue; 5 red, 5 blue; 7 red, 6 green; 8 red, 1 blue +Game 69: 2 blue, 11 red; 4 red, 6 green, 1 blue; 4 red, 1 blue, 14 green +Game 70: 15 red, 8 blue, 5 green; 5 green, 2 red, 8 blue; 8 red, 3 green, 10 blue +Game 71: 4 blue, 2 red; 12 green, 4 blue; 10 green +Game 72: 3 blue, 4 green, 6 red; 6 red, 5 green, 8 blue; 10 red, 6 green, 5 blue; 1 green, 2 blue; 10 red, 5 blue, 4 green +Game 73: 5 blue, 1 red; 1 green, 11 blue; 10 blue; 12 blue, 1 red; 1 red, 9 blue; 7 blue, 1 green, 1 red +Game 74: 7 green, 6 blue, 7 red; 7 blue, 6 green, 15 red; 7 red, 5 blue, 1 green; 1 blue, 6 red, 8 green; 8 green, 14 red, 3 blue +Game 75: 8 green, 3 red, 3 blue; 1 blue, 6 red, 7 green; 9 green, 3 blue; 3 blue, 9 green, 6 red; 4 blue, 1 red, 3 green; 4 green, 1 blue, 16 red +Game 76: 4 blue, 3 green; 2 blue, 1 red, 6 green; 12 blue; 1 green, 14 blue +Game 77: 5 green, 10 red, 11 blue; 3 red; 8 green, 6 red, 9 blue +Game 78: 7 red, 7 green; 8 blue; 6 green, 7 red, 5 blue +Game 79: 11 blue, 2 red, 4 green; 2 green, 3 red, 15 blue; 1 green, 15 blue, 1 red +Game 80: 3 red, 17 green, 8 blue; 8 green, 10 blue; 4 green, 1 red, 14 blue +Game 81: 17 green, 10 red, 10 blue; 9 green, 9 blue, 7 red; 11 red, 11 green, 4 blue; 15 blue, 5 red; 11 blue, 8 green, 15 red; 3 green, 16 red +Game 82: 8 green, 9 blue, 1 red; 1 red, 8 green, 9 blue; 2 green, 12 blue +Game 83: 2 green, 11 red, 20 blue; 20 blue, 1 green, 4 red; 2 green, 6 red, 20 blue; 17 blue, 10 red +Game 84: 1 green, 9 red; 4 blue, 4 green; 1 green, 6 red, 14 blue +Game 85: 5 red, 10 green, 9 blue; 8 blue, 3 green, 2 red; 4 blue, 14 green, 3 red; 5 red, 4 blue +Game 86: 8 blue, 9 green, 5 red; 5 red, 10 green, 1 blue; 15 blue, 1 red, 2 green; 8 red, 8 blue, 10 green +Game 87: 13 green, 2 red, 4 blue; 3 red, 11 green, 9 blue; 6 blue, 3 red, 12 green +Game 88: 2 red, 7 blue, 3 green; 2 blue, 9 red; 9 red, 6 blue, 7 green; 6 green, 13 blue, 9 red; 6 green, 2 red, 15 blue; 1 red, 8 green, 7 blue +Game 89: 11 red, 1 blue, 2 green; 6 blue, 5 green, 4 red; 15 red, 4 green, 5 blue; 11 red, 3 blue, 10 green; 6 blue, 13 green, 12 red +Game 90: 2 red, 2 blue, 4 green; 2 red, 2 blue; 9 green, 1 red, 1 blue; 5 green, 1 red; 7 green, 2 red; 2 green, 1 blue +Game 91: 5 blue, 3 red, 1 green; 1 red, 4 blue, 6 green; 6 blue, 6 green, 5 red +Game 92: 16 green, 1 blue, 12 red; 18 green, 14 red, 1 blue; 16 red, 1 green; 4 blue, 16 red, 18 green +Game 93: 9 red, 8 blue, 14 green; 1 blue, 1 green, 6 red; 4 blue, 4 red, 14 green +Game 94: 11 green, 4 blue, 2 red; 1 red, 1 green, 1 blue; 4 red, 1 blue, 2 green +Game 95: 5 blue, 2 red, 9 green; 5 blue, 8 green; 1 green, 15 blue; 5 red, 9 green, 5 blue; 3 green, 17 blue, 5 red +Game 96: 2 green, 14 blue, 1 red; 3 green, 3 red, 14 blue; 2 red, 2 green, 13 blue +Game 97: 2 green, 2 red; 2 blue, 1 green; 7 blue, 3 red +Game 98: 2 red, 1 blue, 12 green; 2 blue, 10 green, 5 red; 11 green, 9 blue; 6 blue, 17 green; 7 blue, 9 green, 9 red; 1 red, 11 green, 9 blue +Game 99: 2 green, 9 red, 1 blue; 3 green, 1 blue, 14 red; 5 green, 6 blue; 1 blue, 2 green, 3 red; 4 blue, 10 red, 1 green +Game 100: 4 green, 4 blue, 15 red; 3 green, 1 red, 13 blue; 5 green, 5 blue, 10 red diff --git a/data/03.in b/data/03.in new file mode 100644 index 0000000..0182e0a --- /dev/null +++ b/data/03.in @@ -0,0 +1,140 @@ +311...672...34...391.....591......828.......................738....................223....803..472..................................714.840. +.......*...........*.....*...........*........631%...703.......*..12....652.................*.$............368.769*148.................*.... +....411...........2....837.121........511.745...........*.48.422.@.........@.............311........887......*................457........595 +........*328...............&..........................144.*...................138............48.......*......682.........@...*.......777.... +.....144.....+........170...................207............813..../.&....139..*.....346........*..147..143.+.....78....536..79........*..... +...........828...559.................181...%..........613.......10...928...*...993.+.........758.*.........471...#../...............573..... +....................*164...132..........*........=.......*.................47.........186.........313..............411...................... +...............342............+..823.....533....519.....899...310................@........325...........15....................407.....#..... +515......916......*.@...........*.............................*......961.........827......*.......=.........567....=238...874*.......420.... +...=.......*...207...882......719....455.973...................369...*.....*913........978...%..720..........-.............................. +........306................................................182.....534......................229........744.........+.....=..........918..... +303...........745...........361..............223..243.129.....=.................830.....%.................%......493....106............&.... +.................*209..17.........494.910................*90....496.....709......&....896................................................... +....%..562............*.....@...........*..528.......321...........*673......................887..%231...............700..............116... +.988..=....944...596........806...24..519./..........*......../...............146...........*...................554..*...................... +..........$.......................................822...621..771..151.504.......*.628*343..34...+.&..............*..329.303..641..678..+.... +........................361.....347*524..538...........*.........*.....-......790.............933..724......699...........*....*........262. +.716..517...+..........*................*......955$..544.....238..593.....399.......#..=...................*...........241.....930.......... +...%.+.......744....550..........#131....964.............234..*.............*.....856..809..450....%....332.....419..................389.... +........264...............798......................816....%....228.......501..224........../.......645.............*499.....*.......*....... +.......*.......939........*.....@..............795*..............................*........................789................907.....647.... +.....612..........*.612..291..592........#.................567...................391.........................*....387............64......... +................24.....*.................814......=........$......./....346................444............833....*..........845...*......... +...........303.........605..326.....108.......%..56..842=.....*....387...*..478-..272=....*..........#........778.....299=..@...722......... +......484=..=.....753..........$......+.....449...............559.......144.............695.........675..................................253 +...-...............*.........*................................................................987.......200......*......445.......124...*... +....825............603....544.634........................432...=875...738...............731..*.............&..488.363..*.....663.........876 +........755.................................#............-............/.............*....*....470..314.145..............277...@.....234-.... +....323.........221..............892...284..473.....44......342.622.........707....413...984..........*....../.............................. +..............$....*..............*...&........................*.......351%...*.............................226..........155....973+........ +...............177.991..........268.............532=......./.....277........183......*935.........917....*........825.....-................. +.....+.%................#...413........304...............384....*.................748........./....*...955.......#...........885.970........ +...44...627..........368.../...........=.........................314..293...................102..108............................*........... +......=.........................=........733..433...128..............*.......889...........................661.........-358...$....281...... +.....35..........$...........834.../699...../.-......................461.......-........*...................*..................374....=.#412 +............763..201..$............................392........341........96......723.340.........327.736...1..$897.....471.................. +.....*512..*.........221.............125$....257.....@.....................*.277.*................*...*................................@.... +..301......694..............54.............../.........611...............596.../..100.......164.801....596..490....&361.........415....412.. +..................243...927*.........29*293........645*.......862*2...........................=............*.....................*..$....... +............$......&.........655.906...........500....................125.613..844.........@......435......984....725-..531.....711..79..... +...817...450.....................*........431...%........................*..........957.....739..*.....................*.................... +.....#........237......122.66.942............*.........548..................506.435...............73.883............644...101............... +.863.............*......&..*..................98..283........532......750..............*........#.......+....594*........................... +....*.........451.........623.....*....*...........&............%..50*.......44.....123......951.................62.943......365...995...... +.639..............827.265......132..354.127...........350....................*..........................11..........*....%...*.............. +........41..#175....@...*..*.....................+......*..247.353...#.....44.....912-......757...............144..481.693.271.........993.. +.........*.............993.707...857*...........375.....90...@...*..386.......403.............*..................*..............208....=.... +.......343.437....391..........&.....117....637.....345.........43.......*662..@...........908.........956.......908.............&.......... +389.............&...........670.............$...42.....*...=..........564................................%...............+.................. +...*............435....*.............913..............574..149.......................962....................953...77..641....514............ +....448.....783.....892..381.....593.*.........................403*149................%..863*954....373-..+........*...........*.+...663.... +906........................#......*...922.........950......................993...3.........................379....450.......877..804.#...... +...............768.......*......-.198.........160*............820......382...*......169.........*555..257................................... +260..............*.....68.....281.......871...................*...980......875.......*.......169........*.............531......@............ +....*......@.....587...................#......48..251..316@...848..................303................931..132..............790............. +.....205...572................696........&.....@.....@............709..611.............=.......270........*....165......783.......790....... +......................965.........709..826....................882*......%..775.........391....*......985.5........*179.....*47.......&...... +.....451............@................#..................804..................$..161...........837..............*................$904....176. +720.................70..........899.....868..............=.......357.252.......*..................707.......898.139.....704............*.... +....................................307*....510..................*.....*.......17..501.............*................@....*..........855..... +.............745............451................*..689..980..@670.594.716..........*.................565......595..622.....793............... +.....890......$...73...422...*...977&.......324..%.......@................29.......945....*.............298-..................#.........#642 +........*........*....%......................................$645......-...*...150.....434.259..609*560....../............266..524..../..... +.....203..........133.....596.619.................*...............676.107..811...*...........................115...........*.........178.... +............................=..*...............157.682.......262..*............196......$..........707................14..386............... +.........871............605....721...........................*...867.................685..866.......*.............602...............628..... +......#.....*....413.......@.......380....872................372.......277......277.........*.......166...........@..........656....*....748 +.....841..664.......*.422............................945...........%............*.........959.863.........187........299.......*.....887.... +.708..............311....+..296*497.....751...639....*..........269..........875....%.........................-.................36.......... +.........834..............................@...........708...........................87....298..*471.....$.....463........................... +............+...739..........701........................................779................=.........265..642............................... +......504..........*...............871*314....127..36..639.196..48..................96......../785.........*..854=.....607=...542........... +...73............254.591.........................*..$.....*......*.........35......*...@................150...................-........340.. +........224............/....*214...=..........949..............455.........*.......377.88....................823......582.............*..... +.......*.......643.......901........191..267.......293...................194..266.................987.......*........&....+.........545..... +....604...583.....*............*742........*.........*........$..................*..365............*....=...880.55......540.520#............ +............*..272.....843..201.....*....&.128..+....433.......563......281*77.540.+.......979&..134....514.......*..............46......... +...966.....67.......................19.934......224..........#....................................................693............*.....525.. +....*.........188.....904......*..............................210....*958.........811...............574....965................288..20.$..... +..213.........*...137*.......325.....628..................406......34..............*.......406...$.*.........*.........867..........*....... +...........810............................*.....926.........*..............372.....372.....*...266.716........985......*.............1...... +...............399*126.....*.......*...379..729.+........245.........893....-..866.....101.299..........8.544........784.................... +954......................63.501.529........-.......695/.................................*..........320....................211.55...533...... +............457..........................=.......................375#..........961*......720......*...............542........*.....+...327.. +........396...*.476.774.680.189@.438......669............936.......................195.......405.926.213.....254.....*.................*.... +...-.......-.......*.....&...........$........22....732.*.......$121.200...............-.......*........*.............522.825..77........... +....272..............#............925.....378*......&....53.............*....605.....329.116..501..=.765......537.680......*..*.........#... +817........109....209...........................690...................573...&............/........48...........*.....*..169...581.......537. +...=..747.............171.70.........990........*..............529.............482.....................383......531.53.............#211..... +......*.....470........*...*.812.664.=.......141.....82...888...*.................@.312....9*860...........529............./...952.......... +.....906...*....810...966....*.....*.....................*.......616........327-.....*...............................80.655................. +323......459......@.........185.....894..891..........254.................................938.........262........602*....................... +.............110.........................$......*55..........155..................248*600.....66........*...............*......75..880...... +.....459...........928...............................*900.....@.....27............................526....434.402.....840.816.......*........ +......*........241....*...70.465...668....110=....905...........252..*..............%..........74.............*.................817...290... +.540...224........*.42......*........*.................705.......*..128...&.758=.512...884.....*..648*.......259.......486.627.......*...... +....*..........467................462..321....296*211.*........283......488...........%......796......774.............%.......+.200.87...... +...663..............$961..579...........................*...................189..........71................420..57...............*.......... +...........617.645...........*........700..886...806.581.610.....132.379.......$......+....-..941$.....................504....589........528 +......377.......+.....290...221..768.....*....&....&................*.................556..............132.............*.................... +......................+.............*152.448............903.....339.....=.......709............991.......*.............865.................. +....-.....$717.............552................40..458....*.....*......365.......-......762.732...*.....690.266.....222............122....... +.414...........496...+.712..*...=....785.........*.......79...884.991................/....*.....844..-........@....*...782...........*627... +.......$........%..560..*...873..739..#........368.991......*.....*.....27..........951..............864.........206...*...878.............. +.....231..995...........865................602......*....379.609.935...+......643................952.....@...........884...*................ +.............$....726........360..........=.................................................*990.+........959............932................ +.....................+.508.....=...194.......*30........./...........487......171...243..709........495.........995.464.......997........... +......292..............$.............*....253.........*.554...........*......../......................*.........*....%......*....*582.446... +...........802.....237.....*32...286.259............132.....236......683.....&.......................705...$855.37.....=...476.........*.... +.....418=.............*.664........*..........*11............$.....=.....70.380....138.....416.609..................452........43...156..260 +....................20..........512........303.....-................491...*.......*.........*..&..........&962..........*......#........-... +426.646....833...........821....................348.......537...668........92.....295.....620...................147=.753.................... +......*.....*..................210.681...................$..........937.......350......................533............................+..... +.65...22..656...#........*44...*.......178*.........446.........655..............*592.....952-.....680..*...........=..305#............704.. +...*.............422..835......126.........552.......*....543..........-....444.......995.........=.....771........480.........782.......... +............28............983$...........5............953.&.......216..749....=..........-....................232........................... +.....................878................*.........426...............*.........................$........792%..*....898......264...39......... +...480.....674..149+...................740......#....*251..920.......552......................713...........639.......917.........*......... +...+........+...................$951..........*..968.......*............................................750.......479............770.959.... +...............424..54*489..+...........14..355...........782...50................900.770..........639.....&.942.....*39.....477........+... +....888.....................412................................*...%123...579...../....&.....315.....#..........*..............*..66........ +......*..........................793..402.......*807...854@...115........................=...*...204.......208..928..........121............ +...........880=.818......982......*......*...923.......................................809.962...*.........&................................ +...957*511.........*436..@......704.......................-......../....84/...369.496..........917.....................464.................. +............................812.........785*...............848..506..................*116................=..#............................... +..........694..257..876.....................15.........176.............................................593...168...914.230-.200.........500. +...427...&.....*..........................................*.............=...%....233..616&....299*.................-....................=... +......&......598............571/....60.........897.......911....34....106...713.@.............................933..........288.............. +..314...............563...&...........*...........*............*......................198........................*............*591....246... +....*......274.875.....+.114...........105.763..319...................*730.....158.....................487.......505........................ +.439..........*......................*........*.......595.190.173..653............*...882.812.....*230..-............522....=.......192..... +................554...825...845...797.572..814.......*.......*............*....167.......*.....581...................-.......330.......#.... +.......82......*......$....#.........................318...............326.924......880....288..........*.....44.....................+...... +.....-...-....526.........................=981...........959....................*.............*......915.116.*....$...=..............577.... +..130..............................@330..............414.*....679........999.344.611.......432..................690....502.................. +.............476...#.........................................&.............%...........303.....731.........681.............................. +....@791....*....152....397....*.....975............904................225...............*.......$........&.....169.207..................... +..........995...........&...558.857.......141..803.%....-........199.....*......573..63..315................*...........519................. +......................................158*....*........737.........%....399....*..................#47....100................574...#333...... +..........56............822..................665............................563..383........................................................ diff --git a/flake.lock b/flake.lock new file mode 100644 index 0000000..a5312eb --- /dev/null +++ b/flake.lock @@ -0,0 +1,26 @@ +{ + "nodes": { + "nixpkgs": { + "locked": { + "lastModified": 1701068326, + "narHash": "sha256-vmMceA+q6hG1yrjb+MP8T0YFDQIrW3bl45e7z24IEts=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "8cfef6986adfb599ba379ae53c9f5631ecd2fd9c", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-unstable", + "type": "indirect" + } + }, + "root": { + "inputs": { + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..f95f7ba --- /dev/null +++ b/flake.nix @@ -0,0 +1,27 @@ +{ + description = "Advent Of Code 2023"; + + inputs = { + nixpkgs.url = "nixpkgs/nixos-unstable"; + }; + + outputs = { self, nixpkgs }: + let + + forAllSystems = function: + nixpkgs.lib.genAttrs [ + "x86_64-linux" + "aarch64-darwin" + ] (system: function nixpkgs.legacyPackages.${system}); + + in + { + + devShells = forAllSystems (pkgs: with pkgs; { + default = mkShell { + nativeBuildInputs = [ rustc cargo ]; + }; + }); + + }; +} diff --git a/src/bin/day01.rs b/src/bin/day01.rs new file mode 100644 index 0000000..0c30af0 --- /dev/null +++ b/src/bin/day01.rs @@ -0,0 +1,60 @@ +use std::env; +use std::fs; + +use anyhow::{Context, Result}; + +fn p1(line: &str) -> Option { + let digits = line.chars().filter_map(|a| a.to_digit(10)); + + let first = digits.clone().next()?; + let last = digits.rev().next()?; + + Some(first * 10 + last) +} + +const DIGIT_NAMES: [&'static str; 9] = [ + "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", +]; + +const REV_DIGIT_NAMES: [&'static str; 9] = [ + "eno", "owt", "eerht", "ruof", "evif", "xis", "neves", "thgie", "enin", +]; + +fn find_first_digit(line: &str, digit_names: &[&'static str; 9]) -> Option { + let digit_char_position = line.as_bytes().iter().position(u8::is_ascii_digit)?; + + let digit_value = usize::from(line.as_bytes()[digit_char_position] - b'0'); + + (0..digit_char_position) + .find_map(|start| { + let sliced = &line[start..]; + digit_names + .into_iter() + .position(|&digit_name| sliced.starts_with(digit_name)) + .map(|v| v + 1) + }) + .or(Some(digit_value)) +} + +fn p2(line: &str) -> Option { + let first = find_first_digit(line, &DIGIT_NAMES)?; + let rev_line = line.chars().rev().collect::(); + let last = find_first_digit(rev_line.as_str(), &REV_DIGIT_NAMES)?; + + Some(first * 10 + last) +} + +fn main() -> Result<()> { + let filename = env::args() + .nth(1) + .context("./day01 Result<()> { + let filename = env::args() + .nth(1) + .context("./day02 ")?; + let input = fs::read_to_string(filename)?; + + let mut part1 = 0; + let mut part2 = 0; + + for line in input.lines() { + let (game_name, game) = line.split_once(": ").context(MALFORMED)?; + let game_id: usize = game_name.split_once(' ').context(MALFORMED)?.1.parse()?; + + let mut draw_max = (0u32, 0u32, 0u32); + + for draw in game.split("; ") { + for color in draw.split(", ") { + let (count_str, color) = color.split_once(' ').context(MALFORMED)?; + let count: u32 = count_str.parse()?; + + match color { + "red" => draw_max.0 = draw_max.0.max(count), + "green" => draw_max.1 = draw_max.1.max(count), + "blue" => draw_max.2 = draw_max.2.max(count), + _ => unreachable!(), + }; + } + } + + if draw_max.0 <= 12 && draw_max.1 <= 13 && draw_max.2 <= 14 { + part1 += game_id + } + + part2 += draw_max.0 * draw_max.1 * draw_max.2; + } + + println!("1) {}", part1); + println!("2) {}", part2); + + Ok(()) +} diff --git a/src/bin/day03.rs b/src/bin/day03.rs new file mode 100644 index 0000000..4990f54 --- /dev/null +++ b/src/bin/day03.rs @@ -0,0 +1,62 @@ +use std::collections::HashMap; +use std::env; +use std::fs; + +use regex::bytes::Regex; + +use anyhow::{Context, Result}; + +fn main() -> Result<()> { + let filename = env::args() + .nth(1) + .context("./day03 ")?; + let input = fs::read_to_string(filename)?; + let lines = input + .lines() + .map(|line| line.as_bytes()) + .collect::>(); + + let number_re = Regex::new(r"\d+")?; + + let h = lines.len(); + let w = lines[0].len(); + + let is_symbol = |c: u8| !c.is_ascii_digit() && c != b'.'; + + let mut part1: usize = 0; + let mut gears: HashMap<(usize, usize), Vec<_>> = HashMap::new(); + for (row, line) in lines.iter().enumerate() { + for number_str in number_re.find_iter(line) { + let value = std::str::from_utf8(number_str.as_bytes())?.parse::()?; + + let mut has_symbol_neighbour = false; + + for x in [row.saturating_sub(1), row, row + 1] { + for y in number_str.start().saturating_sub(1)..=number_str.end() { + if x < h && y < w { + has_symbol_neighbour |= is_symbol(lines[x][y]); + + if lines[x][y] == b'*' { + gears.entry((x, y)).or_default().push(value); + } + } + } + } + + if has_symbol_neighbour { + part1 += value; + } + } + } + + let part2: usize = gears + .values() + .filter(|v| v.len() == 2) + .map(|v| v[0] * v[1]) + .sum(); + + println!("1) {}", part1); + println!("2) {}", part2); + + Ok(()) +} diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..bee8f89 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,83 @@ +use std::fs; + +// fn part2(line: &str) -> (u32, u32) { +// (0, 0) +// } + +// fn part1(line: &str) -> (u32, u32) { +// let mut digits = line.chars() +// .filter_map(|a| a.to_digit(10)); + +// let d1 = digits.next().unwrap(); + +// (d1, digits.last().unwrap_or(d1)) +// } + + +fn possible(line: &str) -> (bool, u32) { + let a = line.split(':').collect::>()[1].trim(); + + let mut power = [0, 0, 0]; + + let mut possible = true; + + for game in a.split(';') { + let game = game.trim(); + let parts = game.split(','); + let mut l = [0,0,0]; + + for part in parts { + let part = part.trim(); + let num = part.split(' ').next().unwrap().parse::().unwrap(); + + if part.ends_with("red") { + l[0] += num; + power[0] = power[0].max(num); + } else if part.ends_with("green") { + l[1] += num; + power[1] = power[1].max(num); + } else if part.ends_with ("blue") { + l[2] += num; + power[2] = power[2].max(num); + } else { + todo!() + } + } + + if l[0] > 12 || l[1] > 13 || l[2] > 14 { + possible = false; + } + } + + (true, power[0] * power[1] * power[2]) +} + +fn main() { + let contents = fs::read_to_string("./data/2.in").expect(""); + let ans= contents.lines().enumerate().filter(|(_, line)| possible(line).0).map(|(i, _)| i+1).collect::>(); + + let ans2: u32 = contents.lines().map(|line| possible(line).1).sum(); + + println!("{:?}", ans2); + // let contents = fs::read_to_string("./data/1.in").expect(""); + // let data = contents.lines().map(|line| { + // let b = line.to_string() + // .replace("one", "one1one") + // .replace("two", "two2two") + // .replace("three", "three3three") + // .replace("four", "four4four") + // .replace("five", "five5five") + // .replace("six", "six6six") + // .replace("seven", "seven7seven") + // .replace("eight", "eight8eight") + // .replace("nine", "nine9nine"); + + // let it = b.chars().filter(|a| a.is_digit(10)).collect::>(); + // (it[0], it[it.len() - 1]) + // }); + + + + // let ans: u32 = data.map(|(c1, c2)| c1.to_digit(10).unwrap() * 10 + c2.to_digit(10).unwrap()).sum(); + // println!("{:?}", ans); +}