From 72ca03a2f13770f0c02d60115ef493609ebb2ba7 Mon Sep 17 00:00:00 2001 From: Avior Date: Sun, 3 Dec 2023 23:31:52 +0100 Subject: [PATCH] feat: Add the four first days of 2023 Signed-off-by: Avior --- 2023/day-1/input.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++ 2023/day-1/part-1.ts | 10 + 2023/day-1/part-2.ts | 43 ++ 2023/day-2/input.txt | 100 +++++ 2023/day-2/part-1.ts | 38 ++ 2023/day-2/part-2.ts | 46 ++ 2023/day-3/input.txt | 140 ++++++ 2023/day-3/part-1.ts | 72 +++ 2023/day-3/part-2.ts | 83 ++++ 9 files changed, 1532 insertions(+) create mode 100644 2023/day-1/input.txt create mode 100644 2023/day-1/part-1.ts create mode 100644 2023/day-1/part-2.ts create mode 100644 2023/day-2/input.txt create mode 100644 2023/day-2/part-1.ts create mode 100644 2023/day-2/part-2.ts create mode 100644 2023/day-3/input.txt create mode 100644 2023/day-3/part-1.ts create mode 100644 2023/day-3/part-2.ts diff --git a/2023/day-1/input.txt b/2023/day-1/input.txt new file mode 100644 index 0000000..8e8cb86 --- /dev/null +++ b/2023/day-1/input.txt @@ -0,0 +1,1000 @@ +fivepqxlpninevh2xxsnsgg63pbvdnqptmg +eight8zlctbmsixhrvbpjb84nnmlcqkzrsix +hkxqfrqmsixfplbkpkdfzzszjxmdjtdkjlprrvr3gghlrqckqtbng +zkjkctxvssix1dqb22five +4dtlmkfnm +four539tkqrc +blxqb7onetvmfjlvglrnbtdonegfourfour +lqzrclnlzrvdstgtoneseven1xrvdchn29 +tczmtfkqhthreetwo7five +kncvqpzdtfs7 +6seveneighttwonine2 +sixbfgxndseven9nvzr6ftsqb1 +ddgjgcrssevensix37twooneightgt +zclvhfz91zbdkrreightbzqttdxrone +five18twofiveclqqsrsfdbrt +ninedflcfblvjhr3 +32eightnmlv5lgbckz +nine7xqz81dtpld +2tmbddjl9cgcrvnrpgl +5twofivedlk1pfjjmctjh +nvcchgjnine9sixtwompfrp +685 +54two7twobsfpkxjninefoureight +fgsvpxcx4zzxfqdkssixgbssrqmnpz9threethreefour +three3sixnine38bprqqkpdr6seven +xgmc3sixthree1 +3eight2twojqsvbtftp +six7sixtwos1mhzfpzmhfcslrmfive +bmxmxzldtngrgbt538jzqvjlrrc4 +sevenxqzcrgzvfiveggxlxf4fiveppvrxjkdk9 +one8six +fourdlhgvx1onesix +onelpbxfnjm28gjjs5 +pdb69six6cdxmxxbfour5five +eightjndqhjzv43five631 +9fourldr92eight +three1sevensrxzlnxrnine7four +eightfive4bldzgtpvslgkrmlmkftpone +22357fourone6 +sixrzhgvzsjsix9dbldsevenfivedtnbkjjxfc +mcgfpfh1three +ninetwo1 +sqgtvmcvbfsslsdnine19three1two +f5nine7six +1sbggj +5eight56342h +3onezdfsvngvjg4fqeight +sixncfrkbqthreeqsbpvspjt4 +fjseventwo4k +five8five +4oneone14 +prpnzmnsjsfivetdrqpt54 +2threefour2fourrkkndqzq +lreightfourfour12sfjkjmbntkgfjv +sixfour93 +eightfivetwo1one +three5eightjk5twothreeseven +tz62twofivetclnxfp8dhsxzgpxhsfhx +fivefivecrjhmbrk6three +58fiveseven3five +nine4six6hqmqqqbktkfvmb +7five8k +5kbfjmqppvrbjdkc +hkpchj2gknjhvc +7twosix +2kltwo +six6vlmhdmvtdsix +xqtpnglkktvpktfive1 +9one91 +vbrcfmjeight4qmtzmpqhsninejdmvzpdtpq2 +3eightzdcrvqeightl7nsbpdrczdrnine +nine6hkfeight9 +73pqqqsixone7bvl +1threeeight9six +46one9smxbqzrppr56six +njoneight27fourthreevtxf51 +fivekbdfkfjk2 +two1lxdpqtq2xhffmbcbll1 +tlngnjqlkmcx44mnhpbg9threepngzm2 +nine4qgccpx1nine +four8515svqscfsds +5fllxvlhqcp618four6kkone +nsxbrczm566cldngf4qncqmcvvrgztxrr +1seveneighttbrlnfbdkzkppnineqppcdvnpthree +fiveninesevenfbsz1crjpbncrh +12jsdmvonesth +4ngrc5 +ffpknzsjcgrdxfxjrneights3five +66nfcsztrtmdf +5three5twojmsxvpczpd5 +pb1fournjgkfcbn2shzgpnfx +rzphlccmdseven7fxfiveone +2foureight25 +n4jdlrjkfppfive4phvcfnineeight +fivedfplsxxmjsmsrxbrbv3sixsix +pnbpqfxsdhlkklmk4seventhree2 +8seven7sixgplpldf9 +zx13cxmckxfbmsxlssrttwo +15sfs +hktnxtwothree3pqzzkfdrhjmhmk6onexnhnvhx +13vz1bgbbgcljq8d +hrtfeight822 +5threefourjdmrnhrvmkfiveeight9seven4 +six13zxtcms +6966 +xcslbzkmv3pmlrnnn471nine +nzmslhzlh5zdnfone39cp2 +9sixfourtwothreefivehnxtgnxxbpdmxx +twoqc4lrpgtwo +seven2threeeightwomg +nzsdjhseven97two93xmprjfkrbnbdpvl +pgdszjfive6 +sevenhpbnxxntt25fzfrpbndnkmftsbhpjntdxpvcg +nnxktphmqqhxnmfrgqnqqgqtfqqvphn36sixsppns +fourxcp2six9 +bz5five2onejttjqmhml7 +lrg2ksxhvrfive1twosevenseven5 +1jkrllhnmqgvnbvseven +kczvjfzrqh68sevenonethree +onehqvp3 +ninecczpd7 +fourvlmmhlfrvf4onekpbs +fivezqkcctwoplmrkksfone93three +fhvhfq1tvvt3ckfgtwofour +649twomktwonebx +5fiverbscnmbnnsixfnnlnqq3 +3tsjfive +7eight4zsxjftmlbjfourqsgbzdtxfgxbn +mbklhngfthree5 +94qqrpvd6 +gvkrsxs3 +two5c6 +51eight5xkgpsxxz +5fjvr +fiveonenine38 +one68 +7two15cbxmssb25qtcpcjtwonef +two368vtxkdg7 +fiveqrjneight1fourfour +six4one9twonetm +msjptzgvbmseven8 +4xrklnqqf2sxxt +hsmzcbcgcfivenines88fkf5 +1sixeight6onexsdh28 +8sevenc267 +svlmp99jvbrzh +qvnpsfvvfiveeightpmdpv4 +seven6twothreethree +2rgd2 +3dsrcdkzndthreexfsldcthreetwo +sixn575pzpmmlxvr41five +qmchsxd6qcmmcjh9q +dqvjfourmqp1six +sbglrkhrhrfldkftzfknblj1twonemm +ninehsgdt38onedhbjzs +5rm +five2mphbljl +kmgmnfddnine1one3three3 +ninefour97 +7twogmhdmnxfrgnsnxr5fourlone +xnqcdjdsixone463 +49xdzq +8qrjgtwo5seventwo2vdz +1xxjvqtrfnfive3 +threebfmprszf5dbnmmlggthreepkf797 +eightnine645two1fivetknzvmffs +tbjgzkqrzgqseven5nfvqpcqmgsbjfive +1beight5zdvjpcnzxsmseven +7rvmfbjs9krfkhthnkkv +eighttgl21 +63onesjfpjgnrg42lbcnccqfvssix +cqxsrzcnine7jgsdssixkmtfljnpstwo3 +43qzzklffxl23 +1sixsjxmnqfourmbghd +p8njsdrmtzlsixsix7kpbkfq5 +sevensixvvqcqrcsix7jtwo +vbgtmkdmjdjlcnine41twotwoksrtkone +fourcnstnbgfive7twof76 +ninesixtqsmcrseven28nblqqnjgx +8threeeightcrqm5 +xrzgqksx5lbfjmhbnsg3fx8 +sevenpnng2xcktsvccpc81eight +673 +twofivehqsmrcbt1 +6gjmlspgfsmfdvnlpktxpfkprjxxzseven +ninettdbgqznninenine22mmjlstcjbbzone +fourfvdmvsvtwo43vhpmfcqrpfxznkhr +4two96fournineqxckmkseven +lteightwo4 +38fivenine678 +5nqkfm +cptwone3zlggrkrfkgtwonine4rcpeightfourhxdvtmvqz +ninetwofivefivetwosix29six +one86 +6xjxzjdskksix2one +vjssjmqlkzzqfzht5one5leight1four +75sevenfour5 +sixthree4eight +sixsixfourspxsvpckcrfr8oneptbdvsfh +54qkgpzqhdr8fqvhj3xpmf65 +nqoneight5eight3lcxftzxdqdhftlvkpbgpnine +9dkzvd6 +4jhnvmr43one9eight +8bmgfnx +fivesix9xxzjrdkzhb +92h +vlcthreeninetmpbj47vr +grmkzfive6fourdk64 +one4six +three3dldnpsctjcbcxrs +5eightsevenjtwonem +fourthreeonelncnqlhvms4eight +8one8six1 +7ninegmzsninethree89nq +ninelcsgone11seventhreedzxnpzbnine +4rtnltdfour55kfzl +lnine1threefplpkbjmseven +onetmztjjrksix5fgvxrdfnrcfbfour +ninevtvrrqtrbpxrbqqfsrzglqbdftmz6 +kldqgeight9mvfrdl +onejcndvflhfz939519 +6btbfdsgzrrzthreexdsix +pdrzkpcbz8four4two +4fglf7rssfive +fiveeight8nhfkeightsix +599 +threethreelhb8 +sixn7nineonetwottp +one2zqtmbzdqbcdone +8hfleighteightczrsix5three +eight2nineone +2onekkshvstpsix5gddngmcgjr +pnjhrqp212pn3 +mpq8fiveseven91clpcshhvrh3 +lnkvnnnfddzhfzfpb4htclkp2three5hl +jlmqgdbq7seveneightzc132 +19lnfourdrfhsfgqjc +rrcsxzmkt4fivesixseven2fivetwo +8cvfnbtq7 +pdrqpsnzbjllknstfgkc88 +hpchslzcjskmqfsszrphthrdsgveight2sevensix +fiveninescglgcnxthreeseven6nine +4sixqzvzq +55six5fourfour +xfd1gmpqrjrdeightxfdtldhtgcgj +lchsxqtgdeighttztntqm4 +qhgmtjq95ninetwo8seven +8oneeight6eightsix3 +7threenine4onedhnthree +8mgkjzvlghf3eightonehhxxn1 +eighttwo73threetwodx8 +2167 +eight7eightcx +fxmntxxltwoninesix8five5 +9nmmseven4seven9 +ninesgt2dcssdprbstgrrgfmtwofive +6vtg +fourpnmkckmdx45qztcgbbqdqrnine +cbztwosixsjlzjdgrppmk34four2 +llhtrzgqxc47five1eight +bhdf315nineoneightzlp +nktvxnllj15six4ninevnffgfq +8fivethreeone794onetwo +gf3bknqbtn1fivexgppseven +16qlgrrjthreegps9 +two6three +four7rxsxnvstg9eightthreenine +onethreevgrhtnpdlvnjklqjqj1 +3kldmncbzthreesevennine +nine59fnbbnxqcfoursevenfdvmbrs +62sixone3 +9four6gdxhzone87eightwohl +4oneskqzhmlz +ptbcbnftfive213 +7five2one3four5eight +sevenklqmfhxcqfivellfnlhlkrscxphheightkhpkpqzcl5two +eightbtdvpxphm6ksixsixpjqhsfbmnz +6xgvztvssevenseven +8jjkxdgxtpzvkdzeight +hflhcmjjkmqn6six +six979three +32nine9 +nine5pdxt893 +oneljbrsdvvg99 +foureight3gcxvxxndbonejtqrm +sixtwofive5nfmg76qnlbjtwo +21sixeightfive31ngxzh2 +eight7five2lnchgdpqfourdksfhdzmsscnhxksmhbrlgjjsq +cxreightwonine37dpdkngxhhzvxpxqvfqcxj75 +xjqcv8zcsqhvzxb +threexgfbjkbdgbpsdg7three7tnqkcjzrh6 +3sixtwohtpdjkdthreeninexvgnmgqsdcrplp +44twosevenninembfblv5 +mmsm5hh +seventwosix5nmsllddone97 +gxhbsf4xp6 +foureightonenine769four +9tmfnfxlgt +three4oneonenine7tmg +psp3two +rfrvvqdrpj3fourxktlcp +tnzrzsvrcqffdfxr2four +fourtwosixrnnxsr72 +1onetwo2 +spdshcnsjkpptl4cpsttwo6 +zgjeightwo5five9eightoneeighthzrqzfkrjqlblf +3sevenchkkxnine7 +qrxg2one24brccpgxrn +7qgxglktwo +bmnzkzlrfm683fsdfour +8one7qgfmrn +qfxnlfk19ninemjxqzlrbvseventjpgzlfiverpgnv +dxzkndhfeightdhrmbkbzlseventdltstlbmsix4dddgcsk +kmhqhhfpg789ljqzxshtwogm11 +569 +5tvcpfx +nine6chgjjs5zjxqdninexbdcmccmfive +qzbnineeightfxvxqst6fivexfj4 +five14tqxlnsdlbt77 +three4grd +1przpcksjqseven7 +sevenninefivetgvc7 +sixdgfmthsevenspcflmg9four +nineseventwo6eightqjbvbxonefiveone +twothree8hgbzhnsevenfg3 +sjlmzxktthreefivexndbnpmvnine4 +eightnine3three +mpnfxcv4nineldxdffggqtscvdzq +8dfkvcm +tbvx42l +7one8cjncqdgpsqkhntmr69 +sevennknhdmvbcpfbzzs719fivebfhgqrjxfc +1four7threexmpnmcldkktlf +dsbfq3fiverc5one +8jghvmlbmqxdsl3seven8nine9 +nineseven2gdzscktwo +seventwostzmlfive49twopgklvfgpkl2 +739jrlmqqkkmgghzone8seven +twovzfour9frdgmsftd9 +zqoneightonetwomfbbbfpqkmphbonegsdjnzrf8jkkmxvcqt +16four8fjtbhjl3 +1nine6hjfcvdxq5dzvjcsevenkbhtgpjclhfive +4onevtxcttthreeeightdmlzhxqbfive +szznone1 +6onex2nnb2threeeightwojgf +nine2549 +teightwo927jxzjtncnqthree6 +dd9 +hzqkthree9 +jfskpztthree4bxprksix +mjntwonefxmrxnlkeighttwoninerdlnsqcb29 +rsgzxtfnineeightsix5 +threesdxqq4 +472vgjxtknnbmfthree +kxdfive8vxbtkhz6 +xltrjrpqqpjvtmfive4 +1twofour5954nine7 +lppnine3jrfbhcshfvgvhhfkjnpqv +cm74seveneightthreesevenseven +tqszx4eightqhxglflf9tvlpfdconeightq +hmzeightwotwo1775dssdqkxnfbcqrhfqfqfrrgone +ninem734snpvccgqq +onesixdvlvkzqkseven8eightjlr8four +fh785kddmjsdpns +sixptfdbssix2fivenineddxlxf +three8five18 +qsl69 +gggtpfxg4threetwosixone +7twofourqx +fourdjg8 +two7one8 +twobftgtppeight8 +7bsprsvnrvlxzst6 +twor934onetwo +7ddblzjsevenrgntnfvfghxflmpttseven +fivefourfour2fourseven3 +3hkhgknineonefour +3fourmppdgkqlcbonesevensevenoneonek +8two99seven8x9 +four1dfpb3seven +eight2nine6tzlxz7drdrlzpmxeight +32nine7 +8ppfgcbp76threefpdrlb +two3zzrqn8oneone664 +14eightcbftdbveightlksnckmr5four +6foursevendhrhmcbx +8sixninethreezcv +mxzvkmrm43jvhqbrcxjjsnlbbtzdtf2 +189fivejzrd +sgmhskv8qmfvfhhh3 +nine6jhbvfxsnbhqfnlnrtwo +five42one3fivesix +2eight4eightthreecbdzmshjbgnine7 +kt1mdzq2mfour3 +52eight34sbksnnineone +mzoneight5649chvkzxbnjx +mr8six1 +fiveqspzvfxsqfhnfmqjzcone3 +81four +seveneight5twooneightbkq +onefour7one1 +dmstwonerslbqeighthd2 +2eight3ninefivethreexlvns +583two +sixtwo589six22mbsq +943rljkqfour +oneone946xnjsgsix +1eight6mlvbgqqtpr1nine8one +4eightqz32onefivexnrjlgdkv +6qhbxgvvt4fivesevenfour +zlnztmlb345 +1ninelsrrtzznvvtwopbc +ones3sixgtgvlnvn3 +xnpqnsjmg7jggkqsznhrg +smqtvjmsczbxqqcninejfone6 +1three38qqvjnqjn5 +8onengjzrfeightgseventwo +9brrvfoursevendlfhgdl6 +vkxtzgmttgtmgonethmbvltlz7 +k7eightfoureight8bjfch +two5j9 +five94five47 +twoxtzdgvmghrfphbbonellzkmeight14 +9hzrxd7 +sixvtrpshzpxd7fthreeone +fivepzvm5 +54hsbrxzg9two2gkdghhp +3dxqhsmh +dsrxdpfpt16ninezeight2twotklstzd +sevenbslzfcglrsvqqgdptpcrtbrgb2five9 +ninetsbhxlkzfninebzjx2 +nine8eight6 +51sixclzmqnklzt1ggnqkdmtxszppl1 +ltwonedpgctq99stbsf +43nine5vxdblnjtthreetwo1mc +6fourbtbfqvjhrxbtdkj +kxz12one +fourtfjvsevenmtsxqzxcznine2 +26b +nine4mgcgnzrvxsvthreeonettclg +sevenseven2kfxxoneninefour +2pxpsclrn32threefivefzvk9five +veight66jztz1sixnvpqt +pgrlhz3four +fourfivefourninefklkdgdznllfgtj4seven1 +sevenk1bn83 +3mmpfkdxtnvqfvnfivepmvmpsvhrrthreelzjbkgsrthree +fourfivefourfivegkjpmjh917 +1fivernjglptrkfqhnjzninejmqsevenone +lphthree8 +nxqmkcg3 +sfsfdtseven9five1eightvcxzpzhqtc +5twosevenonefninefourzrbp +5spzsrnhlnthree +sixnine7fiveqtwo8one +55fourtwonineonevjrdlqsone +44vtwo2ninesixcxrjzjs9 +qtxzfsdkmntckpthm2xpdb1fdn +nqzg1jch68kfdqjgdkfggvcgnmgstnine +555 +7threehhqdrgc +25six64eight +5four3sixthreethreefive3nine +5twongscdpljqxhtchgfvdhzmdsqkdn +ljggbcbpk3 +4fourbdnxshzz +xdqczclsix8bmfjxdcdvmmkcscnjv72six +2seven3nine77two +twoeight7nststfmgzccv9tmrnk +fivesrn7mvcnqkjlxbfivepzzctwo +1threerxzgffour3qcmtdshj +86lqf6 +jzclbmfj9zckkjpcdjxnkftrbfcqgdfmzvpdsjpfqp5 +p9ntljjnzrqjlqfrdrkjbbkfourseven +ssggbzchdsixeight7fivefive +326one +62three3p2rhmgvpeight4 +29one2kr8 +xvrjgx5oneseven86eightrhlgpc +7eightfm6two +fqdj5four4twordncvxqsix +3rctxbzfvnpgkdbfour5oneightcfq +fhbxgrdhtctfour5sixnflszkffour5 +ndlmzp1nineninec +7fiveljkjlhmfthree5five2three +13nine9one +xmcstmztxvxmrsixxzp8xdgzh3 +sconeightvnznvjxpxhsix7seven +two485seventhreeggkcrjtzg5 +7vpsevencqlnftsx6hx +six2kfjcgcnnjs4 +ljlscdjmjxlhqcsevenfourmxfour9 +eightfivelxfthreekcjzxkm9vk +498vnxmgphh9one +ninenine85 +6twonenhp +9tgnx +ninexvrsmrphjpkbfvjqssevenfive8qgsjgnfrltm +8pcsbl52 +five5klggkskxcthree32 +hjctwo6jvhmsqgsz +7sgzh82vpvtjtqjlmfnnpbl +3pdheight2two7tdqzjzdfive3 +pcptskpgsvx63twothgtbg5lmfbmkq +sz6three6fourfour8seven +6fourpgfvsjsrjmdninehjvsixtvxzj +six3one71fourthreebzgjsxkptq5 +two531njqjsxvtsixckkfggxmkz +93nine1ninemq4mlxprdrcs7 +736sixhsboneninefzfnhxhql +jvqmrv32 +2threetwo3twosxs +fiveeight2sixtmmttfbhtktgxgrvtk +sevensixbpqx2fivevvkpkmlxrdxqtzb +nineljsnjgzzd6 +two3seven +dfour4fourqrqxmrmqlzfzzrmd +26two4jkcjczoneeightpxb +twosmfpjqlhlkdqtjqvqslkzhx8threetwonek +twojbt3 +eight6ninexhztllsnineonefive5 +jxscfpmcfour2ksmgthreevbtvzxxrqmtznqqcjzghv5 +5zsmdlsevenninethree +vnnmbgxjdzdcrhpm22nines +7sevendzsxrboneone +one19njgspzjvpllfcznbqvthreetjmzbhtmzknfrqf +sixsixsixhqn22six1bdckxsfj +xsevenseven65n +twohbfvzvkpzjrmzdreightmrrkl7eight +pxtvbrlqbztqxhvcrrf55 +qtwogljlgnz53 +seven2ninetfzzsmgzfour9twomgzjnnbdfv +mptlphqjnpbbjbj3dgpvnttseventrmjlnpbxgkbchsszh +5qnhsjdtc9one7 +vsdgvjqvfivefour3qmvfxmdfn5gkkthrsfnq +2zqhrl67three6 +52six +t7one5gcksv41ftknzgdpskrtwonekf +ngqfhbvonesix49six4ck +gjcclbdp2twothreejlgcmmvdldpnfnfdhcdrgxeight +sixpvzhqtzt2five +fivefourh6zhfbtlcfvfsvbtcrone5 +threehjdl27sevenftfjpnpninethree +seven2qffourtnbrtslmbrtzrbss +5nine3onesix +mpkksrpzpcnjceightcrfsjhl9rfmxkhzkvpnvzck +rlqxvhcmfiverqlp86threesixnineseven +two9three +1hrqsrsqk +s8jvshkhmsbjnnzzvzl1threefour5two +hdq6bvlrtwo +2mfzlkfflfive +42nine176 +2onemgfxnxbsvr4 +six5onegkvfxktggkrmnjhsevenfournjbm +onetscccxrrbd5fourqlvqtfknr3 +twonine5 +zftwoeight3six815four +1oneightq +seven8nineninegjstgcs1 +sixonefive996 +57qr7p59kx +vkvfqlrdcnlsfour2tcjc8nine +bbxsstbrnmnine99zcpp2 +6psfcj7fiveoned9pxk1 +stndz8q9 +7seven1gcmvm2zlflone +sixmmkconefznkdmhfivetwobfbrlvfive6 +7qblvlssb +bxlpnjhkvx1bzjgj5515four +sevenjnine2 +hqrmgtbhlrbchqld6fh6oneseven4ssfkhm +3zpjqqgtk9 +4zr8pckql23mlsfvr1 +8zpdxmbdj +vdtgghlr9dqlkcbtjcptqftone2 +7phhnj1hvnpznone +seven1three +bvzqkpmxlplv4threezjkpbbngtgfxslhczq +eight353fourjbthbjzrxk3 +1vszpmreightqkcbpmgvz +two8gdjbjnsix5mpcjd +ngtltwo8cvdhtpnine +eight7seven57four234 +316xqvstdslj +three2dxhg4one87mblcfljtrhoneightb +seventhree1646fivefour +3twojplhronenine +6fpv43gnzm +qncbbfkfceightngdnxkllfourone6 +seven238 +76vdsxpfngdpslhkh8 +two86 +5zfmlbpseven +8twosix +fiverg414vvlxccjx6 +7vbptbclkkrlnt24threeseven +four36crrfour29 +sixlfivelqqmbmcxvfkpdfpfzsix39nine +smmfd9vczg2mhsjdnvgtnine +threefgxqhtrln7scjxkndonetwofive2khzx +4threejtrblf3774nzndnnjvf +cthree9bzd65 +869foureight +6jknfthxptgjlzqjznjpbthz +mmhgmpncgctwoztseven8th2fncrcvmckxxhxzmqxl +9zmmt6sevenfive +fnstwonensgnkrrgrm333onetsckzm2 +1five6eightnine1five1seven +1tjvvbtsbr1four +eightsevenfivesixthreefnlgzpkffive3 +4eightmfjxkhddrxrttzffdnthree +9seightone +dfcscfour8 +58vfjhqsz44dktkdbcggvzrxonesqqqfzmp +fivefourhghrmjbtrdseven7five7tdlmtxhv +qjcjcthreefive64 +ppcndxtgzqsqfqq9sixonefourrkf +f5chjf9seventwosix4 +tmtzhrbzqbtsfbbkr25rqv6pgz +3svvptrmnxgsqpgppvseventhreesix1 +d5fivessix +8br +834fivemrhnnjmbf +eightlzbtqrrfvxhhnx6vbxvzdt2eightkz2 +foursix51lfnpbkczk8twosixeight +2nzjhljckdfiveeightfive +lxftlsgrrsrgqntqxcbnp3threeseven +lhpzv3hkcsbhnq7 +kdfzdtxlqbfive9 +threedhqseven8eightseven +7tbtlpsmzlbkfzcdbmndfvgcxcqtfzmdhqktwo5 +krhqqrsixseven72jxhgchzgcmtrthtqnmmnpttc +1xxfvpvlzjfive8fivefivekjfsq +five13 +1fivexgsgk785vmdlgf +14fourbrg65 +1onesmprhxsone1fourkt +twoclk8 +fivenine4d +six3seven6 +svcmfmqfsevenonesevenbhsrptwo2 +4onefivevznngdbffour5scjxpftpnhtwo +vvmgdzrfldhsjflseven5eight54eightnine +jpc54 +threenine65fivekvms +eightfsixnineseven2three +three43fcfrbmpmgthreerpxshkfcfoneeight +8jmvvgmltvzlqjonevdtdpvngtwocxcthree +dlxth8 +two58 +6k5sixseven +vfkpzmrxlcfhj7szfcpprjbdlzltmkkmj +8ltv4 +1twofkcpppq +five2sixfour6dthpckzrzxspjptdxxkfmn +3eightdkkone2onex54 +fouronerpn5sevennine4three +2gjbxsgsgt3nczpbdf +4ngvcffpgfx9hzxkvmsfsevensix1 +5smqrqkseven4ttjrnnjfsh3gbfkgfivesc +sevensixsevennine5f48six +2fourdmdone +fourtwo5zsrhxmjkn43 +bchrtcnltseven6 +vtwone9dfeightfiveghzbgonenlckrg +1twothree22 +twoqtt58threeklrpkhlc3 +bnmq4fivegc +dqffiveninenine4tnsrk375 +pgeightwo6tsevenseven9seventwomnfcvglsf +27eightpbbkn9zzldxqplzjthreetwo +vg6 +lnsnglzsm96nine8 +one2bgmmnvnbtlxmnbjk3vvtqlqtwothreeeightwokbd +9three8two +fgxfbthree8mbpplseven3one +four346sevenjxrgkxf2 +three5qjsevenninetwo +oneseven4497one1rmkljk +cvfcmsqcscphlseven6four +threeeightsvsps3 +3pcqgqkcpgnzlkxnneightonehzgsix +mpeightwosrfpfq2bztpmhx +4fourtwoqfbhrlzjmcc +sixtwokm4tpcsfour +58one +pdbpzhptjfhfive4nine6 +3three3threedqlmbonethree99 +7fhldqcxbdlbdggtm9six98 +g1one22fiveone1slpzmtcn +sevensixbmpg66four7cqcfxg1 +lvpcjshtwotvdnxkqzv4 +4tbmmgqxdsr54seventhree8four +99oneonedhvr1 +3tfszvjgrbf +one2nineztqchrz +bfnnlh5nnzltmqlx9 +gcsmzxlvssix5lkmk1 +hv4eight5 +8clgggvkkcj3 +pmkvsixfive2 +5lk5 +8four7qeight +xxfgflhgqnine96gdqcdqlrhfive +vpdmcz1223seven3 +gt7fivenineeightchbfrvbtl2foursix +eight86qtm5 +4rzcxqz4five8fhdfmdksthree7eightwom +fourtwo3three2 +38ninezlzdp8fourqrgjc +1959 +8mvnhpvkddhtwonghtlpq +dbd2xttfllfp2 +23eightseven +53nine77qzbsrpgsg +xbd4onethreechblfshmeight +837sixbxtjfivetprgjjd +62six +1fivegfklmmqnkrdnvrpjpcnlzbveight +five632pqcksmxlrznqvjcmlttqhh +twoeight9jgmjxpjjxjhxz +pmt83fourone7sevensix +578twonmpvzzvd7 +six9six +2xczcgszvrl25fivefourgvkhtcfhqmbggrneighteightwopqt +5oneseven1 +seven3onexg +sixpvrtxqlmrqbz9five89seven +8eightp2six +3thtzqgpzkdvfivenine +17942twonebcl +ninevfcseven34n5 +five3dt3 +three6knn +jsmmgrjsix5zqsnbfmgjlmrptqzvzmjr7brm9 +3ll7992243 +8fourfonemhtmkrht8rhfdljqb3five +threefourgxbvvrfourtqnrf7 +3v27nine +3lklpsnf +39sixjpdbd7sevenhc +oneone1 +9vft +2pnrfourbhv5frsgpjfnh +7zqqfldgq64eight84vsbrdhscnc +5q4kxgjnxoneninethree +threemllvrszngnthreenine6 +3ninegkshrtnlccsixeightsixf6 +5two47 +9jnkpcfnxeight674brdflkbd +66sixsixzpgq +onesvcmtlhrrslxsktjfbkz9eight58 +vprnflbkbnsfsmfkfrmrdfbjhk4tworqsbonethree +7onetwogmskgscbtxeightsqgfvvc4mlttvhgt +7nine6141t4pqlgvc +knbvjgvzpm3pztzzqmntxcgvjn +tprneight9qxzqslmm7fivefmxtxn +6xvvjbcdfoursixone5eightxztjztzpgsix +24six4s6sixnine +oneqlppjrfqsevenhgqlxkdhqx8s +8nineeightc +jbconeoneeight9frgxlrdhzlcrzshjknxmfrmqmh +561nine8zhxlhcrmdj +5qtmn17ninephlnsqpts4two +nznsfgmddt1nine +gsmqltczf6qpm +fourfmhl8bvgv +six8blfivefour +one6fjm +tvsdnjt72five3seveneight +7threekkxlzcgrfvltwo +mtxeight1one443six +pgsfz6sevenfour +13mfzcpgtbzsdcbqtmhlll +mftjkvxqpninefjbone1f +sixtgrfmjl97fsjhgcsmmp4 +cqsksrkqqp7cfvjkrptsjdsk3 +xhphdkvtjzgkmvbj1fourj1sixone +foureight86three4one4 +5threep7kfkznmhj28 +sfvpqfivem9fiveone +912fourztbndhpbzcbc +mbvpzgeightseven48eight +mfpq528cvgxnv7 +xbeightwo78five +kqngfmq5sevenddchr9 +4threevvt8 +hpxsdjdksix2 +2r +9four32four +8twotqhxgj47 +6sixsfgbheighth +njmljrmtsevensix21phkczzeight6seven +twomfklfdqvmbdnptfssrrjdfour9 +6five3 +tjzqzdmkj2qt13 +twocjncqgm7one5sixfour +fivefourjtvqxchf5cgf79kmlcsd5 +7nsrjmcleight1threenine +lvstq3tn1 +twotwo44 +noneight5msix2qdpb87g +9rp3dtp21four2three +5fouronejmpdq2two7nine +poneighthvhkbvtvxzmljfhrmf3fourbdcssgjtbht +sevenninef5 +eight9oneeightsix9three +eighttwo841 +6nine45ninetwo1 +bsrtmkplhbjbrsbjsrzpbfxpvj87onepkc +9fivephcqlsln9 +xftntmjsb168rjjvv5five8 +frfr628vrbrzg +kqgz3jms56six83six +threefourfourtwo2p +rrxdjjgrfmkzqrqtdg7onefour +oneksqkxk8315cjtxhpl +pmfmf7six2 +xfdmvhmrfbfour7 +36sevenone +nine25bfivedhgch1 +cpvrs97twod3 +fivesix23six5 +95pkmbpphdmninenthphrzknhgvzfour +5mqlkhqfzfive3bscfcnine +8eightvmbhccqkvmpsnjxxfourpng +twok4 +4one8dlrtdgbkxthreetwo7 +4spvdztldx93twor93one +cfl7 +vgfzjqhfvz7onefivevkqvrxtkmone +7fourtwofour +fivemscxhgtrcsone2jjr1 +htbrrlrgkvgpbhcqtn5ninefournine2x +bttjgdnnmlrljsltxrbzjqhnbfghcktt5fivebfqbgsvt +sixfivefive977 +bqzqdh38ninesix +hmghtzdgqnlh7 +threenine4 +5sevenseven +5qphzsdgsxhnfivesixeight +5zhdfpvk6seventhreenine +jrtrsevenfour9seven +kzvlczdmvlmlnjqrbgjdtwosix8rqhjjkffz +bmjmv869 +four7three +six1five34 +7zchsmjgqnqffzjktfourcchdhzxjmsix +5cprgcs5bvjqgkqrqc2 +fiveeight5gkk +14nine2eightxrqqlthree98 +four5nine5nzgrrgqpnkpkbone +2foursevenqzqgzone +oneqjcplbtdqcfourmktsjbjhgeight4 +9nine7four6 +dqcjqvmmhxthree2seven +11bvnrsbkgtzlrvhdhqk +fiveseveneight9twosmcmcmmdx8eight +seven8qvgppnbkggrjlqthree +83ntsixvdvkhlzseven +7eighthfxgnqclk +sevengxzone4fivexcfffdxg7pjxjbb8 +eight84eight46 +52clgxx3npppzfournqtbpvsnvjpteightwomss +tctwone4dbqvnvf +pfsgbkfivetworpqtbbfs38nineoneightjg +37eightfourthree +1eight2ndctgkcbmjmthree +vmcxzmmzvk63fllrlg4one +cmjpxqkmfouronenine3twojplnvfrncone +seveneightpjdbx3twoeight7 +143klgccxcmcteight172xgqlmmkfjp +fbrhrjcmljtsfqhtms614threeninendjjzpdpzp +8hrtbrvxssixtwo6four4vgttssxthree +szfr671 +73njhhjpxlflhmdqrtzgm3 +gglrxone97four83nine +rz8 +3lxvdvgvsnmhfqcmgrqgf7njqfphdnxj +eightsix9crbjrtcvlzfive3rffgxsbcgqpxdczmv +two4kfqbcrz7eightfsdfzrreight +2sevenmcxcqpbpjgoneseventhree +one4four6lphcmhnd +79 +dnnzzhqthtwosevenlfgxbzlxnclzbksevenh6eight +twoseventwoqgjbjvxfmsmnslrbbhvn8nine +13jtmqsdninetkf +three7fourseveneightngbrsgkrtfltffksevenr +jlpm5fourxkrldrzbmjbddptd +four91sevenone1lkbfxhl +gnqsbnck1two +19nine3five7tkzjfour +vqjg22four9eight +1threeeight7cn +3vnxjcc5threefiveone5 +fiveltjstjtpr76zsixjvkkb +xbdnrjgplmrnfn59two6mfhsphtsmgxgpzsp +4jb39ninebfr +jz1xpbtspgb7 +fivesixsldbpmjpnkxlfour1l +stvdtqtrrtdvplxtfjlbnbs9oneg7three +two9eight7four +nine395five3 +2zl23threegrqdbkfourkfqh1 +1mzdslsbsevencccphxpdbtzqj1 +6nhtfsmqfdssix67 +sixeightdhbvdnrb2six2 +1sdqrzsfr113ninertcrbhthreekrttgbj +lone9xdhfive48 +xhgqjgcdneight2 +ninefouronez14srhgxtqd +dzvbvpronenineb3nine +kczhrrthreesixeightbhcccxlqkj2djfqrlfc +five5five2ksgn +threefourjfqzlgtvv8pfx31v +1fivejlvfqjhsm +four6972fournzmpchninegddxrfh +12nine +2nrsgtdlddhqdxhqpljtfourppeight +bbqrgsxlgptbqplhs8pkone +5nineztvqdnine744 +tsrkfddkc1three +9sixone9nfbksgbfpfour24three +98lztb +oneeightfnhtkkhfqtpfpdhqjbpflhhzf463 +one9kmhghftf7qsmztntzx92 +xzzpjmqlxnknk543vdfgldvfdrbnnfttmtqzfh +dq74twosixfourfiverfbxzvjtfv5 +lqrnlzvxngfcsgg9dmpjjlgfm6two +ninejhxqrtfrstwo22dxnvfmtbscrkzc +txjeightwo21 +qlsix459ttqtsfzg +bxbeight15fktzb3vjxbnkck6 +53twohbrqgtd +mfztbczrqltfivesix8 +9lxtnpzffczvhssfb +fivehtzrxsrm19 +1ctslhhtwo1 +five6zsix1gbjhklpszlkmszcj +4shtgrkninevqntzltrhhflgrhsslz9one +four3tsk45 +hpkt8eightsix +5nine9two +fourxvkjdkdgbklcnzmhqtgdq1 +1foursxbrk43mzfjxqrsloneseven +lsbhfoursix9sevenone7 +vtnxseight1ndlxgleighttwosixthree +5gsfbrqtfkz +sixonetpfnznvrnxhgcqkv6nine +3rhbcklhbtqljqheight7 +zhtkqb1rsntcgnq85gftptxqc8 +shhmqrgdpvscvkcdpks4 +nineninenine2three5two3 +trfbhljnl9nine +sixlcmnpkdlqr6 +qhdrmdjbmczfdjqfxv7eightwoxt +n4nkjlfx8seveneight +46eightgjnhsx +mbeightwo4jbcgxprkjrjspf +ninemq9sixvrdqmr +fourkxvmmdf87pfzjfdpthreex +9ninebp1 +1four2kghfdgtgdx +5hrlslhpnine4seven4bzjttvtv4 +xcqqrxdkdsckqtnvlqh9three +8sixnine +9fourthreesixzglsqrmgtt8 +2onetwo +98kgnrkdvjfeightfive5tkffmq +7mrjskhffjqeightfiveoneonethree +7lgfcqvthree8bvlk2kf4 +2xstvqxnsggkxvfrllzkseven9zqtwo +xjqcvvh6two +2seven8gjdgmg +ghvzpxlgfhctwortxvlfkxl1tqkthbddfhpzdjklk3 +nineninernvpzsbnine2ninenbrkbkdclc6 +29twojsvrz7eightzhznhflcld71 +eightthreefive5kkgcconepmm +3tlz7fjzpgnvfgdgqbrqqsv +mcp213six4jjqtgxpkzh +one7nineqnjsgcjnjmdhdrxbthree +xzvxcvpdftpllcxvpbtwoxkspeightvmfhlqxklthree1 +nnzksztgtpfour61mfjmvnonezgvhdg +qkj6one5one49g7 +threesix6eightlxdkttbbcz3bbvgnxjnjf +3fivenine +3sixhmbnfrk +7qcjzchtkssix +vsfour5nqjjzmx +cdxhcsrhvc3 +47hjzgbpsixjjfsbhninerfbrvf +seven8sevenptdlvvgssixvjvzpvsp7fivefourtwoned +ctwonezxpflzeightczjnvj7173eight +ldklqc91fiveeighteight9 +pptwo6sevenfivevlgs8threegbpc +ctwoneone7dtztzrk3ninefivexvj +1oneninegspfm3four43 +sixfourgkdlxtqmbzkgmpmcsevenhzrt4 +eight6twojtzlvlhgjncvx \ No newline at end of file diff --git a/2023/day-1/part-1.ts b/2023/day-1/part-1.ts new file mode 100644 index 0000000..5e0f54c --- /dev/null +++ b/2023/day-1/part-1.ts @@ -0,0 +1,10 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() +const res = text.split('\n').filter((it) => !!it).map((it) => { + const nums = it.replace(/[a-z]/g, '') + const first = nums[0] + const last = nums[nums.length - 1] + return parseInt(first + last) +}).reduce((p, c) => p + c, 0) +console.log(res) diff --git a/2023/day-1/part-2.ts b/2023/day-1/part-2.ts new file mode 100644 index 0000000..e24d379 --- /dev/null +++ b/2023/day-1/part-2.ts @@ -0,0 +1,43 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() + +// hack by https://twitter.com/championswimmer/status/1730667285415948767 +const letters = { + 'one': 'o1ne', + 'two': 't2wo', + 'three': 'th3ree', + 'four': 'fo4ur', + 'five': 'fi5ve', + 'six': 's6ix', + 'seven': 'se7ven', + 'eight': 'ei8ght', + 'nine': 'ni9ne' +} as const + +const res = text.split('\n').filter((it) => !!it).map((it) => { + let nextNumber = -1 + let nextLetter: keyof typeof letters | null = null + do { + nextNumber = -1 + for (const text in letters) { + const idx = it.indexOf(text) + if (nextNumber === -1 || (idx > -1 && idx < nextNumber)) { + nextNumber = idx + nextLetter = text as 'one' + } + } + if (nextNumber > -1 && nextLetter) { + it = it.replace(nextLetter, letters[nextLetter]) + } + } while (nextNumber > -1) + + const nums = it.replace(/[a-z]/g, '') + const first = nums[0] + const last = nums[nums.length - 1] + return parseInt(first + last) +}).reduce((p, c) => p + c, 0) +console.log(res) + +// too low: +// too high: 53896 \ No newline at end of file diff --git a/2023/day-2/input.txt b/2023/day-2/input.txt new file mode 100644 index 0000000..34a6672 --- /dev/null +++ b/2023/day-2/input.txt @@ -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 \ No newline at end of file diff --git a/2023/day-2/part-1.ts b/2023/day-2/part-1.ts new file mode 100644 index 0000000..388da7b --- /dev/null +++ b/2023/day-2/part-1.ts @@ -0,0 +1,38 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() + +const maxs = { + 'red': 12, + 'green': 13, + 'blue': 14, +} as const + +const res = text.split('\n').map((it) => { + const [gameId, data] = it.split(':', 2) + const id = gameId.split(' ')[1] + return { + id: parseInt(id), + reveals: data.trim().split(';').map((game) => { + return game + .trim() + .split(',') + .map((balls) => { + const r = balls + .trim() + .split(' ') + return {cubes: parseInt(r[0]), color: r[1]} + }) + }) + } +}).filter((game) => { + return !game.reveals.find((reveal) => { + for (const color in maxs) { + const max = maxs[color as 'red'] + if (reveal.find((v) => v.color === color && v.cubes > max)) { + return true + } + } + }) +}).reduce((p, c) => p + c.id, 0) +console.log(res) diff --git a/2023/day-2/part-2.ts b/2023/day-2/part-2.ts new file mode 100644 index 0000000..c00729a --- /dev/null +++ b/2023/day-2/part-2.ts @@ -0,0 +1,46 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() + +type Colors = 'red' | 'green' | 'blue' + +const res = text.split('\n').map((it) => { + const [gameId, data] = it.split(':', 2) + const id = gameId.split(' ')[1] + return { + id: parseInt(id), + reveals: data.trim().split(';').map((game) => { + const res = game + .trim() + .split(',') + .map((balls) => { + const r = balls + .trim() + .split(' ') + return {cubes: parseInt(r[0]), color: r[1]} + }) + return { + red: res.find((it) => it.color === 'red')?.cubes ?? 0, + green: res.find((it) => it.color === 'green')?.cubes ?? 0, + blue: res.find((it) => it.color === 'blue')?.cubes ?? 0, + } + }) + } +}).map((game) => { + let lowests: Record = { + red: 0, + blue: 0, + green: 0 + } + for (const reveal of game.reveals) { + for (const color of Object.keys(lowests) as Array) { + const lowest = lowests[color] + if (reveal[color] > lowest) { + lowests[color] = reveal[color] + } + } + } + return lowests +}).reduce((p, c) => p + c.blue * c.green * c.red, 0) + +console.log(res) \ No newline at end of file diff --git a/2023/day-3/input.txt b/2023/day-3/input.txt new file mode 100644 index 0000000..e512137 --- /dev/null +++ b/2023/day-3/input.txt @@ -0,0 +1,140 @@ +...317..........214.....................................751.................................630...479..205....41.993............416......... +...*....813........%....572........%...629.154......518....*....365..................-.......*.......#.....................422...........661 +269.......*...58...........=......264.....*..........*......937.-...........235...303.........848..............195.....154*.........144.-... +........476..@...162.855................$....288...821..............107.....-...........290......../..301.........=...........135..*........ +618.............=....*...547...........441....*........................@................*........851....+...................+..*...102.310.. +...*961....905......534..$...377...............854...341.342....485.......109....89.995..927..............................90..997......*.... +............*...................*.................../.....*......@...........%....*...*.......................+44.....913.........9.....891. +....62......724...592....946.878...854....$.701............480......575.246....119.....54..296.906..684..................*.........*838..... +.................+......*...............478....................469.....*..................*...........+..502..156.........821...........983. +....................315.764..996..571...............=........................804.......&...892....958.....*......*.............61........... +........+...697*.....+.........*...*...........@.448........................*.......322.............*....309..37.602.....775....*........... +32.480..665.....557......+...435..449..691..327....................#....921..535..........755...43...597........................322..7...... +......*.....848.........745.............*.......679/............106.......&........404......+....*...................888..750........*...... +......93...*....=.............*297......550...........324.597............................................819.....997*......-...734$..588.... +.........363..112..754...............&..........723....................14..954.............175....773...*.............&..................... +..................*.......#..........502......../...............606.........@..778*.......#.........*....844...713...743....-.........&..... +............827.895.-539...469...938...../.248.....................*.49............749.............783.........$...+.........33....471...... +..............*.................../...517...&......368*710......432...*............................................841.=.................194 +.....*491....395.......&481.................../.#...................83................668..181.....698..155*...........981.200.............. +...................219.................196.473..224.....=.....733*.......=.........98*.......*.420..........671.....*......*......369.205... +........@......696*....669.....50.....................853.593.........168....@.............802..*...388............3......792........*...... +......641............./....62..*...836#.......*169.........@...............872.................416....*.................-................... +..........................#...377..........179.......101........+504.................*554.............947..............447.............830.. +243........*902.....#................480*...........+.....*258.........*243.......389.......&....................723.........838...991...... +........182.........33..........840......616.733.......756..........290.....................145..119..........................+......&...... +..............................................*....807...................777......+..556............@....85#................................ +.212.664..3......316..579..462..............435.......*............@....*........36...$........572................703..732........@......... +...........=....@.....*.....*............*.......-..337......656...411.357.373.....................*21....37.........%./.....918...185.387.. +...350.................338...161.856..157.906...527...........*............+.........*336.......204............755.............*............ +....&...........683...................................801......313............831.230......374.......................383.....940.48......... +...............*........447......635....335......%.........627........44@..........................895....................@................. +....$....958..943.......#...935.%..........*...794......16.*..................+...........100..469........743.*.........529....=.......883.. +..308.....*........*776.......*.....*....430............*..562.......895......765.................*.........*..776..........246..921&....... +.........200...............*..1....572................814...........$......#..........138...&....487..668..58.......485..................... +...*845.............935...958.................................667.....%.121.......691.......245.........*..............*........131......... +.........*............*.............=............................*.593.............*..................380........189...219.211......@....... +.....152..783........634...........521.+.......26.............659...............328...%.............................*........$......397.*... +......*.......124..........299..........808.....*........359................424.....%..454..........553.............49..562.....257......723 +......641.........24.............576.............975........=..............*.......974.............*...........146......*......../...@...... +940.........&....@....221........*.........149.......&...............689....418...........538...................*.....985............526.... +.............192.........*816...582...561..+..........915..981%.......*..................*......&8....+.........497..........145............ +.........144........$....................@......................425.933....846*824.$...370.342*....375...641..=........927.....*.......160.. +............$.......925...67.655....57.............=905..881....@..................585.........746.............224..........224...864...*... +.....872................#..*...$.....*.........#............*...........979....699...................947.........................*.....788.. +............949......676..42........340.....694...144......712..296..45...*.......*..............191.@.......889-......=786.....417......... +...........*.................846....................*..160.......*.......403.....347...914.91...=........................................... +.371.=....904.643......816...*...647...$.858.......431..........486..........706......*....-..............961........................698.... +......398.....*....252*....591..../..224...$..341...........#................*................956............*...27..............57.....*534 +.............363...............................&.............69........163.233.580....113*367..............44...*..................*406..... +...893..457..........91%........................................538.....$......*..............................475....864.......289.......... +..........-........................549............909..572.....-..............385.............97.....................=.....159..*........... +...174...............................*...576.875....*.....=...................................*....506..115...............*....856....408... +.....=.......685....58........177.965...-.....*....489......402/..&603.....................357......=..&....84.....451&.810........93...*... +.....................*...87.........................................................447........@............*................-......*...117. +......205.593........298..................................622....955.......34*325......*....965...................604......729....509....... +........=..*.......+...............966.......................$.$...................206......................99....-....424..............$... +378..........636..141.543%....34...........437-.................303.........80....*.............915...........*........*...885...........148 +............*................=......................39......-.......208.560*...906...................320.860.975....532....*.........740.... +....834...13...................426.395*962...44.......-......552...................*539.+........953.......%............647.........*....... +..............589...............*..........................................179...71.....207........#.577......758...247..........958........ +....930.......*......&139...820.56.....%164....................536.=31......*.............................................89................ +.....#.........569............*.............882....296......&................465.......21............=.....331........998*.................. +..........847..............206....$............%.....#.464.318..=.....751*........................501..971...*..............227.......854... +.466......*......768..../.......110......................*.......612......551......868.......727.......*......39.850..-.....*.........*..... +.........377.561....&.718...94............246..........159...........255............%.........*...........445........472...520.......304.472 +...............*..........................@.....292.............................476......&.........135......*...223......................... +..............288.....................944........*......775*934................+......152.............*55..806............239#.............. +...181*552...............................*....238...............499...880.476...................................417.#66.........472......... +.....................*........%...629.853............*......@9...@......=.....443...673........271...*..........-...........98.............. +.........567*288...10.257..837......*.........862..14................21......*...................%..714...........963.........%.450....528.. +....................................862..................889.....604...*424..350...812..34........................*...646................... +...............*....*933.....355@..................*528....=......................+.....*...&996..493.....992..840.......*..271............. +..............984...............................678.................+571.....648......262............*......*..............*......293..197.. +..........386..............463..984......129................-588..............*..361...............408..269.652...........406........*..+... +.........*............494....*.......847...*..#..942..825.............&......32.........................*........427...........-....339..... +.......415.=434..439.....*..23........$..34..410.........+.......746.976.............731..../.1*.........709.......*.........197........#... +................*......493.......760.............................................654*....398.........158....../......396.............922.... +.....845.=....955...................*.....*574....954*........@...........$.......................-....*.....796......-...426...$732........ +.......*.88.............@.........738..924............213...40....115......315...................299...108...................*.......320.... +....567...............%..13.................*14...........$.......@.....%.........../...518.......................-.810...514..952.......... +........892...275....485.......820.......367.......@.....544...........428.........54..-.............*....108..964...*..........*........... +.......@...................861......#.........893.116.........836.982......961.............../...615.188.....*.....914.........761....765... +...........169.962.........*......81...769...#...............................-..714.424..759.390...@.........855...........562.........*.... +....../906......../......81..968.......-..............................185..............*.%............=......................*.205.....72... +................*............*....110........./.907....241.......708...*...383.701..869...............346..............649.771.#............ +.............531.976...670...288...........382....*.......*116.........820.-...*............764..556...........@..984....$.......638...165.. +........................-..........479.............55..........................515.....345...#................533...*....................... +.....$....569.936.301.........914..*.......-.....=................453..............209..*..........................551.-.......479.......... +..233.....*......*.....506.........931..246....221.639....#..................@......*....784........591.................818...%.......523... +.......233....%.........................................416...714&........448.......698......387........432............................*.... +...........718.......@......465....................430........................603.......491..*..........*...22.164...+...............179.... +...............450.462.549.=....283.185...880......................652.......................142..430.372.....*.......633................... +.370....143....*.........*.........*......*.....962...........*.....*....................537........%...........&136........................ +.....39.......956......213...........476.143.......*.......321.60....708..........966.......#...921......+146............+...665............ +...........................941...321*.............880.499...........................*.............*.383........668.....212...*....827*428... +..236..527...................=..........................*........../..854......................489...-........................234........... +.....*.................................622..........289..599....207...*............&953.599=...............885............682.....914.....12 +793...754.............$497..............*............*................163....................+.........15.....*..*....338*.................. +...*.......864................348..........758.......439...................1........83....748...............325.535...................=..... +...368....*........382*250....*.....317.......*................473*....877.+.........*..................@................%....331..513...... +.........55..239...........2...377...=......1.792...294*607........831..........*.950...&....-....#....864.....139.......512................ +....427.......*...*...#....%...........765...............................418.995.........6..492.465...........@....................*218..... +......*......939.410.371......#...-......#.................&............*.............................496..........503..........629......... +.....410....................215.193.................678.786.....370...71..598......329..........262.................*.......473............. +.........979..855..432=................212.....346..*....................*........*............#...................249...=.....+...525.217.. +.........*....*...............387.....*...........*.228......./....%....245..&.....690.....429............................685.........*..... +129....907.423........949.772......666....173..679........992.313...398......427..............*...................244....................... +.........................*.....*............................*........................../....998..........510..825*.......................... +.....132....867........%.....42.780..............776*744...898.......664....196....360..823......899.211..=.................+............... +.....*.......%......703................916...%...............................*....*................*....&.....689..$......591.......64*238.. +...684..160.......................445.....*...164.......602....249...........431.12.............=..758............138..........983.......... +..........@..766.92..............*......334........671..*...............&646..................797.............950.........935.........469... +................*..................510..............*..285..........................................650.......*....807...*............#..... +..205.669...768...88........................+59..148............682........#.................3..............376...*.......191............... +.........&....*..%........................................183......*......61................/........657..........163............255........ +..674.......46..............392..251....507.................*.248...74..........+...775.97.....222.........%..........135...950.....*....... +....*...........*967..533...*............*......949..245.276...#.........*.....728...................677..137.....*.....*..&........522..... +...367.......196.......$..239..........510.748..*............/...481..722....................800........*........735..268................... +.........442...................111...............752........567...*.........*..........696..%............790................................ +.............182....677..613............................/..........814...372.86........*......915*..............799.................*....253 +....&....739*........../....*206.........284...........584...427................727..485..........781.992.........-...............619....... +.....603.........................907........*....607......../.............................617............*...=.......986-.............918... +.........819..667..341...........*....#..397................................#........$..................822...20...........359.....43....... +.......&....*...#....*.......*....88.691.........................700.675....910...227........350...&591............301.......$.......*...... +..404$..259.......557....876.218...........216.=211.7...=569........*........................=.................320..*....462...480....747... +..........................+.............#..*........*.................=518........................274............@...276........../......... +.......#...904......622..............923....543....969../..................571..778......#888.253..................+.....163.........-679... +295.207.........708......................................942...496....#...*.......*.373@.......*..645...............580.......177........... +................................982*317............304........*.......28.823....994.......370..96........@.=...*675............*.....604.... +644.138.522......%......901.................374*..*.........458.....................#135....=..........730.355........955...=.47.277*....... +...*....*.........288..*.............+.433.........240.................317/........................609............#90.*...623............... +.....%..675....87.......110...126.408..*......355.............................@131......110....778...*..519.834.......537.....19........502. +..831............*460........*..........824.....*..751...467.829..........850..........*............365....*................................ +..........398..............473....-..........751.....*......*................@.446*....780...........................732.................... +.......................#.........333..................170........596...............943......66..186......@...........@.....=................ +......124....780.....58.....933........926.../.............693...*..........*828...............*........666.............=..337.............. +.......*.........197..........$.......*......67............-...335...........................122...582................197..........328...... +.....151...............................763......180....@............890../....835...578..871..........*295..#....%...........-541.$......... +........................153.........-........@.....*...661..*833......*.775.....-...........................40....665...............701..... +..890....252......................544........809..425..............925...................................................................... \ No newline at end of file diff --git a/2023/day-3/part-1.ts b/2023/day-3/part-1.ts new file mode 100644 index 0000000..f7a63f0 --- /dev/null +++ b/2023/day-3/part-1.ts @@ -0,0 +1,72 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() + +const rowLength = text.indexOf('\n') +const rows = text.split('\n')// .slice(1, 3) +const rowCount = rows.length +const matrix = rows.map((it) => it.split('')) +const numbers = '0123456789' + +function cellHasSymbol(rowIdx: number, colIdx: number) { + const char = matrix[rowIdx][colIdx] + return char !== '.' && !numbers.includes(char) +} + +function numberHasSymbol(rowIdx: number, colIdxStart: number, colIdxEnd: number) { + console.log(rowIdx, colIdxStart, colIdxEnd) + const min = Math.max(0, colIdxStart - 1) + const max = Math.min(rowLength, colIdxEnd + 2) + for (let colIdx = min; colIdx < max; colIdx++) { + if (rowIdx > 0) { + console.log(cellHasSymbol(rowIdx - 1, colIdx), rowIdx - 1, colIdx) + if (cellHasSymbol(rowIdx - 1, colIdx)) { + return true + } + } + console.log(cellHasSymbol(rowIdx, colIdx), rowIdx, colIdx) + if (cellHasSymbol(rowIdx, colIdx)) { + return true + } + if (rowIdx < rowCount - 1) { + console.log(cellHasSymbol(rowIdx + 1, colIdx), rowIdx + 1, colIdx) + if (cellHasSymbol(rowIdx + 1, colIdx)) { + return true + } + } + } + return false +} + +let numbersWithPart: Array = [] +for (let rowIdx = 0; rowIdx < matrix.length; rowIdx++) { + const row = matrix[rowIdx] + let startIdx = -1 + let num = '' + for (let colIdx = 0; colIdx < row.length; colIdx++) { + const col = row[colIdx] + if (numbers.includes(col) && startIdx === -1) { + startIdx = colIdx + num += col + } else if (numbers.includes(col)) { + num += col + } else if (!numbers.includes(col) && startIdx > -1) { + console.log(num) + if (numberHasSymbol(rowIdx, startIdx, colIdx - 1)) { + numbersWithPart.push(parseInt(num)) + } + startIdx = -1 + num = '' + } + } + if (startIdx > -1) { + if (numberHasSymbol(rowIdx, startIdx, row.length - 1)) { + console.log(num) + numbersWithPart.push(parseInt(num)) + } + } +} +console.log(numbersWithPart, numbersWithPart.reduce((p, c) => p + c, 0)) + +// too low: 514045 +// too high: 516111 \ No newline at end of file diff --git a/2023/day-3/part-2.ts b/2023/day-3/part-2.ts new file mode 100644 index 0000000..cbc23f9 --- /dev/null +++ b/2023/day-3/part-2.ts @@ -0,0 +1,83 @@ +// note: this runs using bun! +const file = Bun.file('./input.txt') +const text = await file.text() + +const rowLength = text.indexOf('\n') +const rows = text.split('\n')// .slice(1, 3) +const rowCount = rows.length +const matrix = rows.map((it) => it.split('')) +const numbers = '0123456789' + +function cellIsGear(rowIdx: number, colIdx: number) { + return matrix[rowIdx][colIdx] === '*' +} + +function numberHasGear(rowIdx: number, colIdxStart: number, colIdxEnd: number) { + console.log(rowIdx, colIdxStart, colIdxEnd) + const min = Math.max(0, colIdxStart - 1) + const max = Math.min(rowLength, colIdxEnd + 2) + for (let colIdx = min; colIdx < max; colIdx++) { + if (rowIdx > 0) { + console.log(cellIsGear(rowIdx - 1, colIdx), rowIdx - 1, colIdx) + if (cellIsGear(rowIdx - 1, colIdx)) { + return [rowIdx - 1, colIdx] + } + } + console.log(cellIsGear(rowIdx, colIdx), rowIdx, colIdx) + if (cellIsGear(rowIdx, colIdx)) { + return [rowIdx, colIdx] + } + if (rowIdx < rowCount - 1) { + console.log(cellIsGear(rowIdx + 1, colIdx), rowIdx + 1, colIdx) + if (cellIsGear(rowIdx + 1, colIdx)) { + return [rowIdx + 1, colIdx] + } + } + } + return undefined +} + +let gears: Record<`${number}-${number}`, Array> = {} + +let numbersWithPart: Array = [] +for (let rowIdx = 0; rowIdx < matrix.length; rowIdx++) { + const row = matrix[rowIdx] + let startIdx = -1 + let num = '' + for (let colIdx = 0; colIdx < row.length; colIdx++) { + const col = row[colIdx] + if (numbers.includes(col) && startIdx === -1) { + startIdx = colIdx + num += col + } else if (numbers.includes(col)) { + num += col + } else if (!numbers.includes(col) && startIdx > -1) { + const gearIdx = numberHasGear(rowIdx, startIdx, colIdx - 1) + if (gearIdx) { + let gear = gears[gearIdx.join('-') as '1-1'] + if (!gear) { + gear = [] + } + gear.push(parseInt(num)) + gears[gearIdx.join('-') as '1-1'] = gear + } + num = '' + startIdx = -1 + } + } + if (startIdx > -1) { + const gearIdx = numberHasGear(rowIdx, startIdx, row.length - 1) + if (gearIdx) { + let gear = gears[gearIdx.join('-') as '1-1'] + if (!gear) { + gear = [] + } + gear.push(parseInt(num)) + gears[gearIdx.join('-') as '1-1'] = gear + } + } +} +console.log(gears, Object.values(gears).filter((it) => it.length === 2).reduce((p, c) => p + c.reduce((pp, cc) => pp * cc, 1), 0)) + +// too low: +// too high: \ No newline at end of file