diff options
author | Adam T. Carpenter <atc@53hor.net> | 2023-12-04 13:51:38 +0000 |
---|---|---|
committer | Adam T. Carpenter <atc@53hor.net> | 2023-12-05 14:02:45 +0000 |
commit | 46cee023d2c7473095b65a543076cc1d40d9ab80 (patch) | |
tree | 9dd47e222a64c0aa6bffee84442ce11a058a22e8 | |
download | aoc2023-46cee023d2c7473095b65a543076cc1d40d9ab80.tar.xz aoc2023-46cee023d2c7473095b65a543076cc1d40d9ab80.zip |
chore: common repo
chore: break out part a
chore: refactor to include b mode flag
finish day 2
ignore
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | aoc01/.gitignore | 1 | ||||
-rw-r--r-- | aoc01/Cargo.lock | 7 | ||||
-rw-r--r-- | aoc01/Cargo.toml | 8 | ||||
-rw-r--r-- | aoc01/input | 1000 | ||||
-rw-r--r-- | aoc01/src/main.rs | 58 | ||||
-rw-r--r-- | aoc02/.gitignore | 1 | ||||
-rw-r--r-- | aoc02/Cargo.lock | 7 | ||||
-rw-r--r-- | aoc02/Cargo.toml | 4 | ||||
-rw-r--r-- | aoc02/input | 100 | ||||
-rw-r--r-- | aoc02/src/main.rs | 53 |
11 files changed, 1240 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3f9177e --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +input diff --git a/aoc01/.gitignore b/aoc01/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/aoc01/.gitignore @@ -0,0 +1 @@ +/target diff --git a/aoc01/Cargo.lock b/aoc01/Cargo.lock new file mode 100644 index 0000000..295f643 --- /dev/null +++ b/aoc01/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc01" +version = "0.1.0" diff --git a/aoc01/Cargo.toml b/aoc01/Cargo.toml new file mode 100644 index 0000000..48329c8 --- /dev/null +++ b/aoc01/Cargo.toml @@ -0,0 +1,8 @@ +[package] +name = "aoc01" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] diff --git a/aoc01/input b/aoc01/input new file mode 100644 index 0000000..2fae9ac --- /dev/null +++ b/aoc01/input @@ -0,0 +1,1000 @@ +9eightone +hczsqfour3nxm5seven4 +9twopjqkghmbone +rhrfthv886vflthreeztvzs +tlbtwo62five +ninetwonine234nvtlzxzczx +28sevenseven +2sevensxszqdhjg2threexzjj3 +2fvq +781dk97eight26 +plfrsjtbl6 +sixglj13 +b3seven6817gjpcxseven +3fivenlqcbszfoursixfive6sixfb +zfxbzhczcx9eightwockk +threedssqrlk2qnpkzpkdddt +three67fourkbrlkf7mtbjprrth2 +seven3oneightp +31three +3894sevenfourfour +3ghmqlnine +7nine5zplh +3three9 +ff6dhvzmdrgt +3one3four +fourvptdnbpqcxktwoone4oneone +d6 +4kthx2 +ktjvrmdjf27five8one +94gkvkghfjqpsix +4gzstfpbqblqkxqrvd +eight1nine +8zgpptkqjdglpkssbpgzmn85 +sixpmfjrdmcj76 +six97 +ninesxs7 +one5lvxpfbnlfq +jninepzpgtzq7four5 +fourvjjrttlvdtfour8qxdvlg22two +7pqqdrrvcmvbr8nine57 +gvsdldqqxtjtsnnh147hxfour +5nnph1three +fkfzrdjvmnv9onemhlsjzrmxzzjfourjkvvgn +ggxvcpfxlpjnbtmp3onecmgr +three8rjm2 +88424four1 +jkgmcm7four63three +9twotwo3 +skzzsfvhnine5dgzvdz +eight71l1gthree +shfrsdsgpsfpqgflvhdhsmlxvprqrplpmznfive3224 +2536sevensevenmqtrkzlfqkgp +xnmfive8foursixsix8zjlczq +7threekthree +hcjeightone84qfjqkxxh9 +lnzkqfzmxonefourqsplvj6qthkx4fourpvrh +76onejxthllvxrn82lddxx86 +5mdgxvpseveneightkxltknlz +3sixnfourfourkdpfrgdsjhseventhree +two72 +1781lcxvgz1sixrlxtdhgj +three2kxrhnvkrsv9 +1bklbbkdh2sevenjkcckrkhm +4txdqlj2qjjxxk +zndcdgninethreekdspzsgf5ninetdx +28hkvnlxeight +rntmdthreeone7sixprqdtbsqs12 +fourqgbkxdj9eightthree +eightntrlqffxzjjqrxvthree7eight +threefourxtwo4six2 +nineeightptzqqqlfndtnq44dfhgnzbpjpkkjfkvseight +three8three +9mpjm +twofive4xvxvhhfmqnfqtx3threetln +8zpjkjmdjdclmlblsrqplh +ninethree6seven9pqdbqll5xncgrvp +ninebqczdbvshrsrlfiveonexjfdmxh1three +lppfqnkgzpbc1nine6ninefninepgspdhvjtk +7rbpjrhhrk +nine6fourbztvbhpldcjs2vzvfxhfthsjlsvchfdftfive +qthreegrq7sixvsrtztppnthree2five +nvsvcds67seven6nine +zgttjndqc34 +hdbr6jdknllngzdsevenpphrbdh +jsnm7 +rmcbzk4sevennine12seven +pdhzhfsvnbsbphcpfsbqceightmcqhxtgnine9six +3three2eightsevenkrkhmsttxsix41 +5fournqxkbzthree +one6four4 +2gfslqgszddk3crxtcv4njqn +fourbzmcklqrtp3tgxcks +vfsqvpjl7 +6zkmkm42hjrxlbjsixfoursixmbzsmm +1mgmhtsjkfhgbrxcqlbfb +5fiveeight8 +fourfourmcssix6two491 +6sixznqcronetrklkcmj +ninefive1twothreenbjz6 +threeeightjmvvbbmpxkcb2six7 +hbgxxnthcrfndrncqseven2 +nine6twomlbkcgdfnjninetwoeight +37 +878fivecxpdrbggkfktlghnnprghksz1 +pzpcpfour4nine3mxcfcscs8one +cxklt1eight +eightfivegxblrtcjgbdfourfsczgvm1pqpjz +6eight2nbzbsqvdm9sixeight +ftwone6nine686php +16fivesxmpmkfzf +vfmrtfhsrkpxkg897 +ksix77tzcmhbmnlqone +hdpjfive4two7eightninexjmtxx +sevenxcbbvccjtwo7rjdqmmtwossmqdz +4791 +1dxddjrgeightonenlkrpffqtwofive +qzjksevenninelsbvlczkdglgtlglcrfour6 +66smvxndcrb +3mmthree +291pbztnnmc +oneeight32zzmsc +sfnpmgh5 +4jtnlvgns4bpqbjteightfive +fiveeightnine19mtxstlf +sixrdzqlvndv71 +two2fourthreeqrtkvfqx +nine5threeseven +three6gt8vv1 +threecvrctmlsbgv8one48eighttwo +none1hzlrptbxxh9clltwovnqxt +37svfrkmzndz +1snnmlmpgnine6gkxp9 +mxdspkhrgktmssk6 +vp3ninebqsevensevenpdlgldrrsixeight +ninedvj637seven +fivethree5eightseven6 +one6gzb9onesix8seven +6fivexlnkmljfjfxpzljctwofour +qsrkpdfourtmsmxcbq729lkkjndgvsv +six6seven2seven6 +r9sstthc7kfhjfouronethree +5threelfgmxk262 +pvfrx7one +eightxnrmtjfcrzmflzjffone5htnine +8three37psix5 +8nine1onetrhttvqfour393 +dbteightwobqbjzm4sldhhsix4 +3nphxlsfbjrstkzcsevenfivetbplknqmng +fcctqjdtfgshjflnn82fivektzlvhm +gdznbc758eight3twothree +d9foureight6threencfgfivectl +18xrgdprcvxstdonetwokllvznxffiveseven +6vdtnrr +5qmnmqbs89 +onellnghcl4 +six33 +9rfrqkjpbonelfqcpcvrqonesix +four3brgjgdfs5ckccklxf147frfflvkvbf +one6fourznsnzrdzql +jkbzdjdnfh775 +1five1ssrmqpkpjsevenonertszt +vrn3eight +three3398threenksgf8two +5jptbc +9tfzqlqc7threemh71 +doneightfour1 +7nine9sevensixkcstwo +eight42threefourvjfflgjpsix8 +nznsgzzbrpgphpfourzs72hfsixeight +ninesix3 +rzp3kmjnbvjfbxrqftvjbckqxgh9fournine +5srpnghlpgrleightwoc +dfjsshvnqdbzttbmeighttwoonedvvnt4eight +5eightcqtwoninehxmspsdglqkmttwo5 +ckhgxqvm6 +twoonec3threenine17 +bptqceightcvjxzngrsrhdvzvxhl8 +9sevenrkchssgltgthreetfthreeeight5 +5four1five4hqfournine +81f9sevenjfgzjlbvzb9eight +sixhscsfhtls58 +kbsrhhfjktwo6vksix6five +f96xhv +5seven7slxxbsjqktseven +eighteightvvmdsknbfivegx82fvsnkkx +2ztmbkmtmcdp4mnpfive2ckdlzk +seven5prxngljdckzpdjttcjninenineseven1 +lxk24threekcftttdhg +jjplbxkhxdninethzb12nine +69gxmjk +74vqnkxjmljtgdr +six5mqtblgxddbkjczzv3 +nine98pflpm3qfrssixtwonttbg +ktwoone61fourcnhl +onekvvzbfvx6 +1gdsflnnssixrtnvlninefour9nxknine +6vxdfblmtr32bzftmnsneightzbtcshp +bpk1prxsj +9fivefivercfd8 +svvlv3onepcrzrmmhvcjzxjlhznine +zqffqvjdt5nine +fqkhlcfhmmm4 +onetwo7 +nine37sevenninefive +five3eight +8onesctsrjrbfourfourxrckjkbsmhpsmlj1 +2foureightxcfnfs6 +2three9 +68onenjdjz3sevenfllzrxbmfonefvxrxs +qkteightmss87khseightninetwo +6tvpxrjtwo399eightone +xsvdctmbhd3gtqxlkjkhf8 +qkxteight398vcbpgjz83 +npkqpeight79 +1lzqlvqzvvl +ptk4dzfhhmxbqkeightninexsgjg3scgtjcxjfd +5six8fivekrvkgsl7 +2s +1322kth3 +9twoone4oneseven +9fxnckqrmfive +8xvkkzzkv48 +77one79seven2four +ninetwo42 +vjdcxtpmbnineeight2 +ninetqsqdztthree96kkqzrqqsone +brcbcqjdqzninetwodhxnbmppm1 +phsflcvsixqpgtqbpftz792tznzxfqnp +goneight5eightfourbgjbl244 +8jpcvzxmchseven59eight65two +vmjkgvnmbh63v +gmvp7qhlsqqn5oneeight +tgjprthree31fourdvs +vkssixseven1mksmt3eight +lqcfpbt2seventwo +5zxjk1twopsrxpj1sixgjqbpzg +vqp2threenktcrcnqreightfourtpqjrpnxeightnine +318znqfivergd +six92npqlvqpdmninethree2six +dcsbjdfzthreelcrfmxzfjg18sevenqq +eightsfdpdrp32two2zgkrmdbbrkdxbkpb +8fournfngp9twotwo6three +8nineplmkgqxkr373 +tkdctwo2bcknsclmm +7threeeight83gnffnnvvmmfives8 +1cndhmeightjh8qnfhqnnbvbsrpvnbndqvxqd +fivemddsffzmchtwo57 +two552ln9vrxzclqfckdzdblseight +xbgtwone6hbhbhzqpvtt2jjjlcmbjrdeightnine +1rshxbpeight3xhgb +nine7slhsxqqs6threenine +4one72b +vqjdptqtvbksghfqsninesix9 +vgrdszz2gstfmxtt3 +1three6twoxqrhlrprvp47 +pjjhqxmmx199vdtsvkl3mmktp +qrxqsqxklr6sixonextrbvsvbpxbqkmfmqh23 +5rvmcsfkgfour5hvrhfbcklr +lfbhcszfjhdcmdnfgkjmlzggcxvqxmsznqhhmfourrqkhdzzqnn9twonezlp +txp8cxftvdnb9three4 +3twothree +9kqltlbdbv5jxfqh9mqsrfnccseven +five74 +flqp55qconeeightthree +twoeightsevenone9 +six627khhnzhjxddf4sixlspfmxtpx +d3six +314rcflrzpt6 +oneone7 +srbvrkhdz9sixtwo3fivefpttzvs9one +9pfs +697foursixgdfhdrxtwoninehgdznj +five87 +5threeeight6fzrthree +onecdtfnrljxdninethree4fivenine4qmcqtv +2threeone92fzh +fivesevenrn8 +1tjctrxfbdvtwonekkb +jjcpppxztwo5 +eight4gbqxj4seven +three4nine +3nine2one +eight94 +8xcseven8pjp36 +ninefour94 +5five2 +3ninek +qndtpeight2 +kng8sevenpt +6eightpthcstdvfchnszdlmkmtxndbptpm +twofourthreesevennqcdnvmxgxhbfb6llqgnqn +2gtbpdqj8ninec +715threefour +onebtshxmks8sixspzgdnfkrtljmg5 +jhpfgbvl1dccvsbzknteight5chccclvvczfiveddzx +seveneightfour3three4one7six +75rzsxmnhcn +xh2 +dsvqrsix1nine +6nfknvbxlfzbn7sixsix +psjspjfp7fbhzldkjrjzgkmjqzpc +trzpxxtpxb5onethqjpxgghbkbjqrrjtninetwo +threeghgttkkjqjblld8mlngjtdzone +grmjf4fivesix +xlxfzcrvfvfkjvjprstlxrxndjx7kr2 +ldnspmtwo6bnxrvggp8pjgktbtmjc3 +gvj32 +sixnptnlsmxxrfive48vmrmseven +qrmc1rgmck +three3jpvqpsxqfour +one8dkdhplflcl83twovpkfmzh +beightwoxtjkxzfcqj9four +fivetwo25seven9stznfdjng +8nine6 +seven1six7 +69hkzgmfljnx9three +sevensevenqgoneblnq9 +79one3mqnmonexhnkvphbgcvjzzrvlmh +threezqnjvrpxhssklcpltwofoursix4seven +53jntjrfdbf7tmtjmsqhxsix +5rdfnnmnltwo +35gzm +hbgdptzxd55threenljvkcreighteightnbrlhgdtshtqvtzd +46onedpxdfgjpl +prl91917 +sixbgfjvnqhcqninetwo1one8seven +tkcvr56hh +bxqcqlsevenrzgnrfzz2grfqh2dgzlz +fiveonevlhmmkrcsmzfdb5lbxrfivetwo +nineseven4 +threebrgzvzhbk8cbrkkpmgv2 +clzkgsxrmnsqvvhfd55seven9three +nplbth9cfzjqd6ggone +9db +rbnqzbsmdsixrmnqqdgmx1hx +3xtwo9nine62 +6fvhbdfgfjsldtlvln4five6 +5jc5 +sevenjponethree8seven +eight92rfh4nine1jtwooneightb +qtzninetrnc32three3six +fourhhlztg3foursix9stv +seventqqgj81vvtc1five +8nineoneightg +twomtwo5rncmsr +fournine7rhggqjthreetwoseven +eight6qgnlxjssqqdlv1tlsxcpdbffxmjpptcpcdpzxzlqqtk +ggdvhdfive6 +4bdfmbqthreeldmthreetwolntnbgvlldvszplfxpsdslqlh +nine1five +38fkd8z +5twonmp5fivepmrkfhcgxbcpbjksxqvseven +mjxjzfour3cdhmzbgvqtqxtdfivethree7cb +nine9xrpsqhtftwothreesevennncsdlclttd +6bfndjktxdtbgsgcncqxrqdrs3 +xvcgbgsevenfive6dpceight +jhzonekvqsmtpsgbsrjs8six +lbxlcdzptwothree5199threepxln +two1rktj1eightqppcfdlm2 +336 +446four6seven +threefiveone3hdxkgvdvtwo +2klvktzjps4eightninehhmcdkrbtddclnfour +fivethreejqsjhfd1 +qtgscf1424sevenfour +eight2791sdvjbbt +4one1qhlglzzpkkvtkfivegrjbhpz11 +eighttwodgqrlsfive24jldfhpx +518three73jxfour +four1six5sevennjcxj3 +1k +8seven29 +7xpgfourcskxhftsfnzzr +z16onethreenine +phtqgpdkqzd8 +9tseventhree8tbkbpkzlcs +7nhh7four +7three1xrtcrxpnmk6djzktl +489onenpbtghbv7 +6eightwogd +2eight4hmjzchninejqjnnrrg +kvpffsbghsnzzzlbhkkh3nine +ninethreefour1nld +1four36cjsscrbnv6qnlfivefhrd +3sixone +158hnljkbtrdx +fseventwoeight64 +threeone3tmjntbxzninefives +cqkcltng2nnine5sbmqfj +seven6two1nzbonezn +76onetkgbgdnnff +43threes +lkgncsjkgklnslrmvsevenseven6nine +317ps7clxzs +zmfoneightvxbchjhrzmqvxmkkbfgxnine11fnshxqrcqlkrfb +6sixnine3 +1qttpkjghbr3nine +six6fourfour +eightqfpdlppsjpzjfive7 +67sevenlrqkzcsfvmrsnjpnkt2nxnsfvbn +threethreetnmhkdfive9sfxzdjcdm +nineone33tmgbcflbkgcnjdxk +seven9lmjfbfvcjlfskrm5sevenfour +tx4one8qsrxkxztpseven97 +mgsdjkntwopnvzrpmhgtwoxpskmlnsd7 +588 +4sevenmjqvqnrsixtncnfhlkmppqlxvhzhjkgd9eight +5jgqvm +onefivefour92 +xjbkceight3ctkdndmsh91 +2fcncvrvqfb2bkzgnt8seven7 +nggzzfgqfjrdbsjz7 +4nine5two5five6 +fivefivebzldqdgfsixeightfoursixthree7 +2xqxgg2three8vpvfcphxvthreegprqsjlfeightwogd +nine63 +qoneightlndfive3nine +lbcnltpbgthreefiveb8 +lqvrsjdgnseven83 +7shbfourffjgvpqxeight +3rdxmr4vk7 +36three +1qmvvhqpthtlzq1gmqtqm +dvfctxszmqkpzj2812 +5rnzcjpcxgc2four +twonineone5zbxsrcgndfour +86threeonefourninezcfghkqthrrh +5two1gnhsgzhvbb +xsix1 +xgvjqqqggsix6four +fiveonenineone4drmvcg6 +479bdhgzh6 +gkfrmlpc4fivefive3onetwo +7xk355four1one8 +fivefivethreezxl1pxvxsfktvrseven6 +one8qpvchhggcfmthreeone2 +two575ph1 +four5jmcpmnvsvnsevennntmj +8dcrbfs +trbgp3dphtwoninetpnqrlhqq +twogchrpfourthree6one2two1 +1eighttfcpxqqvndzmhrj61s2 +rdvbmsevennine56twothree93 +54xczjhghc +cjlpbqlhfouronebrrmtxlcqprnbfn9 +tdcjgcdgfive82nine +seven5eightpgmjzkmq1fiveeight +two7qttwo +rltbflkbhthreeeight1sevenklbntffk +four85fivethreehxjgqrvm66kmjvljtd +kbm3 +stdfsixpgtsh7qfvss7 +hvlgddtb3threezpfdeight4fourqbsxbbmone +sixxqcdxxnlt4 +d659ninejtdjhmszl +x8kloneeight1 +6c6 +threeone8fourl8oneseventwo +eightdlhztztmpnzrseveneightltlczb1dkssbntzrnqbqtsskk +hnrvdtwoh41rxppklxhqdqxd +65xxzttvlvcb +6ninexvxddmcr +eighttwo9two2nrcfnfqddmmthc +nine5jgksevensix9 +twothreebgrtdknine47 +hpsvckbfourseven722plpqvgrr +kdqtskqp8bpfjgr2sevenzlhqcqfcchpm +49threespvsqhcbkgfkptplseight4four3 +2lzj48four6nineonetwo +7dfiverkr77sevenvfhrqvnr +three7five5 +lgzmgjnr4 +seven4sbqronefivepptqkqbvntwohttvklqkkmzlv +8sixtwo +ctn4fcdxngvvbthreertnbncskgj +8eightsix3 +two56x +3gmlspbcdhs +6ponesixmtsxmqctbv2kkpp +three6two496 +1mkqhdbsdktwothree5 +bvp626v +oneonerfgbtgf5 +8r7twotwo +1drgmbtsc +qsqb6pfxxvrbnhc7sevenzdzrtkzhjmchnrbzksmkrvcx +hcfj8oneightxg +seven5mgbkgdttnsixmncdtsfchsd4fdhvbpxtq +sbqttjhfds8vcjmgsixfonesixnine +twomggrdbvn4nineqbnqkdhgklcqtzh +63four3nclcxrhdzrjpnb2 +9168 +fivejzzdhd3 +twothreekfddrbtk2fivem +7bscsjdpfjchsxkrshjcrzcznine37eightnddl +two16shfjsixglgvkjtxkvdlqtwotwo +six6q +fiveonethreefourgvtdhf259 +dhgnmprvmx21one +4ninejpzpsgkskbkcfive25 +three2mksq +7fgxztnxnlrsht6seven3ss4 +9ntqfq22eight758 +sevenlqrvsixninexzpx4 +one32rznklfb +five1fourtwo9seven73 +3hhbfxone2eighttwo6pfsg +nineonetwo9zsprntffive4gtn +btsixeightone2xvnsix63 +4rlt3 +qfnhxxzhlninefivefour4rvnbdbzggqninedzshxnv +gdqjzdxvs3threehhkm +vnn185nine +79sixsixfivethreevzskfnpspninesix +two1611 +threethree1mqnfpfnsm1 +kdkxlxtqzqpsxtfj6svt +1nptdgtdpct63vjtpxqf +2four1eight +sixseven2hcnjzbdfk +6threembsdhhtcb9ndqjrgktf +fourg9sixmgb5sixsix +7six1xtwosixninenine +rcvrmldhveight76 +twofbmfczz2fourkfgjcfqst5three +fivesix29qltppptworflvjfggcvrgkfqgmtqjpsh +seven4mdhpflzkkfznmlrc +sevenqtgfpcznnxslptdtwosixzkplmzqbxxll7svgxqjlhlv +qrssxmxsxsixone38hcqnb727 +lrfour9bdlfjcsonefourk +83fiveseven +28qnine4kbeight +seven8five22two +twotpxzbbmztone2ncr2tsixone +eightcsjrqsscfour5 +8rjdsq4lsix3 +bclxzxxqbv7ldgdtq2 +four5xfpztvttd +ninen7flpbfzpone63twohzj +five721 +6gqcxpb +58kphone +five1oneone3rgzhmdbdgqfmvm +jfsphkspl2k2gflslvtwov +889nbcbhgdh48 +vlgsixsevenddzxeight7fsc4 +71ninethree7six +zbvgthreefivefivelpp5 +nkpqfsh8fivethree392 +two6cshbcj97j4lqgjvgl3 +sixone2 +oneeighthscfdlgsg8 +ptlkdqs94bnbtzxpqpqzg +znf8three +eight5qkckqbjdqsxsixpvphcqbvfxsix +fcvbjnvninezsjxfxmplpbbdkdxv2r +vlgbhsjleightkjlgsix4six +htwone7htwotrstvbvnldgct +eightrshrg743998 +3nsrtlmhmz9qzbqkrpnh1fourfive46 +onen8 +fourrbjgknhnthree7 +zb79three3qslrsglbrpsjrqmdrmrlone +hhlqztk22qczrcqnxrtfourtwo3oneightsck +jnrqxrclgn7 +5ninelfqcxfkfive +6fivemtqcmcqbtwo6 +onekdxzcdbjgzkhnhsjnjvxgx3fivesixseven +nhqcx14fourfive3 +45kljxlbzdkbfour96fourone +5975r5txqqltj +vhv88 +6onet25five +4two72nineeight +2foursevenonegcdqz +353v7sixsevensixeightwobk +vsqsxgqxn8xkxftpmtrtssxgnfqcqdnsixdsxhhxgonefive +3four716seven6xmrmhv +one4553two +hqlpmone4rvj +pp7mpsrrxcnkseven3twop +nine8bfkgjkhjqc8ggponefivemkeight +fournlh9sxbvjqmfourtwo +cncvbjvzmcthreesix3d +five8vlsix5qfkfdhjcghcvgz99 +tvxsrmnpsx3rkmxfqg6thkrtbmt +6nine5threeeightsixgvxrmbb8 +mgvxxkkxltwobgghk6 +fkqghfour896bfpvshmsjrbpsz +5twoprnfh3fvsrzgcdqv72 +5ninekbf +tlcmtb78 +smkqlqxrglktzn24four +onengbqghkzxlmbjltndnrq3fouronefourz +bthreetwooneeightdsm1 +hfdskdkqtcsthxcfheight3five +41two +tfourtnmxjsmzclfmbmhjrjln57five +p6six +onethree855 +sixccdpqbkbbxdxcckbvtwo8rsixfdntfqseven +one4863one8 +nine29fourfourqljfour +61bshj +eight7zmtgeight7gkrkdjc +pgcxxjfourrbtzgmphl83 +vbb426seven +7two47ztfhll +5five4 +ninesix64nine +7dtvvlkq9threesevenzlfznvninezxpk +5threebgsv +59threeninethreeccb +295fivegdsgnsixsevenfive +eighthqrxpsvksixgn1 +fiveeight8sixfivelt +threenine2 +zgjlcxttjkjd5threefivefive7 +fivetwo444six +nbcsc6eightsvflh +tsdoneightnjbvfktxvvc2 +zhlctqxqxfp8two1eightrnqsq +82kxfsxnvfour +six2cpvmz4three +twollqjbjs366 +seven7threesjlbcznntzkfljxqsfoureight96 +dxsnlhveightnmxone6hzgntkqbfhkdvxg6 +five8fjfzzntklkdgbplpnvdcpdcd2btnphjnbm2 +1six5drpzsx933one +bqffgcnvp5 +pbjktxtslbbdgq6ninetwobrvbbzhrtsevenc7 +9kprctdnpzone56three +twogbdvsdvzp1 +fnczdrvgzngt9 +three56gsljqzxgnzqpvh17threecvtgpshf +ghlksix3fourfiveeight +one95twotwoonet +twoonesixnmfvtqsd8sixfour8p +eight6twojzd +6fourtwodbzrdghsgngljtj +seven971nbrzgmnine5six +lxskt34sixz271eight +hv7one4five1xfdzxgbbsgml +sevenfourxtccpbxfcnnpxxl7fiveone +onerpvsvrgcn8kclkdgqjlsixfive +mtthreeclxhfivep8threelh +9sevensevenqxhhkonefour4four4 +fivesixsixmxnxg5pxjd +zdkzqtjgsevenseven5zkqslxpll +4sbbltdfvskrnxmlj8 +7fktr +mmdhfmchmb1bqdtsmqzrlqxr +3fbzrj5five +threetwotwonine8 +one7bzxkqkflmksixnine9fourtwo6 +pdcfjzttllhsix3 +51fivercdkdrnine8vhckbxsrvg +rskjjchgone71frdxpsqpmxfrsggmsjspklthree +s6eighteight +j1eight +bjxznqjvneightff5twofjjxtrjlm +fqsdttjbsmjf24cxseven6 +seven1srptcft +tdqeightwo9rcncnqgfoursevenpzknnc4 +4eightone2mdfp +gdxgnnfl3fzxqnvntzpzfcxtwoseven +45khpg2gtnplgrdc28seven6 +twoxcspzzmhj77two +three1blbrqddthree +eight6eightthree +8nine4 +eight82six85nine3 +6eightthree5 +sjplthreev6rqqone +rgzdkzbsnvhd33six5 +vxdkzjprsxf2zpblslcpr +vzfourseventhree7 +five72 +7ssbcsmt4nhbczngjmvdlxrdmkjxxzcczf5 +eightrbtvglxstscklzbfive65eightseven +threethreeqggdxdqrfgpl542ngcvzsvgn +qq7llbmzf6five5one7 +5zhnkvdfzlfpqgfvdpqrcdtvkp +3eightthreeninethreeoneightf +one8six52eighttwoseven +93ggfqxzjzksjtwoonethreefive +7twothreeone +zmkrnqfgpvlfknseven555oneightrgp +jhpkdgppzthreeonetwo6 +qcxtwo1onefivetwo +one3tzsnfive3one +cnbhxfour9kttkpgtr +7bvgbgnlkkhknkghtdpnfourtwonetxb +5nine5 +91one14three +48sevenpqvxdz +fivepmlhzfnmr8sdqhzrdkxeight763 +xtjpzzfn4dshfdqfzpcthreenjnine +nbtdqthreexjsg9 +nkgthgfjm583 +ssixtwo1 +155fiverhvj +onesevennine9 +six9rfjqlglsevenoneseven +8jxktrjzqhhmbtmj +qfpfcl7six +7threelqxspxrl3vcjfltpskxsix5 +1seven1xnltmssnskqxqvjrpsdrqxls +seven9sixninedldsrp8 +twolpfb6 +sixsixmdxvkmnzthreekhftctrvlzvfqthree8 +one1sixfive7 +vd3xxvhvszpnine +75bp63 +six55onetbnxg4 +5five2twoone +threemvptgnhxr69nine5 +2fivepgzbmgdhtgcjh +glsbcqm4six1njjbkslthreeseventhree +4onetwoccjtjqfmb +threetwoonenine6346sjbpznqfr +zb599sevennine +sevenone988 +xkgssdsdftzsevenfour144qvszn +nine9sixthreesevensix1threejfggcrbc +pscvksl685 +1gpdvtwotwo +mlvntk4 +onelblcmxhklxcfxm1 +4onexrngzrfive +eight9nine8 +tbdcd4bmxftnlvc +ninesevenrdpj13 +vxdhgcfdkvgztbhxqh3fmsrnkjheight +sbjpgsjtmgninexkv4 +fourldgztjqnzlktxhmncdnfmdlzzsrrtbfhtc1 +jgmzmvqmrbdfjrtzbtzgxbcbq2ctvxjstzsixnine5 +666six9 +6gxhfive9xxthree5pqf +four394 +lzqone8t95 +2cqhpgmszthreeddkkmleighttwofoursix5 +9sevensixsevendhb869 +2foursix +fivetwobqlbgttxkqkmzxfn6fivejbv1 +8fivesteighttwonine +nine83fkjmmnrzgjtdsmrqtktfvcsevennrqctstwo +eight7gx +jbdpffour68eightfoursix5 +ninesevenmnzmxpxcjjl2one3 +fourtjvtmbxlqnjdrjmgrzrh7rfjtkeight9 +three3twonine32 +fcfourfourmgtsv5 +42foureight8grczvgbg +5eight7fiveeight77five +seven6threeqrvtg +eight2ztmqdjhjtqxhvfiveeight +3dx4eight8nineone +fivethree5drcmbgmntxqqf8pdhtfh +eightdfphzlptxsix81seven +4qhsvhplpn9smqnfgd41 +z18ls7 +threesix8bseven4 +19five57threeseven +ctqfqseven8 +15six88 +oneppbxscshpm2nine6xljmsfpqqcsixeight +one5threexntbrf +nineone6qll2jfhdtvvnrhsgdscxb +87vjlvndc8svdkn +sixlqnfpc2prglgeightfour54eightwoll +6btprcqftmthree5xxntlgrcone5 +blzmjpqkcrfour84xkhqk8kdcrjcksnb +5fivetwothree685sevenkfloneightj +bdthrfmz87four342eight +7zbtbdmfbxgsevenfdlleightnfddrld4 +sixpsixpkvtxgsgbz35 +17fourbjf +6chsffs6fddcftznsix1 +77two16nineeightfour +8nvhfv3two +nkdtwone8gcnjnfgsxtjjmt +onethree79tjlnvgqf +276lxfqrrsxjqbbllthree8 +hhdtmpdpdztcp4threehchrvhtxvbssgpvqk +nine8fivevncfslncdn665 +cltgddlcqt83bnktpsixfour +9lssevenqznhgqvvpp5sjlninebkkpmgmkk +5khrnfzfkkcqnmpfour +8ninerf7rnrh +3hdpvpbrtn +522onehvzjv +7xvhxqcpgd +82rxljgfour6 +gztjs8g5 +mhbtwoneznkzfztm2twooneninethreextttcheightnine +9vrlllbqcnpb7drtcxcpsbz4 +73hqmcgkc273 +mqmc1 +foursix31eightsix +sixeighthkpxg5pqqpfbfcmhjskqqkbtqzsix +4pthsjjkfsr11ghfp56two +threeninebsvtkcrn7eightwos +1bbfmrf67four88four +3vh +three851two3qrtpqseight2 +four56sksixone1nineoneightvtc +six349eight5jtxdc8 +ntvjdm1rhxbqdgsbqpvbdb +21five4six +fivefgnnlbrdjsix1two +nine3eightthreenineseven +75rmqtnqrgnmeight +four5rfgldltfkhtjqjfbxfhhmdd9fourbxvpdcgx +onesixtwoqcbqndpgt72three +2xtsgslrgrf1 +psmhzczsonenine8fznbt6stvcsszlrsccfmgcpf +38sbpzgfvjtwo3 +two1threecjmgjsm +nine19 +nine2lchndsevensix99dh +qbknlrd5rsone +264gzqrvckzvnsevenxdj +6jzppeightgcljcnnkgxhbmbv2gsrzszbdrmvzdxhktjmdr +426twoc2twothree5 +sevenfour3sixsixqncc +zfjtprrs89 +99threedbknkl +vrpfjvveightgd4gpvnpdbp46three7 +8ninejttx +gxdmgseveneightgncxrxdtx9threeseven +two9fivenine283xxtwo +four5four91vbqvfhggzjd +9seventhreegrkm9vb2rmvhseven +8gqftwonexp +fourqnvdshvfive7 +dstmqp6hgzqldhxkncjbxh +31nine +nine84fourpnhxltmb7onesix +19pseven7four +foneightfourfour8cvbl +four9qldqps +4tgrjglvtgghvkhtttwossgrfbvlpbxlhfmq +7fouronehjdmx +6ninevvrfqntzmjxpc +ninedfmxcnhth1279one +7gzjmbgonebjxmrvhjxrone +fivelpsstxjllxfive5sevenkbqmgbn +2three81zxvtvnjqfsb +four9threesixzlknkxz8one1pvxff +seven33219 +dlnvxppbzrlczfqrcbzcvfour7seventgnn +26tzzcmlpxfour1rq5jzmssgxhvrzbk +1threekjvfnxvrk7bhljthreenine1 +98nine +9one56six5seven5 +27three18 +7smbbsvxbvs +717one5eightninegnine +fcpnvdkp6twonez +85dgdlfive +pmtzmsjblninevpvcsz9mq75 +4ninepnsdmjkx3four7three +563nine +oneoneeight8twomrxprgdtxm7eight +1fivefivekkqhrzqjjklq +6hhthnkdonehlrvc81three +jtwonetwothree5znqsvfour5czgsqvvtgg +fcfskbfive9eight +221frgs5nineeightwojj +jdmgmsglmpl3 +479 +fltqdrksdzvdmkfive86 +ssnnvxfourthree5 +95jcfrtfbr +56941ninethree +rsfeightwo8seven78kmvdzbrmthree +xpjqjknchcv8twojzone5sevenone +61sixninekzkgnlmd +41gpbxsk8qz +four5pjsix5bdfbsixone8 +fiveeightlpghqqnjdfivetwo7vtgkjtwo6 +sevenninexxvjnvvhqfiveeight46qtfour +8znvhldrsdfqpnhccthree1 +fvoneglhqtvfbr3four +eightdhcngdmvnklgsix47 +6zcqb +bkkvhbvgsixgdgckjzsj5 +gtjckhq73495fq3 +rgrrkksdcftpkkrpssgfjtv7twonine +sixsix31 +5mfd3kjvhmvbhfive9pb2 +8six6xqvvxtbmqqninefourlpzmmhdsk4 +two3sixxtjrl8 +1jhtknlffcjr27 +1fivebnvbqt6 +8ninerdphtvbk11sixrkzszcdngt +sixsevenfour53sixbqhcjcthree +dcpninebpbxdrdtqpm933six +1eightsix4659rtgbcgb +two84pslqtrslbxqnksxcxhqrcmonencxqffmt +ftzzgbzvvbj562cffcvncsbhrzzv +two6gmjd +jlfgq31four9seven194 +dzeightwotwofour39eightcgthzhp +6sbgbqbb5onegxkrcfiveninephshfrftwo +46lgnjvfjt9vjtqmjl18 +mcrsjvfive2 +45gbrpfgttwo5threejlksix +1rpmkjxsdeight7hnpjjkthree +9vvcchtxdltmfnxtqmp1mdntlj +eight8mkzgsdrdhthree6four +33lfivepcthfgfivethreeffftjmgsxl +9bhmz8btcklgsixjdfxlfour +vchvmnn7pk +sevensix4 +3fourthree4seven +oneeightfournine7 +p1one8zcsd1seven9 +32t1fhjzbkmfrgmtwofive6 +1fivelxjmvstxnblxlqdxvmbqcpdzzr7eightone +mktoneightskrgbvmptm89cxv3 +geightwodd88ctqzfourfivesix1six +one6seven2n +9nine8dngqbrp +h5dtnqzhpqjnnrxxcrjc7nineeight +four2prxrhrcvfour +2onexdnj7 +7xdnndpzsbplfrfxdglrsqrc4 +chbmstkhdfdmqsevenone31 +fourthree99 +44fflxqlxjr9pcsthrjt9 +7rdfour24sixbk8 +vnhfzbr4nine2qgoneseven +5h8ntz8jscjpkhg2 +tcsz9ninelbfsxppbjpp8tbxctrtpfz +three4nineeightgfl715 +1tdhxlqbkx69ninenine8 +46ninerjqfivenhcdgprl +199mhhsixdplthqpthree7 +eightfourxjjgrhmdmddzclgbseven9nine +19three +ckqzd2twomdxz +7jxtpmnhtwo6 +tgclgnineone4qqcjgsix4 +fourjvxcmqpvxtsevenznlgdx13twohghrxdp +sjtp5nine4gcrdxscxxtgvscnthree7 +3two5czdn1sixbpzzsfhdhqfour +xflzgzcm7ninepcvfpmssixtbjzb +7zmlcpsjneight7pbtqbkgl +sixdsvgjqfseven7czsthree +twopgmndmtzzsmxcjptg4sqslhkseight9one +2threexgbtcjp +twonfknjvlks5mcpmjcqjfsnfbfivetvzprlx22 +3threefoursevenrkqfrxgx +fiveqpstwo4rnxd75fjgpv +82sglxctseven +fourmxnrhzx8xkzvgtrdlzbzmlhfbf1 +1fivejqvrtl47tshfgrc3 +97twoonerntrscpb +2ljplbrsgrjnlktngjd +854rmtrkhjzrx2nine9ldqrqq +onejmrcmphzksixfbbftwo7 +sevenkncjddrlsixzmb94one +twolgqcnh6 +6oneightsr +jjl4seven +23eight4 +8eight277kts7 +8937 +9cbphfncslbvn23dzcpz4pqzlgfjl8 +zqkhnb7hm7grdpnq +blczr9nineseven +2mxzhtxbjjq56onexrssstc71 +vkvmmgreightgdbqq6six +1six8sixsevengnqbqgxtwofivem +741tfbvpnfour1sgone +glvctfourgmlrqbpsevenvksevensix9 +49four +six9five2sevenrone +fournvrctlkztwosixsevensixvrz1one +ffjl5gztldndtqnb5vjp +bjckqhbnthreethreeonervtkdvxkgf43 +mhrckkcgqdms1rvrfcvpsn3trmfltvbhr4sixlpslr +tffxs4sevenzsdxz +onetgj2mtrdqnsixfzvcscfourn +3jsdxk +flhmdp6eighteightmcxcvffive +bxbzngmpds28 +onexlqp3bhh +jlsjbs2 +1twoonefivenvvhjf +864two7ninejzmpzp +eightthreeseven2nnkvlzxkvhszfpqzhl37ddqvnxg +xkkkskcvsscmmgc2ninephntx6 +lpklkskgcsr8eightsbxcjx +4threelfvzndfive +nx9ninekvzzdlncblkdqbgspdfkcx +tfn5kx6twojmzgbdznc2 +5bszzkpcdxqkvkf7tgcone2 diff --git a/aoc01/src/main.rs b/aoc01/src/main.rs new file mode 100644 index 0000000..62db893 --- /dev/null +++ b/aoc01/src/main.rs @@ -0,0 +1,58 @@ +use std::{env::args, io::stdin}; + +const NUM_WORDS: [(&str, &str); 9] = [ + ("one", "1"), + ("two", "2"), + ("three", "3"), + ("four", "4"), + ("five", "5"), + ("six", "6"), + ("seven", "7"), + ("eight", "8"), + ("nine", "9"), +]; + +fn word_to_digit(word: &str) -> &str { + match word { + "one" => "1", + "two" => "2", + "three" => "3", + "four" => "4", + "five" => "5", + "six" => "6", + "seven" => "7", + "eight" => "8", + "nine" => "9", + num => num, + } +} + +fn get_digits(line: &str) -> u32 { + let mut found = Vec::new(); + let find_words = args().any(|b| b == "-b"); + + for (word, num) in NUM_WORDS { + found.extend(line.match_indices(num)); + + if find_words { + found.extend(line.match_indices(word)); + } + } + + found.sort(); + + let first = word_to_digit(found.first().unwrap().1); + let last = word_to_digit(found.last().unwrap().1); + + let combined = format!("{first}{last}"); + combined.parse().unwrap() +} + +fn main() { + let i: u32 = stdin() + .lines() + .filter_map(|l| Some(get_digits(&l.ok()?))) + .sum(); + + println!("{i}"); +} diff --git a/aoc02/.gitignore b/aoc02/.gitignore new file mode 100644 index 0000000..ea8c4bf --- /dev/null +++ b/aoc02/.gitignore @@ -0,0 +1 @@ +/target diff --git a/aoc02/Cargo.lock b/aoc02/Cargo.lock new file mode 100644 index 0000000..1590d3e --- /dev/null +++ b/aoc02/Cargo.lock @@ -0,0 +1,7 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "aoc02" +version = "0.1.0" diff --git a/aoc02/Cargo.toml b/aoc02/Cargo.toml new file mode 100644 index 0000000..87ba57d --- /dev/null +++ b/aoc02/Cargo.toml @@ -0,0 +1,4 @@ +[package] +name = "aoc02" +version = "0.1.0" +edition = "2021" diff --git a/aoc02/input b/aoc02/input new file mode 100644 index 0000000..df26935 --- /dev/null +++ b/aoc02/input @@ -0,0 +1,100 @@ +Game 1: 1 green, 4 blue; 1 blue, 2 green, 1 red; 1 red, 1 green, 2 blue; 1 green, 1 red; 1 green; 1 green, 1 blue, 1 red +Game 2: 2 blue, 2 red, 6 green; 1 red, 6 green, 7 blue; 10 green, 8 blue, 1 red; 2 green, 18 blue, 2 red; 14 blue, 3 green, 1 red; 8 green, 1 red, 9 blue +Game 3: 6 green, 5 blue, 9 red; 4 blue, 1 green, 13 red; 9 green, 14 red, 1 blue +Game 4: 14 green, 3 blue, 16 red; 20 red; 4 green, 2 red, 1 blue; 10 blue, 11 green, 18 red; 3 red, 3 blue, 6 green; 2 green, 18 red, 9 blue +Game 5: 5 green, 4 blue; 1 red, 3 blue, 2 green; 4 green, 2 red, 15 blue; 11 blue, 8 green, 4 red; 4 red, 3 green; 4 red, 3 green, 7 blue +Game 6: 6 blue, 10 green; 2 red, 6 green, 2 blue; 4 red, 4 blue, 1 green; 2 blue, 7 green, 2 red +Game 7: 14 green, 3 red, 2 blue; 5 blue, 3 green, 2 red; 1 green, 3 blue +Game 8: 7 red; 3 blue, 9 red, 1 green; 5 green, 5 blue, 7 red; 1 red, 2 blue +Game 9: 3 green, 4 blue, 1 red; 3 blue, 12 green, 18 red; 7 green, 9 red, 8 blue; 2 blue, 10 red, 12 green; 4 blue, 1 red, 1 green; 4 blue, 6 green, 6 red +Game 10: 2 blue, 4 green, 2 red; 7 green, 4 red; 5 red, 8 green +Game 11: 1 blue, 10 green, 15 red; 1 blue, 2 green, 2 red; 5 green, 10 blue, 8 red; 13 red, 7 blue; 1 red, 9 green, 4 blue; 9 blue, 9 red, 8 green +Game 12: 1 green, 10 red, 3 blue; 14 red, 1 green, 4 blue; 6 red, 3 green, 12 blue; 13 blue, 1 green, 18 red; 4 green, 14 red, 7 blue +Game 13: 1 red, 3 green; 2 green, 1 red, 5 blue; 1 blue; 1 green, 7 blue, 1 red; 1 red, 2 green, 7 blue +Game 14: 7 blue, 9 red, 1 green; 8 red, 2 blue; 11 red, 18 blue, 4 green; 2 blue, 3 green, 1 red; 1 green, 8 red, 9 blue; 2 blue, 8 red, 1 green +Game 15: 8 blue, 3 green, 15 red; 13 red, 10 blue; 2 red +Game 16: 1 green, 1 red; 1 blue, 2 green, 2 red; 1 blue, 4 red, 1 green; 3 green; 2 blue, 3 green, 4 red +Game 17: 1 green, 3 red, 14 blue; 1 red, 2 blue, 2 green; 3 red +Game 18: 1 red, 2 green, 8 blue; 2 blue, 14 red; 4 blue, 2 red, 2 green; 6 red +Game 19: 2 red, 11 blue, 18 green; 3 red, 6 green, 3 blue; 7 green, 1 red, 10 blue +Game 20: 10 red, 1 blue, 4 green; 4 green, 3 blue; 10 green, 13 red, 4 blue; 2 red, 7 green; 4 red, 3 blue, 5 green; 13 red, 1 green, 4 blue +Game 21: 20 red, 4 green, 5 blue; 10 red, 11 green, 4 blue; 1 red, 8 blue, 14 green; 11 green, 8 blue, 15 red; 8 blue, 2 green, 13 red +Game 22: 2 red, 11 blue, 4 green; 1 blue, 3 red, 6 green; 6 green, 1 red, 1 blue; 4 green, 7 blue, 3 red; 11 blue, 6 green, 4 red +Game 23: 6 green, 3 red, 1 blue; 17 green, 11 red; 1 red, 2 blue, 13 green; 13 green, 19 red +Game 24: 1 blue; 12 red, 1 blue; 1 red; 12 red, 1 green, 1 blue; 11 red, 1 blue; 12 red, 1 green +Game 25: 12 blue, 6 red, 3 green; 8 green, 14 blue; 11 green, 5 blue, 6 red; 4 red, 12 blue, 8 green +Game 26: 15 red, 13 green, 9 blue; 9 blue, 8 green, 7 red; 2 green, 6 red, 3 blue; 1 blue, 7 red, 3 green; 13 blue, 4 green, 18 red +Game 27: 9 blue, 5 red; 15 red, 12 blue, 3 green; 12 red, 12 blue, 1 green +Game 28: 18 red, 4 green; 4 green, 6 red; 1 blue, 6 green, 19 red; 9 green, 17 red; 4 green, 5 blue, 18 red +Game 29: 7 green, 6 red, 6 blue; 6 blue, 19 red, 4 green; 4 green, 4 blue, 13 red; 5 blue, 15 red, 10 green; 2 green, 6 blue, 5 red; 8 red, 10 green, 6 blue +Game 30: 1 green, 13 red, 12 blue; 1 red, 2 blue; 11 blue, 1 red, 1 green +Game 31: 8 green, 18 blue, 17 red; 4 red, 8 green, 6 blue; 9 blue, 7 green; 3 green, 1 blue, 12 red; 5 red, 10 blue, 11 green +Game 32: 17 red, 17 green, 7 blue; 18 red, 16 green; 1 blue +Game 33: 16 blue, 3 red; 9 blue, 1 red, 2 green; 3 green, 7 blue; 1 green, 4 red; 3 green, 1 red, 8 blue; 5 blue +Game 34: 5 blue, 8 red, 1 green; 9 red, 10 blue, 7 green; 1 green, 14 blue; 8 blue, 4 red, 10 green; 15 blue, 8 green, 7 red; 2 red, 6 green, 3 blue +Game 35: 13 red, 9 blue; 7 blue, 16 red, 10 green; 4 red, 6 blue; 3 blue, 12 green, 7 red; 8 blue, 6 red; 10 blue, 3 green, 2 red +Game 36: 1 blue, 9 red, 2 green; 11 red, 3 blue, 2 green; 2 green, 6 red; 8 green, 11 red, 3 blue; 4 green, 7 blue, 11 red; 9 green, 8 red, 2 blue +Game 37: 8 green, 3 blue, 4 red; 14 blue, 10 green, 3 red; 19 green, 2 blue, 7 red +Game 38: 2 green, 3 red, 3 blue; 3 green, 9 red; 13 blue, 8 red; 6 red, 5 green, 13 blue +Game 39: 8 red, 5 blue; 4 green, 5 blue, 3 red; 18 red, 2 green, 6 blue; 2 green, 5 blue, 17 red; 1 green, 2 red; 5 green, 6 blue +Game 40: 12 red, 4 blue, 1 green; 11 green, 20 blue, 4 red; 10 blue, 4 red +Game 41: 2 green, 2 blue; 2 red, 2 green; 2 green, 2 blue, 10 red +Game 42: 6 green, 3 blue; 2 red, 2 green, 1 blue; 3 blue, 5 green, 6 red; 6 red; 1 blue, 6 green, 12 red +Game 43: 1 blue, 4 green; 1 blue; 2 blue, 8 red, 2 green; 2 blue, 1 red, 4 green; 1 blue, 4 red, 4 green; 4 green, 7 red +Game 44: 8 green, 9 red; 1 red, 2 blue, 13 green; 4 blue, 8 green, 17 red; 13 red, 13 green; 1 red, 9 green; 19 red, 3 green, 3 blue +Game 45: 10 blue, 2 red, 1 green; 6 green, 5 red, 8 blue; 3 blue, 1 red; 4 green, 10 blue, 4 red +Game 46: 3 red, 8 blue; 6 blue, 7 green, 6 red; 6 green, 1 blue, 7 red; 8 red, 1 green, 5 blue; 9 red, 12 blue, 10 green; 7 green, 5 red, 1 blue +Game 47: 5 red; 2 blue, 2 green, 5 red; 3 green, 7 red; 14 red, 3 green, 2 blue +Game 48: 7 blue, 12 green, 2 red; 11 green, 10 blue, 1 red; 1 red, 13 blue, 2 green; 14 green, 2 red, 9 blue; 2 red, 12 green, 3 blue; 2 red, 7 blue +Game 49: 4 green, 5 blue; 9 blue; 10 blue, 5 green, 2 red; 10 blue, 2 red, 2 green; 1 red, 1 green, 4 blue; 2 blue +Game 50: 2 red, 2 blue, 7 green; 7 red, 9 green, 3 blue; 5 red, 10 green +Game 51: 15 red, 9 blue, 4 green; 5 red, 2 blue, 15 green; 4 blue, 3 green, 20 red; 12 green, 1 red, 10 blue; 10 green, 5 blue, 13 red; 9 red, 10 green, 11 blue +Game 52: 3 blue, 12 green, 1 red; 6 green; 1 red, 8 green; 1 blue, 1 green, 1 red +Game 53: 10 green, 7 red, 12 blue; 9 blue, 6 green, 2 red; 8 green, 5 blue, 5 red; 7 blue, 16 green, 11 red; 6 red, 8 blue, 13 green +Game 54: 10 green, 6 blue, 3 red; 6 green, 2 red, 8 blue; 9 blue, 11 green, 2 red; 10 green, 1 blue, 3 red +Game 55: 4 blue, 1 red; 3 red, 7 blue; 12 red, 4 green, 8 blue; 3 green, 5 blue, 1 red; 13 blue, 12 red, 1 green +Game 56: 12 blue, 15 green; 1 green, 7 red, 11 blue; 5 green, 9 blue, 1 red; 8 red, 5 green, 6 blue +Game 57: 4 green, 11 blue, 18 red; 14 blue, 14 red, 16 green; 7 red, 15 green, 3 blue; 18 red, 20 green, 8 blue; 12 blue, 9 red, 16 green +Game 58: 10 blue, 9 green, 8 red; 13 green, 6 blue, 8 red; 8 green, 4 red; 4 blue, 1 red, 18 green; 7 red, 10 green, 10 blue; 15 blue, 10 green, 3 red +Game 59: 17 green, 2 blue, 2 red; 2 blue, 1 red, 8 green; 14 green, 1 red, 1 blue; 15 green, 3 blue, 2 red; 2 blue, 8 green, 1 red; 1 blue, 1 red, 8 green +Game 60: 1 green, 1 blue, 1 red; 4 blue, 3 red, 2 green; 13 green; 2 blue, 2 red, 8 green; 4 red, 12 green, 4 blue; 4 green, 4 blue, 4 red +Game 61: 3 blue, 7 red; 5 blue, 8 red, 1 green; 1 blue, 8 red; 10 blue, 2 red, 1 green; 1 green, 5 blue, 2 red +Game 62: 10 red, 2 green; 8 blue, 7 red, 2 green; 4 green, 2 blue, 10 red +Game 63: 1 green, 3 blue, 5 red; 6 green, 5 blue, 2 red; 3 blue, 7 red +Game 64: 6 red, 20 blue; 4 red, 3 blue, 2 green; 3 green, 19 blue, 6 red; 2 green, 6 blue, 3 red; 13 blue, 5 green, 5 red +Game 65: 6 red, 9 blue, 20 green; 6 red, 16 green, 4 blue; 12 red, 6 green, 5 blue +Game 66: 2 blue, 5 red, 4 green; 13 blue, 2 green; 1 green, 6 blue +Game 67: 4 green, 5 blue, 2 red; 1 red, 14 blue, 6 green; 1 green, 14 red, 5 blue; 18 red, 16 blue; 15 blue, 8 red, 18 green; 1 green, 18 red, 6 blue +Game 68: 1 blue, 9 red, 7 green; 7 red, 1 blue, 6 green; 5 green, 1 blue, 8 red +Game 69: 12 green, 3 blue, 4 red; 9 green, 8 red, 7 blue; 4 blue, 5 red, 10 green; 4 red, 5 green, 7 blue; 9 green, 4 red, 2 blue; 3 green, 13 blue, 1 red +Game 70: 9 red, 1 green, 8 blue; 11 green, 13 blue, 12 red; 3 blue, 5 green, 8 red; 1 red, 14 blue +Game 71: 10 blue; 2 green, 8 blue, 9 red; 5 red, 1 blue +Game 72: 3 green, 5 blue, 5 red; 1 blue, 1 red, 2 green; 4 red, 4 blue, 1 green; 5 blue, 4 red, 1 green; 6 blue, 3 green, 5 red; 5 blue, 1 red, 4 green +Game 73: 3 red, 1 green, 1 blue; 7 green, 2 red, 1 blue; 2 green, 1 blue, 3 red; 1 red, 4 green, 1 blue; 3 red, 5 green +Game 74: 5 blue, 1 red, 4 green; 3 red, 2 green; 4 red, 6 blue; 2 red, 2 blue; 1 green, 4 red, 8 blue; 5 blue, 4 red +Game 75: 3 red, 5 blue, 3 green; 9 green, 6 blue, 7 red; 2 green, 3 red, 12 blue; 14 green, 4 blue, 10 red +Game 76: 1 blue, 7 red, 1 green; 6 red, 1 blue, 2 green; 4 red, 2 green; 3 red, 1 blue; 16 red, 1 green +Game 77: 3 red, 10 blue, 1 green; 4 red, 7 blue, 3 green; 7 blue, 6 green, 7 red; 5 green, 15 blue, 7 red; 12 green, 5 red +Game 78: 6 red, 10 blue, 15 green; 6 green, 11 red, 4 blue; 6 blue, 8 red; 4 blue, 7 red, 2 green; 11 green, 7 red, 11 blue; 3 blue, 14 green, 6 red +Game 79: 14 red, 6 green, 4 blue; 13 red, 6 blue; 6 red, 13 green, 4 blue +Game 80: 8 red, 2 blue, 8 green; 6 red, 10 green, 4 blue; 3 red, 9 green; 2 green, 8 blue, 7 red; 7 blue, 3 red, 11 green; 1 red, 12 green, 8 blue +Game 81: 9 red, 4 blue, 11 green; 1 blue, 4 red, 2 green; 5 red; 3 blue, 2 red, 2 green; 14 red, 12 green +Game 82: 5 green; 2 blue; 2 red; 1 blue, 2 red, 11 green; 8 green, 2 red, 1 blue +Game 83: 3 green, 7 red, 6 blue; 7 red, 7 green, 11 blue; 7 blue, 13 green, 7 red; 12 blue, 10 red, 2 green; 1 green, 11 red, 7 blue; 12 blue, 9 red, 9 green +Game 84: 5 blue, 1 green; 16 green, 4 blue, 8 red; 7 red, 5 blue, 16 green +Game 85: 9 green, 20 blue, 7 red; 19 blue, 14 red, 2 green; 10 green, 2 red, 10 blue +Game 86: 1 green, 3 red, 5 blue; 9 red, 2 blue, 6 green; 8 green, 14 red, 3 blue; 18 green, 2 blue, 7 red; 2 blue, 10 red, 14 green; 17 green, 4 blue, 12 red +Game 87: 4 green, 8 red, 13 blue; 7 red, 13 blue, 4 green; 1 green, 8 blue +Game 88: 9 blue, 11 red; 5 green, 7 blue, 12 red; 10 red, 2 green, 1 blue; 2 blue, 5 red, 5 green; 7 red, 6 green, 9 blue; 1 green, 10 red, 5 blue +Game 89: 7 red, 2 green, 1 blue; 1 blue, 2 green; 6 red, 1 green; 7 red, 1 blue; 3 green, 3 red +Game 90: 8 blue, 2 red, 3 green; 9 green, 4 blue, 3 red; 7 green, 11 blue, 2 red; 13 green, 12 blue, 8 red; 10 blue, 2 green; 5 green, 1 red, 9 blue +Game 91: 2 red, 2 green, 4 blue; 5 blue, 2 red, 16 green; 11 green; 3 blue, 2 red, 8 green; 4 green, 3 blue +Game 92: 8 red, 12 blue, 3 green; 11 red, 10 blue, 6 green; 14 red, 8 green, 14 blue +Game 93: 3 green, 2 red, 3 blue; 3 green, 3 red, 1 blue; 2 blue, 16 red, 3 green; 2 green; 5 green, 2 blue, 2 red +Game 94: 5 red, 2 green; 9 red, 3 blue; 2 green, 2 blue, 5 red; 3 blue, 8 red, 2 green; 8 red, 1 blue, 1 green +Game 95: 3 blue, 4 green, 7 red; 7 red, 1 green, 15 blue; 6 blue, 2 green, 7 red +Game 96: 2 blue, 1 red, 6 green; 7 blue, 8 green; 1 red, 7 green; 2 green, 14 blue, 1 red; 3 blue, 1 red, 7 green; 4 blue, 11 green +Game 97: 2 red, 9 blue, 8 green; 3 green, 5 blue; 6 green, 1 red, 9 blue; 2 red, 13 green, 1 blue; 2 green, 2 red, 2 blue +Game 98: 2 blue, 1 green, 1 red; 4 blue, 5 red, 1 green; 4 blue, 3 red, 2 green +Game 99: 17 red, 2 blue, 4 green; 4 green, 8 red, 6 blue; 5 red +Game 100: 6 red, 4 green; 3 red, 2 blue, 9 green; 1 blue, 5 green, 14 red; 1 blue, 2 red, 2 green; 9 red, 1 blue, 14 green; 2 blue, 11 green, 8 red diff --git a/aoc02/src/main.rs b/aoc02/src/main.rs new file mode 100644 index 0000000..b8b5eae --- /dev/null +++ b/aoc02/src/main.rs @@ -0,0 +1,53 @@ +use std::{collections::BTreeMap, env::args, io::stdin}; + +fn rounds_are_possible(rounds: &str) -> bool { + !rounds + .split(&[';', ',']) + .map(|round| round.trim().split_once(' ').expect("bad input whitespace")) + .map(|(score, color)| (score.parse::<u32>().expect("input score not digit"), color)) + .map(|(score, color)| { + color == "red" && score > 12 + || color == "blue" && score > 14 + || color == "green" && score > 13 + }) + .any(|p| p) +} + +fn rounds_power(rounds: &str) -> u32 { + let mut maximums = BTreeMap::new(); + + for (score, color) in rounds + .split(&[';', ',']) + .map(|round| round.trim().split_once(' ').expect("bad input whitespace")) + .map(|(score, color)| (score.parse::<u32>().expect("input score not digit"), color)) + { + if &score > maximums.get(color).unwrap_or(&0) { + maximums.insert(color, score); + } + } + + maximums.values().product() +} + +fn main() { + let b_mode = args().any(|b| b == "-b"); + let mut lines = stdin().lines(); + let mut possibilities = Vec::new(); + + while let Some(Ok(line)) = lines.next() { + let line = line + .strip_prefix("Game ") + .expect("input missing game prefix"); + let (id, rounds) = line + .split_once(": ") + .expect("input missing colon separator"); + + if !b_mode && rounds_are_possible(rounds) { + possibilities.push(id.parse::<u32>().expect("input id not integers")); + } else if b_mode { + possibilities.push(rounds_power(rounds)); + } + } + + println!("{}", possibilities.iter().sum::<u32>()); +} |