summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAdam T. Carpenter <atc@53hor.net>2023-12-04 13:51:38 +0000
committerAdam T. Carpenter <atc@53hor.net>2023-12-05 14:02:45 +0000
commit46cee023d2c7473095b65a543076cc1d40d9ab80 (patch)
tree9dd47e222a64c0aa6bffee84442ce11a058a22e8
downloadaoc2023-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--.gitignore1
-rw-r--r--aoc01/.gitignore1
-rw-r--r--aoc01/Cargo.lock7
-rw-r--r--aoc01/Cargo.toml8
-rw-r--r--aoc01/input1000
-rw-r--r--aoc01/src/main.rs58
-rw-r--r--aoc02/.gitignore1
-rw-r--r--aoc02/Cargo.lock7
-rw-r--r--aoc02/Cargo.toml4
-rw-r--r--aoc02/input100
-rw-r--r--aoc02/src/main.rs53
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>());
+}