From 549f0c43828c5ff3740f1e60e3dcf327bb1da87f Mon Sep 17 00:00:00 2001 From: Samuel Enocsson Date: Tue, 2 Dec 2025 10:39:09 +0100 Subject: [PATCH] Initial commit: AoC solutions 2023-2025 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .gitignore | 17 + 2023/1-input.txt | 1000 ++++ 2023/1-input.yml | 1000 ++++ 2023/1.py | 63 + 2023/10-input.txt | 140 + 2023/10-test-input.txt | 5 + 2023/10.py | 80 + 2023/11-input.txt | 140 + 2023/11-test-input.py | 10 + 2023/11-test-input.txt | 10 + 2023/11.py | 51 + 2023/12-input.txt | 1000 ++++ 2023/12-test-input.txt | 6 + 2023/12.py | 52 + 2023/13-input.txt | 1377 ++++++ 2023/13-test-input.txt | 32 + 2023/13.py | 62 + 2023/14-input.txt | 100 + 2023/14-test-input.txt | 10 + 2023/14-test.py | 56 + 2023/14.py | 63 + 2023/15-input.txt | 1 + 2023/15-test-input.txt | 1 + 2023/15.py | 67 + 2023/16.py | 57 + 2023/2-input.txt | 100 + 2023/2.py | 63 + 2023/3-input-test.txt | 10 + 2023/3-input.txt | 140 + 2023/3.py | 78 + 2023/3_input_test.txt | 3 + 2023/4-input.txt | 186 + 2023/4.py | 50 + 2023/5-2.py | 87 + 2023/5-3.py | 31 + 2023/5-input.txt | 250 + 2023/5-test-input.txt | 33 + 2023/5.py | 96 + 2023/6-input.txt | 2 + 2023/6-test-input.txt | 2 + 2023/6.py | 25 + 2023/7-input.txt | 1000 ++++ 2023/7-py | 0 2023/7-test-input.txt | 14 + 2023/7.py | 94 + 2023/8-input.txt | 740 +++ 2023/8-test-input.txt | 10 + 2023/8.py | 52 + 2023/9-input.txt | 200 + 2023/9-test-input.txt | 3 + 2023/9.py | 44 + 2023/['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJ | 1 + 2023/open-ai-5.py | 70 + 2023/test.py | 12 + 2024/1.py | 64 + 2024/10.py | 80 + 2024/11.py | 89 + 2024/12.py | 43 + 2024/2.py | 92 + 2024/3.py | 48 + 2024/4.py | 68 + 2024/6.py | 34 + 2024/7.py | 70 + 2024/8.py | 130 + 2024/9.py | 102 + 2024/Untitled-1.py | 22 + 2024/_template_ | 30 + 2024/base.py | 35 + 2024/import numpy as np.py | 14 + 2024/inputs/1.txt | 1000 ++++ 2024/inputs/day10.txt | 53 + 2024/inputs/day11.txt | 1 + 2024/inputs/day12.txt | 10 + 2024/inputs/day2.txt | 1000 ++++ 2024/inputs/day3.txt | 6 + 2024/inputs/day4.txt | 10 + 2024/inputs/day6.txt | 10 + 2024/inputs/day7.txt | 850 ++++ 2024/inputs/day8.txt | 50 + 2024/inputs/day9.txt | 1 + 2024/inputs/result_8.txt | 12 + 2024/output.txt | 50 + 2025/aoc/__init__.py | 17 + 2025/aoc/helpers.py | 52 + 2025/day01.py | 62 + 2025/day02.py | 52 + 2025/inputs/day01.txt | 4387 +++++++++++++++++ 2025/inputs/day02.txt | 1 + 2025/pyproject.toml | 10 + README.md | 9 + 90 files changed, 17360 insertions(+) create mode 100644 .gitignore create mode 100644 2023/1-input.txt create mode 100644 2023/1-input.yml create mode 100644 2023/1.py create mode 100644 2023/10-input.txt create mode 100644 2023/10-test-input.txt create mode 100644 2023/10.py create mode 100644 2023/11-input.txt create mode 100644 2023/11-test-input.py create mode 100644 2023/11-test-input.txt create mode 100644 2023/11.py create mode 100644 2023/12-input.txt create mode 100644 2023/12-test-input.txt create mode 100644 2023/12.py create mode 100644 2023/13-input.txt create mode 100644 2023/13-test-input.txt create mode 100644 2023/13.py create mode 100644 2023/14-input.txt create mode 100644 2023/14-test-input.txt create mode 100644 2023/14-test.py create mode 100644 2023/14.py create mode 100644 2023/15-input.txt create mode 100644 2023/15-test-input.txt create mode 100644 2023/15.py create mode 100644 2023/16.py create mode 100644 2023/2-input.txt create mode 100644 2023/2.py create mode 100644 2023/3-input-test.txt create mode 100644 2023/3-input.txt create mode 100644 2023/3.py create mode 100644 2023/3_input_test.txt create mode 100644 2023/4-input.txt create mode 100644 2023/4.py create mode 100644 2023/5-2.py create mode 100644 2023/5-3.py create mode 100644 2023/5-input.txt create mode 100644 2023/5-test-input.txt create mode 100644 2023/5.py create mode 100644 2023/6-input.txt create mode 100644 2023/6-test-input.txt create mode 100644 2023/6.py create mode 100644 2023/7-input.txt create mode 100644 2023/7-py create mode 100644 2023/7-test-input.txt create mode 100644 2023/7.py create mode 100644 2023/8-input.txt create mode 100644 2023/8-test-input.txt create mode 100644 2023/8.py create mode 100644 2023/9-input.txt create mode 100644 2023/9-test-input.txt create mode 100644 2023/9.py create mode 100644 2023/['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJ create mode 100644 2023/open-ai-5.py create mode 100644 2023/test.py create mode 100644 2024/1.py create mode 100644 2024/10.py create mode 100644 2024/11.py create mode 100644 2024/12.py create mode 100644 2024/2.py create mode 100644 2024/3.py create mode 100644 2024/4.py create mode 100644 2024/6.py create mode 100644 2024/7.py create mode 100644 2024/8.py create mode 100644 2024/9.py create mode 100644 2024/Untitled-1.py create mode 100644 2024/_template_ create mode 100644 2024/base.py create mode 100644 2024/import numpy as np.py create mode 100644 2024/inputs/1.txt create mode 100644 2024/inputs/day10.txt create mode 100644 2024/inputs/day11.txt create mode 100644 2024/inputs/day12.txt create mode 100644 2024/inputs/day2.txt create mode 100644 2024/inputs/day3.txt create mode 100644 2024/inputs/day4.txt create mode 100644 2024/inputs/day6.txt create mode 100644 2024/inputs/day7.txt create mode 100644 2024/inputs/day8.txt create mode 100644 2024/inputs/day9.txt create mode 100644 2024/inputs/result_8.txt create mode 100644 2024/output.txt create mode 100644 2025/aoc/__init__.py create mode 100644 2025/aoc/helpers.py create mode 100644 2025/day01.py create mode 100644 2025/day02.py create mode 100644 2025/inputs/day01.txt create mode 100644 2025/inputs/day02.txt create mode 100644 2025/pyproject.toml create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e31e02f --- /dev/null +++ b/.gitignore @@ -0,0 +1,17 @@ +# Python +__pycache__/ +*.py[cod] +.venv/ +venv/ +.env + +# IDE +.idea/ +.vscode/ +*.swp + +# OS +.DS_Store + +# uv +uv.lock diff --git a/2023/1-input.txt b/2023/1-input.txt new file mode 100644 index 0000000..2daa7d4 --- /dev/null +++ b/2023/1-input.txt @@ -0,0 +1,1000 @@ +twovgtprdzcjjzkq3ffsbcblnpq +two8sixbmrmqzrrb1seven +9964pfxmmr474 +46one +7fvfourgkfkkbloneeightdrfscspgkdrmzzt1 +15two6six +htxxfmfd7nb +sixfivesixeight4pfsgxvn9sfjfk5 +pmjjpggvhkrq2 +tvbrkhlxdsnine65 +four5gkrptqninenbdvffour1z +foursgnlxmjtcrrfour7 +3onetwogkhmllzvrsqzhhnkvdg +nineninegxknqzpsix28 +1seven85189mv +gtwonejcncdlhpsxjrxnmpvfgtdrcdtd2nm +1ninemxzntjptl +qcmqfour2onesgplvgzkdltqtvzhtb1 +seventhreerxqvgkzqhfxfdhnp628zxtbjklkpdtwo +fjdsgcsqppzdthreefour3one3lvmpm +sixsevenfivefourxf4mzhmkztwonepzt +nineninesixskjkbhx6nineoneightj +four6nzqxhhnrg +86fiveone9dhrkkh6 +8ninetvnsrcsbpn +two43one +8vfvbrnclnmthree8onetwoeightthree +one2czxjgbzsn46ktj8twones +qfnlfivemqninextzppkfkb8 +ntvcmxsevengxdtc3five +8lsfkbbxkscc +seven5817smvjfpdktwo6mdfngz +92hqxbchfpnine +tvxbltz53oneninethreeonek9 +hvvjhd1 +six1six7sevensixqcvhsfour7 +seventwo2 +2svpbhrlhfjhbkf3fourvvspkfmbvztmtpcxndfnine9 +fivefour42 +sixvstzdtfive3qzmbbx +rfcxmthzlgxgrmjncszdvlnp6 +lhlncfjlhrqrfzr1 +cqnkmtfj5 +tctfngvrxljlt53pntbcfrftjpjvzqbqxh +6fgcdfive +4834sevenvssix1eight +rpxcthbpmhgrcxk4 +threecthhnine781 +pppqkscmthreeseven1sixfive +2tgrmvxpthree6 +7ckxjmlpkqqqjtfiveeightbmmdoneighttnv +six2two +lsshzhtdfour24 +mrjjgzsb92fivetwoxh3 +5fourcqhk3two85fiveeight +lsxpkxfmq97one +b87twosshtxkkplq5zkrrqcmfn +threeqsnd64hthreeldbtfkqpbqpdlmtwo +eight2one +14r +71fourzrmsevenseven9 +threesixmmcjzzml4 +stnmbsix41 +cztnnflpcl4txplfour +five6six4kxv +5oneqmmbnvgvbq6vsncbrjrsix7eightpzkhvrjz +kflckfgxfeightlr37fourfiveseven +9three7three +rkxbqnine7onevvqgzcvvjthreendkddfournine +fzzfstwo44vm +19648 +7fivesixhdxhlgmv9 +six9hzlctfiveonefour +66eightthree4nine +jcgk8three +tbctwonefive2eightsixbntmjceight +ninemrqkzsevengvq6 +rsmmpmrlmq92fourfour453four +6eightbmjhnpbgnccfninefonenineglkfgp +8onefive7kn +eightrgzfdksevenftbvkt455oneightnl +3vxtwogxpdhjmqskjc +shzvnlgvvvthreenkv14eightbcmjd +2sevenlbq +1zfjpz1mdfourstvj7zpfxxlqf +twogm22trvplbsk29rbjtvctqr +twoqpgcbskdgh2tktbbpnzll7twoxljpdhthree +5nineeight6 +936 +218ptffour +1clztnnsix1 +bsevengsxbpjmbg5eight +1cpeighteightpb +vrlnveight2twopxmtwo +fgrjr8six +5sevenspppgjtxbtqlzt +5sixczhncsix2qcqsevenfive4 +kgcdpqclsggzm79nine +eighteightone6sevensixthree +92eight7plhftxkntl1two +5dqrhhqrrgmvrqznbgx4three3 +twoone953cdkm5stzdbdh +heightwothreennzljtptwo94 +6sevensevenfoursix5nine +cnbslkngtk9five58xpqvgjpqrnpjnzbk +onebrcg1bnfivekftnzpclqxvhchloneightzrn +four855dpknm +4hkdseventggkffhrkvsixcrsqjsix9 +8seventwo +two9sixthree9cdrmqntmcv +525tg4h +five7kxrlmq1bzhdmhtgglmvzrtfbqqd3 +bnbbsbhlcbktsqlpq69ninesfxhq +gndxnlmnrmnk29qkfxfoursnnbvjtq +5bzppjrgcpk +2three79pmgtcgmtdf2fjh +sixmmpbmtznseven62 +4rrm +ztlthreesix28ninesix +j7fourfourfbrlxplk +zjhrqtqsix1 +4three6hhndrlszfrgphcbonenxfive +jmg8hfsxfsvdxz3four7jfbczjmdhbpn +39ptfzqjfpnpxrnf7eight +three6jrcrgpfxg8vxgk8 +57kvbczxn5eightfour +8xbdbrbpjp +sixtrhhl2tktvvmkffl5 +three6fgsjtmnine54sm5k +ninenine3stfpft2nine +one61onenrhmtwos +pzdq8 +pltd9sjdkrscxr25 +dzsldkmzd1 +vlvpfmz24sevenshcrvx389one +1rfvlnmfkdbmdjj +sixbzzbftqggn8zggtbcd +hzxzjhkvd5twofivedxfdlrdeighttwo +six9nlgcdznskrsb +sixrxkfhvsjxzbt4fivenineninenine +dsbmqpgmf8nine634two +fourknfzpthpf1 +two9twovbmldd +5zgnnrxtwo2two2 +fivezfvzfdxkmrbvtpdhqbmdhcthreedvlstmq28 +ppfqqq75seven954 +sgtjpsix3 +twospnc9cnchkzthreegj +3eightwoqs +goneightghmkgksqfk2two2six +sixthree6bjzpqlsbgq2rkbffxtmprpddkxv +rkv43 +bzfnbq8onefourthree4 +3mqvr +fiveninefflpllcqzonejqqbtwofive43 +tvoneightfour3three5 +mvhlv6bzbjggrsvvxh4dfcpmrnhnq4 +fcrsmfmpnmkfs3fivekblglhqmvfourchc7 +svfmfbdrgd81one4 +mf7threetwo8nine1 +qngfr4gnnxbszqzsixp +px5gfx7two5seven9 +4gp +8lxkgvpzxch6 +3mdgqrvtgnthqnhpxteightfour +onethree899btbpjnxxjhone +fnjdzx5vrzc +four5twofour +9fivetwo2 +threezlpsdhxvdlfpsvkxxnnine3 +hvnnq9two2fourpdjv +bvjkdg9four1 +2412 +threethreeszmhdndctj1eight8lcqtwo3 +cdnmjmxqrz6vrkkxtfour8cc +njldrqggdnfsix5 +9csxcksh6three697 +92four2sr32 +3jdpqdjjct44oneone75pjgkgv +576sreighttwosixxzqmj7 +twoscdxdlfddmfive54 +ninefiveznine33 +threenffnvx3 +916tpsgsxmtml8 +6five3 +fdztvpctnr5dmbjnrjslr +16four +4oneightk +three5fouronenm +threezrksvlbdb891zfbbcdrbpd7 +five821ndfftdbmbr3nine +ninehvdxftmgcvnkrlrvmmbb4nine +xkkzphgfv1two +3pm +ninetwobtjxdvnhv12 +fiverbkmfbx8fiveeightksjzphkrj23rdlrtnb +kseightwo2fivesix +5snpchthree3 +71oneone +6frxncksfxboneftdpvmnfdfxreighthrmnqc8 +two48mhgdtlp246four3 +993three8 +threenine7twohbmcrpd +9bpdccqbts +kptwonejntgcdqdfffour4twobvtxnhqkl7 +1637sevenfour +soneight6lbcrzdmhltpbkbjfivechxzfrqqgfeight +99five3hjvjrdmgl +qncqlreighthkfmbbfqx87five3 +7jqkdsfour +ninemmvcxlkcrg1 +mkdhgzcvmseven3onesnkhtxbgf7threestvjqn +nttgqsmsl4five1eighttwo9zg +one2ninefour5 +bdfbveightseven1lcrshdgxznineeight +qsnvsonezqhsjmfive9one +6kvdrgkgznf1cmklmxgnine6 +xkmzzdpknl661 +ninefoursix7gnbmzd37 +mmxmfnsrmt2bnhkmftxnjsix +fmhsrdtnrxlqgjttlgvmqxgzpl756sixllmdvblrvrrzkqgb +7xmppbvd976dqt87 +fourzdctfglzzf1xdbfmrbfeightwor +8thncgqzvr989lthreeseven +5qmrzeight169 +4qgvkmninegcsdgcthsp62onehczjhdxcgm +25tlppkmctwo2 +668four4 +rjbxtvfktchflstwo639one4 +seven6eight4onehfztk +five53 +nine33threethree3pznjbtxjmrrxm +19six +fivethreefivegxcqflqhjrn3fivehcn +vpbntqnpkjfninesix6341 +7eightb7 +bktffkqsx6fzvpnjhk +38jrjprtwo628 +77tplflrp7 +4one9one6 +pkdhkbxrbshccxgknrjgseven44 +49rthxdvlmeight +5twodhkpfn1 +znine2fbsmeighttwo7 +5ninexvmg +dbjbfmqtkp66 +mdsrdjdnxkzr3xfm +two9twofive3 +9kfivetg2five18 +6fivenine2 +2dlgpxsq7sixone6 +tnqxgjbnc9bhqbgtwodxssml +18sixcjthreetdtprgsix +65sevenfive9nine4seven +nine34fiveqjdqc +threetzvxrb5vspdhrmjcnhtrzkqhd4 +67nine8jrxt39 +443oneklzsrtwo4tbbvxblk +xp7fourseven +ktsrninemlldztwo5ghqfgh55 +five6eighteight7mtstgjlqmngzonetwonec +rmfourseventwothreedjtvf9 +rlsgqhhvcdvthreekzjdssslmsixfour5rxk5 +sgnfjqm4fivefiveone87nine +6twoonefive +sevenrftrnqrjs1 +bcfgjklzfbnineninefivesrpcqtwo4 +threek7seven1fxslmvnhmffqqvbfbhlceight +sixxzqz9fivethjgdv2 +nineonefivesixtcrjd5 +5645ptsjfrszgr8 +1threezkpgczxr8four3oneqm +tvlfrfcnlc56eight8ninesix7seven +7clvmrdvdgjg +7mcstlktwo +dlxlpchr3eight +3ninelrzgkhx85 +jlkqzonefourrvlptlxxgrthree4six +rxhpprsqtd982t +six4671nineonesix9 +eightsixtm9vngskjglgvrbsqgcmxczbqqvxqxfj +vxfmc1six1ninesixnine +39fivesixthreevmpm4 +xllclztxcxjskgfourlvggrvr25fourthree9 +31sevensixninedpfrvvfftc +three64ctshdpcsfdjth95 +fourgcqf8sixfivepsrdqvrld +5nine1qldrqhvfour +5three1three +6hjbgdqjtlppzoneninesevenqlmvgkq +eight1three6sixthree5two9 +17141oner +five1two7 +sxcfxblvfbtdtlkdpnineztnsfdkmeightvrr7fivejj +eight183krc8nkqk +sixthree38fourkgfbbv2sixsix +922threeeight4moneightsm +3threefive8bdzjs +onechvnhrfthreebqfive9 +8sixgkvzgnfkjrrxrxvbvgvx +meightwo1dnbbpzrxftwo8 +253lqt1bzfpqznz +klsgclc549rbksgrbbh56 +3xksqcrhdsthree +55nxbjvps3nbmf +7qzzfourtwo1688 +h5skqsrnnpxdone5fivefourkffrsblv +3fourfive2 +25stdpqvgmzg9qksix5three +fivenxhkvbscrxx1j4 +dtszrbcgpgxbh1 +fivefvrp159three +68mdjsggnbtwokmthtwo286 +xtwone7bkhjqkmmdkxvqtxfkpmckj5 +btwonetjkkdfqphr2gkknfz7one +ninejgnxcchjqsevennvdjvttnqqsix6 +395seveneight +lfrsoneoneeightfour6 +four9prvhcqdnrgjl +qhbkninefive73six8 +sixkqjtrs1hrmnt +5lmctnqtqc49eightnt +sixghthgcnpfeightseventwo3 +vvvjbvnjfeight41nine +9gkxpcrql9three4 +65seven4eightmjnh2gbjjstdgb +8four68seventhree +19924nine1lxnfzgt +fgjtbsfour4nine4vqfznznqxnsevenvzn +fiveone9bzshjmdvdsixxknhmmqskone8 +xqjzgmdmnfivefourthreemmksmdsix6cct +eightklfnlkb9 +rmtsdblmcghszsfgd66seven1bct +twoseven6 +psbfmmmrppdfm5ninetwosixnine +rkcgdnslc9pjtqvgdmbvpkbbksxgr +mxjpns69 +rspjpcv4fourthreesixfourninevlfive +2dgjgdn +66five8qxeight +five93 +six7twovssixsixztrmfdrrvgqtdhmh7 +32sqltqgoneightd +4five8tns1six +277 +pmrzrckf6 +8rglvpcttwo1twofive +fivethree644hrphp +fdpjb6 +dfkpmgxfgfmtklbffk4sevenfive +nhqfpnvpsqpffour6neightfour +threeseven9eight67three8five +txttqnnineonefiveninesixlbscpqp1 +three2sixtwotwo7smkmq5 +8bjzjrnpspnine5 +5three659fourfour +qrdrk7fouroneseven +three7threevhct +mpjpgfbt8five6fqjbghvbpcnine +7zonesevenzmlvfvzn +2hzldqdntffxhfpxlghf6threeninejrxngnjq +dfppvqcvthreessnnm65tqtn +56nine75rdkxdcmj +8twozvjkdltz4sevensixfive6 +vzpzllmbghcccksevenjgjghqjr98 +fgjsgxlh48sixg3three8 +4eightfbppqltgxttoneoneseven3 +six1eightddcthzd +fiveggljcppdeightnine5hsbfrtninenine +2xrdtzfnhpvpgone +982 +two7nine7eightnine4 +one431 +eight9fmbfqxgzlskgjrrksr8six +9zhvdllsszd +4pnkpxrgltkdbztlnz2 +4ninebkh6ninefiveh +five9ninevrzxhfnggfourfoursevensixlncsfdvrz +rqhjjxzeightnineseven7fnmbkrtqgr +8xfmqdone +pnszhd1trqb71gfhpjpq +9htfkgbxlht +sevenoneqgx29three5six +fourdlscbpbpb9four5jbdjzqqdthreerhqdsbb +five31sevennbmrbhtthreebzqxvthree +one4c +three38183threesix +6rtdclcbfbbdbeight1 +2one8xdeight +2sixsixtwo +nine3pcjthmlmtljkrzxcdxkbmgzneightzcmtwohpdpkvqg +9two81qlhsrnfpdksdkd +threejrgxc4seven26njlmtbheightwodjh +lrjzhghhpk342threeninejskdnjjltt6 +46threegj +ninedgpkqblftq2b3four +3951sixssgmjj3 +8jteight4 +three6mdvfkgrxcjmfoureightfour3 +hvbf28 +9fournine713six3 +four1seven +763twoseventwonine4 +ctpfmnsvcthree9sevencbqtjc3 +sevensqdhvxd36 +fourninergfmdxpdbt1ninefour +2kptonesixzpqrsqzhv +h4qcscfxfctjbqnff1sevengxvjjc3 +d8cnjksdf +hzcgnine35fcbxtlg8rjhzbjfkv +jdvoneightdpfvzvp758fourfour +four27jhrgqnrjnkzffour5 +fivetwoszrxz2fzfrbgqntjf +onergnqpl3 +ccfqnc5twothreefoureight +grgsgxsevenkvzfjppnzq2sztcfive +9two94onesix +nine7seven7 +eight36 +plgsevenvfljnqvtfq5two +threethxdbnz49two2vdxbpqtpb +cf9fkrbrvjhssptthree +one5lrcn3klrcphllmz9 +onesix6seven8tzgfdbm +964khvfxtrljs88 +trszhb48fmseven +tdfxvnhrzv8threesevenkgp +ninegnmjxzbtcb32four9mlpkbfqdxdkoneightg +sixnineeightnhlqfslb2v +one83fc7zs +pxfkljdbdqqqvnrfivefoursg5nine +2onevh +1fgjrsdlgnbmsbzsevenfive +3nine87pmsqqntwojtnrksdtwo +two59kltcxhzszhdtwo +6451 +sevenzscjhgpfgsseven7threeseven4threedlbtxtcvl +eighteight8sfsvhbkf9jgfrddx +qlvdplcqtrcj2eight4 +sixbcpxtjt4onetwothree69 +91fourrbblcl +twozvqbsx4 +twogfh73 +onesixljjrlonethree3rxtwofive +onefour62 +b7vfplpqnine5 +67dgbmmjsevenfivedktq +7foureighttwo4 +sevenctctvfg51tsbzqgcvpvslqb +mjkeightwo7eightsb6one5xzsix8 +151dht66 +93tkbs +29two +foursixtwo5gprqslprxkrbfbmsl1six5 +one3six3 +three66rbh82bgtfzsfrkhrv +2sixfivethreefiveseven +fcjttg4onesixtwofive +15seven54 +5kjdkr9htl +gclrsklbvkfbdcb9seventvdtdmmmksh52xkxtpmfpvk +spone7eight5xzjrlxrnzjtqgpdcgrsjn +vs3fourdkdlhx7rb +9ldxtdk3 +4dppnthreetwodvkhjjrqh1zbqxntvtxgchv1 +1sevenmsdrjgqfivevphqmxzghktwo6fdvkvqhj +tbptrcvxhs9qcdxcpvp +8five2ssrrhgtxfone +3clvbm2g961 +four2onegkhbdfive5vxvxvtxglg6hxrtlhzjh +kfhcmflznrg9qnkkxqcsm2vqqtrdg8tjkshzpnddvd +eighttwojfktjcrqthreepssfour39 +359nine2fivevvscbvggjhbnnzqtxfsbpb +vvshjlcfqt6qjvfjsix2tgsjbdxgppq1jmr +ninehhmeightcvqskvjptz2kdnhpptvkz54 +39threefourndztxcl +sevenfive7 +csmmpzfsix41 +9cgqxtpdxt2 +3mpzvlxrzvhtj +fourkqhzsjjjvx3six1 +52one +nineltplrl8tfzqmnqeight +sixfourdqrfvrvbvfzzgb6 +mqnxglzjk6qqhzksklvsmthreesixmvhmhbdkqpnxcsgvcsl +65 +zqconeone85three +rxnhdflsqdqglxdmfxlxponeseven4one +88nkgcglftwodfxfhzxbqdpfrqmtwonenf +jzoneight9htkkpszpcqvkmlvl +388xnq +9xhlrqnkjpthreedfknpmqqtwo +4onemfzjfvmhhfive3two5pjdcf +djqjglztxs5nineeight8jdzone +four35ninefourfivethreecnhntp8 +gxqxl6fourlfdtndgdql +fivenine6 +1pqctbpbbgrmgqfqbzbjjt6 +xzvjjfnfr28jblqseight +ctwone23 +6sevenqjtwo +8nineplhlmsgjvs1 +lmjgmltfivenine9 +8gxnnnjonesixtwotwo1 +2seven678cdxhkflhj3eightthree +djzninefour3one +vbqhjjhpzg86rkzdjzfj +eight1twotthreeqqlr +bkxseventhreezcjvdkxzksxrznp6four8 +five77xcvphzcnlfbgbxnqbhfrldg +71qxqdncxdjsix +eight6one6jnpspgmhngzrfneightzdnrdhj +xb9skhpnfjsmq +jxgtk618fiveone1zr +8dkdnbfr +3llplnp4dzdxfhbvbn7two +eighttcgrbhrspktwo6eightddxhqqbprrf +eight2mpmzsevenrcbmsqg2cxjvmblnqbqdjsl +seventwo54 +koneightsix22three +zdsnjr5vxrhkthkr8qmddrzclmrkprmvbll +fbkmfxncztwohjbfgkhgvcdkrpnc5 +ksprkgxkjnineseven3fivebjpqhrmbdtwo +fourpss5 +1three9fbnnrjcgllkvcs6 +oneone9kjchnfsv9ffcdspfive54 +26ninejctplmsgb +9ftfjrmvjblzqqmrdczpone3bphtmmkm +7lpssdtbc67mhnthree9cndbsthree +fourfour49four +nineeight8bzeight +128zpqftnxnqz2threettrhscsll +1xdtxcg4tkxtsnl +hmxbjczvgmcrd9mqsfivefourninethree +5hseveneighttwomgxmlmskr8 +zdtbtszzkbk5 +eight5nine6xthreefour +9rbfcnjztthree4v9vn +voneightqdtnrtc4 +86cnzxs2three5 +eight9seventhree +tjmrjgcfldqtbrvnzzxshxkrs3onefour +2rxplslzcglskjxgthk76cczdbxrp +sevenpdvsbhkknxqkqxfcz6bhmkxmhdbvhcvvhpmv49 +three1twotwopr2lctfjb +zrbrqmh87dmxzmtfvthreelsleight +34dcnd8eightwombx +two9xnqtcfgq8tsqzvd3three +nine5fq3 +eightsixfivemtcgzlbkheight4 +qlspgfndmx5twobtjgzgvzmcone +5zlldrzrffgggtwo648 +seventbqtkpfivel6 +hjqbmfnnqzmf4 +fiveqhdfsnjvqtwo6two +jftwone7 +4twolqvglgxcc +twoqjmgjtrrjjt1eightcpj +eight9sevenmlkpsbzmtnhdrkbmj +trrpdninesix8oneqxtrzf +5sixtsxqdbnczhbvmfkvkc +tvbf2 +sixtwonjssgpljqrxhlstfx4xbhqzlqktsixfour +kfxccb45tzsftztxjhgnxqsxknl29 +tworjdcgsgvsix6 +eightjbqfive26gfspjh3nine +2sqhleight7cfkhzrsevensevenfive +kzpzjcrl98sfive +sevenrsgtnine4pbgvrbcpf8 +25q3qkcxlvhrxdonednbtcrrvjlnngq +twothree4lffpxvfcgqrkvdgzdsdjxjsh +seventhree34seventwofive9ckm +three25skfkvqdmbmsixxgqx +three1eightthreesix4 +threeftjlv9 +6spbhfckxcdrxlcg6hxcfive6five +8drbfjrgzvs834slzhsbgrjm2seventwo +sixsevenfmrvpqbgx4ncrmvfkjx62 +lqfsslkmstwo7rgnqeightthreetnlnonehszkrghlnt +5onethreebxxfstvd +djchrbjcrddcqfourmnninesevenrdlpfxthr2one +three3threeoneninepcrjr1 +twothreernxmhmtbn2fourtccrqhqs +lzzdpfourtwo1six +two3one3 +zzcnprtjdr22286 +seven5qjlfrhj7seven8 +seven99 +mtztq6one37oneeight +mrfcssmzxpvcz2sevenfourfivelpzqkvvdxmmpmxqshskfnh +nine8rtx71 +1llzpvcdgmvoneonepksninefourthree +gbbvkcfive18two8twonineseven +2fivenztsix2nine +gjqnnr422seven4ppbsqdbpcfour +fourtwo5one7qfgpmmphdtl +pglzjrr4fivebclpf +slrrcqxxhtwoeightseven6 +dnknxxkbjplrkjone2threesix9 +htctqnkcmfqdxrzd9eight9seveneight +8sevenfiveninermlrrzpcdxkjkczhgpx6eightone +eighthnfxhrtssbmfxv6v +6fp539 +sixzmsfqjzpvxjkhfqcrbss7xgg15 +nine5ninevddknzczpxgzjx +jbcsf3 +jjbstlskzxc5nine +jlrvgcbch7tnpfjnczdsrgddrseven156fvdmfhtl +one89 +three52sevenlxxskf7gxh3gb +eighttwo59mqzdlqjdkkxgjhnktwoone +519six +1onemneightsixdlqx7 +7fgszpqcj +sbfjtrfvnv6four +qtwonedvkninercj8 +ntrnzldltrvtcsh8eight77sprgsvfdljthreecndckrzmjl +gtspn2 +54six6mkjznlb +sevenonethree3sbpjqgltv +four8two +xdzrskv3974mgvjlhzbkddhcxzzxv +6three1mtlxshtxfpnine +14threeseven6 +37threeonefpfgmz9 +three3sevensixeightfive1nkjtndgrd +2dsmr7qhmnrgbsrvjmsbctwovb +gkdsnnqzlzdvcgthree3fivedzvpcfive6one +3vkftsclsxtxmsjeight +sglkcnzgz4mnhgblxqgdv69 +tpcjb4one73s4 +sevenrvhhxjcfqgs32six1pjvltwo +8zmktmxkbc5mpgrtnxmnp35fttpmdbhfm +1sevengeight +hghs1sixvvjpmlcponethree8kckgkf +gkbpflqvh1cbddlvdkzhfmzcfourkmckngsevenxkjknplzv +5sevenfk5qgfshtqseven155 +dfjdtxjxb8fivefivebjtbggkdlpxlmnrcdt4jrrpnbtvlthrhmczn +2fivefivejxhh6 +41threehtwo4nhzdn2 +2fzngnxvvpjrqxk6 +53sdthreeninexrfone +6qmrthlzgqeightrzrdglxvscgr +snkmhszcbmthree5threejsvkpkknpeighthbv +cmgb9seveneight +5djnine3bcffxgjbrhxbfhgthxb +1flqjgsf2ms +fivefive7onefour +threeeightksmhj94jvfvqrsgqrsevenj +jttgbfmh9468ddshrxnjthsix3 +25four +9sixseventhreefiveninefive +eight5twoqrfgpkbdfc3qxfmchrjx8kpp +nineftnvllx1rjzkkt +gmeightwothree1fgfivejldgmt +nine966fivethreeninecpmgsxsxz +77bfhphxczdg2eight +89hcgjjtchsix +1onexps1 +3fourkgm +hjgnbninevxdtpnct7bmstnczzteight23 +twoone1qt8 +43744 +fourtfgn2 +sixppztkbvllkltbs51xknnfive +tqxoneight5 +twong3zdrbpqnb +fivebcrxk198three +435sfddjvfg56vkddkzhhj3 +qcnhlbzmbld2fivebsix +zfsrtwothree8 +nineeightfivetwomcjm2seven1 +3gbnxlzxhvzzgfjjhf44fgbccpthhnkpht +3ccmrkbfour68ninetwonebz +sevenrccgdjrqj9one +fourzgdfbsnlb66txclxgp7 +jmzlbtgbtl8three +6nine32pr +sixffcsmhlfiveklbmgj8nine +psmjrt65tppjqeightzqvglglnine1seven +fourninehhzh8seventwoone +48two2vzbrl +mdlzptrcsix3three9 +sevenlgr3t +7sevenpphjhvdhkheightwojv +seven3756 +four85 +4twoonettmxjncsqmgsrxsf +fivesix6twofvzqxpphzmlkj +eight1twojrzspbfbzkftwo +5eightthree5 +31ninecjnsevenjvbsvpphpxxkcnine9 +nine5vnine486vrhbkgl +sevennineeight97qpdlfbskz7sfbtm +onernqbxt8twoone +gftjrbmkmngtshchbgfc1nvvt5 +four5dgvsixzhlxnnmjhkhkljcfdpeight3 +ttmfdxhd3ninekzbtsixnfmvfour +8pfkhxhmh8xkghgdk +nhs4threemxjpbgsix1s +ghtwoz1 +sixdthree7vlfbpzcm1ndbbczvc +ninetwo183 +twofxsdt36fcthreethreeseven +7grvvzqhcbeightwopx +twoninevknhnkgdmhmlbxkeighttwonine4 +4fourdmclrghj2 +sevenmtgvr8four76fivekdqbsmmtq +klgpeight5sbknbhvsixfive6 +2vddxlzfpsrqsbsixlgrfnhone +jxfhlzcp6qctpqhb1 +eightd1162jsfcsplrctwogcpzlhqf +one4four7xx5 +threebqmzstphclb5fiveninethree +bkxfxxms6eightwoxz +nineeight4four +sdsgszdznng4sctkfiveszkdknqjf8 +vtzmnllvvhrcfdlxcxxlqvzst1 +htzxcxpvqj91sevenxrggdtjzbrgcv +ldcnbzstq4ktzdxgmcl +twohshbblseven4grzpdtfmjn13cmg +cktjnhdnine1three9mjqvnjtkseven +891ninesevenxbdjs +kxjpngdtwomxttdqcdkhdj686sixl +hsninefourcxfj3five3eight2 +6eightgkkr1one +658one +zqgrxfourfour8 +twobbnfkdtb9five21zcfiveoneightjgt +79jsm55twonine5 +eightftk2two +eightbjbvqscs5pvmb14lgvgfv +four4four +qmzheight5hgfourkgtqfhjfournine3 +twofzdqtvssx2 +1fivefivesixsevenone47 +xhrjffnine8 +oneseveneight72fqgzscqt5 +nine7fours58 +three2fourseventhree +35ninesix +qgjsrxgqb5 +fiveqghjjvjthree4eightqfgrhblkjtwo +9mvcm +96fourqzdsix +vbzqmmzbvrbxltvlfmcpfvnddmgsbb6four7onegn +three3qnlxmkhpctwosevenfourvmqmqlgfrsn +2seven5one2six15vgnqzpggn +sixljtvqzlh1 +45onesix +foursix44eightseventhree +djsix84rnx8z34 +1mkgthree8two9956 +psgnl6six5seventwoone +546cfgr2three +thtpczmkskptzn9pqzncp +31threeninesn7xhqvrsv +threehmjpvctfhnmhs57ninepzfvq +teightwothreesixdzqhvljk84nineninesevenb +gvptkx9rlsnmtwoonesqfxmzkv +7twojszdrxcxfour +3eight617npsbbrpkjtzsmeight +3sixqntvpttddsixninemtpb4 +1onefiveseven2fourseventwo6 +67foursevensixsix2 +one7qeightonehckxhxdfjjzsrdnj +38onehzjxg +4splxs1zfvfksevenkrzfive +fourfournkcj9 +1ljmbhcpttjnine +2xnvfpdgccxfivellztmtpnc +ljvlxplhxfsjqv6sevennine44nine +qdonefourlnrzrgthbt1 +twothreehvvhsxzqz1chvbcsxtll +82vmfjbvssmlgk2dbsljgvd3 +xzfbfmbbxfeightgfz3lvzpzbpmv1four +oneeightfd5ninetwo +ghddk7six7xqmglkvnqonesix +six1eight +7five5ptkbvvvfive +3hftgthreehcfrsnl1fivetwo +7six12onebhpz +mkqjv8bzdnt9sevenfourtwo +five3mzgqnm +sixtwocbjxlgvp1twoseven +dkfmbzmvxseven971 +bninetwojnsnkc7 +ninekzcpfive4five3phz3 +eight8143 +eightrzdmxzb8eight6 +5pdjm22ninej37two +fourtwo8fivetwosixthreetwo +ncttc71fourfivejpjzcgzpj4 +5882three8glcvgnfhscbtmnqmnh +ngxkxtwo9pltbbmxrknvjheighttwo53 +twoninenpqqqgsbsq3fjdk +eightsevensixhtsjvxjc8jxftgnptgqsixvcncglzlgq +sjxtcnt8gpeight7cbgffmgqksix +fdsn9threenineninetthree37 +19rrfdqtpmonetqjdcjtxlhkptccjn6mtztqhvvtqftbv +vrhprdjsfour28p4 +eightfiveeightninevdvnmbv58vrs +qdzhzrhlfl7hhxqzxqdxeight +svnbzgbhxjcx26xclfgs +5lcggbhzrmnknine83txffvcdonecrqvvjf +six5fpncsbbqbbcczcmbgrqmndxmrxloneone +1one6 +88gctsmp7eightrvshklprtm +xf874onehhcknx +sevenvvncrhvxjxnzsftkfhsktwo3eightfour +8ngprdqfour +98fmrxpxzzbrjpxzqdxmv +2zbxzsthreefivefhdbhvjjxv6btwonef +jzkjcvpn924qjcbr97h3twoneff +foursix3 +9pmtdjvrxjrponetjlxbdzbvrcjtc77 +52twoeight2fourh8 +kpzfztlzlkdprbmrhsjcxfzsbch31 +4fivebtfjmfive6seven +ccttxjmheight6twothreelnjmfoureightnvcvpmpc +6twoz1dzv95 +threelsmgdnxcsevenqr4xrtthzgkqxsrdssmjqv +fourgpvjxdg4qpvfivefive8nine +9mncmnhrclsq +9zjfmctz +pndgptggnsthree8xlcctvpsix6three +98npgrlkqmcninethree +fivexp6fourdpckhqpcxczrfbr +six2xdgsqdpsbmgftzvqhnjg +7ninepqheight2eight7g +2zrsevennlpcljnp +twoonethreevvpfp1jrhsevenfour +threebzmggv7bjm6cczkbsronetwo4 +three1foursgvfdrrqmk4two6 +onengzkkjsxsjlxxxthpd7xfcvkthreefour +sixnine5sixeighthlvmf +63gkmbsdc3fourmgrjhrlbqgcfxf +2bmldthree7skhhpxfonenineone +b6seven7 +seven39 +twoffxbsgpcxctmmvb4kdhn89 +seven1fmgtseven +ninegxbdmztzzbqq6lgcvsbhzplqt +7twoonev +24nine +tvjmbzlsjtrtdhdlvnffmcfoursix6sevenonebvq +5jpntjsthree1threetkbsh7 +sixone423fourqnczdxcpmsvjpzhl +33zdfourseven3 +77lltwo5nineseven7djjmdqkqfd +4xfnpfbtdl7 +two5ninejbrfrsbrsvzfivenineseventwo +89znjldjptdnfkeightkpcxdxcc3bkmfhtzkkh +qlkxd1rv44qlhhpjrninetwo +6l2rfscvcgdm7 +rhtsrbrmlnfvseven1eight23dd +7xcglznxrjzsmhqnkqjhbjqxnjpjx15six +fourfiveq1vcsnnsxkmrcjscn4sevendbbtjh +6qcvjplvnine91rfjk51 +jmdsgfxd5 +tlzpvtsvkdsixtwo95 +8threeeighthvhlqss +threetpxxlmfrhpf15 +4twoeightsix +rg8nvrtzxjvfddkeightwofzs +tggqninemk1 +mlchhftqkxtbhfpjsixnine817 +231rpkxcvcz5fcztnqskqtwo +five9hhrtmp9twosixthreeeightv +9threeschsm17 +hhreightfour171dtbmhzhhjb9fgbg +bhgp6 +fourztzlhdr2hbdlv8fivenine +fourseven8seven +eighttwo8eight +two12 +threenine76ndvklb +twoseven9jxfcthreecnrpvglksc +84fivehmf +jpgbtnrsb15eightgdtqmk +34two8eightbxqvc5nine +four4hsgjmtbfrvfivenine +threecfcx8ninefive3xone +cvhtlnlnhh71 +four9sevenonenine9ninejlgmtvxmxseven +vttchshfgfpdbmpmp338 +nfcdnhq6nineeight79 +rgltnqzrzfqdjsfrhzmfivetwogklxqdhzbjtwo5three +five3n69fiveninesixtwo +nfhheight12clcqcnpdbz6nineseven7 +eightgxtmstbthreedvrqllvp1ljqstbjdhcmbmbeight +two26four7three +6rtninethreefive +vhnqgdzzbxr9two7mdjzsx3lf +twothreepzxljpd6sixcmsxkcqkfive +6threesevensevenjzkcqthfivegmjvstrsix +five7fivetwofour +onesixseven767 +36onehxdpmcqxsfbfive +2hdvqrlhs5six +pjfcjrnjnk9four99nineskshccmmnvxzvhvqmcprkdqvhhk +4gronexqnzdfthreejgqt +kvrsixtwofive2 +eightfourone4hone +cgbjtdbvptworbcz3 +jpgmhfour1 +ngbgjhlstwokxc8onejlhczxvnjbrkqzdl +chbmqrz3fourthree +rgvmkpeightqdssbcgf9fivefive +5vgrscgshtbfgbljt5 +pxgq5kffxbdjgq5cjnpzfdt738six +meightsvfb47xcdfkhf5 +clzqdc4five1onexfxlxnltfourfour1 +fivesix3threeseven +tworgklxh1threefourcsrsbj5 +3fivepdppjlmmb6fkgrcbldbxsdjpbvbqgpj1nine +9clvlvsckdmjsbxzrmrhfour +fourlptwofqspctl913 +28foursevenrfjfive5qrfsl +gfhmkfln2jcqttonethreetbmcdhhvbnmqdgsbrrmpk8 +eight35qvkxtwo3fivevfive +26fivegpcqqsjr7five +three1seven4 +9fiveonevmxhtndtfzmnxvtjkmr51six +64vgrgtwofour +four9one +nxjtdt2three1three96lfzglzcfour +355six +9lvqslrvdrd8six +9threetwo35six +two57 +phpkcmfxvt7gphd1qglpmckhnj +sixthree1ffrdbsix4two +spbscvjfl8vvkpjkshkx3 +5nnjdbjj3 +bmmqrrkdcfbctmsk124eight9one +4rxdpvqlhn +seven13glpzfknqtxdqjq3qblzcjvx9 +8bnkbzszkxkrrfdmcstvfvp +nndndjrs1qd1421 +twovn9four8five +eightrc1 +ltjvtcqfzdfourseven8kvcx43 +vn6ninelr8 +2seven1 +7rldpqrfoureightthreesfhz11six +56fourkmvl6threegzfqnlrlz +8mkpcsnzmknmzpjppf8two7 +bzgvzcpkqxmbxcqsix4qjzt28eightwoj +threesixxqkshhnine7njtvvxfmjl8 +5seven6vqcd62sixone +three552 +hsslkhbd88zjhqvgtzpfour1 +oneone96fvjbmcnzrr +pspndcdtctwo6 +v3one9 +fivefournmrfrzghdh7twoxmpgkps772 +vdkqxqnsthreefive25 +kgjsevenczqrqf14pjchtfbnnninexhgn8 +lqkhzjzm3six1one3 +1three3l61seven +1flsfhznl +r8hnbpbtrzkstdg +hhrmnkktv7seven29fourpvjceight +2mbft +954five9fivegbmlz5 +dshbfdqdjjgtxffjmllgvxjfrstgldgdxjsfxbone9tgseven +fourseveneighttdgghnfive7pchxddgggcq +8zx5seven7pffldzjhdb8 +bpqslhkt33sixnlxckbbr2 +xqmxvjcplh4seven +jd9zxmz2two1kvsghkvkpz +9blk3 +6rjvmrjk46 +onetwo6ninehdrlnxgbc +6drvnkssqzv5jfnineseveneight +sevenmvxlzmtwox49one1 +8fxnnjr18fivefcf +five98sixkblsvns7mgttvhhz +85qkkg463lxdhzdtllqtv3 +fivethree5eightfivessrnhsmdrnvssxfgxmsix +xgmqjone7j +pkclcg54 +dvllcqqghh891pdlqnbtb6183 +2qbnqkgncqrvlfntwo +seven7qdfzfpfivepnbhrqx48 +682sixqtwotbgnsspzqcntlrhpzcq +2sffrxkgmsixfivetwokfvnlhz +sv9klzvnzsgjmoneseven +bzbppxbdpxs9 +68ninetwo99four5grdrrkpr +mtfcscprzkeightfzdbhdndqh1njdfourtdtflbfjrth +8nvdtbrfrvfivesixtwodzxfhgpzlk6cgkbr +3slmzvnine5fm +eightone16nine +kdzrjbh2txzz5hbone96one +17pgtwofl41 +eightoneqjvzv3 +fivetwocrhmvxqkvbeightfive1qzcxvds +2htzsvdhvqvdjv \ No newline at end of file diff --git a/2023/1-input.yml b/2023/1-input.yml new file mode 100644 index 0000000..2daa7d4 --- /dev/null +++ b/2023/1-input.yml @@ -0,0 +1,1000 @@ +twovgtprdzcjjzkq3ffsbcblnpq +two8sixbmrmqzrrb1seven +9964pfxmmr474 +46one +7fvfourgkfkkbloneeightdrfscspgkdrmzzt1 +15two6six +htxxfmfd7nb +sixfivesixeight4pfsgxvn9sfjfk5 +pmjjpggvhkrq2 +tvbrkhlxdsnine65 +four5gkrptqninenbdvffour1z +foursgnlxmjtcrrfour7 +3onetwogkhmllzvrsqzhhnkvdg +nineninegxknqzpsix28 +1seven85189mv +gtwonejcncdlhpsxjrxnmpvfgtdrcdtd2nm +1ninemxzntjptl +qcmqfour2onesgplvgzkdltqtvzhtb1 +seventhreerxqvgkzqhfxfdhnp628zxtbjklkpdtwo +fjdsgcsqppzdthreefour3one3lvmpm +sixsevenfivefourxf4mzhmkztwonepzt +nineninesixskjkbhx6nineoneightj +four6nzqxhhnrg +86fiveone9dhrkkh6 +8ninetvnsrcsbpn +two43one +8vfvbrnclnmthree8onetwoeightthree +one2czxjgbzsn46ktj8twones +qfnlfivemqninextzppkfkb8 +ntvcmxsevengxdtc3five +8lsfkbbxkscc +seven5817smvjfpdktwo6mdfngz +92hqxbchfpnine +tvxbltz53oneninethreeonek9 +hvvjhd1 +six1six7sevensixqcvhsfour7 +seventwo2 +2svpbhrlhfjhbkf3fourvvspkfmbvztmtpcxndfnine9 +fivefour42 +sixvstzdtfive3qzmbbx +rfcxmthzlgxgrmjncszdvlnp6 +lhlncfjlhrqrfzr1 +cqnkmtfj5 +tctfngvrxljlt53pntbcfrftjpjvzqbqxh +6fgcdfive +4834sevenvssix1eight +rpxcthbpmhgrcxk4 +threecthhnine781 +pppqkscmthreeseven1sixfive +2tgrmvxpthree6 +7ckxjmlpkqqqjtfiveeightbmmdoneighttnv +six2two +lsshzhtdfour24 +mrjjgzsb92fivetwoxh3 +5fourcqhk3two85fiveeight +lsxpkxfmq97one +b87twosshtxkkplq5zkrrqcmfn +threeqsnd64hthreeldbtfkqpbqpdlmtwo +eight2one +14r +71fourzrmsevenseven9 +threesixmmcjzzml4 +stnmbsix41 +cztnnflpcl4txplfour +five6six4kxv +5oneqmmbnvgvbq6vsncbrjrsix7eightpzkhvrjz +kflckfgxfeightlr37fourfiveseven +9three7three +rkxbqnine7onevvqgzcvvjthreendkddfournine +fzzfstwo44vm +19648 +7fivesixhdxhlgmv9 +six9hzlctfiveonefour +66eightthree4nine +jcgk8three +tbctwonefive2eightsixbntmjceight +ninemrqkzsevengvq6 +rsmmpmrlmq92fourfour453four +6eightbmjhnpbgnccfninefonenineglkfgp +8onefive7kn +eightrgzfdksevenftbvkt455oneightnl +3vxtwogxpdhjmqskjc +shzvnlgvvvthreenkv14eightbcmjd +2sevenlbq +1zfjpz1mdfourstvj7zpfxxlqf +twogm22trvplbsk29rbjtvctqr +twoqpgcbskdgh2tktbbpnzll7twoxljpdhthree +5nineeight6 +936 +218ptffour +1clztnnsix1 +bsevengsxbpjmbg5eight +1cpeighteightpb +vrlnveight2twopxmtwo +fgrjr8six +5sevenspppgjtxbtqlzt +5sixczhncsix2qcqsevenfive4 +kgcdpqclsggzm79nine +eighteightone6sevensixthree +92eight7plhftxkntl1two +5dqrhhqrrgmvrqznbgx4three3 +twoone953cdkm5stzdbdh +heightwothreennzljtptwo94 +6sevensevenfoursix5nine +cnbslkngtk9five58xpqvgjpqrnpjnzbk +onebrcg1bnfivekftnzpclqxvhchloneightzrn +four855dpknm +4hkdseventggkffhrkvsixcrsqjsix9 +8seventwo +two9sixthree9cdrmqntmcv +525tg4h +five7kxrlmq1bzhdmhtgglmvzrtfbqqd3 +bnbbsbhlcbktsqlpq69ninesfxhq +gndxnlmnrmnk29qkfxfoursnnbvjtq +5bzppjrgcpk +2three79pmgtcgmtdf2fjh +sixmmpbmtznseven62 +4rrm +ztlthreesix28ninesix +j7fourfourfbrlxplk +zjhrqtqsix1 +4three6hhndrlszfrgphcbonenxfive +jmg8hfsxfsvdxz3four7jfbczjmdhbpn +39ptfzqjfpnpxrnf7eight +three6jrcrgpfxg8vxgk8 +57kvbczxn5eightfour +8xbdbrbpjp +sixtrhhl2tktvvmkffl5 +three6fgsjtmnine54sm5k +ninenine3stfpft2nine +one61onenrhmtwos +pzdq8 +pltd9sjdkrscxr25 +dzsldkmzd1 +vlvpfmz24sevenshcrvx389one +1rfvlnmfkdbmdjj +sixbzzbftqggn8zggtbcd +hzxzjhkvd5twofivedxfdlrdeighttwo +six9nlgcdznskrsb +sixrxkfhvsjxzbt4fivenineninenine +dsbmqpgmf8nine634two +fourknfzpthpf1 +two9twovbmldd +5zgnnrxtwo2two2 +fivezfvzfdxkmrbvtpdhqbmdhcthreedvlstmq28 +ppfqqq75seven954 +sgtjpsix3 +twospnc9cnchkzthreegj +3eightwoqs +goneightghmkgksqfk2two2six +sixthree6bjzpqlsbgq2rkbffxtmprpddkxv +rkv43 +bzfnbq8onefourthree4 +3mqvr +fiveninefflpllcqzonejqqbtwofive43 +tvoneightfour3three5 +mvhlv6bzbjggrsvvxh4dfcpmrnhnq4 +fcrsmfmpnmkfs3fivekblglhqmvfourchc7 +svfmfbdrgd81one4 +mf7threetwo8nine1 +qngfr4gnnxbszqzsixp +px5gfx7two5seven9 +4gp +8lxkgvpzxch6 +3mdgqrvtgnthqnhpxteightfour +onethree899btbpjnxxjhone +fnjdzx5vrzc +four5twofour +9fivetwo2 +threezlpsdhxvdlfpsvkxxnnine3 +hvnnq9two2fourpdjv +bvjkdg9four1 +2412 +threethreeszmhdndctj1eight8lcqtwo3 +cdnmjmxqrz6vrkkxtfour8cc +njldrqggdnfsix5 +9csxcksh6three697 +92four2sr32 +3jdpqdjjct44oneone75pjgkgv +576sreighttwosixxzqmj7 +twoscdxdlfddmfive54 +ninefiveznine33 +threenffnvx3 +916tpsgsxmtml8 +6five3 +fdztvpctnr5dmbjnrjslr +16four +4oneightk +three5fouronenm +threezrksvlbdb891zfbbcdrbpd7 +five821ndfftdbmbr3nine +ninehvdxftmgcvnkrlrvmmbb4nine +xkkzphgfv1two +3pm +ninetwobtjxdvnhv12 +fiverbkmfbx8fiveeightksjzphkrj23rdlrtnb +kseightwo2fivesix +5snpchthree3 +71oneone +6frxncksfxboneftdpvmnfdfxreighthrmnqc8 +two48mhgdtlp246four3 +993three8 +threenine7twohbmcrpd +9bpdccqbts +kptwonejntgcdqdfffour4twobvtxnhqkl7 +1637sevenfour +soneight6lbcrzdmhltpbkbjfivechxzfrqqgfeight +99five3hjvjrdmgl +qncqlreighthkfmbbfqx87five3 +7jqkdsfour +ninemmvcxlkcrg1 +mkdhgzcvmseven3onesnkhtxbgf7threestvjqn +nttgqsmsl4five1eighttwo9zg +one2ninefour5 +bdfbveightseven1lcrshdgxznineeight +qsnvsonezqhsjmfive9one +6kvdrgkgznf1cmklmxgnine6 +xkmzzdpknl661 +ninefoursix7gnbmzd37 +mmxmfnsrmt2bnhkmftxnjsix +fmhsrdtnrxlqgjttlgvmqxgzpl756sixllmdvblrvrrzkqgb +7xmppbvd976dqt87 +fourzdctfglzzf1xdbfmrbfeightwor +8thncgqzvr989lthreeseven +5qmrzeight169 +4qgvkmninegcsdgcthsp62onehczjhdxcgm +25tlppkmctwo2 +668four4 +rjbxtvfktchflstwo639one4 +seven6eight4onehfztk +five53 +nine33threethree3pznjbtxjmrrxm +19six +fivethreefivegxcqflqhjrn3fivehcn +vpbntqnpkjfninesix6341 +7eightb7 +bktffkqsx6fzvpnjhk +38jrjprtwo628 +77tplflrp7 +4one9one6 +pkdhkbxrbshccxgknrjgseven44 +49rthxdvlmeight +5twodhkpfn1 +znine2fbsmeighttwo7 +5ninexvmg +dbjbfmqtkp66 +mdsrdjdnxkzr3xfm +two9twofive3 +9kfivetg2five18 +6fivenine2 +2dlgpxsq7sixone6 +tnqxgjbnc9bhqbgtwodxssml +18sixcjthreetdtprgsix +65sevenfive9nine4seven +nine34fiveqjdqc +threetzvxrb5vspdhrmjcnhtrzkqhd4 +67nine8jrxt39 +443oneklzsrtwo4tbbvxblk +xp7fourseven +ktsrninemlldztwo5ghqfgh55 +five6eighteight7mtstgjlqmngzonetwonec +rmfourseventwothreedjtvf9 +rlsgqhhvcdvthreekzjdssslmsixfour5rxk5 +sgnfjqm4fivefiveone87nine +6twoonefive +sevenrftrnqrjs1 +bcfgjklzfbnineninefivesrpcqtwo4 +threek7seven1fxslmvnhmffqqvbfbhlceight +sixxzqz9fivethjgdv2 +nineonefivesixtcrjd5 +5645ptsjfrszgr8 +1threezkpgczxr8four3oneqm +tvlfrfcnlc56eight8ninesix7seven +7clvmrdvdgjg +7mcstlktwo +dlxlpchr3eight +3ninelrzgkhx85 +jlkqzonefourrvlptlxxgrthree4six +rxhpprsqtd982t +six4671nineonesix9 +eightsixtm9vngskjglgvrbsqgcmxczbqqvxqxfj +vxfmc1six1ninesixnine +39fivesixthreevmpm4 +xllclztxcxjskgfourlvggrvr25fourthree9 +31sevensixninedpfrvvfftc +three64ctshdpcsfdjth95 +fourgcqf8sixfivepsrdqvrld +5nine1qldrqhvfour +5three1three +6hjbgdqjtlppzoneninesevenqlmvgkq +eight1three6sixthree5two9 +17141oner +five1two7 +sxcfxblvfbtdtlkdpnineztnsfdkmeightvrr7fivejj +eight183krc8nkqk +sixthree38fourkgfbbv2sixsix +922threeeight4moneightsm +3threefive8bdzjs +onechvnhrfthreebqfive9 +8sixgkvzgnfkjrrxrxvbvgvx +meightwo1dnbbpzrxftwo8 +253lqt1bzfpqznz +klsgclc549rbksgrbbh56 +3xksqcrhdsthree +55nxbjvps3nbmf +7qzzfourtwo1688 +h5skqsrnnpxdone5fivefourkffrsblv +3fourfive2 +25stdpqvgmzg9qksix5three +fivenxhkvbscrxx1j4 +dtszrbcgpgxbh1 +fivefvrp159three +68mdjsggnbtwokmthtwo286 +xtwone7bkhjqkmmdkxvqtxfkpmckj5 +btwonetjkkdfqphr2gkknfz7one +ninejgnxcchjqsevennvdjvttnqqsix6 +395seveneight +lfrsoneoneeightfour6 +four9prvhcqdnrgjl +qhbkninefive73six8 +sixkqjtrs1hrmnt +5lmctnqtqc49eightnt +sixghthgcnpfeightseventwo3 +vvvjbvnjfeight41nine +9gkxpcrql9three4 +65seven4eightmjnh2gbjjstdgb +8four68seventhree +19924nine1lxnfzgt +fgjtbsfour4nine4vqfznznqxnsevenvzn +fiveone9bzshjmdvdsixxknhmmqskone8 +xqjzgmdmnfivefourthreemmksmdsix6cct +eightklfnlkb9 +rmtsdblmcghszsfgd66seven1bct +twoseven6 +psbfmmmrppdfm5ninetwosixnine +rkcgdnslc9pjtqvgdmbvpkbbksxgr +mxjpns69 +rspjpcv4fourthreesixfourninevlfive +2dgjgdn +66five8qxeight +five93 +six7twovssixsixztrmfdrrvgqtdhmh7 +32sqltqgoneightd +4five8tns1six +277 +pmrzrckf6 +8rglvpcttwo1twofive +fivethree644hrphp +fdpjb6 +dfkpmgxfgfmtklbffk4sevenfive +nhqfpnvpsqpffour6neightfour +threeseven9eight67three8five +txttqnnineonefiveninesixlbscpqp1 +three2sixtwotwo7smkmq5 +8bjzjrnpspnine5 +5three659fourfour +qrdrk7fouroneseven +three7threevhct +mpjpgfbt8five6fqjbghvbpcnine +7zonesevenzmlvfvzn +2hzldqdntffxhfpxlghf6threeninejrxngnjq +dfppvqcvthreessnnm65tqtn +56nine75rdkxdcmj +8twozvjkdltz4sevensixfive6 +vzpzllmbghcccksevenjgjghqjr98 +fgjsgxlh48sixg3three8 +4eightfbppqltgxttoneoneseven3 +six1eightddcthzd +fiveggljcppdeightnine5hsbfrtninenine +2xrdtzfnhpvpgone +982 +two7nine7eightnine4 +one431 +eight9fmbfqxgzlskgjrrksr8six +9zhvdllsszd +4pnkpxrgltkdbztlnz2 +4ninebkh6ninefiveh +five9ninevrzxhfnggfourfoursevensixlncsfdvrz +rqhjjxzeightnineseven7fnmbkrtqgr +8xfmqdone +pnszhd1trqb71gfhpjpq +9htfkgbxlht +sevenoneqgx29three5six +fourdlscbpbpb9four5jbdjzqqdthreerhqdsbb +five31sevennbmrbhtthreebzqxvthree +one4c +three38183threesix +6rtdclcbfbbdbeight1 +2one8xdeight +2sixsixtwo +nine3pcjthmlmtljkrzxcdxkbmgzneightzcmtwohpdpkvqg +9two81qlhsrnfpdksdkd +threejrgxc4seven26njlmtbheightwodjh +lrjzhghhpk342threeninejskdnjjltt6 +46threegj +ninedgpkqblftq2b3four +3951sixssgmjj3 +8jteight4 +three6mdvfkgrxcjmfoureightfour3 +hvbf28 +9fournine713six3 +four1seven +763twoseventwonine4 +ctpfmnsvcthree9sevencbqtjc3 +sevensqdhvxd36 +fourninergfmdxpdbt1ninefour +2kptonesixzpqrsqzhv +h4qcscfxfctjbqnff1sevengxvjjc3 +d8cnjksdf +hzcgnine35fcbxtlg8rjhzbjfkv +jdvoneightdpfvzvp758fourfour +four27jhrgqnrjnkzffour5 +fivetwoszrxz2fzfrbgqntjf +onergnqpl3 +ccfqnc5twothreefoureight +grgsgxsevenkvzfjppnzq2sztcfive +9two94onesix +nine7seven7 +eight36 +plgsevenvfljnqvtfq5two +threethxdbnz49two2vdxbpqtpb +cf9fkrbrvjhssptthree +one5lrcn3klrcphllmz9 +onesix6seven8tzgfdbm +964khvfxtrljs88 +trszhb48fmseven +tdfxvnhrzv8threesevenkgp +ninegnmjxzbtcb32four9mlpkbfqdxdkoneightg +sixnineeightnhlqfslb2v +one83fc7zs +pxfkljdbdqqqvnrfivefoursg5nine +2onevh +1fgjrsdlgnbmsbzsevenfive +3nine87pmsqqntwojtnrksdtwo +two59kltcxhzszhdtwo +6451 +sevenzscjhgpfgsseven7threeseven4threedlbtxtcvl +eighteight8sfsvhbkf9jgfrddx +qlvdplcqtrcj2eight4 +sixbcpxtjt4onetwothree69 +91fourrbblcl +twozvqbsx4 +twogfh73 +onesixljjrlonethree3rxtwofive +onefour62 +b7vfplpqnine5 +67dgbmmjsevenfivedktq +7foureighttwo4 +sevenctctvfg51tsbzqgcvpvslqb +mjkeightwo7eightsb6one5xzsix8 +151dht66 +93tkbs +29two +foursixtwo5gprqslprxkrbfbmsl1six5 +one3six3 +three66rbh82bgtfzsfrkhrv +2sixfivethreefiveseven +fcjttg4onesixtwofive +15seven54 +5kjdkr9htl +gclrsklbvkfbdcb9seventvdtdmmmksh52xkxtpmfpvk +spone7eight5xzjrlxrnzjtqgpdcgrsjn +vs3fourdkdlhx7rb +9ldxtdk3 +4dppnthreetwodvkhjjrqh1zbqxntvtxgchv1 +1sevenmsdrjgqfivevphqmxzghktwo6fdvkvqhj +tbptrcvxhs9qcdxcpvp +8five2ssrrhgtxfone +3clvbm2g961 +four2onegkhbdfive5vxvxvtxglg6hxrtlhzjh +kfhcmflznrg9qnkkxqcsm2vqqtrdg8tjkshzpnddvd +eighttwojfktjcrqthreepssfour39 +359nine2fivevvscbvggjhbnnzqtxfsbpb +vvshjlcfqt6qjvfjsix2tgsjbdxgppq1jmr +ninehhmeightcvqskvjptz2kdnhpptvkz54 +39threefourndztxcl +sevenfive7 +csmmpzfsix41 +9cgqxtpdxt2 +3mpzvlxrzvhtj +fourkqhzsjjjvx3six1 +52one +nineltplrl8tfzqmnqeight +sixfourdqrfvrvbvfzzgb6 +mqnxglzjk6qqhzksklvsmthreesixmvhmhbdkqpnxcsgvcsl +65 +zqconeone85three +rxnhdflsqdqglxdmfxlxponeseven4one +88nkgcglftwodfxfhzxbqdpfrqmtwonenf +jzoneight9htkkpszpcqvkmlvl +388xnq +9xhlrqnkjpthreedfknpmqqtwo +4onemfzjfvmhhfive3two5pjdcf +djqjglztxs5nineeight8jdzone +four35ninefourfivethreecnhntp8 +gxqxl6fourlfdtndgdql +fivenine6 +1pqctbpbbgrmgqfqbzbjjt6 +xzvjjfnfr28jblqseight +ctwone23 +6sevenqjtwo +8nineplhlmsgjvs1 +lmjgmltfivenine9 +8gxnnnjonesixtwotwo1 +2seven678cdxhkflhj3eightthree +djzninefour3one +vbqhjjhpzg86rkzdjzfj +eight1twotthreeqqlr +bkxseventhreezcjvdkxzksxrznp6four8 +five77xcvphzcnlfbgbxnqbhfrldg +71qxqdncxdjsix +eight6one6jnpspgmhngzrfneightzdnrdhj +xb9skhpnfjsmq +jxgtk618fiveone1zr +8dkdnbfr +3llplnp4dzdxfhbvbn7two +eighttcgrbhrspktwo6eightddxhqqbprrf +eight2mpmzsevenrcbmsqg2cxjvmblnqbqdjsl +seventwo54 +koneightsix22three +zdsnjr5vxrhkthkr8qmddrzclmrkprmvbll +fbkmfxncztwohjbfgkhgvcdkrpnc5 +ksprkgxkjnineseven3fivebjpqhrmbdtwo +fourpss5 +1three9fbnnrjcgllkvcs6 +oneone9kjchnfsv9ffcdspfive54 +26ninejctplmsgb +9ftfjrmvjblzqqmrdczpone3bphtmmkm +7lpssdtbc67mhnthree9cndbsthree +fourfour49four +nineeight8bzeight +128zpqftnxnqz2threettrhscsll +1xdtxcg4tkxtsnl +hmxbjczvgmcrd9mqsfivefourninethree +5hseveneighttwomgxmlmskr8 +zdtbtszzkbk5 +eight5nine6xthreefour +9rbfcnjztthree4v9vn +voneightqdtnrtc4 +86cnzxs2three5 +eight9seventhree +tjmrjgcfldqtbrvnzzxshxkrs3onefour +2rxplslzcglskjxgthk76cczdbxrp +sevenpdvsbhkknxqkqxfcz6bhmkxmhdbvhcvvhpmv49 +three1twotwopr2lctfjb +zrbrqmh87dmxzmtfvthreelsleight +34dcnd8eightwombx +two9xnqtcfgq8tsqzvd3three +nine5fq3 +eightsixfivemtcgzlbkheight4 +qlspgfndmx5twobtjgzgvzmcone +5zlldrzrffgggtwo648 +seventbqtkpfivel6 +hjqbmfnnqzmf4 +fiveqhdfsnjvqtwo6two +jftwone7 +4twolqvglgxcc +twoqjmgjtrrjjt1eightcpj +eight9sevenmlkpsbzmtnhdrkbmj +trrpdninesix8oneqxtrzf +5sixtsxqdbnczhbvmfkvkc +tvbf2 +sixtwonjssgpljqrxhlstfx4xbhqzlqktsixfour +kfxccb45tzsftztxjhgnxqsxknl29 +tworjdcgsgvsix6 +eightjbqfive26gfspjh3nine +2sqhleight7cfkhzrsevensevenfive +kzpzjcrl98sfive +sevenrsgtnine4pbgvrbcpf8 +25q3qkcxlvhrxdonednbtcrrvjlnngq +twothree4lffpxvfcgqrkvdgzdsdjxjsh +seventhree34seventwofive9ckm +three25skfkvqdmbmsixxgqx +three1eightthreesix4 +threeftjlv9 +6spbhfckxcdrxlcg6hxcfive6five +8drbfjrgzvs834slzhsbgrjm2seventwo +sixsevenfmrvpqbgx4ncrmvfkjx62 +lqfsslkmstwo7rgnqeightthreetnlnonehszkrghlnt +5onethreebxxfstvd +djchrbjcrddcqfourmnninesevenrdlpfxthr2one +three3threeoneninepcrjr1 +twothreernxmhmtbn2fourtccrqhqs +lzzdpfourtwo1six +two3one3 +zzcnprtjdr22286 +seven5qjlfrhj7seven8 +seven99 +mtztq6one37oneeight +mrfcssmzxpvcz2sevenfourfivelpzqkvvdxmmpmxqshskfnh +nine8rtx71 +1llzpvcdgmvoneonepksninefourthree +gbbvkcfive18two8twonineseven +2fivenztsix2nine +gjqnnr422seven4ppbsqdbpcfour +fourtwo5one7qfgpmmphdtl +pglzjrr4fivebclpf +slrrcqxxhtwoeightseven6 +dnknxxkbjplrkjone2threesix9 +htctqnkcmfqdxrzd9eight9seveneight +8sevenfiveninermlrrzpcdxkjkczhgpx6eightone +eighthnfxhrtssbmfxv6v +6fp539 +sixzmsfqjzpvxjkhfqcrbss7xgg15 +nine5ninevddknzczpxgzjx +jbcsf3 +jjbstlskzxc5nine +jlrvgcbch7tnpfjnczdsrgddrseven156fvdmfhtl +one89 +three52sevenlxxskf7gxh3gb +eighttwo59mqzdlqjdkkxgjhnktwoone +519six +1onemneightsixdlqx7 +7fgszpqcj +sbfjtrfvnv6four +qtwonedvkninercj8 +ntrnzldltrvtcsh8eight77sprgsvfdljthreecndckrzmjl +gtspn2 +54six6mkjznlb +sevenonethree3sbpjqgltv +four8two +xdzrskv3974mgvjlhzbkddhcxzzxv +6three1mtlxshtxfpnine +14threeseven6 +37threeonefpfgmz9 +three3sevensixeightfive1nkjtndgrd +2dsmr7qhmnrgbsrvjmsbctwovb +gkdsnnqzlzdvcgthree3fivedzvpcfive6one +3vkftsclsxtxmsjeight +sglkcnzgz4mnhgblxqgdv69 +tpcjb4one73s4 +sevenrvhhxjcfqgs32six1pjvltwo +8zmktmxkbc5mpgrtnxmnp35fttpmdbhfm +1sevengeight +hghs1sixvvjpmlcponethree8kckgkf +gkbpflqvh1cbddlvdkzhfmzcfourkmckngsevenxkjknplzv +5sevenfk5qgfshtqseven155 +dfjdtxjxb8fivefivebjtbggkdlpxlmnrcdt4jrrpnbtvlthrhmczn +2fivefivejxhh6 +41threehtwo4nhzdn2 +2fzngnxvvpjrqxk6 +53sdthreeninexrfone +6qmrthlzgqeightrzrdglxvscgr +snkmhszcbmthree5threejsvkpkknpeighthbv +cmgb9seveneight +5djnine3bcffxgjbrhxbfhgthxb +1flqjgsf2ms +fivefive7onefour +threeeightksmhj94jvfvqrsgqrsevenj +jttgbfmh9468ddshrxnjthsix3 +25four +9sixseventhreefiveninefive +eight5twoqrfgpkbdfc3qxfmchrjx8kpp +nineftnvllx1rjzkkt +gmeightwothree1fgfivejldgmt +nine966fivethreeninecpmgsxsxz +77bfhphxczdg2eight +89hcgjjtchsix +1onexps1 +3fourkgm +hjgnbninevxdtpnct7bmstnczzteight23 +twoone1qt8 +43744 +fourtfgn2 +sixppztkbvllkltbs51xknnfive +tqxoneight5 +twong3zdrbpqnb +fivebcrxk198three +435sfddjvfg56vkddkzhhj3 +qcnhlbzmbld2fivebsix +zfsrtwothree8 +nineeightfivetwomcjm2seven1 +3gbnxlzxhvzzgfjjhf44fgbccpthhnkpht +3ccmrkbfour68ninetwonebz +sevenrccgdjrqj9one +fourzgdfbsnlb66txclxgp7 +jmzlbtgbtl8three +6nine32pr +sixffcsmhlfiveklbmgj8nine +psmjrt65tppjqeightzqvglglnine1seven +fourninehhzh8seventwoone +48two2vzbrl +mdlzptrcsix3three9 +sevenlgr3t +7sevenpphjhvdhkheightwojv +seven3756 +four85 +4twoonettmxjncsqmgsrxsf +fivesix6twofvzqxpphzmlkj +eight1twojrzspbfbzkftwo +5eightthree5 +31ninecjnsevenjvbsvpphpxxkcnine9 +nine5vnine486vrhbkgl +sevennineeight97qpdlfbskz7sfbtm +onernqbxt8twoone +gftjrbmkmngtshchbgfc1nvvt5 +four5dgvsixzhlxnnmjhkhkljcfdpeight3 +ttmfdxhd3ninekzbtsixnfmvfour +8pfkhxhmh8xkghgdk +nhs4threemxjpbgsix1s +ghtwoz1 +sixdthree7vlfbpzcm1ndbbczvc +ninetwo183 +twofxsdt36fcthreethreeseven +7grvvzqhcbeightwopx +twoninevknhnkgdmhmlbxkeighttwonine4 +4fourdmclrghj2 +sevenmtgvr8four76fivekdqbsmmtq +klgpeight5sbknbhvsixfive6 +2vddxlzfpsrqsbsixlgrfnhone +jxfhlzcp6qctpqhb1 +eightd1162jsfcsplrctwogcpzlhqf +one4four7xx5 +threebqmzstphclb5fiveninethree +bkxfxxms6eightwoxz +nineeight4four +sdsgszdznng4sctkfiveszkdknqjf8 +vtzmnllvvhrcfdlxcxxlqvzst1 +htzxcxpvqj91sevenxrggdtjzbrgcv +ldcnbzstq4ktzdxgmcl +twohshbblseven4grzpdtfmjn13cmg +cktjnhdnine1three9mjqvnjtkseven +891ninesevenxbdjs +kxjpngdtwomxttdqcdkhdj686sixl +hsninefourcxfj3five3eight2 +6eightgkkr1one +658one +zqgrxfourfour8 +twobbnfkdtb9five21zcfiveoneightjgt +79jsm55twonine5 +eightftk2two +eightbjbvqscs5pvmb14lgvgfv +four4four +qmzheight5hgfourkgtqfhjfournine3 +twofzdqtvssx2 +1fivefivesixsevenone47 +xhrjffnine8 +oneseveneight72fqgzscqt5 +nine7fours58 +three2fourseventhree +35ninesix +qgjsrxgqb5 +fiveqghjjvjthree4eightqfgrhblkjtwo +9mvcm +96fourqzdsix +vbzqmmzbvrbxltvlfmcpfvnddmgsbb6four7onegn +three3qnlxmkhpctwosevenfourvmqmqlgfrsn +2seven5one2six15vgnqzpggn +sixljtvqzlh1 +45onesix +foursix44eightseventhree +djsix84rnx8z34 +1mkgthree8two9956 +psgnl6six5seventwoone +546cfgr2three +thtpczmkskptzn9pqzncp +31threeninesn7xhqvrsv +threehmjpvctfhnmhs57ninepzfvq +teightwothreesixdzqhvljk84nineninesevenb +gvptkx9rlsnmtwoonesqfxmzkv +7twojszdrxcxfour +3eight617npsbbrpkjtzsmeight +3sixqntvpttddsixninemtpb4 +1onefiveseven2fourseventwo6 +67foursevensixsix2 +one7qeightonehckxhxdfjjzsrdnj +38onehzjxg +4splxs1zfvfksevenkrzfive +fourfournkcj9 +1ljmbhcpttjnine +2xnvfpdgccxfivellztmtpnc +ljvlxplhxfsjqv6sevennine44nine +qdonefourlnrzrgthbt1 +twothreehvvhsxzqz1chvbcsxtll +82vmfjbvssmlgk2dbsljgvd3 +xzfbfmbbxfeightgfz3lvzpzbpmv1four +oneeightfd5ninetwo +ghddk7six7xqmglkvnqonesix +six1eight +7five5ptkbvvvfive +3hftgthreehcfrsnl1fivetwo +7six12onebhpz +mkqjv8bzdnt9sevenfourtwo +five3mzgqnm +sixtwocbjxlgvp1twoseven +dkfmbzmvxseven971 +bninetwojnsnkc7 +ninekzcpfive4five3phz3 +eight8143 +eightrzdmxzb8eight6 +5pdjm22ninej37two +fourtwo8fivetwosixthreetwo +ncttc71fourfivejpjzcgzpj4 +5882three8glcvgnfhscbtmnqmnh +ngxkxtwo9pltbbmxrknvjheighttwo53 +twoninenpqqqgsbsq3fjdk +eightsevensixhtsjvxjc8jxftgnptgqsixvcncglzlgq +sjxtcnt8gpeight7cbgffmgqksix +fdsn9threenineninetthree37 +19rrfdqtpmonetqjdcjtxlhkptccjn6mtztqhvvtqftbv +vrhprdjsfour28p4 +eightfiveeightninevdvnmbv58vrs +qdzhzrhlfl7hhxqzxqdxeight +svnbzgbhxjcx26xclfgs +5lcggbhzrmnknine83txffvcdonecrqvvjf +six5fpncsbbqbbcczcmbgrqmndxmrxloneone +1one6 +88gctsmp7eightrvshklprtm +xf874onehhcknx +sevenvvncrhvxjxnzsftkfhsktwo3eightfour +8ngprdqfour +98fmrxpxzzbrjpxzqdxmv +2zbxzsthreefivefhdbhvjjxv6btwonef +jzkjcvpn924qjcbr97h3twoneff +foursix3 +9pmtdjvrxjrponetjlxbdzbvrcjtc77 +52twoeight2fourh8 +kpzfztlzlkdprbmrhsjcxfzsbch31 +4fivebtfjmfive6seven +ccttxjmheight6twothreelnjmfoureightnvcvpmpc +6twoz1dzv95 +threelsmgdnxcsevenqr4xrtthzgkqxsrdssmjqv +fourgpvjxdg4qpvfivefive8nine +9mncmnhrclsq +9zjfmctz +pndgptggnsthree8xlcctvpsix6three +98npgrlkqmcninethree +fivexp6fourdpckhqpcxczrfbr +six2xdgsqdpsbmgftzvqhnjg +7ninepqheight2eight7g +2zrsevennlpcljnp +twoonethreevvpfp1jrhsevenfour +threebzmggv7bjm6cczkbsronetwo4 +three1foursgvfdrrqmk4two6 +onengzkkjsxsjlxxxthpd7xfcvkthreefour +sixnine5sixeighthlvmf +63gkmbsdc3fourmgrjhrlbqgcfxf +2bmldthree7skhhpxfonenineone +b6seven7 +seven39 +twoffxbsgpcxctmmvb4kdhn89 +seven1fmgtseven +ninegxbdmztzzbqq6lgcvsbhzplqt +7twoonev +24nine +tvjmbzlsjtrtdhdlvnffmcfoursix6sevenonebvq +5jpntjsthree1threetkbsh7 +sixone423fourqnczdxcpmsvjpzhl +33zdfourseven3 +77lltwo5nineseven7djjmdqkqfd +4xfnpfbtdl7 +two5ninejbrfrsbrsvzfivenineseventwo +89znjldjptdnfkeightkpcxdxcc3bkmfhtzkkh +qlkxd1rv44qlhhpjrninetwo +6l2rfscvcgdm7 +rhtsrbrmlnfvseven1eight23dd +7xcglznxrjzsmhqnkqjhbjqxnjpjx15six +fourfiveq1vcsnnsxkmrcjscn4sevendbbtjh +6qcvjplvnine91rfjk51 +jmdsgfxd5 +tlzpvtsvkdsixtwo95 +8threeeighthvhlqss +threetpxxlmfrhpf15 +4twoeightsix +rg8nvrtzxjvfddkeightwofzs +tggqninemk1 +mlchhftqkxtbhfpjsixnine817 +231rpkxcvcz5fcztnqskqtwo +five9hhrtmp9twosixthreeeightv +9threeschsm17 +hhreightfour171dtbmhzhhjb9fgbg +bhgp6 +fourztzlhdr2hbdlv8fivenine +fourseven8seven +eighttwo8eight +two12 +threenine76ndvklb +twoseven9jxfcthreecnrpvglksc +84fivehmf +jpgbtnrsb15eightgdtqmk +34two8eightbxqvc5nine +four4hsgjmtbfrvfivenine +threecfcx8ninefive3xone +cvhtlnlnhh71 +four9sevenonenine9ninejlgmtvxmxseven +vttchshfgfpdbmpmp338 +nfcdnhq6nineeight79 +rgltnqzrzfqdjsfrhzmfivetwogklxqdhzbjtwo5three +five3n69fiveninesixtwo +nfhheight12clcqcnpdbz6nineseven7 +eightgxtmstbthreedvrqllvp1ljqstbjdhcmbmbeight +two26four7three +6rtninethreefive +vhnqgdzzbxr9two7mdjzsx3lf +twothreepzxljpd6sixcmsxkcqkfive +6threesevensevenjzkcqthfivegmjvstrsix +five7fivetwofour +onesixseven767 +36onehxdpmcqxsfbfive +2hdvqrlhs5six +pjfcjrnjnk9four99nineskshccmmnvxzvhvqmcprkdqvhhk +4gronexqnzdfthreejgqt +kvrsixtwofive2 +eightfourone4hone +cgbjtdbvptworbcz3 +jpgmhfour1 +ngbgjhlstwokxc8onejlhczxvnjbrkqzdl +chbmqrz3fourthree +rgvmkpeightqdssbcgf9fivefive +5vgrscgshtbfgbljt5 +pxgq5kffxbdjgq5cjnpzfdt738six +meightsvfb47xcdfkhf5 +clzqdc4five1onexfxlxnltfourfour1 +fivesix3threeseven +tworgklxh1threefourcsrsbj5 +3fivepdppjlmmb6fkgrcbldbxsdjpbvbqgpj1nine +9clvlvsckdmjsbxzrmrhfour +fourlptwofqspctl913 +28foursevenrfjfive5qrfsl +gfhmkfln2jcqttonethreetbmcdhhvbnmqdgsbrrmpk8 +eight35qvkxtwo3fivevfive +26fivegpcqqsjr7five +three1seven4 +9fiveonevmxhtndtfzmnxvtjkmr51six +64vgrgtwofour +four9one +nxjtdt2three1three96lfzglzcfour +355six +9lvqslrvdrd8six +9threetwo35six +two57 +phpkcmfxvt7gphd1qglpmckhnj +sixthree1ffrdbsix4two +spbscvjfl8vvkpjkshkx3 +5nnjdbjj3 +bmmqrrkdcfbctmsk124eight9one +4rxdpvqlhn +seven13glpzfknqtxdqjq3qblzcjvx9 +8bnkbzszkxkrrfdmcstvfvp +nndndjrs1qd1421 +twovn9four8five +eightrc1 +ltjvtcqfzdfourseven8kvcx43 +vn6ninelr8 +2seven1 +7rldpqrfoureightthreesfhz11six +56fourkmvl6threegzfqnlrlz +8mkpcsnzmknmzpjppf8two7 +bzgvzcpkqxmbxcqsix4qjzt28eightwoj +threesixxqkshhnine7njtvvxfmjl8 +5seven6vqcd62sixone +three552 +hsslkhbd88zjhqvgtzpfour1 +oneone96fvjbmcnzrr +pspndcdtctwo6 +v3one9 +fivefournmrfrzghdh7twoxmpgkps772 +vdkqxqnsthreefive25 +kgjsevenczqrqf14pjchtfbnnninexhgn8 +lqkhzjzm3six1one3 +1three3l61seven +1flsfhznl +r8hnbpbtrzkstdg +hhrmnkktv7seven29fourpvjceight +2mbft +954five9fivegbmlz5 +dshbfdqdjjgtxffjmllgvxjfrstgldgdxjsfxbone9tgseven +fourseveneighttdgghnfive7pchxddgggcq +8zx5seven7pffldzjhdb8 +bpqslhkt33sixnlxckbbr2 +xqmxvjcplh4seven +jd9zxmz2two1kvsghkvkpz +9blk3 +6rjvmrjk46 +onetwo6ninehdrlnxgbc +6drvnkssqzv5jfnineseveneight +sevenmvxlzmtwox49one1 +8fxnnjr18fivefcf +five98sixkblsvns7mgttvhhz +85qkkg463lxdhzdtllqtv3 +fivethree5eightfivessrnhsmdrnvssxfgxmsix +xgmqjone7j +pkclcg54 +dvllcqqghh891pdlqnbtb6183 +2qbnqkgncqrvlfntwo +seven7qdfzfpfivepnbhrqx48 +682sixqtwotbgnsspzqcntlrhpzcq +2sffrxkgmsixfivetwokfvnlhz +sv9klzvnzsgjmoneseven +bzbppxbdpxs9 +68ninetwo99four5grdrrkpr +mtfcscprzkeightfzdbhdndqh1njdfourtdtflbfjrth +8nvdtbrfrvfivesixtwodzxfhgpzlk6cgkbr +3slmzvnine5fm +eightone16nine +kdzrjbh2txzz5hbone96one +17pgtwofl41 +eightoneqjvzv3 +fivetwocrhmvxqkvbeightfive1qzcxvds +2htzsvdhvqvdjv \ No newline at end of file diff --git a/2023/1.py b/2023/1.py new file mode 100644 index 0000000..97984df --- /dev/null +++ b/2023/1.py @@ -0,0 +1,63 @@ +import re; + +numbers = [ + "zero", + "one", + "two", + "three", + "four", + "five", + "six", + "seven", + "eight", + "nine" +] + +def main(): + totalvalue = 0 + with open("1-input.txt", 'r') as file: + + for line in file: + line = line.strip() + word = '' + digits = [] + for s in line: + nr = get_number(s) + if nr == None: + word += s + nr = get_number(word) + if nr != None: + digits.append(nr) + break + word = '' + for i in range(len(line) - 1, -1, -1): + s = line[i] + nr = get_number(s) + if nr == None: + word = s + word + nr = get_number(word) + if nr != None: + digits.append(nr) + break + if len(digits) == 2: totalvalue += digits[0] * 10 + digits[1] + print(totalvalue) + +def get_number(s): + if s.isnumeric(): + return int(s) + for n in numbers: + if s.count(n) > 0: + return numbers.index(n) + return None + +def isDigit(s: str, a: list): + digits = re.findall("\d", s) + if (digits.__len__() > 0): + return a.append + for n in numbers: + if (s.contains(n["s"])): + return n["n"] + return a; + +if __name__ == "__main__": + main() diff --git a/2023/10-input.txt b/2023/10-input.txt new file mode 100644 index 0000000..84da334 --- /dev/null +++ b/2023/10-input.txt @@ -0,0 +1,140 @@ +F-L----F7-7.F-7JJ.F--L-.F|F77.L|7.FLF-7.JJ--7FF-F-F7F7.7-F-7.L.FL7F|7--777.FJ-|7J-F-J-77-FF-F-7.JF77.L.JFL.L-|-FF7-77FL--F77.7-|77F7|7FF7-7- +J|F7.LL|.F7.FL|J-77--JJ7L|-|-F-7L7-|LJ|F|JL|L-JJ|L|--7FF77.|-L7|LFLF-7FL--LL.FLJL-JFF-F7.-LJLF|J-LJ|FJ.|7-7L-JF|.J.LF7|L7.LF-|7F7-|-7-J7|7.| +FF7J.7L|-7|FF7|L7|L|.LF7-JFLJJ.J7JJFJ-7.L-LLJJ|LJ7LL|.JLL---.LFJ7L-LJL-|JJ-|-F.LJ7|FLF-J.L7.FJ||F||L|L7--F..FLF7-L7|LLJ7L7.-7||||J|FJ.LLJ7F- +FJ.LF-7-FJLJ-|7-7J777..|-FJ7.FJ.|.F|LFL-L7L|..--L|7.F-7-L|..FF|JF|7J.|7|FF-|.LF7LL77.J.LJL|7LF-77.|FFJ|7FLJF|-F7..FJF7L7.FJF7LJ||--|JJLLJF.J +|FF7LFL7LJJL|.|.||L77--|7F---L.F|77JFL7.F|7FL7.F7LJ-7-JJLJ.--JLJFJ77F|7F|-.|L-LJ7-LJ7FJ7.|J|-F-J|FL7|-L-J7|-.L7JJ-L||L-|7J.LF7FLL-|||.FF-7J. +FFJ-7LL7JF-.LL|-L--||.F|FL7J..LLJ|J.J.FF7L||JFJLL.J-J7LF7J77.7.||.F-FJ-|J.77.F-LLJJ|L-7|L---7JFL-7FJ-7FFL|7FLFJ|L|F-JL|.|.|-J7-LL-FL-.FFLJJ7 +LL7.L--|7LJ7J.7|FL7.F77FF..-|7-L-|F7.L7JLFJ|LL|.LF-FLL7LLL-|7|F7F-7-J.FL-F|-J77-|.F-.L-J.L|||F|JLJJ7FJF7|J|7FL77FL|.|L|J7FF-L--..L|.F-77JL7- +|LF-7L.|FLLJ.LJ7-7FJL--FJ7L.7J.|JL|J-7|F7-.J7L|L-L77J|L7..FJF7LF77|J-.L--.-7L-F7F-J.F-|J|.FL7-7-F|JF.FL|---J-FFJF|.F|7F-FF.FL7--..J.|LL---JJ +|.--7.F|F7.J-LLJJLFJ.|.|-||-|LF77-7|FF||||7.JFFJF-J7|.F7FFF7||FJ|7|.|.|.L-FJFLJL|7|F|.L7.L|L|.-.LJF|F7|..FFJ-LJF.JJ7L||LLJ7---JLL-|7LFF7-7.| +F-LJJF-FJ-|..||L.JJ|-77|LF-F77F-7|LF7-L--7-|.FJ-JJ-JFF|L--J||LJFJJ-F-FJ.|FJFJJ..L7.|.F7J--L.|7.JJ.--7L7JF7L|J|FF7.LF7LJ-|||.|L-JL7-7-FJ-FJ-7 +FJ||FF7-J|L|-LF7LF7J7F7F7|FJ|FJFJJ--J|L|7LL|7LL-77J7FFL7F-7LJF7L7J.7-|.-F7|||-F|-FFF-J|J.F|7F-7.|FL-J-LJ-|7LFF7||7-|L7-F77-LJ|.FFLJL-|L|L|.. +J.LJ-|LL-77F7.||-J|F-JL|L7L7|L7|.|-|FF-F..LJ|.LL|-F7-F7LJFJF7|L-JLFF.L-|JF7F7F7JJF7L7FJF7JLF|FJ777.|.7.|F77-FJLJ|F7L7|.||..JJFLJ77F7|F-J.|-7 +|77JFL77L|-J|--|7F-||LFL7|F||-|L77--F7J|7L.F-|J|LFJ|||L7JL7||L7F7F7J|..L||LJL-7F-JL7|L7||7-FJL-777.F.F-7||F7L7F-J|||||FJL777FL-L---.JJ|LJ.L| +7JL--7.|.|77L7.F7-FF7FF-JL7||-L7|F7.||.77L|--7FF7L7L7|FJ77LJ|FJ|LJ|7|FF7-L-7F-JL--7||FJ||F7|F--JF--77L7LJ||L7|L7FJL-J||F-J||J.77F|.|-|7FL.FF +.F7F7F7JF.F--7-L7.F||7L--7LJL--J|||-||FF7F7JFF7||.L7||L-77F-JL-JF7|F7FJ|7|FJ|F7F--JLJL7||||||F7||F-JF7|F-JL7|L7||F---J||||7|-J-L-|7L7F-|77F- +FL||-L7F|7JL7J77F7FJL7F-7L-7F---J|L7||FJ|||7FJ|||7-|||F7L7L-7F-7|LJ||L7L-7L7|||L--7F--J||||||||-|L-7|||L-7.||FJ||L--7FJL-7L7LL|J.|J-LJ||LJJ. +|JLF-.LL|-J|L7FF||L7FJ|FJJFJL7FF7|FJ||L7||L7L7||L-7||||L-J|FJL7LJ|L|L7|F-J|||||F7.|L7F7|||LJLJL7L7FJ||L7FJFJ|L7LJF--J|F--J7J..F7FL.|-LFFJ|F7 +.|7||.L|J.FL7FF-JL7|L7||F7L7FJFJ|||F||.|||FJFJ|L-7||||L7F7FJF7L-7F7L7LJ|F7FJLJ|||FJFJ||||L-7F--JFJL7|L7|L7L7|FL7FJ-F7||-LF7JFFJL7LJ77F7-.||7 +L7FFL7-|-J--7-L--7|L7||||L-J|FJFJ|L7||FJLJL7L7L7FJLJ||FJ||L7|L7FJ|||L-7|||L--7|||L7|FJ|||F7||F-7L-7LJFJ|FJFJL-7||F7|||L-7||77L7JJL|-FJJ-77JL +L7LLJJ.JFLL7JFF--JL7|LJ|L--7||FJFJFJ||L7F--J|L7|L--7|||FJ|FJL7||FJ|F7-||||FF-J|||L||L7||||||||FJ|FJF-JFJL7L--7LJLJLJLJF-J||LFFJ.7JL.|L|.|F.| +F|.|--F7|-FJ7L|F--7LJF-J.F7|LJL7L7|FJL-J|F7FF7||7F-J|||L7LJF-JLJL7||L7|LJL7L-7LJL-JL-J|||||||||F7L7L-7|F7L7F7|F------7L--JL-7|--7F|FJ.|FJ|7. +7F-7-JLJLF-7LLLJF-JF7L7-FJ|L7F-JFJLJF---J|L7|||L7L-7LJL7|F7L7-F--J|L7||F--JJ|L----7F--J|||||LJLJ|LL7FJLJL7||||L77F7F7L------JJ7LL777|-F7||7F +|FJJ..LL-7|||FF7L-7|L7L7L7|||L-7L7F7|7F7.L7||LJFJF7|F--JLJL7L7L--7|FJ||L7F-77F7.F7|L-7FJLJLJF---JF7||F7F-J|||L7|FJLJL7F7F-7||-F7L--77LJLJJ7| +LL.F-|7JJ.J-FFJL-7LJFL7|FJ|FJF-J.|||L7|L7FJ||F-JFJLJL7F7F7F|FJF7FJ|L7LJFJL7|FJL7|||F-JL---7FJ-F7-||||||L-7|||FJLJF--7LJLJFJF7FJL77FLL-JLL7|L +|FJ|LJ|L-F-LFL7F7L-7F7||L7||FJJF7LJL7||FJL7||L-7L--7FJ||||FJL7|||FJL|F-JF-J|L-7LJ||L7F7F7|||F7|L7|||LJ|F7|||||F--JF7L----JFJ||F-J-|7JJ|-|JJJ +JJ-J-JJF-7|L|-LJ|F7LJLJL-JLJ|F7|L7F7|LJ|F-J||F-JF7F||.|||||F-J||||F-JL-7L-7L-7L7FJ|FJ|LJ|FJ||||FJ||L7FJ|||||S|L---J|F7F7F7|FJ||F7JJF-L|-|L77 +JLF-7..|7||F|JF-J||F7F7F-7F7LJ|L7||||F-JL-7|||F7||FJ|FJ||LJ|F7||||L7F-7|F7|F7|FJ|FJL7L-7LJFJ|||L7|L-J|FJ||||LJF----J|||LJ||L7||||FF777|F7FFJ +FL|F7-|FJ-L-L.L--JLJ||LJ|LJL7FJFJ||LJL7JF7|LJ|||||L7||FJL-7|||||||FJL7LJ||LJ||L7|L7FJF7L-7|FJLJFJL--7|L7||||F-J7F--7|||F-JL7||LJ|FJ|.|7JL-JJ +|.-|J.L-J|FJ|7|LF--7LJF-----JL7L7|L-7FJFJ|L-7||||L-JLJL-7FJLJLJLJLJF-JF7|L7FJL7||FJL7||FFJ|L-7FJF7LFJL7||||||F--JF-J|||L7F7|LJF-J|FJF77J||.. +F-LL--.FL-7.|J-FL-7L--JF-----7L-J|F-JL7|FJF-J|||L--7F---JL--7F----7|F7||L7|L-7|||L-7LJL7L7|F7|L7||FJF7||||||||F--JF7||L7LJ||F7L7FJ|FJL7.J7FF +777F7F-J-|.LF7--JFJF7F-JLF--7L-7FJL-7FJ|L7L7FJ||-F-JL7LF7F7JLJF7JFJLJ||L7||F7|LJL-7L--7L7||||L7LJLJFJLJ|||LJLJ|F7-||||FJF-J||L-JL7||F-J7FLJ. +J--L7F.J.7FL||FFFL7|||F-7L-7L--JL--7|L7|FJFJ|FJL7L--7L7|LJ|F7FJL7L7F-JL7LJ|||L-7F-JF-7L7||LJ|LL7F--J||FJLJF7F-J|L7||||L7L--J|F--7|LJL--77.L7 +F--LLLL7LL7LF7F7F7LJLJL7L-7L----7F-J|FJ||FJFJ|F-JF7-L7|L7FJ|||F-JFJ|F-7L7FJ||F7||F7L7||||L-7|F7||F7F7FJF--JLJ-FJFJ||||FJF---JL7FJ|F-7F7L-77J +J|-7.|J|FJ-FJLJ|||F--7LL-7L-----JL--JL7|LJFJ7|L-7||F7||FJL7|||L7FJFJL7L7||FJ|||||||FJ|FJL7FJ||LJ||||LJFJLF-7F7L7|L|LJLJFJF--7FJL-J|-LJ|F-J77 +LL-F-JF|L.FL-7FJ||L7FJF7FJF--7F7F--7F-JL7FJF7L7FJ||||||L7FJ|||FJ|FJF7L7|||L7|||||||L7||F-JL7|L7FJ|||F-JF7|FJ||J||FJF7F7L-JF7LJF7F7L--7LJFJLJ +7JLJL-FJJ|7F7||FJ|FJ|FJ|L-JF-J|LJF7||F-7|L7|L7|L-J|||||FJ|FJLJ|FJL7|L7|||L7|||LJ||L7|||L7F7|L7|L-J|||F7|LJL-JL7|LJFJLJL-7FJL7FJ|||F-7L777-J. +|..L7LJ.LF-JLJ|L7|L7|L7|F7FL--J-FJLJLJ7||FJL7|L--7LJ||LJJ||F--JL-7|L7LJ|L7|||L7FJ|FJ|LJL||LJFJ|F--J|||||F-----J|F-JF7FF7|L-7LJFLJ|L7L7L77-7J +7.77||.F||F7F7L-J|FJL7||||F7F--7L-----7||L7FJ|F-7|F7|L--7||L7F7F7|L7|F-JFJ||L7|L7|L7L-7FJ|.FJFJL7F7|||LJL7F--7FJL-7||FJ||F7L----7|FJ-L7|JFF. +|..FF7.F-LJLJL--7LJF-J||||||L-7|F7F---JLJFJ|FJ|.LJ|LJF7FJLJJLJ|||L7||L-7L7||-LJ|||FJF7|L7L7|FJF-J||||L7F7LJF7LJF-7LJLJFJ||L-7F7FJLJ|FFLJFJ.. +|.F7L|-J-|LF----JF7L-7||||||F7||||L-----7L-JL7L-7-L7FJ|L---7F-J|L7||L7FJFJ|L-7F-J|L7|||FJFJ||.|F7|||L-J||F-J|F7L7|F-7FJ|LJF7LJLJJLL7F-7LJ-FJ +JJ.|7L7LFJ-L-----JL-7||||LJ||||LJL---7F7|F---JF-JF7|L7|F7F7|L-7|FJ|L-J|FJFJF7||F7L7||||L7|-LJFJ|LJ||F--JLJF7LJ|FJ||-LJF7F7|L--7F7-7L7J-7L.7. +||F||-J7LL7|JF------JLJLJF7LJLJF7F--7LJLJ|F7F7|F-JLJFJ||||LJF-J|L7L-7JLJ.L7|||||L7|||||FJL--7L-JF-J|L-----JL-7||7|L---JLJLJF--J||.L7|JF|FF-J +.-J-F.L|7FJ-FL-7F--7F---7|L-7F-JLJF-JF7F7LJ||||L7F-7|L|||L-7L-7|L|F7L--7F7||||||FJ|||||L7F7FJF-7L-7|F------7FJ|L7L---------JF7FJL7|LLJF.JJ|. +FLL7|FFL77JJF-7LJF-J|F--J|F7||F--7L-7|LJ|F7LJLJLLJFJL7LJL7FJ|FJ|FJ||F-7LJ|||||||L7|||||FJ||L7L7L--J|L7F7F7-LJ|L-JF-7F7F-----J||F-J7.|.|.|..F +FJ|L--J7LFJ-L7|F7L--JL-7FJ|LJ|L-7L--JL-7LJL7F-77F7|F-JF7J||7FJFJ|FJ|L7|F-J||||||FJ||||||FJL7|-L---7|FJ|LJL-7|F7F7|FJ|LJF-----J|L---7FL7F-F7| +|-JJJ7|7F|FF-JLJL------JL7L7FJF7L---7F7|F--J|FJFJLJL--J|FJL7L7|J|||L7||L-7||LJLJL-JLJ||||7JLJF7F-7LJ|FJF7F7L-JLJLJL-JF-J.F7F7.|F---J7.LJ7|FL +L7|.LLL7-||L7F7F---------J.LJFJL--7FJ||||F7FJL7L7F-7F7FJL7FJ|LJFJL7FJ||F7||L--7F--7F-J||L7F--JLJFJF7||FJLJL7F7F7F-7F7L---JLJL-JL--7|F77|--.J +.FJF7JLJ.FF-J||L7F-7F7F7F7F7FJF--7|L-JLJLJLJF7L7|L7||||F-JL---7|F7|L7|LJLJ|F--JL-7LJF7||FJL-7F-7|FJ|LJL---7LJLJLJL||L7F--7F7F-7F7FJFJL7|J|7. +|J-L-77.F|L-7||FJL7|||||||||L-J|FJL-7F-7F7F7||FJL-JLJ|||F7F7F-J||||FJL-7F-J|F7LF-JF7|||LJF--J|-||L7||F----JF-----7||7|L-7||||J|||L-JF-J7F|FL +|.F7LJ|7L||LLJLJF-JLJLJLJLJL7LF7L--7|L7LJ|||||L-----7||LJ|||L-7LJ||L-7FJL-7LJL7L7FJ||LJF-JF--JFJ|FJL7L-----JF----JLJFJF7||||L7LJ|F-7L--7-L-. +.F7JJ---JL7|F---JF---------7|FJ|7F-JL-JF7LJLJ|F-7F--JLJF-J||F7|F-J|F-JL--7L7F-JFJ|FJL7FL7FJJF7L7|L-7L7F7F---J|F7F-7|L-JLJ||L7|F-JL7L7F7|J7-- +LLJ-F7JL|FF-JF---JF--------JLJFJFJF7F7FJL7F-7|L7|L---7-L-7|||LJ|F7|L7F7F7L7|L-7L-JL7FJF7LJF-J|FJL--JFJ||L----7|||FJF7F--7LJ7LJ|F7FJFJ|LJLJ.L +J7|F-F--JFL--JFF-7L----------7|JL-JLJ|L7FJL7|L-JL----JF-7|||L-7||||FJ|||L7||F7|F---JL7||F-JF7LJF-7F7L-JL--7F-J|LJL-JLJF7L----7LJ|L7L-JJ-FJF. +LFF7JJ.F7FFF7F7L7L----------7||F-7.F7L-JL-7|L------7F7|FJLJ|F-JLJ||L7||L7||||LJL7F-7FJ||L--JL7FJFJ||F7F7F7LJF-JF------JL-7F--JJLL-JJL|-77-77 +LL|JLF-F-7FJLJL-JF-----7F7F7LJ|L7L-JL----7LJF------J|LJL-7FJL-7F7LJFJ||FJ|||L7F-J|FJ|FJL7F7F7LJFJFJLJ||||L--JF7L-----7F-7|L---7-L7|.-.FLJLJJ +--777L7L7||F-7F--JF7JF7LJLJL-7|FJF-----7FL-7L---7F7||F-7FJL-7FJ|L7FJFJ||FJ||FJL--JL-J|F7LJ|||F7L-JF7JLJLJF---JL---7F7LJFJL-7F7|FL|7FJ7F|77|7 +LLF-J|LFJLJ|FJL7F-JL7|L-7FF7||LJFJLF---JF77L-7F7LJL-JL7||F--JL7|FJL7|FJ|L7|LJF7F7F7F7LJL-7LJLJ|F7FJL-----JF------7LJ|F-JF7-LJLJ-7.|JF7J.L7|| +F.|7FFJL---JL--JL7F-JL-7|FJL-JF7|F7L-77FJL--7||L--7F7FJLJL7F-7LJL-7||L7|FJ|F-JLJLJLJ|F--7|F7F7LJ|L--------JF7F7F7L-7|L--JL--7J-LJ7LLJ||-J.|7 +777|7..FF---7F---JL7F--JLJF7F7||||L-7L-JF7F-JLJF77LJLJF7F7||7|F7F7|||FJ||FJL7F----7FJL-7|LJLJL-7|F--7-F----JLJLJL--J|F-----7|-F-LF7FLL-JF-JJ +L-|J-L-FL--7|L----7LJF--7FJ||||LJL-7L---JLJ|F7J|L-----JLJ|LJFJ|||LJ|||FJLJJ-LJF---J|F7FJL------JLJF7L-JF-------7F7F7|L----7LJ7|--.|-...--7.F +FLF.FLF7|F7|L7F7F-JF-JF-J||LJLJF---JF7F7F---JL-JF-7F-----JF-JFJ|L-7||LJJJ.LFJFJF--7LJLJF7F7F-7F7F7|L7F-JF---7F7LJLJ||F7F7FJF-7--FF|LF|77FF-- +J|L-7-|L7||L7|||L--JF-JF7|F7-F7L----JLJLJF--7F7FJFJL--7F-7L-7L7|F7|||JJ|L7-F7L7|F-JF--7|||||FJ|||||FJ|F7L--7LJ|F---JLJLJ|L-JFJLF-F|7FJLFJ-J. +FFFL7-L7LJ|FJLJL--7FL--JLJ|L-JL---7F7F-7FJF-J||L7L---7LJFJFFJFJLJLJLJJF|7L-|L-J||F7|F-J|||LJL-JLJ||L7||L---JF-JL-----7F7L---J7-|L7L7L7LL.F-| +L-FF7|FL-7LJF-7F-7|F7F----JF-7F--7LJLJFJL7L-7||FJF--7|F-JF7L7|J7L|||JF-F-JLL7F7|LJ||L7FJ|L-7F----J|FJ|L7F7F7L-----7F7LJL7F-7.JJLLL-F--FL-7-| +.F7LL7F--JF7|FJ|FJLJLJF7F--JFJL7JL---7L--JF7LJ||FJF-JLJF-JL7||J|7.|.LL.J.F-FJ|||F-JL7||LL--JL--7F-J|FJ7LJLJL-----7LJL---J|FJ7-F77FFL7J|L7L-| +-|77|L|F7FJLJL7||F7F7FJLJF--JF-JF----JF7F7||F7LJ|FJ-F-7|F--JLJ.|J7L77L----J|FJLJL---J||F7F-7F-7LJF-J|F7F7F---7F-7L-7|F7F-JL7--FFJ---J.JF7FFJ +..L77L||||..F7LJLJ||||F--JF-7|F-JF----JLJLJLJL--JL--JFJ|L-----7.||F7J7|F|..LJJL7JF7F7LJ||L7LJFJF7L--J|LJLJF77LJ|L-7L-JLJF7FJFF|.F-J||-LL-7LF +|.JL-JLJLJF-JL----J|LJ|F7FJLLJL7FJF----7F7F7F7F-7F--7L7|F7F7F-JFF7|JLLJJ77.JL77FFJLJL--J|FL7FJFJL7FF7L----JL---7F7L7F---JLJ-LJ|F|7FJ-F-JLLJL +L-||-||F--JF7F-----JF7LJ|L7FF7FLJLL---7LJLJLJ|L7|L-7L-J||LJLJ-LFJ|J|.F|JLF7..L|JL7F-7F-7L--JL7L-7L7||F---------J|L7|L-----77L7|F777|JJ..FJ-J +L-JF-JFL7F7|LJF----7||F7|FJFJL--------JF7-F7-L-JL--JF--JL--7.F-|FJ.LFLJJ.|F7..|FFJ||||JL--7F7|F7L7|||L-----7F--7|FJL-----7L-7F7F777JJ.L-|JF7 +.-.F7L|JLJLJF7L---7||||LJL7L-----------JL7|L---7F--7|F-----J-7-||LJFLJ-LLFLJ-F-7L-JFJ|F--7LJ|LJL-JLJL7F----J|F-J|L7F7F7F7L--J||||||J-F.JJF-F +FL7L-JF.|.|FJL-7F-JLJLJF--JFF------------J|F---JL-7|||F---7F-77||7JF7|7LL77.-L7|-|7L-JL-7|F-JF------7LJF-7F-JL7F|FJ|LJLJL7JF7|LJL-7F7|..FF7| +7FJ-J-JLJF7L7F7LJF-7F-7L7F--JF-7F7F---7F-7||F7LF7-|||||F--JL7|FJL7.||F7.7LJ-.F|L7F7F7F7F||L--JF-7F-7L--JFJ|F--JFJ|FJF--7FJFJ||F---J-7J7FFL77 +|-7-|..|7|L-J||F7|FJ|FJFJL-7FJLLJLJF--J|FJ||||FJL7|LJLJL----JLJF7|.|LJ|7L7..7-L7||LJ|||FJL--7JL7LJFJJF-7L-JL-7||FJ|FJF7LJ|L7|||F-7..LFJ7-FJ7 +7||F|.7LFL---JLJLJL7|L7|F-7LJF7F7F7L---JL-JLJLJF-J|F---7F------JLJ.L-7L7F7F7J-F||L-7LJLJF7F7L-7L-7L-7L7L--7F7L-JL-JL-JL-7F7|LJLJFJ7L.F-FF-JJ +L7-L7.777LLF---7|F-J|FJ|L7L--JLJLJL-----7F--7F7L--JL--7|L--7F-7F7FJJ7L7|||||7F7||F7L--7FJLJL-7L-7L-7|FL7F7LJL7F-7F-7F--7LJLJF---JF7L7L7.JJ.J +F|7.J..-7.LL7F7L7L--J|FJFJF---7F------7FJ|F7LJ|F7F7F-7|L---JL7|||7JJF7||||||FJLJLJ|F7-LJF7F7FL-7|F-J|F7LJL--7|L7|L7|L-7L---7L----JL-77.-J|7. +-J|7L77JLFFFJ|L7L-7F7LJJL-JF7|||F-----JL-J||F7||LJ|L7|L------JLJL-7.|LJLJLJ||F---7||L---JLJL---JLJF7LJL-----JL-J|FJL-7L-7F7L-7F7F7F-J--J.FJ. +|JLF.|J|F-LL-J7L-7LJL-7F7F-JL7LJL7F7-F--7FJLJ||L7LL7||F7F7F--7F7F7|-L7F7F-7|||F-7||L---------7F7F-J|F7F--------7|L-7FJF7LJL7.LJLJLJ.J.LF-JJ. +L7LL7JF-L-FF7F7F7L---7||||F-7|F7JLJL-JF-J|F--JL7L-7||||LJ|L-7||||LJF7LJ||.LJLJL7||L-7F-7F----J||L7FLJLJF------7||F7||FJ|F-7L--7F7.LF|---J7.F +LJF-JFF.|FFJ||LJL7F--J|||LJFJLJL-7F--7L--JL--7JL--J||||F7L--JLJLJ.FJL--JL-7F7F7|LJF7|L7LJF7F-7|L7L7F-7FJF--7F7LJLJLJLJJLJFJF7FJ|L---7..|.--J +L7J.FJ|LF7L7LJF-7LJF-7LJL7FJF7F-7|L-7|F-7F7F7L----7LJ|||L7F7F7F7F7L----7F-J|||||F7|LJL|F7|LJLLJ-L-JL7|L-JF-J|L7F7JF-7F--7L-JLJFJF-7FJ777...| +.L|FLJL.||LL--J|L7FJLL--7LJFJLJFJL--JLJ-|||||F7F7FJF7LJL7LJLJLJ|||F7F7FJL7L|LJ|LJ||7F7||LJF7-F7F7FF7||F7FL-7L7LJ|FJFJ|F-JF7F--JFJ7LJLF-7---J +|||LJ..F|L7F7F7F7LJF----JF7|F7FJF--7F7F7LJLJLJLJ||FJL--7|F-----J|||LJLJF7L7L-7L7FJL7||LJF-JL-JLJ|FJLJLJL---JFJF-JL7L-JL--J||F--JF7F7-7J77.F| +LJJ.|.-FJFJ||||||F7L----7|LJ||L-JF7LJLJL-7F--7F7LJL7F--J|L---7F7||L-7F-JL7|F7L7||F-J||F7L7F----7LJF-7F-7F7F7|FJLF-JF------J||-F7|LJL7J|FJ-FJ +FF|-|.|L7L-JLJLJLJ|F77F7LJF-JL---JL----7FJ|F-J||F7F|L7|FJF7F7LJ||L7LLJ-F7||||FJ||L7FJ||L7LJFF7|L--JJ||7LJLJLJL-7|F7L7F7F7F7||FJLJF--JJL|FFJJ +FFJF--F-JF-7F----7|||FJ|F7L----7F-----7|L-JL--JLJL7L7|FJFJ||L-7|L7|F7F7|LJLJ|L7||FJL7||FJFF-JL------J|F----7F-7LJ|L-J|LJLJLJLJF7FJF7..FF7J.| +FF7JJ7L7FJLLJF7F-JLJ|L7||L7F-77LJF--7FJL-------7F-JL|LJFJFLJF7LJ-||||||L--7FJ7||||-FJ|||F7L--7F7F7F7FJL---7LJFJF7L7JFJF7F--7F7|LJ||L7F7|J7.F +J|L.L|JLJJ-FFJLJF7F7L-JLJFJL7|F7FJF7LJ7F7F7F--7||F-7L7FJF7.FJ|LF-J|||||F7FJL7FJ||L7L7||LJL7F-J|LJ||||F----JF-JFJL7L-JFJ|L-7LJLJ-F7L7LJL7FJ-| +FFL7||7|L-F-JF-7|||L--7F-J|L||||L-JL---J||LJF-JLJL7L-JL7|L7L7L7L-7||||||||F-JL7||FJ-|LJF--JL--JF-J|LJL----7|F7L-7L---J.L-7L-----J|FJF-7L7-FF +F|7.J|LFJ-L--J.||||F--JL7F7FJLJL-7|F-7F7LJF7L-7LF7L--7FJL7L7|FJF-J||||LJLJL-7J||||F7|F-JF7F-7F7L--JF------JLJL-7L------7.L7F-7F-7LJFJ-L-J.FJ +L.L-|L7LLFF----J|LJL-7F7|||L----7L-JFJ|L-7|L-7L-J|F--J|F7|FJ|L7|F7LJ||F-7F--JFJLJ||||L-7||L7||L----JF7F7F-7F-7.L------7L-7|||LJJL-7L777|FF-J +.-..-FJJ.FJF--7FJF---J||LJL-7F-7L7F7L7|F7|L-7L7F7|L--7LJLJL-JFJ||L7FJLJFJ|F-7L--7LJLJF7||L7||L-----7|||LJFJL7L7F---7F7L--JLJF7-F77L-JL|LFJJ- +F--|JL7J.L7|F7||FL---7||F7F7|L7L-J|L7|||LJF-J|LJ||F--JF-----7L7LJ-||F-7L7||FJF-7L7F--J||L7|||-F-7F7||LJF-JF7L7||F--J|L7F-7-FJL-JL-7FL7|F-JJ. +LJLJ.LJLF7LJ|LJ|F----J|||LJ|L-JF--JFJLJL-7L--7F7LJL--7|LF7F7L-JF7FJ|L7L-J||L7L7L-JL--7LJFJ||L7L7||LJ|F-JF7||7||||F7F|FJL7L-JF7F---J7||77LL|7 +FF-7.|.F|L7|L--JL7F-7FJLJF-JF--JF--JF7F7FJF--J|L7FF7FJL7|||L7F7|LJFJJL--7||FJFJF-7F--JF7L7LJFJFJ|L7FJL--JLJL-JLJLJL-JL--JF7FJ|L----77.F7--77 +L|FL-J-FL7L-7F-7LLJ|LJF7FL--JF7-L---JLJ|L-JJF7|FJFJLJF-J|||FJ||L-7L-7FF7|LJL7|FJJ|L-7FJL7L-7L7L7||LJF---7F7F7F7F-7F------JLJ7L7F7F7L7..|.L|J +F|FJ.FF77L-7|L7|F7F---J|F77F-JL-7F7F---JF7F7|||L7L7F7L7FJLJL-JL-7L7FJFJ|L-7FJ|L-7|F7|L7FJF7|FJ7|L-7FJF-7LJLJLJLJFJL------7F-7L|||||FJ.7JJFJJ +J-77LL|L---JL7||||L---7LJL7L---7|||L--7FJ||LJ|L7L7LJ|FJ|F-------JFJL7L7L--JL7|F-JLJLJFJL7||||F-JF-JL-J|L-------7L--7F7F--JL7|7LJLJLJF-J|J-.| +JJL--LL-----7LJLJ||F7.L7F7L----JLJL---J|FJL-7L7L7L7FJL-JL7F----7FL-7L7L----7LJ|F--7F7L-7|||||L7FJF7F--7F---7F-7L--7LJ|L--7FJL7F-7JJ.L7LL7.LF +FFL|7-|.F---JF7F7L-JL--J|L7F----------7|L7F7|FJL|FJL-7F-7LJF---JF7.|FJLF7|FJF-JL7FJ||F7|||LJ|FJL7||L-7|L--7LJFJF-7L-7L---JL7FJ|FJ|J|7F.FF|.L +F7||LFFFL-7F7|||L-7F-7F7|FJ|F---------JL7LJ||L7FJ|F7F||-L--JLF7FJ|FJL7FJL7L7L-7FJ|FJ||LJ|L-7||F-J||F-JL---JF7L-JLL-7L------JL-JL7J.7-JL-7|L7 +F|7F-LJF7L|||||||FJ|FJ||||FJL-7F7F-7-F77L-7||FJL7|||FJ|F7F--7||L7|L7FJ|F-JFJF-JL7|L7|L7FJF7|LJ|F7||L-7F7F--JL-----7L7F7F-7F7F---JLF|.F|LFJF7 +.LL--J7|L-J|||LJFJFJL7|||LJF--J|LJJL7|L7F7|||L-7|||LJFJ|||F-J||FJ|FJL7|L7FJFJF-7|L7|L7|L7|LJF-J|||L7|LJLJF--------J-LJ||7LJ|L---7L7LF.|.J.L7 +|JJJ.J7L-7FJLJFLL7|F-J|||F7L--7|F---J|FJ|||||F-J||L-7|7||||F7||L7||F-JL7||FJ-|FJ|FJ|FJL7|L7FJF7|||FJF7|F7L------7F---7|L--7|F-7FJFF7--7-L7J| +|JFF|.FLLLJLF-7F7|||F-JLJ|L---J|L7F-7|L7|||LJ|F7||F7|L7|||LJ|||FJ||L7F7||||F-J|FJL7||F7|L7||FJ|||||FJ|FJ|F-----7LJF--JL-7FJ|L7LJFFJ||FJ--.F| +|LJJ-LJ7|LJ|L7|||||||F---JF7F--JJ||.|L7||||F-J|LJ||||F|||L7FJ|||FJ|-||LJ||||-FJL-7|||||L7LJLJFJ||||L7||.|L-7F7F|F7L----7LJ-L7L---JFJJ7.|L|7| +F7J|.|JFL|JFF|LJLJ|||L7F--JLJF7F7||FJFJLJ||L-7L-7|||L7||L7||FJ||L7|FJL7FJ||L7L7F-JLJ||L7L---7L7|LJL7|||FJF7LJL7LJ|F7F-7L-7F-JF7F7FJJLF-7-J|L +FJFFFJL-7|JF7|F7F7|||7LJF----JLJLJ|L7L--7LJF-JF-JLJ|FJ|L7|||L7||7LJL7FJ|FJL7|FJL---7||FJF7F7|FJ|F--J|LJL7||F-7|F7LJ|L7L--JL--JLJ||J-FF7L.FJ7 +|LF.L-7J-J-|LJ|LJ||||F--JF7F7F7F7FJJL7F7L-7|F7L---7|L7L7|LJ|FJLJF7F7||L|L-7|||F----J||L7|||||L7|L7F7L--7|||L7|LJL-7|FJF------7J.LJ7FJLJ|-FLJ +L||L7.7F77.L-7|F7||||L---JLJ||||||F--J|L7FJ||L7F-7|L7L7||F-J|.F-JLJLJL7L7FJ|||L--7F7||FJ|LJ|L7||FJ|L7F7|LJ|FJL-7F-JLJFJF-7F-7|JF.|JL-FLL.L-7 +FLL.|-|LF----JLJ|||||F------J|LJ||L7F7L7|L7LJ.||L|L7|FJLJ|F7L7L--7F--7|FJL7LJL7F7LJ|||L7L-7L7|LJL7|FJ|||JFJL-7FJL7F--JFJFJL7|L77-L-JF-J|--L7 +|7|F--LJL-7F7F7FJ||LJL----7F-JF-J|FJ|L7|L7L-7FJL7|FJLJ-LFJ|L7L-7FJL7F||L-7L-7||||F7|LJ7L7FJFJL7F7||L7||L7L7F-JL7FJ|F--J-|F-JL-J|FLJ7FJFJ.L|| +|--F7FJ.|LLJLJLJJ||F------JL7FJF-JL7|FJ|FJF-JL7FJ||-F7-FJFJFJF7||F7|FJ|F-JF-JFJ|||LJF7F7|L7L7FJ|LJ|FJ||FJFJL7F-JL-JL-7F7LJ-L|-FL7J-7|L|.|F-. +7.F-J-JFF-J.|||--LJL------7FJ|FJF--J|L7|L7L--7LJ7|L7|L-JFJ.L7|||||LJL7|L-7L-7L-J|L-7|LJ|L7|FJL7L7FJL7|LJLL7FJ|F-7F7F7LJL7||FJ-L.7J|LFF7-LJ-| +FLJJ7|FJJ7.LLJF--|LF------J|LLJLL-7FJ|||FJF7FJ|F-JFJL-7FJ.FFJ|LJ|L7F7LJF7L7FJF--JF-J|F-J.||L7FJ.LJ|FJL7FF-J|LLJ|||||L7F7L77|J7|7L77-FJJ|.J.| +FJJL-7-J.77FJF7|FLFJF-7F7F7L-7F---J|F-J||FJLJF-JF7|-F-JL-7FJFJF-JFJ|L--JL-JL7L7F7L--JL--7LJFJ|.F--7L-7L7|F7L---7||||J||L7L7|J-|F7.LL-J.|7|FJ +F7FF-J|F--.L7-LF|-L7|.LJLJ|F7|L7F7FJ|F7||L--7L-7||L7L-7F-JL7|FJF7L7L--7F--7FJL|||F7F7F-7|-FJFJFJF7L--JFJLJL7F7FJLJLJFJL7L-J-7J|-77|7|.FL7JJ. +|--7LL|JFL-.77..LFLLJF7F--J|LJ.LJ|L7||||L-7FJF-J||FJF-JL--7|||FJL-JFF7LJF-JL-7||||LJ|L7|L7|FJ7L7|L7F7FJF---J||L-7F7FJF7L-7|7J..F77LL--|F-.FL +LL|L..7--J|F|7.L|LLF-JLJF-7L-77F7L-JLJ|L7L||7L7FJ|L7L7F7F-J|||L--7F-JL--JF7F7||||L-7|FJL7||L7F7||F|||L7L-7F7||F7LJ|L7||F7L77FJ-J.L-L-JL7--7J +7F--L7L7|.FJL|7-JFLL-7F7L7L7FJFJL-----JFJFJL-7|L7|FJLLJ||F-J||F-7||F7F7F7|LJLJ||L7FJLJF7||L7LJ|LJFJ|L7L7FJ||||||F7L7||||L7L7-|.LL-7-L.F|FJJ| +F|7FFJJ77F7-F7|FJJJ||||L-J||||L7F7F--7FJ|L7F7|L7|||-F--J|L7FJ|L7LJLJLJLJ|L---7||FJL-7FJ|||FJF7|F-JFJJL7||FJ|||||||FJ|||L7L-JFJ-L-7..|7FJL--J +-F-L|7LJL-J-LF|-J-F-L||F---JL7FJ|||F-J|.F7||LJFJ|||FJF-7|FJ|LL7L7F7F----JF7F7||||F-7LJFJLJ|FJLJL7FJ.F7LJ||FJ||||||L7LJL7L-77JJ|L||-LL-FJF.FJ +||F||7|.-..LFJL7.L-.LLJ|F-7F-JL7|LJL-7L7|LJL7FJFJLJL7|FJ|L7L7-L7||LJF-7F7|LJLJ|||L7L7FJFF-JL-7F-JL-7||F-J|L7|LJ|||FJL|L|F7L7.FF-JF.L|LJ7JFL. +--FJ77J||J.F7L-L-7F7JF7||JLJ7LFJL7F--JFJL-7FJL7|7FF-J||FJFJFJF-J||F7|JLJ|L---7|||FJ-LJF7L-7F-JL7F-7LJ|L7FJL||F7LJLJ|.|FJ|L-J7FJF7.F-F7J--||7 +FFFJ.|--L.7.|.|.FLJ-F|LJL-7J|JL--JL7F7L--7||F-JL7FJF7||L7L7|JL-7|LJLJF--JF7F-JLJ|L----JL7FJL7LFJL7|F7|FJ|LFJLJL-----7-L-JJ|.F|LL77J.JJ7J-|J7 +FF.F|J..|7F7FFFFJ|J-LL7F--JL-JLF---J||F-7|LJ|F7FJL-JLJ|FJ-||F--J|7F7FL7F7||L77-FJF---7F7|L--JFJF7|||LJ|FJFJF7F7F----J.||FLL-7J|LJF77|.|-FJ-L +7L-L7FF7-F7F---JFJF-JLLJ-JLFJJL|F-7FJ|L7|L-7|||L--7-F-JL7FJ|L7F7|FJL--J|||L7L-7L7L--7|||L7|LLL7|LJ|L-7||LL-J|||L-7J7|7J-F.JF|-FJ-F7-J-L-|J|| +J77F|-LJ|LFLJ|J.-JFL7.|L7..J7F.LJFJL7|FJ|F-JLJ|F-7L7L--7|L-JFJ|||L7F7F7|LJFL7FJF|F--J||L-J--FFJL-7L--JLJJL|L|||F7|F|7.|L77-F7-J.FJ.F.FJJ|FL| +L7-F|.L-J7|LFJJFJ|7L7-F-J7F-J77.FJF7|||FJL--7FJL7L-JL|7|||F-JFJ||FJ|LJ|L--7FJ|FFJL7|7LJJJJ|F-L7F-JJL|J|J7||.LJLJLJ-JF-F7J7|L|JL--F7|-J7F77|| +FL-J.FLJF-7JJ|FL7J-J|L|-FJ|J..LFL-JLJLJ|F7F7||F-JJ.L|FFJ|FJF7|FJ|L7L-7|F7FJL7L7L-7L--7-|-FFJJ-LJJJ-LLFF.77|-.L|.LF|-L7J|7L-7J7.JJL7||L-.J-J7 +L..|FJJ.FJ|7L-J|L|F-7.F-J.--77F.L|7||LFJ|LJLJLJJ.|7-J|L-JL7||||FJL|F7|||LJF7L7L7FJF7FJ-L--J.|.L-J7F7J.J7|LLLJ-LJFJJLLJF-|-FJ||J|||.|-JFFJ.|| +FJ.77JF---JJ||.7-F|-|7LJJ..FL7L7----J||FJLJ|-|-|.LF7-LLJ7FLJLJ|L7FJ||||||FJL-JFJ|FJLJJ77.LLLJ.LFF-JJ.F.|L.LJ|-LF-JJ.LJ7.L-7.|..LLJF7FL|-7|L- +LF7.F.|.LF7FL--L7LJ7.L7J.7.|.F-F.|LJLFLJ7LLJLJ7|.LJ7|||7FJFLF-JFJL7|||LJ-L-7F-J-||JJJF--7.LL.F.F|FJ.FL7|.-77|7.7.-77LL7-L7|F|-F7|FLL7|L|LF7| +.LJ|LJ|7|LF7JJ.L7.--7JL77|.F7J7L--.|.77.L-7J-LFF-FJL7--77-J7L7FJ7.LJ|L7J|FLLJJFL||J|F---LJ-L-7J-JJFF.L-77LF-|J-FLJ|FF.||FJ-|JJ||LFJ.-7L7.FJ7 +|-|||JF-7-7||LJ7J-|7|..F7LFJ7.F7F|.F7.---7||J.|L.F-77L|-|7F7FLJ.L7FLL-JFF7J|-F7L||7LJJ||||||LJ|F7FLFJJJ||7J|.LFFJLL7JFL-7J7L-F||.JF|FJ-|7L|- +|.LFJ-|JLF7-7-||L|||J.FFJ7.|F-7J|7.LL-7|FJF-7F||FF7||7L-|-LJLJLF.F|-|JL--7F77F--||-.LFJ-LL7F-FF.FL--JJ.LJ7-F.F7F7L||.-.FJLF.-J|-FJJL7..J|FFJ +F-|.F7|.FJ7FL-|-7F||L-J|F7F-L7J-7--F7FFLJLFFL7J|7|F-7F|.|LF7|.L|-LLJFJJ..L-JF7|FLJ.F||J||-J.F-JFL.-7|F-JFF7.--JJJFJ|||-|F|L-.FJLLJL7LFF-L|J7 +.FJF|JFFJLL77||L-7LJ77F-||L-|J.||J.L7-7-L--77F7L-J7JL--7L-F-|7-F7LF-L7LFF-J.||7FL|7.F--J7F|.F777-LL7LL.|LF7-LFJLF7|L7|.LJ777F|-7|-FJ-.L7-7|| +F-J-L--|.LFJ-F|-J-----|.LLLJL7-JJ.F-L-7-F---JLJLLLL.7LL|LFJ|L--LL---L7-FJ.L|--L-JLL7L7.LLLJ-FJL|J-LLJL.|.JJLLLJ.LLF.L77LL|-J-|-7JJ..L-7JJ.-J \ No newline at end of file diff --git a/2023/10-test-input.txt b/2023/10-test-input.txt new file mode 100644 index 0000000..3c00cf2 --- /dev/null +++ b/2023/10-test-input.txt @@ -0,0 +1,5 @@ +..F7. +.FJ|. +SJ.L7 +|F--J +LJ... \ No newline at end of file diff --git a/2023/10.py b/2023/10.py new file mode 100644 index 0000000..2d2ea97 --- /dev/null +++ b/2023/10.py @@ -0,0 +1,80 @@ +import numpy as np +import math + + +# | is a vertical pipe connecting north and south. +# - is a horizontal pipe connecting east and west. +# L is a 90-degree bend connecting north and east. +# J is a 90-degree bend connecting north and west. +# 7 is a 90-degree bend connecting south and west. +# F is a 90-degree bend connecting south and east. +def main(): + with open("10-input.txt", "r") as file: + arr = [] + for line in file.readlines(): + char_array = [] + for char in line.strip(): + char_array.append(char) + arr.append(char_array) + matrix = np.array(arr) + print(matrix.shape) + indices = np.nonzero(matrix == "S") + row_indices, col_indices = indices + starting_pos = (row_indices[0], col_indices[0]) + current_position: tuple = starting_pos + last_position: tuple = starting_pos + steps = 0 + visited = [] + while True: + visited.append(current_position) + current = matrix[current_position] + next_position = find_next(current, current_position, last_position) + print(f"steps: {steps}: current {current} next {next_position}") + last_position = current_position + current_position = next_position + steps += 1 + + if next_position == starting_pos: + break + half = steps / 2 + print(math.ceil(half)) + rows, cols = zip(*visited) + new_matrix = matrix[rows, cols] + print(new_matrix.shape) + + +def find_next(pipe: str, position: tuple, last_position: tuple): + row_index, col_index = position + last_row_index, last_col_index = last_position + # print(pipe) + match pipe: + case "|": + if last_row_index > row_index: + return (row_index - 1, col_index) + return (row_index + 1, col_index) + case "-": + if last_col_index > col_index: + return (row_index, col_index - 1) + return (row_index, col_index + 1) + case "L": + if last_col_index > col_index: + return (row_index - 1, col_index) + return (row_index, col_index + 1) + case "J": + if last_col_index < col_index: + return (row_index - 1, col_index) + return (row_index, col_index - 1) + case "7": + if last_col_index < col_index: + return (row_index + 1, col_index) + return (row_index, col_index - 1) + case "F": + if last_row_index > row_index: + return (row_index, col_index + 1) + return (row_index + 1, col_index) + case "S": + return (row_index + 1, col_index) + + +if __name__ == "__main__": + main() diff --git a/2023/11-input.txt b/2023/11-input.txt new file mode 100644 index 0000000..f3e8c88 --- /dev/null +++ b/2023/11-input.txt @@ -0,0 +1,140 @@ +.....................................................................................#......#............................................... +..#.....#.................................................................#........................#........................................ +...............................#...............................................................................#.....#...................... +.................................................#.............#...............................#...................................#........ +..............#......#.................#...............#............#.............#..........................................#.............. +.........................................................................................#.................#...............................# +.#.......................................................................................................................................... +..........................#......#............................................#......#.................................#.................... +.................................................................................................#.......................................... +.........................................#..........#..........#............................................................#............... +......#.....#......#..........................#........................#.................................................................... +....................................#.........................................................................#..........................#.. +..................................................................................#......................................................... +...................................................................................................................#........................ +.................................................................#........................................#................................. +.............................#..............................#..........................#.......#............................................ +..........................................#.....#.............................#............................................................. +#..................#..................................................................................................................#..... +....................................#...................#..........................#...........................#..............#............. +........#................#...................#.............................................................................................# +...............................#....................#...........................................#........................................... +.......................................#..............................................#..................................................... +........................................................................#........#...........................#.............................. +..................................#........#...................#........................................#.........#.................#....... +#................#........................................................................................................#................. +.........#.......................................#...............................................#.............................#........#... +...............................................................................................................#............................ +.........................................................................................#.................................................. +...........................................................#..................................#..........#...........................#...... +......#.........................#..........................................................................................#................ +....................#.....................#.......#...............................#.................................#....................... +..........................#..............................................#.................................................................. +..........#..........................#.......................#...................................#..............#..............#...........# +......................................................#..................................................................................... +............................................................................................................................................ +#...............................................#................#............................#............................................. +..................#......................#............................#................................#................................#... +............................................................................................................................................ +....................................................#....................................#.............................#.................... +..............#...................#................................#..........#..............................#.............................# +............................#...............................................................................................#............... +....#.................#.....................................#..........#............................................................#....... +......................................................#..................................................................................... +...........#..............................#.................................................#..........#.................#.................. +.................................#..............#................#..........#.......#....................................................... +...................................................................................................................#..............#......... +#...........................................................................................................#............................... +........#.......#............................................................................................................#.............. +............................#.....................#..........#......................................#.....................................#. +.....................................#.................................................#........................#........................... +.........................................................................................................................#...........#...... +.......................#.............................#........................#............................................................. +..............#...............................#.................#..................#........#............................................... +...#......................................................................#.................................#..............................# +...................#..................#.............................................................................#........#.............. +............................................................................................................................................ +.........................#.........................#........................................................................................ +......#......#.............................................#.............................#............#..................................... +.................................#......................................#................................................................... +.........................................#........................#..............................#.................#..............#......... +............................................................................................................................................ +......................................................#.................................................#..............#..................#. +......................#......#...............#...................................#............................#............................. +....#...........#.................#............................................................#...............................#............ +..........................................................................#..........................#...................................... +..........................................#................................................#...............................#............#... +................................................................................................................#........................... +..........#....................................#...................................................................................#........ +................................#....................#..............................................................#....................... +......#.......................................................#...............................#............................................. +#.......................#.....................................................................................................#............. +.................#...................#...........................................#..........................#............................... +.....................................................................#....................#................................................. +..............................#.................#.......#.........................................#......................................... +..#........................................................................#....................................#.........#................. +...........#............................#..........................................#.............................................#.......... +......#.............................................................................................................#.....................#. +........................................................................................................#................................... +..............#...................#.........#............................................................................................... +........................................................#.............#..........#.....#..........#............................#............ +.........#......................................................#...........................#............................................... +.........................................#...................................#.................................#............................ +............................................................................................................................................ +................#...................................................................#.................#..................#.................. +.................................#..........................#.............#....................#................................#..........# +...#........................#.........................................................................................................#..... +.................................................#......................................#.....................#......#...................... +...........................................#.........................#........#............................................................. +........#......#...................................................................................................................#.....#.. +.#..................#..................................#.........#.......................................................................... +..................................#.....#.................................#................................................................. +...................................................#.................................#...................................................... +............................................................#............................................................................... +.............................................#......................#..........#............#.........................#......#.............. +................................#...................................................................#....................................... +.....................................................#..................#......................................#............................ +...#......................#.....................................................................................................#........... +...........#...........................................................................#..............................................#..... +................#..................................................#..............................................#......................... +.......................#......................................................................#............................................. +................................#........#.........#.....................#.....#......................#..................................... +.#.......................................................................................................................................... +........................................................#................................#...................#..................#........... +.....................................#........#.................................................#.......................................#... +.........#...........#...................................................................................................................... +....................................................#.............................................................#.................#....... +.............#............#........................................#.............#.....................#...................#...............# +..................#....................#.................................#.............#.................................................... +................................................#........................................................................................... +.......................#...............................................................................................#.................... +....#..........................................................#.....#..............#...........................................#........... +...............................................................................................#..................#.......................#. +.........#...................#............................................#................................................................. +.............................................................................................................#..............#......#........ +...........................................................................................#................................................ +.#...........................................................#.............................................................................. +..............#..............................#........................................#.............#....................................... +....................................#..............#..............#.........#.............................#.............#.............#..... +....................#............................................................................................#.......................... +.........................................................................................#.................................................. +...........#............................#................#....................................................................#............. +.....#......................................................................................................#............................... +..................................#................................................#........#.............................................#. +.#................#......#...........................................................................#...................................... +..............................................#.......................#................#............................................#....... +.........#............................#........................#..........................................#.....#......#.................... +..............................................................................................#............................................. +........................................................................................................................................#... +..........................#........................#...............#................................#............................#.......... +..#........................................#............#............................................................#...................... +...............................#.....#........................................#.......#......................................#.............. +.......................................................................................................#.................................... +.....................................................#..............................................................................#....... +........#......................................#...........................#.............................................#.................# +...................#.....#......................................#.............................#............................................. +............#.........................#......................................................................#.......#.................#.... +..............................#...................................................#......................................................... +............................................#.........................................................#..................................... +.......#..........................#................#.....#.............#.................................................................... +..................#.........................................................#.............#.......................................#......... \ No newline at end of file diff --git a/2023/11-test-input.py b/2023/11-test-input.py new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/2023/11-test-input.py @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/2023/11-test-input.txt b/2023/11-test-input.txt new file mode 100644 index 0000000..81183f8 --- /dev/null +++ b/2023/11-test-input.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/2023/11.py b/2023/11.py new file mode 100644 index 0000000..644f276 --- /dev/null +++ b/2023/11.py @@ -0,0 +1,51 @@ +import numpy as np + +def main(): + with open("11-input.txt", "r") as file: + arr = [] + for line in file.readlines(): + char_array = [] + for char in line.strip(): + char_array.append(char) + arr.append(char_array) + matrix = np.array(arr) + dot_columns = np.all(matrix == ".", axis=0) + dot_rows = np.all(matrix == ".", axis=1) + coordinates = np.array(np.nonzero(matrix == '#')) + distance = [] + for i in range(0, coordinates.shape[1]): + row = coordinates[0, i] + col = coordinates[1, i] + for ii in range(i + 1, coordinates.shape[1]): + next_row = coordinates[0, ii] + next_col = coordinates[1, ii] + empty_rows_passed = get_rows_passed(dot_rows[min(row, next_row):max(row,next_row)]) + empty_cols_passed = get_cols_passed(dot_columns[min(col, next_col):max(next_col, col)]) + d = (abs(next_row - row) + (abs(next_col - col))) + (empty_cols_passed * 999_999) + (empty_rows_passed * 999_999) + item = i, ii, d + if distance.count(item) == 0: + distance.append(item) + print(distance) + print(len(distance)) + s = 0 + for d in distance: + s += d[2] + + print(s) + +def get_rows_passed(rows: []): + passed = 0 + for r in rows: + if r: + passed += 1 + return passed + +def get_cols_passed(rows: []): + passed = 0 + for r in rows: + if r: + passed += 1 + return passed + +if __name__ == "__main__": + main() diff --git a/2023/12-input.txt b/2023/12-input.txt new file mode 100644 index 0000000..1785afe --- /dev/null +++ b/2023/12-input.txt @@ -0,0 +1,1000 @@ +.???#??.?##?#??? 1,1,7 +#.???###???#????. 1,5,2,1,1 +??.?#??##??.##?##.? 7,5 +??????#???????? 7,2 +????.##???????????.? 3,10,1,1 +?????#????#? 2,1,1,1 +?#?.#????.? 1,1,1 +????#?.?..????# 3,4 +?????????##????? 1,9,1 +???##????.#???#? 7,1,3 +.?.???#????????? 2,4 +?#???#.???.??????. 2,1,1,1,1,4 +?..??#????#???#?### 11,3 +???#?..?#?#? 3,3 +?##???????????#??# 6,2,2,1,2 +????.#?.???#??? 1,1,2,3,1 +???..?#??? 1,4 +?????#?#??#??. 1,3,2 +???#???.???#? 2,1,1,2 +?#?#?????????????.?. 8,1,1,1,1,1 +?????????#???.#.? 3,3,1 +???#??.?#.? 3,2 +??????.##?# 5,2,1 +???????.?? 2,1 +?????.??#????? 3,3,2,1 +#?#???.?????###?#? 6,3,6 +?#????##??#?????#?. 1,12 +?#?#?.?#???.? 4,4 +.#?????#?####??????? 3,9,2 +???#???#?????#??? 1,2,11 +.?#?.??.?.?.?. 2,1,1,1 +????#.??#?#??.??.?? 5,5,1 +?.#?#??##?#? 3,4 +?##?.??#??? 3,4 +?????????##?#. 4,7 +.?.#???.??###???? 1,1,1,6,1 +.##??#?????????#? 5,2,1,3 +.??#?.??.??. 1,2 +.??#????##??? 1,3,2,1 +#?????..?#??..?. 1,1,1,4,1 +.?#?????#???.? 8,1 +.#?.???.???#?#??#.? 2,1,1,7,1,1 +?#.???#.??#??#???? 1,1,1,1,8 +#??##?.?#? 1,4,1 +?.#???.?.?????? 1,3,1,1 +?.??#??.??#.?# 5,3,1 +??#?###???#? 7,3 +???#????????#?. 7,2 +.#???????# 1,1,1 +.??????????#.??.? 4,1,1,1,1 +?#?.??.#.. 3,1,1 +#?...??.#?? 2,1,1 +???.???.???#? 1,1,1,3 +##?#?#?????????.?.#. 2,12,1 +.?#?????..???.?? 7,1,1 +.#???#??#??.#.???#?? 9,1,5 +?#??.????#.????#??# 2,1,3,2,3,1 +.?.??#?.??.?##???# 1,2,1,4,1 +?.#?????#?#?????? 9,1,1 +.?????.#????.??? 1,2,3,1,2 +.?????.?#???? 1,4,1 +?#?????#????????? 10,1,1,1 +.#????????#?. 2,1,4 +?????????.??.?? 8,1 +????#??#???. 3,1,1,1 +.???#.???##.?#?? 3,4,2 +.#?.???#?.???#? 1,1,2,1,1 +??#?.??##??.#????.?? 3,3,1,1,2,1 +..#..??##??.?? 1,4,1 +?#?.??#???#?##?##? 1,2,9 +????##??.#..??????.. 6,1,2,1,1 +?#?????#?????###???? 4,13 +?#?##..?#????#?????# 4,1,1,4,2 +.?.????????#??? 1,1,5 +?.?#???????##?#???.. 2,6 +????..?????##.?..?? 3,6,2 +..?#???#..? 2,1,1 +??????..???????? 3,2,4,1 +??#??##.#.??# 1,5,1,2 +????.?.???#?. 1,1,1,4 +.?##??##???#??? 2,7 +?????????? 6,1 +.???#?##????#.? 5,3 +?#??.??????? 4,2,1 +????????#?#? 1,2,6 +??#???????.???? 8,2 +???#?#?????????.? 3,1,2,2,1 +?.???????. 2,1 +?.??.#???####??#.. 1,2,2,8 +??#?????#.#????. 1,4,1,2 +?####????.. 5,2 +.???#?.?.#????#? 2,7 +.#?###.?#?? 1,3,2 +??????#??#???#? 3,2,3,2 +.?###?????? 5,3 +.#..?????? 1,2,1 +???#..?.#???#? 2,1,1,6 +??#?#???.? 1,1,1 +.?#????##?##? 1,6 +#?#?#.?????????#.? 5,3,2,1 +.??##?????? 4,2,1 +??##??.??. 4,2 +??#???????????# 2,1,4,1 +???.????#?????? 2,1,1,1,1 +.???#??#?.?????. 5,1 +.##?.??.?#.# 3,1,1,1 +?#?????#?#???##????? 2,11,1,1 +..??.#??#??#?#????#? 1,1,7,1,1 +???.?##?#??? 1,1,5,1 +???#?##???##???????? 2,13,1 +..?????##?..##???? 1,2,6 +???#??##??#??#?????? 8,3,2 +#?#??#.???..??#? 1,4,2,4 +??#??.????????#?? 4,2,1,1,1 +.#??.????.. 2,2 +..?????##??#?#?#???? 7,7 +#?#???#??.??.??#?.# 1,5,1,1,4,1 +.?#?##???.?.. 5,1 +?????.?.#? 2,1 +.??.???#??#???##?#?? 1,2,1,7,1,1 +?????#.?.?????#??? 1,1,1,1,4,4 +???.?..#??.?? 1,3 +???????##????#?#?## 2,6,6 +?#?????.?? 5,1 +??##?.#?..#??? 2,2,1 +#.????????#?? 1,5,4 +???###??????##???#? 12,2 +?.????.??#?????..?. 4,1 +????.???.? 1,1 +??#..???###??.?#.# 2,1,4,1,1,1 +.?????#?????? 8,1,1 +??#?##.?.??. 4,1,1 +.??????#??#???.?? 6,3,1 +??.??.????#??.? 1,2 +???????.##????.#.??# 3,2,2,1,1,1 +??.??#???.. 1,5 +?????????????#???? 2,1,3,1,3,1 +#?.??????????#.?? 2,1,2,5,1 +?#????#?#.?.??#???? 7,1,1,1,1,1 +????.?????.???#???? 2,5,6 +??.?????#??.???? 5,1 +??#????.##.??????#?. 6,2,7 +#..?#???.?.? 1,3 +.#??.???.?# 2,3,1 +????????#?#?? 1,3,1,2 +?##?##????#?#.??? 8,2,1,2 +.???#.?.??.????.. 4,1,1,4 +.??##??????#???????# 1,2,8,1 +.?#..??##?????# 1,1,2,1,1 +?.#?.##??????#??? 1,11 +.???#?????#? 3,1,3 +####?#?#?#??? 8,1,1 +.??#?#?..#??. 6,1 +###????.???#? 4,5 +.?.??####?#???#???. 8,4 +.??#???#?####.?? 1,1,7 +?.#?.??????#????.? 1,6 +??????##??#??.?.???? 11,1,1 +?????????#. 4,2 +??.???.?#.? 1,1,2 +?.??#???#??? 2,3 +?..??????.????##? 5,5 +.???.???#???#???? 1,10 +?..#???.????#? 3,5 +?????.?#??????? 1,1,1,1,2 +?.?#.?????.? 2,3 +.?#?##?.#??? 4,2,1 +?#??#??##??.? 1,3,3,1 +?#?.?#?..#???.#.???# 2,2,3,1,1,1 +???..#????????? 3,1,1,3 +???.#.?.?? 1,1,1 +.##???#??##.?? 2,6,1 +??????#??????#?? 2,1,2,1,5 +????.??###?#?#?? 1,8 +?#?#.?#????. 2,1,2,2 +??#.?#??????????.??? 3,4,1,2,2 +?????..??#??.????#? 1,2,1,3,1,3 +.????#???#?? 5,4 +?..#???.#?#?. 1,2,4 +#??????#?.?.???.?? 1,1,2,1,1,2 +??#.?#????.?#?. 1,3,2 +?##??#??????.#.?.?#? 11,1,1,1 +??##????#??. 2,3 +#????##??..??? 1,7,1,1 +.??????##?. 1,6 +.??.???????????. 3,4 +?#.#.#??#?.? 1,1,4,1 +#.??###??#?.#?.???#? 1,1,6,1,1,1 +??##??.?#?.#????.?? 5,1,3,1 +.????.#???..? 1,1,4 +?.?.#??#?##?#. 1,7,1 +????#.#??????.??? 1,1,7,1 +.#?????.###?????# 1,3,7,1 +??###??#?. 4,3 +?????#??.??.??? 1,6,1,3 +???.??#??#??? 2,6 +.##?..?#??? 2,1,1 +.#?#???????? 3,1 +???#?#?#.?.??#??.# 7,1,4,1 +??????#???.????.???? 1,3,1,4,2 +.?#?????#?#?????. 3,1,5,2 +?.#?###??#?#?.? 1,10,1 +.??.?.#??????##?#?? 1,1,2,1,1,4 +????#?.?#. 1,1,1 +????#???#???.? 3,3 +.??#?.???###???? 3,1,3,1 +??...????##? 2,1,5 +.??#????.????..?..? 2,1 +??##.#.#?.?. 4,1,2,1 +???#?###.??.?##??#?? 5,6,1 +.?...##?#?????.###? 1,8,3 +?#??#?#....?.?#?.??? 6,1,3,1 +?.?.??#???#?.. 1,8 +?.????#?#??#..#?? 8,1,2 +#?#??#?..??.????#? 6,2,1,1 +?..#???#?#???#?.?.#? 1,1,5,1,1,1 +?.?#????#????#? 1,4,3 +?.?????.??? 2,1,1 +???????????.???#???? 1,1,2,3,3 +?????????###.? 4,5 +??????#?#?##??#? 9,5 +.???###?.##??.?. 5,3,1 +?#??????#.#???#??.? 6,1,1,2,1 +???#??..??#????. 6,4 +????.??????#??????? 1,1,3,4,1 +????????###??????#. 1,2,7,4 +##????#?#????#????.# 9,7,1 +???#?#?#????#???? 5,6,1 +?#????#??#?##???# 6,1,2,1 +?????.????????????# 1,2,9 +?.#?.?#.#??? 1,2,2 +?###?#???????.# 6,3,1 +??#???#?.?#????? 4,2,3,3 +.?#?#???#. 4,2 +.?????.???##????? 2,5 +?#?.?????#??? 2,2,4 +??#????#??????##??# 10,7 +?#?.???????#?#?.??. 2,1,2,5,1 +?#?#..???##??#??? 3,10 +.?????.?#?.??#??? 1,1,1,6 +?????????#?#???.. 1,4,4,2 +?...?##?.? 1,3 +?#??.???.??# 3,1,2 +?#??.???????#???.?? 3,2,7 +.??#..?##???#? 2,4,2 +.??????#??.????? 3,3,1,2 +#????##?#? 3,5 +??#?????#??????..?? 2,8,1,2 +?????.????? 3,2,1 +??.?.##?.?#? 1,2,2 +???##??#??##??? 6,1,3,1 +#??#???.???.? 1,2,1,1 +.?????.?#???? 4,1,1 +????????..?#??.?? 3,1,2,1,2 +..??#?#.?. 1,1 +??#???#?.#? 7,2 +????????#?#.??? 2,7,2 +?#?..????.. 1,2 +???????#?. 1,5 +??????.?#??####?. 3,8 +?##?#??.?##?#?? 4,7 +?????.?.#??? 1,1,3 +?#?????.??. 5,1 +??.?#??###?. 2,1,5 +.?#.?#?.???. 2,2,1 +???#.??#????? 1,4,1 +?.#??????#.?? 3,1 +..?.#??##?#????????. 10,1 +..??#?????? 3,1,1 +#??.??#???#?#??????? 2,3,5,1 +?##.#?.??##?#? 3,2,6 +?????#?.????? 1,5,4 +?#??????.? 4,2,1 +.??#.????? 2,1 +?????#???..?? 8,1 +?#??????.?#?##??? 3,1,8 +????#???..? 2,2 +#?#.??#???#???.?#? 1,1,1,6,1,1 +????#?????????#???? 1,6,9 +????#?####???.?? 3,7,1,1 +??????#?#..#??? 1,7,1,1 +.???.??#????# 1,8 +??????##..?? 5,2,2 +.????....###??#???.? 4,8 +???..????#???.??# 1,1,3,1,1 +??#??????? 5,1 +?????.?##????.??#?#? 4,2,1,6 +.???#?.?#?????#?? 2,2,2,1,3 +?#??#?#?#. 6,1 +?????????#????#?.#. 1,1,1,8,1 +#?.????.????. 1,2,1,1 +?.##??????##. 1,10 +????.??#??#?..?# 3,3,3,1 +??#.?#???.??? 1,1,1,2 +????.#.????##.?.?#?? 1,1,6,1,4 +????#???#?#???#?## 1,9,4 +??.#??###?. 1,7 +#??????????.?????? 3,1,1,1,4,1 +.???#.????????##???. 3,11 +????????.??? 1,1,1,1 +?#?.??.??. 3,1,1 +??#..???## 2,2,2 +??????.???? 1,1,2 +.?????##???.##??? 4,4 +?.#?????#??? 2,1 +#??##?#???#?#???#?#. 9,5,3 +??.???###??.???? 1,7,2 +??#????#?.? 2,1 +????...?#?????# 1,7 +.#?.??####??#.?? 1,8,1 +???.#???.#???#..?? 1,3,1,1,1,2 +??#?.##?#?##? 1,8 +????????.#??????#??# 2,3,11 +??.?#??.#??????. 3,5 +????#?????.?? 3,3,1,2 +.????##???.??#...? 8,1 +?#.???????? 1,3,1 +???..#?????##???#?? 1,10,1 +?????????.?#????? 1,2,2,4,1 +##????#?#???#?.#.# 4,2,2,2,1,1 +???????.#????.#??##? 1,4,1,1,1,4 +?.???#??#??.#. 1,6,1 +?#?#???..#?.#??.? 6,1,3 +??###?#???.??? 1,8,1 +????????..???? 2,2,1,2 +.#??#??????#???? 1,6,1,1,1 +#.?#...??##???.?##?? 1,1,1,4,3,1 +.?###?####????.???? 11,2 +?.???.??.???.?? 1,2,2,2,2 +?##?#??#??.?.???? 9,2 +.?#..?..####.??#? 2,1,4,2 +.#???.#??.? 3,2 +#????.#????? 2,1,1,3 +??#.???.??? 2,2,1 +?????????#?# 5,4 +??????#?###???????? 14,1,1 +????.?#?#? 1,4 +..??#????#? 1,6 +?.?#????#???#.#?? 4,6,3 +.#?#?#?#??.?# 1,1,5,1 +#????????#? 1,2,5 +??#???.###???#????? 3,7,2 +.##?#??????#????.##. 14,2 +??????????#..?? 1,7,1,1 +??.?#????.? 5,1 +????#?..?? 1,2,1 +??.??#????? 1,5,1 +??##?#??.?#? 8,1 +.??..#??.??#?. 2,1,3 +???.??????#?#?.?.??. 1,1,1,6,1,2 +??.???##??.#????? 1,6,1,1,1 +.?????#??# 1,1,1 +..??.?#?#???? 1,1,2 +??.?????#???. 1,7 +??????.???????#.? 3,1,1,5 +.???????#? 1,3 +?#????.?.?#??.? 4,1,1,1,1 +.#??????????#... 4,1,1,2 +????.??.?##??#??. 2,8 +???#???.???#?..? 5,1,1,1 +#??#?#.?????????# 2,3,1,1,4 +.#.??#??#?#??#?#. 1,6,6 +?????##?#???. 1,6,1 +????????.??. 1,1,3,2 +????###???.#?#???? 7,6 +??#???##?.#?#?.## 1,1,4,3,2 +?#?.##???. 1,3,1 +???#???????#?#??. 7,3,1 +??.?#.?..???????# 2,2,1,5 +#.?.#??.?? 1,3 +..??#??.?? 3,1 +.??#?.???#?#?? 1,8 +..?.?.???.???? 3,1 +???#?##?#?#?.?#???? 10,2 +??..?#..??#?? 1,4 +????.?.??..##??##??? 2,1,1,9 +??##?????.????#?.?? 6,5,2 +???#????????#.?#.?# 1,10,1,1 +????.?###?? 1,4 +.#?.?????? 1,2 +?..?.???#?#?#?#? 1,9 +????.?#???????. 4,1,1,2 +????#?##?.???? 8,2 +?????.#??? 1,1,1 +.???#?.#??.? 1,3,3,1 +#?##??#?.?#?.???? 4,2,2,1 +.?#???.??? 1,2,1 +???????#?# 2,2,1 +?#??.???#???????#.? 3,4,1 +.????#????????#???? 8,3 +#??#?##.?. 2,4,1 +????.?????##?? 1,1,2,4 +?????#?#?.????##???? 2,5,1,3,2 +???????#???##?.#?? 1,10,1,1 +.?.???????#???#???? 1,1,1,1,1,5 +????##???#..??.#??#? 1,6,1,2,1,2 +?#????????????#?? 6,3,4 +.?.?#?????. 1,3,2 +.????#?????? 1,3,1,1 +??.####???##?????? 11,1 +??????#....???#????? 2,5 +?#.#.#?#?#??#?#?. 2,1,11 +?.#????#.#?#?. 2,2,4 +#??#??.##?#?##?????. 2,1,1,4,4,2 +???????????.??# 1,1,2,1,2 +???.?#???#?#????#?.# 3,4,1,2,2,1 +#?#?.?????????? 4,1,3,3 +?????#???? 2,1,2 +?#?.#.?#??#??#.? 2,1,8 +?###??..????#?? 6,5,1 +..?##???????# 6,1,1 +?#???????.??#???? 1,3,4,1 +.????.???????? 1,7 +.?????.????#.??? 3,1 +#.???##?#??# 1,9 +.????#?.#????.?? 2,2,1,3,1 +?##?????#??? 4,3,2 +?#????.?#?? 2,2 +??#.?????????.##??? 1,1,1,2,1,5 +.???#???###?##?##??? 16,2 +????#.???#???? 2,6 +.??##?##?#?. 1,2,2,2 +??????..#??#####??? 2,8 +#.????..??#????. 1,1,1,7 +?##???#?.?#??#.? 5,2,1,1,1 +?##?#?#..????..?. 6,4,1 +?????#??#. 1,6 +#???.##??? 2,3,1 +?#??????#???????? 1,5,1,1,1 +?#?#?.??##??#.??.??? 5,4,2,1,2 +??#?????????..???##. 10,5 +???.??##??????##?## 1,13 +#??#.??#.#?#??#.#?# 4,2,6,1,1 +??.??#?????? 1,5 +???##??????.? 6,2 +??.???.??. 1,2,1 +.?????#???? 5,1 +??.??.??????. 1,3,2 +??##.?.????? 3,3 +.?#??#??#??.???. 5,2,1,1 +?#.##?????.?.?? 1,2,2,1,1 +??.##????????..??#?? 5,3 +?.??????#.#? 3,1,1 +.?#???.?#??#?##.?. 4,4,2 +??????#?..???. 4,1,2 +?.???#???#? 1,5,2 +?#????#??????#????? 2,3,5,1 +????#?.??#?? 1,1,3 +??###??????## 4,1,4 +##??#????..##??? 2,1,2,4 +????.????..? 2,1 +#????.??????.??? 2,1,4,1,1 +???????##?.? 1,3 +?.#??##.?.#.##?.?.?? 1,1,3,1,3,1 +?#.??.??????#???.??# 1,1,2,5,3 +.#????#?????.???? 1,1,2,3,2 +????..#??#????#? 1,6,2 +.##?????#??#??##?? 4,2,6 +?#????.??.?#?#?.??? 5,2,5,3 +????????????#?? 2,1,1,1,3 +.??.??#?????#? 1,2,5 +??.#??.?#?????? 2,7 +???##?????####???.?. 1,2,9,1 +.???.#?.???#???# 2,6 +?.????##????. 1,7 +???#?#?.?.?#?????.? 4,5 +?.?.?#.????? 1,2,1,1 +??.???#?..#? 2,2,1 +#?#.#??#?..?.????? 1,1,5,1,1,2 +???#?.??.?#.?# 2,2,1,1 +?.??#?.????.?? 1,2,2,1 +???##?.???#?? 1,2,5 +???.???????.. 1,5 +#??#????#????????# 1,3,2,2,1,1 +.????#??#? 1,5 +?#????.#?# 4,3 +?.??????.?.?#??.?#?. 5,2,2 +.#??????#????# 1,1,4,1 +???#???#??????#??.? 2,10 +#?.?#?.???????#?.?? 1,2,5,3 +?#.??.#???##??#.#..# 1,1,1,5,1,1 +???#.??#?. 1,3 +.????#?#?###?#?#. 13,1 +??.##??.?#???.???. 4,3,2 +?#?#.##?.????#?#? 3,3,2,1,1 +??##???#?#?##.??. 11,1 +?????#?#???#???.? 2,1,4,1,2 +.#?.##???????##. 2,2,2,3 +?#??????###?? 2,5 +.??#???##???.???#.?? 8,1,4,1 +.??#????.??#???. 1,3,4 +?#????.?.????#?.?? 1,1,1,2,2,1 +?..##?#...??.##?. 1,2,1,1,3 +#?????##???#?????#?? 3,7,3,2 +.???##?????#???#.??? 4,1,1 +??..???#?????#????.? 1,13 +??##?????#????.?? 1,12,1 +.?.?#.?#????. 2,3,1 +??.???#??????? 1,10 +???#??.??##?? 3,2 +?#??#?????.??????? 8,4,1 +?.#???#????#???????? 11,5 +#?######.??????? 1,6,1,1,1 +??????.?#?#?. 1,2,4 +???..??#?#.. 3,4 +?.??.??.#???##???# 1,1,1,10 +??#????.##???##?#.? 6,4,4 +??????.???? 6,2 +??..#??.??# 2,2,1 +.?????????.#?? 6,1 +##?..???#?#???? 2,8 +?...???#?? 1,1 +?.?#?.????????? 3,6 +#???#.##????#?#.#??? 1,1,1,9,1,1 +.???..#??#??#?#? 2,10 +#???#?.??.??.?##?#?? 2,3,2,1,2,1 +?#.?????????#???? 1,3,1,6 +?#?.???????# 2,7 +???.#????#????##?### 1,1,1,1,3,7 +??.?????????? 4,2 +?????.????#?##????? 1,1,13 +#???.????. 1,1,1 +???##????.? 4,1 +?????#?????.??#? 1,7,1,1 +.????##.?#????? 1,4,3,1 +.?.?#?##????????? 5,1 +??#?.###?#?# 2,7 +???#???#??#. 1,1,6 +????##?#??????.?#? 10,1,2 +.?#??????##?.. 2,6 +.??#?#???#? 3,1,1 +.?#?????????.#?#???? 1,1,1,1,7 +??????.?????.?????? 1,4,1,2,3,1 +.?.#?????.? 1,6 +????#???.????..??? 1,5,1,1,2 +.?...?#??.#?.?? 1,3,1,2 +???#?#????#?????.?? 3,6,3,1 +??.?????.?? 1,4,1 +#??????#???#?????? 1,1,10,1 +?????????? 3,3 +??????????# 1,6 +????????.????#? 3,1,1,1,2 +.???#?????.?#.??? 4,3,2,1,1 +????##?#????#?? 1,12 +???.#?????????# 2,6,1,1 +??#?????##.????#??.. 4,2,6 +?.???##..??#.? 1,1,2,3 +#?..????##??????? 2,11 +?????#??.??.? 5,2,1 +.?.?????????#??. 1,1,1,4 +????.????..?.? 2,1,1,1 +#?.?.?????# 1,1,3 +?.???##?#?.?.? 1,1,6,1 +?#???????????..???#? 5,2,1,1,1,3 +#????.???# 2,1,3 +#????#?#????? 8,1 +??.?#..#?..##. 1,2,1,2 +??#.?.?.??#?#???##? 1,1,1,7,3 +??#?.#.???#.??# 4,1,2,1,2 +?##????##?#?#? 3,6,1 +???#.???#???## 1,1,4,3 +.??#?????###???.? 2,1,6 +??????.??? 1,2,1 +?#??#?#?##??#? 9,2 +?.#?????????.????. 1,1,8,3 +.?#?.?#???#???#?##?? 1,14 +???????#???#?.?#??#? 1,6,2,4 +?.??#?.????#?. 1,2,6 +??????.##?.#.??#??.? 1,1,1,2,1,4 +???#.???#?#.?#???.# 4,1,4,4,1 +??..?????#??? 1,3,3 +.?????..????#??????? 2,1,8,2 +.?##??#?.??#? 3,1,2 +??.????????.??#??? 1,7,4 +????#?.#??#? 2,3,2,1 +#????##?#????#?..?? 7,3,3,1 +???##?#??.????.#?? 8,1,1,3 +??...??????#?. 1,3,3 +?#.?????????..??#? 1,6,4 +.#???#??????#?????.# 1,1,1,6,4,1 +.??##??????# 6,2 +#.?????.?# 1,5,1 +?#?.#???#?. 2,1,1 +?.??????#????#.#?? 1,4,1,1,1,3 +#?.####??? 1,7 +??.#.???#?????#???? 1,1,2,2,3,1 +??#?????#??##?##.?? 2,11,1 +?#???????.#?#??? 6,4,1 +???.#..?..#?? 3,1,1,2 +.???#?????.?#????# 1,2,1,1,5,1 +?#.?#?#?##??.???? 2,8,1,1 +????#.??#???#?#?# 1,3,2,5 +?.??.??##????##?? 1,10 +#.??#???????????.??? 1,3,4,2,1 +???????.???.?#???#? 1,2,1,3,7 +??.##??.????#??#???? 3,10 +.?#??#?#?#???.????. 2,7,2,1 +??#?#?.??#?##?.?# 1,1,1,6,2 +??#?????#??#???#. 3,11 +?#?#??#?????#???## 1,1,4,3,3 +?###?#????##??#??? 13,2 +?###?.??##??##.? 3,8 +?????????????# 7,2 +?????#?###????? 4,6 +?..???????? 1,1 +#?????..??#.?. 2,1,2,1 +???.##??#? 2,3,1 +#??#?##?#??#??#.?.? 2,6,1,2,1,1 +??????#??###?? 4,4 +????#?.????? 5,1 +?#????#????#????? 3,5,6 +????#.???? 4,4 +??????..?##??.?. 3,2 +?##???.#?#?.#.?? 3,1,1,1,1 +?#?###?#...? 2,5 +..#??????? 4,1 +?.?????##?#?????#??? 1,10,6 +#.???#?.##? 1,4,3 +????.?##?.????##?. 2,3,6 +???.#?#??##?##????.. 1,10,2 +.?????#????????????? 9,7 +?#.??#?.?? 1,3,1 +?.?..??????.?.???? 6,4 +??#.?#???.#?.?# 1,1,5,1,2 +?..#????????????#?? 1,2,11 +???#?????????#??#?? 5,10 +????????#?.???#?#? 2,4,1,1,1 +?#?????????#?.? 4,2,3,1 +.?#.??????#?? 2,2,2 +??.??#??#?????#.?. 7,2 +.??????????#.??.???# 6,4,1,1,1 +?#?#???#?#??.??# 9,1,1,1 +??#????.?.?#??.??#?? 3,2,3,4 +???##.??????# 4,1,1,2 +????#??#?#???.#?.??? 1,1,5,1,1,1 +???#?#??#?.?????? 9,1,1 +??????#???? 4,1,3 +.?#?????#??.?.??#?# 3,1,3,4 +#?.??#?..? 1,3 +?.?##??????.?.????. 4,3,2 +.??.????.???# 1,2,1,1 +???.??#???##?????? 2,7,2 +????????..????????? 4,3,4,1,1 +?#??#?#.?.?.?. 1,3,1,1 +??#?#???????.??? 1,3,5,2 +???.?.??????#??? 3,1,1,5,1 +??????????#.# 1,1,6,1 +?.????????????? 9,1 +#?#???.#?.????#???? 6,1,1,3,1 +?#??#?????? 5,1,1 +??#?#??????????#? 1,3,1,3,2 +?.?#?#???#?.? 1,5,2,1 +?..?..#??? 1,1,3 +???#.?????.?.?? 4,2,1,1 +?.??????.?? 2,1,1 +??.??#..#?# 1,1,3 +????#??.####???.?.?. 3,6,1 +?#????##?#? 3,1,4 +?.??##?????????? 6,4 +??##??..#?.?#??.? 3,1,2,4 +??#?.????? 2,1 +???????.#? 3,2,1 +??#??.????#?..#??? 2,1,1,2,1,1 +..??????.?????..? 6,1,1,1 +.???##?#?#???##??.?? 8,3 +#??????#??##?##?#??? 2,2,8,4 +#.?#??#??????.?.#??. 1,7,1,1,1 +#??#?#??????.??#? 4,1,1,1,4 +??.?#???#????.. 1,6,1 +?.??.????#????? 1,1,1,1,6 +##?????.?.#??##????? 4,1,1,5,1 +???###???????? 4,1,1 +.?#??????#??#?#?. 3,1,3,4 +#.??#??#????####??.? 1,1,1,1,8 +?#???.??#?????#. 1,1,5,1,1 +?#???????#???.? 2,2,2,1 +????????#?##?. 3,5 +?.?.?.#??..# 1,1,3,1 +###..??????..??? 3,1,2 +??????.###??.?? 2,2,4,2 +.???????#?#???#? 3,10 +.????#?#.#..?? 7,1 +?.???????#??#. 1,1,3,1 +?.?##?.?????????#?? 3,12 +.#??#.?????? 1,2,3,2 +?????##??##???# 2,4,2,1,1 +###??#??.???.?#????. 8,2,5 +?????##?#??.? 1,3,3,1 +?##??##?.#??? 8,1,1 +#?#.??#??????#??.?? 3,6,2,1 +?#???#?#??????????? 11,2,1 +...????????????.? 3,2,2 +.????#??.???.?.# 2,2,1,1,1 +.??#???#????..?##?? 2,6,4 +???##???.???? 5,1,1 +#?##?#.?.#?.?. 6,1,2,1 +.????#.#.?#?#?.#? 5,1,3,1 +??#???.??#??#??.??? 2,1,7,1,1 +##?.#.??????#? 3,1,3,2 +??#?????#???.? 3,1,2,1 +#.???..#?.???.? 1,2,2,1,1 +.??????#???.. 4,3 +????.???????#??#???? 1,1,1,1,5,1 +#.#???#????????? 1,1,1,8 +????#.?.??? 4,1 +???????.?..????#?? 1,5 +??????.????#?###? 3,8 +???#.?.??##???#???? 1,10 +???#????#???????.? 1,12 +?????#?#?##. 1,1,6 +??#?#?.??.??#??#?#? 4,1,7 +??#.#??????#????# 1,2,4,1,1 +?#??#???????.#????. 4,4,2 +?#?.???#.? 1,2,1 +?#???#??..?.? 2,2 +????.??#???#???????? 2,4,1,2,1 +??..?##???#?.#?? 7,1 +?.??.?.##?#??#?#??# 1,1,1,7,2,1 +?#?#.??????. 2,1,2,1 +.?#????.#????..?? 3,2,3,1,1 +.????..#??##? 1,1,1,2 +???.??#??????????? 3,3,5 +?#?#.?..#??#????? 3,1,5,2 +.?????#???????#? 7,3,1 +#??.???#???????.?? 1,1,4,4,1 +??.??..???. 2,1,1 +.#???.##.?#?? 4,2,4 +??..#??#??? 1,4 +??????#???? 1,1,5 +??#..???.? 1,1,1 +?##?#???..#..#??#?# 2,1,2,1,1,4 +??#.?.####?#? 3,4,1 +.?#.?#?.#.###??# 1,1,1,3,2 +.????#??#.#?? 2,1,1,1 +#?#???#?.#?????#? 1,6,1,2,1 +????..??????... 4,1,2 +???#????.???# 4,2 +#####????? 7,1 +##.?.?.?#?????? 2,4 +????.???.#?#???#?? 1,1,1,7,1 +.?#??????.???#??? 4,1,2,1,1 +?#??##?#?.##??????#? 1,4,5,1 +.????.?#????? 3,4,1 +?#.#??#????.###..? 1,6,1,3,1 +???.##???. 1,4 +..?#????.. 1,1 +..??.?.???????? 1,1 +???.???#?#?.?#?...#? 6,2,1 +?????##?#?????#? 5,1,4 +?#??????????# 1,7 +???.???????????????? 6,4 +?#???#??.???.?. 3,1,1,1,1 +??????..?#.#?# 2,2,2,3 +..??..?#????. 2,3,2 +?.?#????...???? 1,2,1,1,3 +???.#??#.?.#?#?. 2,1,4 +?????.#???????? 3,9 +#?###?#????????# 8,1,4 +???????.?# 1,1,1 +???##?.?#??#????? 5,6,1 +?.?#??.???.#? 1,1,3,1 +??.?..??????? 1,6 +??#??????#??? 2,9 +.????.###??#. 1,1,6 +??.??##?##???. 2,7,1 +???##????#??#????.? 16,1 +???#?###??#???? 1,1,4,2,1 +.???.##?.??. 3,3,1 +??????.??? 1,1,2 +?????##??? 1,5,1 +?##?#????.?#?#.. 2,3,4 +.???..#???.?? 2,1,1,1 +???????#?? 3,4 +?.?#??????? 3,1 +????.??#.#????. 1,2,1,1 +??##?#????# 6,1,1 +.#?#??..?.?? 5,1 +???##?.?###? 5,3 +????..#.???????..?? 1,1,1,5,1 +??.??????????#. 1,9,1 +##?##??.?#??? 7,1 +.?.#???#??#?????.# 1,1,10,1 +.????..???. 4,3 +##??.?#???.? 2,4 +..#?##???? 1,4 +?.?#???#?#.? 2,1,3,1 +?????????.????? 8,2,1 +?#??#?.?#?????????? 1,1,2,7 +#?????#?#??.#??? 3,1,1,1,1 +??#???#??##?.?? 8,2,1 +?.?#??????#??.?## 9,3 +.?#????.??.? 1,1,1 +?????.?.?#. 5,2 +.???.?????# 1,5 +????..????. 1,1 +????#?.?.#??.??#? 2,1,1,1,3 +???.???#???#???#??? 1,4,3,4 +.??##????. 3,2 +?#?#??????.?? 3,1,1,1 +?.?##??.??#?##.? 4,6 +???????.#?#?##???? 4,1,1,6,1 +?..?????.#.?#?? 1,1,1,1,3 +#??#???.?#????? 6,2,1,2 +.????#..??# 1,2,3 +.????????? 5,1 +??????.????# 1,2,1,3 +??.###??????.??#? 1,5,1,1,2 +.????????#?? 1,3,1 +#???#??####?##????? 1,1,8,2 +.??#??????##???#? 3,4,2 +??...#???.##??#????? 2,4,2,4,1 +#?.#??#???. 1,2,1 +#.??##??????##? 1,5,2,3 +????.#.?#.#? 2,1,1,1 +???????????#??????#. 8,8 +#???????#??#.???. 4,1,4,3 +.?#?#?.##??????.? 4,5 +.???#.??...#? 1,1,2,2 +?.??#.?.#? 3,1 +???.?????#???..???? 1,1,7,3 +..?.?#???. 1,2 +??.##?#.?. 1,4 +??.#?#?#??# 5,1 +#????#???#?#?.#??? 2,3,1,2,1,1 +?????#???#??????.? 1,1,9,1,1 +.????????????#? 1,1,1,3 +???????#??#???#?#?? 2,1,4,6 +??.???.????#?? 2,1,1,3 +.??##????#??. 4,1,1 +????#??.?#???. 1,1,2,4 +???##???.?? 5,1 +?????#.??#???##??? 3,1,9 +??.#.???.? 1,1,2 +????.????#??? 1,1,1,3 +?#??#??????.??##..#? 2,1,1,1,3,2 +???.???????#..???#.. 8,1 +??#??????????#???..? 1,1,2,1,5,1 +?.#?##???#?#? 1,4,3,1 +?#.?????##????? 1,7,1 +?.#????#?? 1,1,2 +####?..??###?##????? 4,12 +?.???##????????? 5,5 +??#???##??.??.?###?? 9,1,5 +.??#???#???#????# 4,5,4 +???????#?#??????#.?? 3,10,1 +?????..#?#???. 2,1,4 +?.????.???#?#?? 2,4 +?.##??.#?#? 3,3 +#.?#??????. 1,6 +????##??#.?????#??.? 1,3,1,1,6,1 +??.????#??.??#??. 1,1,4,2,1 +#??.#?##?####?.?? 1,1,10,1 +.??##??#??. 5,1 +???.??.?#????.??? 2,1,5,1 +???.???.?#???###.?? 1,8 +???#??#?.??.#???.. 5,4 +..?#?????? 5,1 +???#?#.????. 4,2,1 +??#?????#?#??..? 3,5 +???#?#??..??? 1,2,3 +?????.???..? 4,3 +?#????????#?.???.#?? 12,1,1,2 +??#???..#??????? 1,1,2,1,5 +#????????.?.?????.#? 1,4,2,1,1,1 +??###?#????..?? 11,1 +?#????#..??.? 2,2,2,1 +???##??#?#??.??.#.# 10,2,1,1 +#??????????.???? 1,5,1,3 +??.???#??????.?? 1,3,3,1 +???.#?..?????###? 1,1,8 +?##????##???#??..#? 9,2,1 +.???#?##???#????#? 12,2 +..#????.?? 2,2,1 +.?#??..#?#??#????#?. 4,1,7,2 +?.?????##?? 2,3 +??????..???????##?## 2,1,1,1,6 +#?##?..?.?#?.??????? 5,2 +?#???#???#? 6,1 +??.#?.?.?#?? 1,1,2,1 +.?#??.??.????.?#?.? 3,1,1,2,2,1 +??#???.?####?##? 1,1,1,9 +??????.?????#.? 2,6 +?.#??#????# 1,1,6 +??#???????????? 1,4 +?#????#..??##??? 6,5 +?#?.?##????? 2,4,2 +#?#?????..????#??? 3,2,6 +?????#?#?.???#??# 1,6,4,1 +??##??.???.. 5,2 +##?#??###?#? 2,6,1 +?#?.??#?##??#???.# 2,1,10,1 +?#.???.###? 1,3 +.?#??.#??????? 4,1,4 +#?#??##?.??#?????? 8,1,2,3 +??#.??????? 1,4,2 +.???#?#??????##?? 1,3,7 +????#?????#?#???..?? 1,12,1 +??##?#????#?#?#?#??# 7,10 +?.????#????#??#?.?#? 1,3,6,3 +..#?.?????. 1,1,1 +#?????#??#?#?# 3,1,2,3 +.##?#??????.?..??#.. 10,3 +??.?##?.?.?.?????#? 1,4,1,2,3 +?.????##?###??????? 1,12 +??#..????.??? 1,1,2 +#??#???#????#??.?#? 2,11,2 +??#?.?##??????##?? 4,5,1,4 +?#??#??#???.??.??.? 1,2,3,1,1,1 +???..#?#???? 1,3 +??.#?##?#?. 1,6 +??##??????????? 4,1,4 +????..?#?. 1,2 +?????.?.#.??##?# 1,1,1,1,4 +.?#?##?##???????? 11,1 +?#.?.?????. 1,2 +##?#?????.? 5,2,1 +?.??????..#?.??#???? 1,4,1,1,1,3 +##??#??#???.?.? 8,1,1 +?????#?????.???#.? 6,3 +?#??.????? 2,2 +???.#?#?#???? 2,1,5,1 +??.?.#?#??? 1,3 +????#?..??????.?. 4,6 +?#?..??????.? 2,1,1,1 +??..###?????.??? 2,6,1,1 +??????????###????.?? 8,4,1,1 +??#?.?.#.????. 4,1,1,3 +????##???#?????##?? 10,3 +.?..#??#?.#????? 1,4,1,2,1 +?#..?#?????#? 2,4,2 +?????.#?#.?##. 2,1,1,3 +???.?#?#.??? 1,1,1,1 +?.#??..?.????. 1,1 +??#?.???#?##?????? 2,9,1 +?#?.???..??#??.???? 3,3,1,3,2 +?##?#?#?????.#??#. 3,6,1,1,1 +????##??.#? 5,1 +.?????.???##??#?.??. 1,1,1,1,6,1 +.???#????.....??#??? 4,2,4 +?.??#???????.??? 2,1 +?.#??#?..#???#?.?? 1,1,2,5,2 +.???##????????##?#? 1,15 +.#?.??.??. 1,1,1 +?????#???.?????#??# 2,4,1,7 +???#??#??#.???#.??. 4,4,4,1 +??.??.#????.??. 1,1,1,2,1 +#?.??.?.???.??? 2,1,1,3,2 +#?.???#??.??????? 1,6,2,1,1 +.??#?.??????## 2,8 +???###...????. 5,3 +??#.??#?####??#?#. 1,13 +.????#???#????? 1,2,2,3 +?????##??.????.?.? 3,5,1,1,1,1 +?..??.??.??.? 1,1,1,1 +.?#??????. 1,2,1 +?#??????????????? 2,3,4,1 +##???.?.#.? 5,1 +??#.????.???????? 2,1,1,7 +?????#.??#??#????# 4,1,6,1,1 +????#?.??? 1,1,1 +??#??.??#?. 3,4 +.?.?.#?.?#?#?#?? 1,1,8 +????.????#??????? 1,10 +??#??????#??#?. 4,8 +????#?????#??#?#? 3,8 +???.???#?????? 1,1,6 +.??.??.???. 1,3 +#??#?.#???##??? 1,2,7,1 +?#?.##?????### 3,2,6 +.#?.?##?.#?? 1,4,1,1 +.???#?##?..?.?#?. 5,1 +?????.???#??#?? 3,6 +??#???##???#????# 3,9,2 +?????#???#?.??????? 1,1,3,2,3,3 +???#?????#?.?#? 3,1,2,3 +.???.???### 3,5 +???...????#?# 1,1,5,1 +????#?#??.??####?? 5,7 +??..??#?????#?##? 1,1,1,1,4 +??????#??? 3,1 +?###??????? 6,2 +##?????##?????#??. 3,4,1,3,1 +???????#??.????####? 1,1,1,1,1,6 +.###.?????? 3,1 +??.#.?????###?##? 1,1,12 +?#??..?????#?#??#? 1,11 +?..??????#. 1,1,2 +??.###???.?.##?.#?#? 1,3,1,1,2,4 +.??#???#??? 3,2 +.?????#?.??? 1,1,1,3 +????.???????###????? 2,1,10,3 +??.??#?###? 1,7 +??#?????.???. 1,5,2 +#?.??..???.??? 2,1,1,3 +..?.????#??#? 1,1,5 +#??#????.#???.# 5,2,1,1,1 +.#.#???#??? 1,1,5 +..?#???#???.?#???#? 9,6 +?#?????.?.?#????##.? 1,2,1,1,2,4 +???#?.?#?#.?#???#..? 4,4,5,1 \ No newline at end of file diff --git a/2023/12-test-input.txt b/2023/12-test-input.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/2023/12-test-input.txt @@ -0,0 +1,6 @@ +???.### 1,1,3 +.??..??...?##. 1,1,3 +?#?#?#?#?#?#?#? 1,3,1,6 +????.#...#... 4,1,1 +????.######..#####. 1,6,5 +?###???????? 3,2,1 \ No newline at end of file diff --git a/2023/12.py b/2023/12.py new file mode 100644 index 0000000..6df4562 --- /dev/null +++ b/2023/12.py @@ -0,0 +1,52 @@ +import numpy as np +import itertools +from itertools import groupby +import timeit + +filename = "12-input.txt" + +def main(): + with open(filename, "r") as file: + combinations = [] + for line in file: + combinations.append(get_combinations(line)) + + print(sum(combinations)) + +def get_combinations(line: str): + start_time = timeit.default_timer() + #print(f"Finding combinations for {line}") + split = line.split(" ") + springs = np.array(list(split[0])) + + config = np.array(split[1].strip().split(",")).astype(int) + question_marks_indices = np.nonzero(springs == '?')[0] + + all_combinations = [] + combinations = itertools.product(['#', '.'], repeat=len(question_marks_indices)) + for combination in combinations: + test_array = springs.copy() + for i, index in enumerate(question_marks_indices): + test_array[index] = combination[i] + if validate_combination(test_array, config): + all_combinations.append(test_array) + + end_time = timeit.default_timer() + + execution_time = end_time - start_time + print(f"combinations for {line} done in {execution_time} seconds. {len(all_combinations)} combinations found.") + return len(all_combinations) + +def validate_combination(springs: [], config: []): + hash_indices = np.nonzero(springs == '#')[0] + if len(hash_indices) != config.sum(): + return False + groups = [list(group) for key, group in groupby(springs) if key == '#'] + for i, group in enumerate(groups): + if len(group) != config[i]: + return False + return True + + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/13-input.txt b/2023/13-input.txt new file mode 100644 index 0000000..33c4e8f --- /dev/null +++ b/2023/13-input.txt @@ -0,0 +1,1377 @@ +.####..#.#.#.##.. +........#..##.... +..##..#.....#..## +......##.##.##### +######.#.####.... +..##....#..##.#.. +.#..#..#####.#... +..##...#..#...#.# +#######.#....#### + +#.###..#### +..#####.... +#.##...#### +##..#.##..# +##.#.##.##. +##.#.##.##. +##..#.##..# +#.##...#### +..###.#.... +#.###..#### +.##....#..# + +.##...#...##### +...######..#.#. +..#.#..#.####.. +#..#...##.##..# +#..#...##.##..# +..#.#..#.####.. +#..######..#.#. +.##...#...##### +#..#..#.#...#.# +####.#####..#.. +....#.##..##... +#..######..#.## +##.#...#..##.#. +##.#...#..##.#. +#..######..#.## +....#.##..##... +####.#####..#.. + +#####..#####.## +.............## +#..######..##.. +.##.#..#.##.#.# +....####....##. +#..##..##..###. +#.########.#.#. +.##..##..##...# +#..##..##..##.. +####....####..# +....####....#.. + +...#....##... +.#.##....#... +#..##.####.#. +#.#####.##.#. +##...#.##.#.# +##...#.##.#.# +#.#####.##.#. +#..##.####.#. +.#.##....#... +...#....##... +...#....##... +.#.##....#... +#..##.####.#. +#.###.#.##.#. +##...#.##.#.# + +####.##.#..#.#... +....##.####.#.#.. +....##.####.#.#.. +####.##.#..#.#... +..#####...####.## +#####..##.###...# +.##...##.....###. +.##...##.....###. +#####..##.###...# +..#####...####.## +#.##.##.#..#.#... + +#.##########. +##.#..##..#.# +..#.##..##.#. +#...#....#... +##.#......#.# +#.#.#....#.#. +###...##...## +###...##...## +#.#.#....#.#. +##.#......#.# +....#....#... + +....##....##..... +.####.####.####.. +###....##....###. +###....##....###. +.####.####.####.. +....##....##..... +..##..#..#..##..# +.###############. +.##.#..##..#.##.. + +####.#..#.####..# +####..##..####### +#.#.#.##.#.#.#### +##.#..##..#.##..# +.#####...####.... +.###.#..#.###.... +.##..#..#..##.... +..#.######.#..##. +#..#......#..#..# +######..######..# +#.##..##..##.#### +..##.####.##..##. +...##.##.##...##. +..#.#....#.#..##. +.##..#..#..##.##. +#####....######## +##..##..##..##### + +..###.#..#.## +#####.####.## +...##.#..#.## +...##.####.## +###.#......#. +###..######.. +###.......... +..##..##.#..# +...###.##.### + +##...####...### +##...####...### +#....#..#....## +##..........### +#.##########.#. +..#..#..#.##... +.#...####...#.# +#..#.####.#..#. +.##..####..##.# +###..####..###. +#..##.##.##..#. +#.#........#.#. +#.....##.....#. + +#..#####.#. +.#.#...#### +.##.#####.# +#...###.#.# +#..####.#.# +.##.#####.# +.#.#...#### +#..#####.#. +####..#..## +####....##. +####....##. +####..#..## +#..#####.#. +.#.#...#### +.##.#####.# + +.######.####... +..#..#....##... +..#..#....##... +.######.####... +###..######.##. +.........#..### +..#####.#.##### +#.#..#.##.....# +.##..##....#### +...##...##..#.. +.#....#.#.#..## +...##....#####. +.#.##.#.###.### + +###.#...#.#.##.#. +#.#...####...#..# +#.#...####...#..# +###.#...#.#.##.#. +..####..#####.... +.....###...#..### +.....###...#..### +..####..#####.... +###.#...#.#.##.## + +##.#..##.##.# +.#........... +.#####...##.. +##.#...#.##.# +...#.###.##.# +.##..#..#..#. +#.##..#...... +#..###..#..#. +#.#.##....... +...#.###.##.# +.#.###.#....# +##..#....##.. +#..########## +##.########## +##..#....##.. +.#.###.#....# +...#.###.##.# + +##.######.##. +...#....#..## +####....##### +...#.##.#.... +###..##..###. +#..######..## +..#.#..#.#..# +#.##.##.##.## +...##..##.... +##...##...### +##...##...### +...##..##.... +#.##.##.##.## +..#.#..#.#..# +#..######..## +###..##..###. +...#.##.#.... + +####..#.##### +#..#...##.##. +.##.##.###### +#..#...#..... +#..#.##..#### +###.#..#..... +#..###..#.... +#..#......##. +####..##..##. + +###...... +..#.##..# +...###### +...###... +###.##### +#..##.... +#..##.... +###.##### +...###... + +..##..######### +####.....#.#.#. +###.#..####.### +.#..##..####.#. +#.#.##.##...... +....####..#..## +###.##..##..... +.#..##....###.# +.#..##....###.# +###.##..##..... +....####..#..## +#.#.##.##...... +.#..##..####.#. +###.#..####.### +####....##.#.#. +..##..######### +..##..######### + +......#.##.#. +#....#......# +##..###....## +.#..#..#..#.. +#....######## +.#..#...##... +.#..#.##..##. +##..######### +..##........# +######......# +.####...##... +.#..#...##... +#....#......# +..##..#....#. +##..###....## + +.###.###. +#.#..#### +###.##.#. +###.##.## +#.#..#### +.###.###. +.###.###. +#.#..#### +###.##.## +###.##.#. +#.#..#### +.###.###. +#...#.#.# + +.#....#.. +.##...#.. +.###.##.. +#.##.#... +.####..## +#.#.#.### +..#...#.. +##...#... +##..####. +##..####. +##...#... +..#...#.. +#.#.#.### +.####..## +#.##.#... +.###.##.. +.##...#.. + +#..##....##.. +.##.#.##....# +#..#.#..#..#. +#####....##.. +....##.##...# +#..#...###### +#..####.#..#. +.##.###..##.. +....###...... +.##..#..####. +#..###.#.##.# +.......###### +.....####..## + +####.#..##.## +.##.########. +.##.#.#..##.# +....#.#.#.### +.##..#.##.### +#..##..###.## +#####.###.... +######.#.#..# +.##....###... +.........##.# +#####.##.#... +#..###.##.##. +....###.#..## +######.#..#.# +#..#.#.#..### +#..#.#.#..#.# +######.#..#.# + +.#.#.#### +.###.#..# +#..#..... +..#...##. +..#.##..# +.#.#..... +...#.#### +###...... +...###..# +...###..# +.##...... + +#....####.. +.##.##..### +.....####.. +.#..#...#.# +..#...#..#. +####.#.##.. +####.#.##.. +..#...#..#. +.#..#...#.# +.....####.. +.##.##..### +#....####.. +.....####.. + +.#..#..#. +#.#.####. +.#.###### +#..###### +####.##.# +####.##.# +....#..#. +..##....# +###...... +###...... +..##....# +....#..#. +.###.##.# + +.#.##...#..## +#.#.#.#...#.# +.##.....##.#. +.##..##..#### +...#.#####.## +#.#####..#... +#.#####..#... +.#.#.#####.## +.##..##..#### +.##.....##.#. +#.#.#.#...#.# +.#.##...#..## +.#.##...#..## + +####...##.#..##.. +#######........## +..#..##.#....##.# +##....##..###.#.# +.####..###...###. +..#.###.#..#.#..# +..#.###.#..#.#..# +.####..###...###. +##....##..###.#.# +..#..##.#....##.# +#######........## +####...##.#..##.. +#..#...#.##.##.#. +.###.#..#.###.#.# +.###.##.#.###.#.# +#..#...#.##.##.#. +####...##.#..##.. + +#...####.#..... +#..#.#.#.....#. +####.#.#....##. +#..#...#.#.#### +.##......#.##.. +.##...#####.... +.##.#..#....... +.##.#..#....... +.##...#####.... +.##......#.##.. +#..#...#.#.#### + +.###.#..... +...##..#.#. +##....##... +..#..#.#... +##.##.##..# +##.##.##..# +..#..#.#... +##....##... +...##..#.#. +.###.#..... +..#.#.###.# +##.##..#.## +##.##..#.#. + +.#....#.#.#.#.... +#.####.#...####.. +#..##..##.##..### +.#.##.#..#####.## +#..##..##.#....## +#.#..#.#.#.#.#... +.######....#.#... +#.####.#....#.### +...##...###..##.. +..#..#..#.##..#.. +#..##..#.#.##.#.. +.#....#.#..##..## +##..#.###.####.## + +.##..##.### +.######.#.. +###..###... +#.#..#.###. +##....##... +##....###.. +#..##..#.## +#########.# +.#.##.#..#. +..#..#...## +.#....#.##. +.#....#.##. +..#..#....# +.#.##.#..#. +#########.# +#..##..#.## +##....###.. + +#...#.#..#. +####.#..#.# +##.#..####. +#.###.#..#. +......####. +.###.###### +#.#.##.##.# +...###....# +.....#....# +##..#..##.. +##.#.###### +##.#.###### +##..#..##.. +.....#....# +...###....# +#.#.##.##.# +.###.###### + +#.#####...#...... +#.#####...#...... +.##...###..#.#... +.#.####.####...#. +....##..#.##...## +###...#..#.##...# +....##.#.##.#.##. +##.#.#....#####.# +..##.#.#..###.#.# +##.###.####.#...# +#..###.####.#...# +..##.#.#..###.#.# +##.#.#....#####.# +....##.#.##.#.##. +###...#..#.##...# + +##..### +.####.. +#....## +..##... +#.##... +##..### +#.##.## + +.#.#..#....##...# +.###..#....##...# +.#####.##..#.#..# +#.##.##.#........ +#.##.##.#........ +.#####.##..#.#..# +.###..#....##...# +.#.#..#....##...# +###..#..###.##.#. +##.....###.#..### +####...####..#### + +##..##.##.# +#...###..## +.#...###### +#..##...... +.########## +###........ +###.#...... +..#.#...... +#.#.####### +.#..###..## +#.#.#...... +.######..## +...#.###### +..#.#..##.. +..#####..## +#.######### +##.######## + +..##..#.. +#.#..##.. +#..#####. +.####...# +.####...# +#..####.. +#.#..##.. +..##..#.. +##..#.... +..#....## +..#....## +##..#.... +..##..#.. + +.#..#.... +#.##.###. +#....#### +#....##.# +#.##.#..# +##..##.#. +#....#.#. +#....#..# +#....##.# +#....#.#. +##..##.#. +#.##.#..# +#....##.# +#....#### +#.##.###. +.#..#.... +##..###.. + +...####.##..# +#.....####..# +...#...#.#..# +###..#.###..# +.#.#.##.#.##. +...#.##.#.##. +###..#.###..# +...#...#.#..# +#.....####..# +...####.##..# +.....###.#### + +#.##... +.#.#... +##.#.## +.#.#### +.#.##.. +.##.#.. +.###.## +#.#..## +..###.. +.####.. +.###... + +.##..##.########. +.#.##.#...####... +.######.#.#..#.#. +.##..##.##....##. +.######.#.####.#. +########..#..#..# +..#..#..#.#..#.#. +..#..#..#.#..#.#. +.#......#.####.#. + +#...###..##..## +.###..#####..## +.##.#.##.#.##.# +..#..###.##..## +#...#....##..## +##.#####..####. +#####...#.#..#. +###..#..###..## +###.###.####### +#...##...#....# +##.#.#.#.#.##.# +##.#.#.#.#.##.# +#...###..#....# + +.#.##.#..##.#.. +##..#.##.##..## +.#.#.#.....#... +#...###.####.## +#.#..#.##.##... +###..#.##.##... +#...###.####.## +.#.#.#.....#... +##..#.##.##..## +.#.##.#..##.#.. +...#.#...#.##.. +..###.#..####.. +##..####.#..... +######.##...### +..#.....#.##.## + +......# +......# +..#..#. +####.#. +..#.##. +##.##.. +..#.### +...###. +##.###. +...###. +..#...# +##...#. +##...#. +####.## +##.#.## +###..#. +.#.##.# + +..####..#.#...#.. +.#....#.######..# +.#.##.#.....#.... +.#.##.#.....#.... +.#....#.######..# +..####..#.#...#.. +..####..####.#### +##....##..#.###.. +.......##......#. + +###..##.. +..#.#..#. +###.####. +##..####. +...#....# +##.#.#### +...###### +...###### +..#.#..#. +..####### +##....... +..#..##.. +..#...... +##...##.. +#####..## + +##........##... +...######...... +..##....##..##. +###..##..###### +##..#..#..##### +..###..###..### +.....##.....#.# +..#.####.#...#. +###..##..####.. +...######.....# +..#..##..#..#.. +#...####...#..# +##.#....#.##... +###......###.#. +..###..###..#.. +###.#..#.####.. +..#..##..#..#.# + +#...##.#. +#...#..#. +...#.#... +.######.. +.....#.#. +.#...#### +..#..#... +..#..#... +.#...#### +.....#.#. +.######.. +...#.#... +#...#..#. +#...##.#. +#.#..#.## +#.#.##..# +.#.###.## + +.######....#.#. +.........#...## +.#....#.#.#.... +..#..#....#.### +#.####.##..#..# +...##...#..#### +...##...#..#### +#.####.##..#..# +..#..#....#.### +.#....#.#.#.... +.........#..### + +....###.#.. +#...#...### +#...#...### +....###.#.. +.......#.#. +#.##.##.### +##..#..#... +#####..#.## +##..#...... +##...#.#.## +#.#..##.#.. + +..####...##.# +..####....### +##.##.##..### +...##...##.#. +.##..##.##### +##.##.#####.. +..####...#.#. +........#...# +###..###..#.# +...##....#... +##....##..### +..####..##.## +##.##.###.##. + +##...####...# +...#......##. +#####.##.#### +##.#.#..#.#.# +###..#..#..## +....#....#... +...##.##.##.. + +.##.##... +.#...#... +###.#.### +#......## +.##.##### +###.#..## +.#....#.. +##...#... +#.##.#.## +#.##.#### +##...#... + +####.#..# +...##.### +##.....#. +..#..###. +..#..###. +##.....#. +..###.### +####.#..# +....#.#.# +.##.#..#. +..#..##.. +#.##.#.#. +#.##.#.#. +..#..##.. +.##.#..#. + +...#.#. +###.#.. +......# +#####.. +##..### +##..... +##.#... +##.#... +##..... +##..### +#####.. +...#..# +###.#.. + +..#.#.# +####.## +######. +...#.#. +...#... +..##..# +...###. +###.##. +#####.. +#####.. +######. +...###. +..##..# +...#... +...#.#. +######. +####.## + +.#..##.#.#### +###.##....##. +..#####...... +####.#....... +.##..###..##. +....#...##### +####..#.##### +#.##.##.#.... +#######...... +##.#.....#### +#.##.###..##. +#.##.###..##. +##.#.....#### +#######...... +#.##.#..#.... + +....#.#...##..... +#..#..###...###.# +#..######..##.##. +#..#.#.#...#.#..# +.......#.##...... +.##.##...####.... +.....#....####..# + +..####... +...##.... +...##.... +..####... +#.#..#.## +.#.##.#.# +..####... +########. +##...#### +#..##..## +##....### +.######.. +...##.... + +#..##.#..#..#.# +#..##.#..#..#.# +#.###...##.###. +....#.####.#.## +.##..#...#.#..# +###.#####..#.## +#.###...###.#.# +#..#.##....#.## +#..#.##....#.## +#.###...###.#.# +###.#####..#.## +.##..#...#.#..# +....#.####.#.## +#.###...##.#.#. +#..##.#..#..#.# + +.##.#..#. +####....# +#####..## +.##.####. +.##.####. +..#.#..#. +####....# +#..#.##.# +....#..#. +####.##.# +.##.#..#. +####.##.# +.##...... + +....#..##..## +....#..##..## +..###.....##. +####.##..#.#. +#..#.#.#....# +.##.#.#..#.## +.#..##..#..## +#.#.....#.#.. +###.....#.#.. +.#..##..#..## +.##.#.#..#.## +#..#.#.#....# +####.##..#.#. +..###.....##. +....#..##..## + +##.#.######.# +....##.##.##. +#####.#..#.## +##.##..##..## +...#.##..##.# +..##..####..# +..#....##.... +##.###.##.#.# +####.#....#.# + +.###.....###.## +####.#.##..#.#. +###..#.##..#.#. +.###.....###.## +#.#######.#..#. +#..#...#.#.#... +#...#.#####..#. +#...#.#####..#. +#..#...#.#.#... +#.#######.#..#. +.###.....###.## +###..#.##..#.#. +####.#.##..#.#. +.###.....###.## +.#....###.#.#.. + +..##.#....# +.######.##. +.######.##. +..##.#....# +.#.##.#.... +###.##.#### +##..#..###. +...#..#.#.# +###...#.#.# +###...#.#.# +...#..#.#.# +##..#..###. +.##.##.#### +.#.##.#.... +..##.#....# + +#..#......###.. +#..#......###.. +#.####........# +#..##.....##..# +#..#.#######..# +.##..#...#...## +.....####..#... +#..##..##.#.#.. +.##.###.#..#.## + +###.###.. +###.###.. +..#.#.#.# +####..... +..#.....# +#....##.. +###.##.## +#####..#. +#####..#. +###.#..## +#....##.. + +.###.#.##.#.###.# +##..#..##..#..### +#..##.#..#.##..## +##..#.#..#.#..##. +...###....###...# +.#...##..##...#.. +..........#...... +#....######....#. +..####.##.####... +.###.#.##.#.###.# +######.##.####### +##....#..#....### +##.#.#....#.#.##. +##.#.#....#.#.##. +##....#..#....### +######.##.####### +.###.#.##.#.###.# + +.#.#..###..## +#.##.#####... +####.#..#.#.. +.##...#.##### +#..#..###.... +#..###....... +###..#.#.##.. +..###.##.#### +..#.#.##.#### +###..#.#.##.. +#..###....... +#..#..###.... +.##...#.##### +####.#..#.#.. +#.##.#####... +.#.#..###..## +##....####### + +#.###...#.##### +######.#.####.# +#....##...##.#. +#....##...##.#. +######.#.####.# +#.###...#.##### +####..#.#..#..# +.##.###.##.##.. +....########..# +##.##..###..#.# +##.##..###..#.# +....########..# +.##.###.##.##.# +####..#.#..#..# +#.###...#.##### + +....##... +#######.. +.......#. +....#.#.. +####..#.# +#####...# +####.#..# +.....#.## +.##.#.#.. +######.#. +.....#.## +.....###. +#####..#. +####.###. +######.## + +.#...#.####.. +.#...#.####.. +..########... +.###..#.#.#.. +#...#....#.## +.......#...#. +.#.######.#.# +###.#.#.####. +....###..##.# +...#.#.####.. +...#.#.####.. +....###..##.# +###.#.#.####. +.#.######.#.# +..#....#...#. +#...#....#.## +.###..#.#.#.. + +#.#..###### +#.#.####### +.##.##....# +#.......... +###.##.##.# +.########## +##.#...##.. + +....####..### +##.###.####.# +##..#........ +##.#.#......# +..#.#.#.##.#. +....#.#....#. +..##.###..### +###.##..##..# +...##...##.#. +..#.....##... +###.##......# + +.##..#.#..#.. +#.....####### +#.#####.##... +#######..#### +.####..####.. +.####...###.. +#######..#### +#.#####.##... +#.....####### + +.#.##....##.#.... +.#.##....##.#.... +####.####.#####.. +#.##########.#.#. +.#.##....##.#..#. +####......#####.# +#...######......# +#.#.######.#.#..# +#.##.####.##.#.## +..#........#..... +#.#...##...#.#.## + +####....# +##.#....# +.######## +#..###### +#.#...... +#.####### +##..####. + +###........##.##. +###...###.#..#... +#####.#.....##### +..#.##........#.# +..#.##........#.# +#####.#.....##### +###...###.#..##.. +###........##.##. +######.###...#... +##..##.##.###.#.# +#####.#.##..#.... +...#..#..#..#.##. +...##.####..###.. +##.#....##.#....# +##.#.##.#####.### + +#...#.##. +.###.#... +.#####... +#...#.##. +.......## +#.#...### +#.#...### + +..#.##.###.##.# +.###.#.......## +#..#.#...#..#.# +########..####. +########..####. +#..#.#...#..#.# +.###.#.......## +..#.##.###.##.# +#...#...##..... +#.#..#.###..... +#..##.#.##.#### +..#######.###.# +..###########.# + +.#..##. +##.##.. +##.##.. +.#..##. +##.###. +#.##### +#..##.# +####..# +..##..# +..##..# +####... + +##..##..##..# +....######... +######..##### +##.##.##.##.# +...########.. +###.######.## +###.######.## +#####....#### +..#........#. +###........## +##.########.# +..#.#....#.#. +##...####...# +######..##### +..#.##..##.## + +#..#### +....### +####.## +.##.### +####.#. +.##.#.# +.##.#.. +....#.# +....#.# +.##.#.. +.##.#.# +######. +.##.### + +...###### +.#..###.# +####.##.# +#.#.....# +#.#.....# +####.##.# +.#..###.# +...###### +####.#### +.#..##..# +##..#.##. +.....###. +.#..#.#.. +.#..#.#.. +.....##.. + +..#..#..#.#.....# +##.##.##.#...#.#. +##.##.##.#...#.#. +..#..#..#.#.....# +.#######.#..##.## +.........###..##. +.#....#..#.#..##. + +......#..#. +..##...#.#. +#######.### +#....#.#..# +######....# +......#..#. +..##....... +##..######. +#.#####..#. +#....#.#.## +..##...#.## +..##......# +..##......# + +...#.#..# +...###### +..#...... +..####### +...#..##. +...#.#### +..#.#.##. +..##..##. +..#...##. +##.##.#.. +##....##. +..#..#..# +###..#..# + +.##.#..###.#...## +#..#.##....#.#..# +.........##.#.### +.##.....###...### +.##.##.#...###.#. +.##.##.#...###.#. +.##.....###...### +.........##.#.### +#..#.##.#..#.#..# + +#.###.##.## +#..#......# +#.#.##..##. +.###.#..#.# +.###.#..#.# +#...##..##. +#..#......# +#.###.##.## +####......# + +...##.##.#.#.#. +...##.##.#.#.#. +.##...#..##.#.# +.###.#.##..#.#. +....###..#.#### +....###..#.#### +.###.#.##..#.#. +.##...#..##.#.# +#..##.##.#.#.#. + +#..##......## +#.#....##.... +##.##.####.## +.#...##..##.. +.#.####..#### +.##...#..#... +.####.####.## +.#.##..##..## +#..##..##..## +#.#..#.##.#.. +#..#.##..##.# +#.###.####.## +##.####..#### +#.#....##.... +..#.......... + +.#.##.#.#..##.# +#..##..##...... +##....###...... +.#....#.##..##. +#.#..#.#..#.##. +#......#.#.#..# +...##...#.#.... +...##...#.#.##. +#########.#.##. +##....###...... +#.####.#..#.##. + +##..........##..# +..####..####..##. +..####..####..... +..##......##..##. +#..#..##..#..#### +#.#........#.#### +#####.########### + +###########.. +##.##.##...#. +#.#..#.##.#.# +###..######.. +#..##..##.... +#..##..##.... +###..######.. +#.#..#.##.#.# +##.##.##...#. +###########.. +.#...##.#.#.# + +..#.#.##..##. +....##.#.#.#. +#####......#. +#...#.#####.. +##..##.....## +.#.##..###.#. +..###.##..#.# +..###.##..#.# +.#.##..###.#. +##...#.....## +#...#.#####.. +#####......#. +....##.#.#.#. +..#.#.##..##. +..#.#.##..##. + +..#.#.#..#... +..#.#.#..#... +....#...####. +..##.#.#.#..# +.#.#....#.... +#####..#.#.## +.####.##..... +..######.#... +..##.#.#..### +..##...#..### +..######.#... +.####.##..... +#####..#.#.## +.#.#....#.... +..##.#.#.#..# +....#...####. +..#.#.#..#... + +.##.#.#.#.. +.##.#.#.#.. +#.####.#.#. +#.##.....## +...#.##.#.. +.##.##.#..# +...##.##.#. +#.....#.#.# +#.....###.# +...##.##.#. +.##.##.#..# + +.###..### +.##....## +#.#....#. +.######## +##.#..#.# +##......# +##..###.# +#.#.##.#. +.#......# +..#....#. +####..### +...#..#.. +...#..#.. +####..### +..#....#. \ No newline at end of file diff --git a/2023/13-test-input.txt b/2023/13-test-input.txt new file mode 100644 index 0000000..af399a8 --- /dev/null +++ b/2023/13-test-input.txt @@ -0,0 +1,32 @@ +#.##..##. +..#.##.#. +##......# +##......# +..#.##.#. +..##..##. +#.#.##.#. + +#...##..# +#....#..# +..##..### +#####.##. +#####.##. +..##..### +#....#..# + +.#.##.#.# +.##..##.. +.#.##.#.. +#......## +#......## +.#.##.#.. +.##..##.# + +#..#....# +###..##.. +.##.##### +.##.##### +###..##.. +#..#....# +#..##...# + diff --git a/2023/13.py b/2023/13.py new file mode 100644 index 0000000..e46edfd --- /dev/null +++ b/2023/13.py @@ -0,0 +1,62 @@ +import numpy as np + + +filename = "13-input.txt" + +def main(): + with open(filename, "r") as file: + arr = [] + nr_reflections = 0 + pattern = 0 + for i, line in enumerate(file): + if line == "\n": + if arr: + pattern += 1 + print(f"Pattern {pattern}") + matrix = np.array(arr) + r = get_reflections(matrix) + print(f"Found {r} reflections") + if r <= 0: + print("Rotating 90 degrees") + r = get_reflections(np.rot90(matrix)) * 100 + print(f"Found {r} reflections") + nr_reflections += r + arr = [] + continue + char_array = [] + for char in line.strip(): + char_array.append(char) + arr.append(char_array) + + print(nr_reflections) + +def get_reflections(matrix: []): + f = {} + for i in range(0, matrix.shape[0] - 1): + for ii in range(i, matrix.shape[1] + 1, 2): + part_matrix = matrix[:, i:ii] + first, second = fold_matrix(part_matrix) + if first.size > 0 and second.size > 0 and np.all(first == second): + #if np.all(np.any(part_matrix == '#', axis=1)): + print(f"Found reflection at {i}, {ii}") + f[part_matrix.size] = ((ii - i) // 2) + i + + if not f: + return 0 + # Sort the dictionary in descending order of keys + sorted_f = dict(sorted(f.items(), key=lambda item: item[0], reverse=True)) + # Return the value of the first item in the sorted dictionary + return sorted_f.popitem()[1] + +def fold_matrix(matrix: []): + if matrix.shape[1] % 2 != 0: + return np.empty(0), np.empty(0) + half = matrix.shape[1] // 2 + first_half = matrix[:, :half] + second_half = np.flip(matrix[:, half:], axis=1) + # if len(matrix) % 2 != 0: + # second_half = np.vstack([second_half, np.zeros_like(first_half[0])]) + return first_half, second_half + +if __name__ == "__main__": + main() diff --git a/2023/14-input.txt b/2023/14-input.txt new file mode 100644 index 0000000..977a5e4 --- /dev/null +++ b/2023/14-input.txt @@ -0,0 +1,100 @@ +#....O#O.......O.......#O.......#...#O#.O...O...O..O#..#.O......OOO.OOO...#O.O.........OO.#..O....O. +##.#O..........OO.#.#..#...O..O.O##....O.....#....O.#....O....O.#..OOO..#..O.OO..##.#O#OO..##OO..#.. +#.O.#O.O.O.......#.....##.##......#.###..###........OO...#..OO.....O....O......OOO.OOO.......OO.O#.O +O#.....#......#..##O#O.#..#O#.O.O.#...O....O.#......#....#.....O.#........O....O...O..O#...O...#O... +O#..#.OO.O#..#O##.#.#..O...OO..#..O#...#.....O.#.OO#...O.OO.O.O.....#...#.O..##...O.#.O.....O.##..O# +..OOO...#O#...O...OO.#...#OO.....#O..#.#.#OO...O.O#.......#..O..O..##..O#.O.....#O..OO#......O.O.O.O +..O.......O.....##OO#OO.#..#...O.O...O...O...#OOOO.O.O..#..O....O....OO#O.O.OOOO...#OO#.OO.O.#...#.# +#..O.......O.O...O.....#.O...O.#.....##.#...#.#.O...O...#.O.....O....#........#.O.#.#O#......O#..O.O +..#.#OO..#..OO.#..O.O.OO....OOOO...OO#..O..O...OO.O..O.O...#..#.....#.......O...O.......##O#....#.O# +.O.O#..O..O.#OO..O...#.O..O##O..##OO.OO.O.OO.O#...O...O........#.O..#......O#O#.O........OO..O...... +.O#...........O..#...O.O......#O..###O....#O...OO...........#OO....O..OO..O..O.#O..O......#.O.O..#.. +O..O#....OO....#.##.O#....OO.......O.......O....##.O.O....O#...#.O.O###...#....#..#...#...#OO....O## +###.O..#O..#O.#.#......##...OO...#.....OO.#O#..#...#..##O..#...O#....#O#...O..O...O...O..O.O..O..#.O +OOO.#.#..O..O#.O....#...O.OO###.#........OO.#.O#.#.....O..O..O#...O.O.O#.#O......O.#OOO#.#O.#O.O..OO +...##O#..O.#O......OO.#..OO....OOOO#...O...O.#....#..O...........OOO#.O.OO..O..O...O.#..O..OO##.O#.. +.#.....#..#.....#..#OOO.O#O..O#O#..O.....OO..O##.O.OOO...#O....#O...O#...#O..O#O##....#.....O.O..O.# +OO............O....O##..OO.#..O.O.....#O...#.##O.#.O.OO#....#...O..O.#.##...........##....O.OO..O... +.##O#OO......O#...OO#...##O.O.......O....OOO..O..#.#...OOO.#..#.#..O..O#..O.....#.#.OO...O.....O##.O +O..#OOO#.O...O.......O#....O.O...O......O.......OO....##......OO#.....##...O#.............O#.....O#. +..O..##OO..O...#..OO..#...#.O.O..#..O...O.###..O.......#.O....O.##....OO.#..O.......#.O.O...O.O.#### +.....O..OOO##..#.........O......O..O.#O##O#..O#O......##..O.O..#.......#.O##.#..#.#....O.OO.O.#O.... +##....O..#.....#O.O...O#O#O.#.....O#.O.#..#O..O...O.#.#.....O.......#O...............#O......OO#..#. +..#O....#.......O..#O..#.OO..O...##.O.....O.#....#O..O.#O.O#O...O...O........#..OOO#..#....OO.##..O. +.#O#OO....OO.O...O..#..#O.O..#...#..#O.O....O#..OO.....O.#....#O..#....O.....#O.#......OO#O......... +.O..#.O#..O#.O..#.#.......#O......O.....O.#O...#O.#.#..OO.O..#..O............#OO#..#..O..#O..O.O.#.. +..#..O.......#O##O.......O.O#O....OOO..OOO..O.#..OO..#O..O#......#.###O.O.#O.#.....#..O.##.OO.#..... +.O.#...O...O...O#..O.##O...#.OO......OOO.OO..#...#...OO#..O.#...OO#....###..O.#..#.....#....O.O..... +....O.OO..O#........#.#.#O..#.O....O...###.....O.O.#O#....O...O...##.#O#..O.#......OO.#####..#...#O. +O...#OO..##O##.......O#.O#...OOO.....O.O..#..OO......O#.##....#......O##......#OO#.#.........OOOO..# +O.O..##..O..#.#O.....#.OO.O...OO..#...O...###.....O..#....#.....#..O.O..#O.O#OO....#..OO.OO#....OO.. +.OOO#..#.O.........O..O...O........OO#....#..#..##....O.....#......O....O#.O.O.OO..##...O.#....#.... +....O...##O...#...OO.#O....O..O.O.O....#...O#O#..##.O.......O#.#..OO.#...#....O.....O..O#O#..#.O.... +..#....O.O....#..O.OO.......O#..OO......O.O...OO.......O..#..O....OO#..O.O......#.......#...#....#.O +.....O#.........#...O.O..O.O#..O....OO..O.....O....O..#O..O.O....#...#.OO..O.#.#..O.#O...#..O..#.... +#....#..##...O#OO....#..#.#O...............#.O........O..#.##............#.O#...#..##...O.....#..#.O +#.OO...O...O##...#O#..O....O.O..OO..O.OO.#OO.O..O...O#........#O.O....#.#.OO.....O....#..#O..O.#.### +......O....#...........#...#.........O.O....#..#...#..#.O#....#.O.#.O..#...O..#.......O.#..O#...#... +.#O.OO#.#...#.O.#..OO....O.......O#OO.O...........#.OO..#...##.O.#....O....##O....#..#...O#..O.O..O. +.#..##...#.O#O.O..O.......O..#...OO#......##.#O.#.O#O...##..#.O...#O.....O....O.....#......O..#..... +#O.O.O.OO.....O#..#....O.O#.O.OO.O#..O.#O.....O#.O#.O.O.........O...#...O.O..#O.#.#O#......#OO...##. +....#O....#.#.#O.O.OO.O.#..O.O...#...#...O....O........O#O.......#OO.#.........#....OO...O..O....... +.#.O#O..#.O.#...O#O.#......#.....O.O.O.#OOOO..##OOO.O.O....O..O#OO......OOO..O.##...O.O.#.....O.O#O. +##..........O...O.#...#O............#O.O......O..O#.....O......O..##.O.#O#.#......#..#....O...#..O.. +..#..#..O#..#..O#O.........O##......##O.O....##.OOO#..#........O#OO..#.#.O.OO.#.OO#O.#.O..#.......## +.OO....O..OO...O.#..O....#O......##O.OOO..#.#O...#......O..#.#.....O#...OO.#...#O###...O...#........ +O...O..OO..#.....OOO.#..O.##....#.O..O.OOO..#...O.#O..........#...O##....O.O..O...O...O.O.#O..O#.O#. +OO.O#O.##O.#.#..O.O.#.#..#...O..O..#...OO.OOO..O.O...OOO.#..O..O..OO.O##O#.#O...O...#...O.#O.#...... +..OO.#.##.............#..#O.......O.O.#O..O.OOOO....OO..O..........#O.#..O.##.........#.....O....... +.O..O.##O#...O.#.O.#.......##.#...#....O#..O..OO............###.....#.O.O......##.#..O...........O.# +.##...#OO.O.O#.....O..O.OO##O.#..O..O...OO..#..O.O..O.O.O....O..............O#.###OO.#.#.#O#....#... +..O#...#.....O.OOO.....#O..O.#.#.....##....##O#..............O...O..#O##.#..O.....O..#...O.#O...O..O +O..OO.O....##O##O#......O..#O.O........O##O...#...O..O.....O.##..#....OO#O..O..#.....##..OO....O..O. +OO#.#OO.....O###....#O..O...#...#O..#O.#.O#.O.....O#O.O..O....O....##.....#....O.....#O...##....O.#. +#.#..#O#..O.#.#OO..##...#...#..OO.#..O....O..#...OO....OO..#..#....#....#O#.O...OO...#O..........O.. +O..O.O.....O.....#.........O....O#......OO#..O..#.#.O##..#O.#..#...#..O.O......#.O..O..#.O......OO.. +.#.......#..#.O.....O.#O#.#.#.....#O####.......O.#O........###..##...##..O..##...O.OO..#..O.O......# +.#.O.#.........#O.O.O...O..OO...O..O.O..O....O#..........O...O.O#.OO#..OOO.O..#O.O.O#O..O#.#..#OO..O +#.#.#...#.#.....#..#........O..#..#..###..O..O...O.O#..##.OOO.O...O.#O...O.......OOO#....#.#...O.#.. +...#.O...O#O..O...#..O..O..O#.#...#..#....O.O..O...OO.#..O.OO.##O..OOOOO..#......#..OO##...OOO..O..O +.O...O..O.#O.....OO...#OO#..O#.....O..#.O.#.O#.O.##.O.OOO#OO..#..OO#OOO.O....O.....O#O.O..O..O##.O## +O.O.............O.......OOO#.....#.......#....#.O..##.#...#...OO......#..#..O.O...O.#.O.O..##O#..#.. +O...#...##.O.#.##.O#.#..............O.O.#......###...OO......O.#..#.#O.......O#.#.O..O.OO#..O.....O. +OO#.....#.....#.#.#O.O#..#.#...........#...##.....#....O#...#....O#..#O.#O......O#.#.#.O..#.O##...#. +..#....O..##..#.###.OO.#......O..................##O#O....#OO#......O..O...##.##O....OO..#..#OO##.## +...#........O.#...O.##.#..#O..O......#....O##.#..OO..O#..#O......O.....#..O..#.OO.O.#..OO....O..#.#O +.O#..O......O.#OOO.....#.O...OO#.#.........#...O...O.#...##O.........#O#.O.#.#O.#..#.##.....O...OO.. +.....OOOO..O.O####..#.O....#..OO......O.O.......OO#OO#O.OO..O##....#.........OO...#....O.O..O..#.... +#O...#..#...O.OO#..##O...O.#......O..O##.#...#....OO..#...#..O....#.O...O##.#O#....#...#...O.O...#.O +..#.OOO.....O#......##.....#..O#O...#..#...........O#O.OO...#....#.........O....#..O.#...#..#..#.#O. +...OO.#..O...O..#.#O.##O.#..O.O.#O....O.....#..#O#.O....O.OO#.O..#..#...#...O...##.#.....O......O#O. +.###O....#......O.O..O...#...O..#......O.........O..O...##....#.#...#..........O##O...#..O..O.OO##.. +..O.#O.O#...#..O#...O..#O..#.OO.....#.O.....##.O##.##...O..#...#O.O...#......#O...O...OO.#....O#..O. +...O.O...O.O.O.O#O.###..#.##O......O.O.O#..O...#.#O.O...##..##O.OOOO...#...O....O.##O#O.....#O#..O#O +....OOO#.....O..O.......#O#...........#.....#.#.#.....O..OO#.....O.OO..#...####.O.#O#.....#..#....OO +O##..OO..O#.#..O...#.....OOO......O.....O.....O#OO....O...O....O.#...#...OO...#..#....#.......O#.O.# +..#OOOOO.O#..#....##O.O#.....O.O.......O#......O#..#......#.O##.#...#O...O........O......O.O..O..... +..OO........O..O#..O.O.#..O.O#.O#...O.......##..O#......#O.O.#.#......O..#..#O.O.#.#.O#......##O.O.. +.#......#..#...O..OOOO#.O#..........O.....#...OOO...O...O.#O..O..O...O..O...#.O....#O#......OO..OO.. +...OO....O#O#OO...O.OOO.#...O.....#.O..O.O....#.O.#.O.#.#O.....O..#.##...OO#..#.O....#O.#.O.#O.O.#.. +..#..#..O......#.#O.O...#.OO.....OOO...###.....O...O#..##.O...##O#..#.O.#.....O..#..O.O.OOOO..O...## +.#....O.O.O..O.O........O.#O..#OO#.##..O#..#.....OO#..O.#O..O..#.......O..#.....##....O..O.O#....... +....O...#OOO..##O...#OO...O...O......##......O....O..O..O....OO..#O..#....#..OO##.O.#.#.#...#.OO#... +.OO#..#...O.......O..#....OO..O#.....OO.##...##...#O......O.....#........#.##.O.....O..O..O..O.....O +.O..O#...#..O.OO...O....##.O..##...O..##O.#....O#.O....O...O.#O....#O......OO#..........O....##OO.#. +..OO..##.#.O.O....O....#O...O#......##......O.O.O#......O.#O......##.O.......O....OO#O.O..##O.O...O. +#.O....#..##........O#O.OO.#.#..OOO.#.O...#.##...#.O#....#.......#..O#O....O.O...O..O....OO.O#....O. +..#....OO..........O##.##..O..#..O.......#.........##OO....#.O...O.O##.......OO...#O#....O..##..OO.. +#O.##O#....#.OOO.......O..#.O.O..O.#.OOOO#.#.#...##.O.OO......O..OO#.#...#.O##O.O........O.#...O.#.. +#....O.OO#.#....O.#...O....#..O...#..O.OO..O..#..#..O#.#..OOO.O.O..#.O.#.#.......#.O#..O.##....OO... +..#.....#.O...O.O...O...O.#.#.O...OO#.#.#.....O#O.OOO.O.#......O.O.....O.#..O....O.O.OOOO#...O#.##.# +..O.O#O..OO......O......OO.#.#.....OO#...O..O......OOO..#..O...O#.##..O...#.......#.#.O....#..##.O.O +...O..#O..O#O...#..#...##.#....O.#...#.OOO.#O.......O...O....#...O...##...O..O..#..#...O#O..#...#.O. +..#..##.O#O...OO##..#..OO.#......O......O....#.#.O..O.......OO.#O.......#O...#.O.O.#....##O#O..OO... +.OO...O..O...#.OOO..OO.O...#O.......#.#.....OO..O..#.OO###.O.#O........#O.O#.O...............O.....# +....#O..#..#....O.##O.O#.O...#O..O#..#....O#.O...O....O......##...##O...#.#...#..#.O..O..#..#..O.O#O +.....#..O#...O.#.#.#......#O.O..#.#....O....##.O##O..O.#O..O.O.....#O....#..#.#..O.#O#......OOO#...O +.#..O...##.O.....##.#....#O.O.##..#.......O.....#.#..O##........#.O..........#.#O.#..#......#O#..#O. +OO.#...O...O#.......OO.OOO#.O#....#.OO...O..OO....OO#O.O#....O..O....O..O.O..O....O........O.O.#.... +.O...#.......O..#OO.....#O.O...#O.#O..#.#.....#....O....#.....O..#O.#.O......O.O.OOOO.....O...#....# +.#OO.....#.#O..O........O.#O..O..#......O.O....OO.#..OO#..O#.#O.#O.O...#......O#O....#.#O...#...#.OO \ No newline at end of file diff --git a/2023/14-test-input.txt b/2023/14-test-input.txt new file mode 100644 index 0000000..b92d1a3 --- /dev/null +++ b/2023/14-test-input.txt @@ -0,0 +1,10 @@ +O....#.... +O.OO#....# +.....##... +OO.#O....O +.O.....O#. +O.#..O.#.# +..O..#O..O +.......O.. +#....###.. +#OO..#.... \ No newline at end of file diff --git a/2023/14-test.py b/2023/14-test.py new file mode 100644 index 0000000..a23326d --- /dev/null +++ b/2023/14-test.py @@ -0,0 +1,56 @@ + +import os +import sys + +import numpy as np + +sys.path.insert(1, os.path.join(sys.path[0], "..")) +file_path = '14-test-input.txt' +with open(file_path, 'r') as file: + lines = file.readlines() + +map_ = {"#": -1, "O": 0, ".": 1} +array = np.array([[map_[char] for char in line.strip() ]for line in lines]) +nrows, ncols = array.shape + +def cycle(array): + for i in range(4): + array = roll(array) + array = np.rot90(array, -1) + return array + + +def hash_(array): + return tuple(array.ravel()) + +def score(array): + rolls = np.where(array == 0)[0] + return (nrows - rolls).sum() + + +def roll(array): + for i in range(ncols): + rocks = [-1] + list(np.where(array[:, i] == -1)[0]) + [None] + for j in range(len(rocks) - 1): + left, right = rocks[j] + 1, rocks[j + 1] + array[left:right, i] = np.sort(array[left:right, i]) + return array + + + +seen = {} +scores = {} +maxval = 1_000_000_000 +reverse_map = {-1: "#", 0: "O", 1: "."} +for i in range(maxval): + h = hash_(array) + if h in seen: + print(array) + print(f"Found cycle at {i+1}") + break + seen[h] = i + scores[i] = score(array) + array = cycle(array) +cycle_length = i - seen[h] +index = seen[h] + (maxval - seen[h]) % cycle_length +print(scores[index]) \ No newline at end of file diff --git a/2023/14.py b/2023/14.py new file mode 100644 index 0000000..ca82745 --- /dev/null +++ b/2023/14.py @@ -0,0 +1,63 @@ +import numpy as np + +def hash_(array): + return tuple(array.ravel()) + +def score(matrix): + total_count = 0 + for i in range(matrix.shape[0]): + row = matrix[i, :] + count_O = np.count_nonzero(row == 'O') * (matrix.shape[0] - i) + total_count += count_O + #print(f"Row {i + 1} has {count_O} 'O's") + print(f"Total count: {total_count}") + return total_count + +# Read the file +file_path = '14-input.txt' +with open(file_path, 'r') as file: + lines = file.readlines() + +# Split each line into individual characters +lines = [list(line.strip()) for line in lines] + +# Build a NumPy matrix of all the lines +matrix = np.array(lines) +seen_matrices = [] +seen = {} +scores = {} +maxval = 1_000_000_000 +# Loop through each column in the matrix +for cycle in range(maxval): + print(f"Cycle {cycle + 1}") + h = hash_(matrix) + if h in seen: + print(matrix) + scores[cycle] = score(matrix) + print(f"Found cycle at {cycle + 1}") + break + seen[h] = cycle + s = score(matrix) + scores[cycle] = s + for s in range(4): + for i in range(matrix.shape[1]): + column = matrix[:, i] + c_length = column.shape[0] + if np.any(column == 'O'): + for c in range(c_length): + if column[c] == '.': + for r in range(c, c_length): + if column[r] == '#': + break + if column[r] == 'O': + column[c] = 'O' + column[r] = '.' + break + + matrix = np.rot90(matrix, -1) + +print(scores) +cycle_length = cycle - seen[h] +index = seen[h] + (maxval - seen[h]) % cycle_length + +print(f"Total count: {scores[index]}") \ No newline at end of file diff --git a/2023/15-input.txt b/2023/15-input.txt new file mode 100644 index 0000000..725161e --- /dev/null +++ b/2023/15-input.txt @@ -0,0 +1 @@ +xxcc=8,jq=4,qbns=7,qgp-,jb=4,mxh=3,ltf-,xlkb-,ff=5,fjrp-,nl=8,lmhb-,tjfk-,qnn-,fz-,hjp-,msl=6,vmm-,dj=6,db-,knp-,lkks-,jq=5,db-,jx-,tp=1,gtx=7,mktfz-,fx-,jk=2,ddk=6,rzpt-,qpn=5,hxl=6,vl-,xpl=1,mbrmr=6,mnx-,jbgf-,lmpxsn=8,psf-,vv=6,nkccfg=7,xg-,ss-,sx=5,tc-,vmcsh=8,vnz-,pgpzq=9,jzhvv=7,nkccfg=9,kzzn-,lrkmv=7,vgv=9,vb=9,jq=1,jv=8,chfsm-,htqt=9,zk-,gc=5,mt=7,mcpkb-,fx=6,mktfz-,sbx-,psb-,df=4,jv-,xh-,zzqmg=2,mxtz-,kr-,psr=6,mxtz-,px-,klnvl-,vgv-,cspg=9,sspm-,tt-,kqql-,xznvs-,vsd-,td=4,kbmc=4,ggf-,bltn-,ks=9,rf-,jx-,qgp-,pb=5,cpb=5,tn=3,sx-,sh-,xc-,hch-,vmm=9,tbc-,mktfz-,hc=1,smks-,hh=6,jgrd-,vgc-,cpb-,gc=5,xfg=3,jq=5,qs=5,gnhjs=7,gg=4,jbgf-,clpc-,kjcqvr-,bmhs-,bt-,bbth-,fn-,nrvg-,zgs=2,jq=5,dsp=9,gdx-,gdc-,grkk=5,mhqzc-,pl-,lrdkf=1,rj-,pjct=2,scx-,cxz=9,dxtvkd=9,xj=3,pssx=7,vkf-,jgs=3,hgpd-,vm-,ggf=2,xt=6,jfrkh=5,flh=6,hgjhv=2,grkk-,gr-,vcp=8,hgpd-,gxc-,ftp=8,xsbg=2,vnk=2,sq=8,mnpbcf-,sgv=4,dbs=7,lzmb=7,vmcsh=6,rtclsf-,ngs-,xjznm-,vss=7,qq-,vg-,bt-,zgs-,xpl-,qpn=7,lk=1,qq-,vxlgph-,kp=7,ctg=3,gpjm=3,dcmx-,kglvq=7,rjrm-,rncmzp-,fn=2,stg=9,mnpbcf=4,sdg=7,nkzzc-,gpt-,srb=2,sf-,bdlt=2,mcpkb-,mdvnr-,bclt=3,dgk-,zsg=3,pzjgls-,bt=4,mz=5,hd=4,ljr-,clpc-,qpn=8,fjrp=9,cspg=9,jb-,xsh=3,jnps=1,lmhb-,dk-,rmm-,shx-,vnk-,gtx=2,hvvh-,jkz=7,mch=2,bltn-,ghk-,pjl=9,gpt-,fjrp=4,cpb-,thn-,sdbj=5,hb=1,qjjfz=2,kz=6,hb-,jc-,msb=3,tc=8,dgf=6,vsm-,rzpt-,sbg-,hhz=3,qjjfz-,vsd=9,ztcgrm=6,gzx=1,jkz-,qpn-,ngs-,vp-,bg-,kpv=1,xg-,ph=6,lmhb=4,xh-,lrc-,hgv=9,msb=4,ttk=2,vxr-,td-,rt-,kf=1,pnq=7,bzk=2,vzp-,hvs-,cpz=6,sjdkl-,vnz=9,lkks=5,dgk-,vmm-,psf-,ckcslv=5,vv=1,njv=1,dtdk-,gg-,scx=6,gxs=1,bt=7,dqns=3,sdg-,rp=1,bnn=3,sq-,ttk=9,bdlt=6,lkks-,cx-,mbrmr-,jc-,rl=3,psr-,ctg=9,vb=1,pssx-,lnc=4,crxg-,sspm-,fx-,gr-,vjv=8,bl=5,pc=4,hb=3,mkn-,fhp=5,kpmfqs-,vxlgph-,khsf-,lnc-,gpjm-,jnps=1,nfv=9,dxtvkd-,kd-,jgs-,ssp-,kzt=9,ss=3,lcq=7,nks=4,nsnn=9,msl=8,dv=4,rzxt=6,mfx=6,rbpp-,grkk-,lvfdjv-,qx-,gxd=3,ckrt=1,pz-,jb-,zbc-,hh-,jvjdbb-,ztcgrm=5,xsbg-,tv=8,ftp=1,bzk=3,jhm-,xxcc=3,rxrt=2,rq=7,rt-,vphf=6,xm=3,srb=5,hzq=6,zxz-,mnt=1,vlnd=4,fr=5,dbs=6,bzp=1,rbt=4,nj=5,lvfdjv=2,qb=6,hzq-,ckrt-,dgpf=5,fl=7,lf=2,svg-,kbmc=1,fz=3,kpd=3,kf=2,mnx=7,bjd=2,dkv-,vmm=9,zhd-,xvh-,pnq-,lvfdjv-,xzf-,pb=8,ctg-,mch=8,bjd=7,vzp-,bdlt=2,dv=7,xc-,bzp=2,xfg-,kz=7,nmn=9,kbqc-,mxh-,gfjrh=6,dnj-,bpf=3,qqj=6,dnc-,gc-,jq=5,nmrt=1,hd-,dz=5,hd-,dgf=3,tn-,pbdd-,nn-,xc-,cxz=3,vg-,nkccfg-,xvh=9,gxmgld=5,jq=2,kgk=4,kzzn-,ltf-,hmv-,ttk-,rmm=8,xpl=3,nvx=8,hzq-,lrc=4,gdx=2,zzx=5,gg=6,kzt=4,xvh=9,cc-,rfs=3,smnh-,kpb-,nsnn-,pl=9,bpf-,jv=5,ng=8,gxc-,rzxt=9,bbth-,lnc=5,nn=2,cxxrc-,vbs=7,dkv=2,sbg=6,qfpf=5,crxg-,bt=7,vc-,qrr-,gtm=5,ltf-,lrdkf=3,gqgzxf-,lzmb-,xkt=4,hh=9,sn=4,hr-,zdjgj-,jx=2,cpz-,hjp-,hh=6,vtms-,pgr-,jq-,mxh=7,kf=5,lbdrk-,kqql-,vjv-,jfsg=5,vc-,mnt=7,xb=9,hgjhv-,mxtz=5,zgs=2,zhd=5,vdfx-,fx=3,mf=6,sck-,kf-,gr-,kpv=5,xt-,msb=2,hjx-,mxh=1,tc-,rvs-,vzp=5,cl-,fl-,ddn-,vcp=1,rjk=2,qq=1,jgs=4,slds=5,jdb-,grkk=2,vmcsh-,nmq-,dsp=3,lmpxsn-,hch-,xgrs-,tt-,vxr=3,hch=6,mdn=6,cc=7,dv-,dhjv-,vgc-,qbns=6,psr-,vsm=7,mhqzc-,vxlgph=2,vc=2,vjl=9,rfs-,gpjm=6,vfjdpr-,hjx-,xvh=8,fkrs=1,lk-,sccd-,lmhb=3,pt=1,tc-,hzq-,khsf-,bl-,zdtb=6,hbg-,gq=8,dgpf-,kpd-,ddk=6,rbpp=2,jbgf=6,xzf=9,td=4,vl-,qqj=2,dgf-,xvh-,fqqx=7,kqql=9,lkks-,nn-,xt=8,sh=5,kp-,kn-,bmxzp-,bl-,nks-,kn=9,ml-,hxl-,qfpf-,tsvtm=4,kglvq=3,pgpzq-,kvkdr=1,fr-,bfsnt-,gxc-,mbp=4,gk=9,bclt=1,fk-,kk-,dd-,sf-,hd-,snz=2,tjfk-,hb=6,mdvnr-,ngs-,sccd=6,sh=5,lnc=1,jf-,smks=5,rxrt-,bb-,xlx-,nmrt=7,pxlvz-,bjd=6,nl=1,pssx-,tc=7,nmrt-,xsh=6,nfv=5,qr=3,sgvz-,jhm=6,xlkb-,bpf-,fv-,mv=2,xg=2,vxlgph-,msb=6,pmp=8,qq-,sck=2,qbpq-,qr-,dbs=6,pz=3,dkv=1,kq=4,vzp=1,lzmb-,rbt=2,hjp=3,kqql-,df-,mjx-,rtclsf=4,ssj-,hz-,lcq=8,rbt=4,rz-,tq=1,lzmb-,ljr=9,hgqr-,zhd=1,hg-,tqhs-,mk-,cx-,xkt=9,qq=9,bfsnt-,gq-,ddn=7,qhsj-,jvx-,qqj=8,fpp=8,qbpq-,sspm=6,dgk=7,gxmgld=2,vnk-,dsfb-,vjv-,sdbj=1,sq=5,hjp=6,jhm-,jxf-,vv-,df=8,nsnn=4,kf=3,gdc-,ntgd-,jnps-,ttk-,ncndp=1,hjp-,qx=3,gq-,tv-,bnn-,fpp=2,fjrp=3,ks=2,ndq-,qrr-,fkrs=3,kz=9,mjx-,qjjfz=9,kr-,hg-,szxdt=9,qb=2,kzzn-,qqj-,zv-,tb=4,nkr=4,rnk-,mxh=5,vmm=5,xh-,qrr=4,gr=5,pxhnxj=9,vgc-,sck=2,hjp-,mcl-,rjrm-,rmm-,cspg-,vc=2,srb=4,mxtz=1,mnt-,tqb-,dv=1,cp=7,gfjrh-,fr=2,nl=4,mcl-,vmh-,nsm-,ssp=4,nvx=5,lrkmv-,hc-,dsp=1,mz=9,sjdkl=9,jpn-,kglvq=1,fl-,flp=8,mf=5,dg-,sccd=6,cb-,ngs=6,tjfk=9,px-,svg=4,gfjht-,nbd=3,sccd-,hjx=6,xsh=2,pjl=8,lrc-,bbth-,vvl-,kp-,sx=7,ngqh-,chv=2,sdg=8,zjhht-,ghk=7,zsgl=6,tzz-,zg=8,dbs=5,fbng=6,tv-,qx-,hgjhv-,hbg=5,mdn-,hmv=1,hhz=5,xvs=2,vzp-,zjhht-,tls=5,tzz-,zf=9,rvr=3,qbns=2,bqctt=7,prf-,xsh=3,hbg=5,pz=6,nsm-,ks=8,qx-,smks=5,tg=8,krl-,mktfz-,rxrt=6,sgvz-,zxz-,hp-,hxl=2,fjrp=3,dj=4,mz-,mk=1,rxrt=2,bjd=8,dk=3,fqqx=5,snz-,kn=5,vxlgph=5,vg-,fjrp=6,mcpkb=2,szx=8,knp=5,dv-,qg=6,jvjdbb-,rlfgd=4,hvs=5,gpjm-,cb=7,dd=7,vfjdpr-,hvs-,hg=2,lpd=8,zbc-,mth-,qndj-,bk-,xgrs=6,vvl-,ljr-,sbx=8,td-,pb-,sft-,gq=1,mf=2,hxl-,hbg=5,jpn-,lpd=1,rf=4,mdqh-,mr=3,rmm-,bpf-,mnpbcf=2,xsh-,sspm-,gzx=6,clpc=4,xlkb-,vgc=1,xgrs=9,gxs=5,ftlcft-,sj=3,lkks=4,xg-,vd-,mhx=8,hqlkpl=3,qqh=3,tb=7,glmzc-,td-,lrpxp=4,pgpzq-,jb-,dvh=8,bmxzp-,bzsx=8,dkv=6,hd=4,psf-,js=9,kpb-,gxd=4,jgs=7,jvjdbb=2,ftp-,gpjm-,hgv-,chfsm-,pssx=9,scx-,mjx-,lvfdjv-,gxmgld=1,bltn=2,mcpkb-,dqns=9,nsnn=6,jxf-,rxq-,rlfgd=4,slds=8,qqj-,snz=4,xsh=7,df=6,bt-,td=6,jpb-,dhjv=8,gfjrh-,rd=2,zdjgj-,mhx-,cl-,tzz=9,vzp=7,qndj-,rfs=5,lcm-,zj-,mcpkb=6,td=5,knp-,nrvg=2,tc=6,mxtz=6,mnt=8,smnh=9,ssj=5,pjct=8,zjhht=7,tt-,gnhjs=1,vlnd-,psb=5,gtm=4,fr-,dv-,rp=8,rmm-,tq-,cp=6,ssp=1,js-,sccd=5,mktfz-,mch-,vjl-,tcqz-,gtm-,qndj=1,vdl-,km-,zk-,ff-,zdtb=4,gxd-,zdjgj-,svg-,vvl-,cxxrc=4,rvs-,pc-,xj-,qqh=8,tqhs=3,hg=7,kzzn-,jc-,dgk=4,jgrd=7,kf-,vp=1,rzcx-,rvr-,mfx-,ckrt=9,xdk=7,njv-,msl-,lrpxp-,kp=3,xj=8,zzqmg-,ml=9,bltn=8,srb=7,mzfl=6,bb=6,pxlvz-,hp-,vcp-,xp=2,zdks=6,jgs-,rt-,srb-,tcqz-,fhp-,hjx-,kb-,hhz-,mnx-,kbqc=1,hxl=2,hp=8,jgrd=8,dk=7,gnhjs=3,zfhmj=4,pzjgls-,rzcx-,vg=2,scx=7,tsvtm-,bdlt-,xsbg-,lcm=8,km=7,rncmzp-,psf=9,sbg-,gxc=5,xfg-,lzmb=7,fv-,ljr=1,xqgl-,ts=6,sq=9,xzkj=6,ljr-,fl=6,kn-,vp=6,smks-,vpnk-,jf-,sh-,qpn-,bbk=4,td=2,jvx=9,hch-,lk=3,fqlnbc-,szxdt-,hl=4,pgp=8,rncmzp=7,bfsnt=5,rbvl=1,cp=7,qfpf=6,qbpq=1,xdk-,qqj-,mq=7,xkt=3,xsh-,sjdkl=5,zsq-,rjrm=6,nkccfg=8,lls=2,kp-,zf=9,dd-,vhzd=6,vjv=7,vmcsh=7,pfxhxj-,xznvs-,qgt=1,zjhht-,vxr-,bk-,smnh-,xlx=4,hqlkpl=9,dnc=5,jbgf=6,lpd-,mhqzc-,dgf=6,dnj-,cb=1,jgs-,nnkl=4,dvd-,kjcqvr-,pnq=1,vdfx=3,ftp=8,bqblll=1,vjl=1,rvr=8,knp=6,sbvx-,gzx=3,zs=3,zxz-,jbgf=5,stg-,fkrs=1,gtx=8,kgk-,zfhmj=4,mth=1,dj=8,fjrp=9,nj-,zdtb=8,gzx=8,th=7,jkz=1,zdtb=6,mq=9,zsgl=7,xr-,hqlkpl-,zs=8,xvh-,jvjdbb-,hxl=9,ddn=1,qbpq=3,fjrp-,tch=3,th=9,jq-,bl=7,qskn=9,kk-,mhqzc=2,pt-,srb=4,bzp-,lmpxsn-,tn-,clpc-,dcmx-,mxh-,jk=8,rzxt-,zg=8,lk-,hvvh=7,szxdt=8,tls-,pc=3,klnvl-,prf=6,bltn=9,bk-,hl-,sx-,tl-,pdg=5,kzzn-,kq=4,ckcslv=8,vh=8,rtclsf=8,lrkmv-,szx-,cmp=3,jhm=8,cfx-,gc-,ctg-,xkt-,kpmfqs-,vtms-,rfs-,bz-,mhqzc=5,qx-,psb=2,thl=5,dtdk=4,fpp-,xp-,pc-,hhz-,ltf-,nn=3,thn=7,lvfdjv-,bnn=4,rp=9,htqt-,hzq-,xzkj=7,gdc=1,qbpq-,rvr-,cxxrc=5,grkk=5,chv-,gq-,rfs=8,nrvg-,mfx-,kg=8,hgpd=6,nnkl=4,xt-,gbxh-,qs-,krdk-,tm=3,rjrm=8,bdlt=3,gp-,pxlvz=8,jv=7,jkz-,zc-,kglvq=4,fn=2,rnk=4,lqq-,mbp-,jnps=8,hvs-,xlx=2,bzsx-,hp=4,cxxrc=2,ztcgrm-,qx-,qnn-,hgjhv-,xvs=2,jbgf=5,jfrkh-,nbd=2,kk-,bmxzp-,rjk=2,xh-,ssp-,td-,pnq-,df=8,vtms=8,cp=7,kphb-,hd-,xxcc-,dnj-,fz=1,tq=5,df=2,nt=8,hgqr=2,vcp-,mdqh-,vp-,vgc=5,ddn=9,xp=3,vd=6,lrkmv=3,bb-,cpb-,gr=9,fqqx=9,ncndp-,rjrm-,dbs=7,cp-,dk=7,mdvnr-,htzgz=5,fx=5,lcq-,dnc=6,hgpd-,pm=7,vgv-,ps-,gfjrh-,vp-,sgv-,sft-,slds=6,rd=1,htqt=2,sbx=5,xvfc-,mv-,fx-,nkccfg=8,qjz-,nmn-,hh-,sbg=6,smnh=5,jk=8,xgrs=5,th-,mkn-,rmm-,lmhb-,kpd=9,gp=1,vsd-,kzt=7,lcq-,rq-,mnt=8,mn-,kr=1,qfpf-,thl-,hvs=5,zk-,sj=3,dgf-,lcq=2,rncmzp=3,nk-,ncndp-,kr=3,hjx=8,nl=5,mz=4,tqb-,fvpqcp-,pf=7,tp=4,rf-,dgk=1,qgp-,jfrkh=1,vvl=8,ngs-,qjz-,ts-,fz=4,mk=8,xzkj=2,cpz-,mdqh-,slds=2,mhqzc=8,hgjhv=5,fn=5,ts-,hvvh-,vcp-,xzf-,nvx=3,sx-,vsm=3,rzpt=6,dz=8,msl-,lbdrk=6,lmhb=9,nbd-,vxlgph=8,vphf-,pgp-,vsm=9,gc-,tm-,mv-,vjv=4,bj=9,rncmzp=1,chfsm=5,qrr-,bck=2,hxl-,mxtz-,qpcvg=6,ml=2,pf=3,cqs=4,nks-,jkz-,hmv-,qjz=8,mt=5,hqlkpl-,bck-,pb=4,xm-,vjl=3,mr-,gzx-,xzf-,gfjrh-,dg-,lkks-,mkn-,gg-,vld-,fpp-,zg=5,ttk=6,zzx=9,pc-,pc=7,vd-,pxhnxj=8,ckcslv=5,ph-,vfjdpr=4,pm=9,kb-,ntgd=3,km-,svg=7,cpb-,mjx=4,lpd=1,hr=5,dqns-,qgp=3,pb=4,nsnn-,ghk=5,pfsff-,pmp=3,rjrm=4,gbxh-,nn-,sjdkl-,jsz-,tcqz-,zdtb-,sspm-,rbvl=2,jv=6,vv=1,bk-,hbg-,ng=2,nkr-,rv=1,ncndp-,ff=3,vpnk-,ljr=1,xxcc=7,kk=8,hh-,rt=3,lpd=9,vcp=3,mktfz=1,fn=1,ts=7,sccd=6,tch-,kbmc=2,hgpd-,bclt-,lmhb=2,tg-,dsp-,gq-,dz-,thn-,qpn=8,dcmx=9,sn-,gxs-,zk-,gm=5,zk=3,sspm-,mzfl=2,gk-,bzk=6,grkk=7,rfs-,ndq-,hzq-,vd-,tv-,fjrp=7,xxcc=9,hz-,rt=2,vmh-,mz-,dvd=1,szdz-,vmm-,bt-,sh=3,xv-,sft=5,vmcsh-,qqj=1,sck-,gm-,rqzxz-,vzp-,ncndp=6,fkrs=7,tjfk-,tcn=6,ztcgrm-,vl=9,fl=1,khsf-,jk-,khsf-,bl=6,xxcc=9,dxtvkd=8,zsg-,nnkl=8,kglvq-,rzpt-,nfv=4,xvh-,hz=4,nsm=6,gm=2,cp-,qndj=4,vhzd=9,hmv=5,zfhmj-,rtclsf=4,hgv-,jk-,tbc=4,jfrkh=2,pf-,tch-,zxz-,mf-,zsgl-,pgpzq-,hhz-,nk=3,gpt=4,zxz=4,jpn-,tqb-,htn=2,nks=3,vd=7,gtx=1,rd-,gzx=6,gnvcc=8,ts=8,ckrt-,jdb-,kk=3,gq=7,nbd=5,msb-,hzq-,pfsff-,jq=5,ngs-,dj-,vmcsh=3,nsm-,kpmfqs-,pmp-,vsd-,jgs-,slds-,lzmb=4,njv=9,bclt=5,gnhjs=5,xj=5,bqblll=2,ddn=8,mhx=5,tjfk-,jb=3,msb-,ckcslv-,njv=2,htn=1,zs=5,stg=2,knp-,nsnn=7,mz=4,hjp=5,vjl-,jzhvv=5,zzqmg-,mjx=2,xpl-,xlkb=7,fhp-,vjl-,hqlkpl-,nt=6,zj-,bzk=5,tg=3,sgv-,lrkmv-,pz=9,xg=5,hgv-,szxdt-,gcc-,qgp-,qnn-,zdks-,nn-,sspm-,tt-,mdvnr-,pgpzq=1,rbt-,nn-,bltn=7,msl-,szxdt-,tl-,hjx-,cxxrc=3,shx=1,qq-,mcl=3,qndj=4,cx-,nks=4,chfsm=9,vsd=8,cf-,kvkdr-,pt=8,gfjht=4,mth=5,pxlvz=2,tv-,ttk-,sj=6,kzzn-,vsd=4,hmv=6,zdtb=5,jc=5,dsfb=6,ckrt=3,gg-,tsvtm=8,hb-,tb=7,mnpbcf-,krl-,kphb=3,tcqz=5,cpz-,ggf=9,ljr=8,rzgg-,ssp-,hbg=5,lzmb=3,psf-,knp=1,dj-,ljr=5,rl=2,cpb=6,tv-,kpv-,jb-,gk=7,mcpkb-,mcpkb-,xsbg-,gq=7,mcpkb-,bpf=1,lmpxsn=5,ckrt-,vm-,td=5,pxlvz-,lrpxp=7,ph=6,gp-,hdn-,svg-,htn=2,bzp-,dbs-,hhz-,dgk=5,sjdkl-,rf=5,zjhht-,mch=9,xgrs=4,cmp-,rzpt-,mdn-,jknn=5,mdvnr-,tsvtm=6,gdx-,tq-,dvh=1,xpl=6,gxd-,rqzxz-,cx=8,pxlvz-,hc-,vgc=7,bbth=6,vsd-,glmzc=6,dxtvkd-,gc=5,bmxzp=7,mhqzc-,ddk=3,cc-,hmv-,vjl-,cf-,jc=1,mth-,xvfc-,qjz=6,vkf-,kpv-,xvh=3,pmp-,gm=9,fx=6,zj=1,rbt-,xsh-,zfhmj-,nkr=1,vmh=2,nsm=6,psf-,xgrs=3,bzsx-,srb=5,vkm=3,shx=1,zj-,cpz-,glmzc=7,jf-,vz=7,pb-,mbp-,mt=2,xb=4,jpb-,zs=1,mdvnr-,lpd-,mxtz=1,dgpf-,smnh=8,td-,zfhmj=7,lrpxp=2,rzpt-,sbvx=1,rtclsf-,px=7,bl=7,rf=1,bqctt-,qq-,hg=3,srb-,nmn=8,hr=3,qskn=4,vg=7,psb-,hg=7,mcl=2,pz-,bz-,mcl-,rnk-,hgv=8,sh-,pjct-,hvvh-,qqh=5,kb=7,vsd=8,mnx=4,lrc=9,htzgz=8,tb=4,tch-,thl-,hdn=6,dvd=1,gxmgld-,sf-,jk-,xsbg-,bmhs=7,dgk=7,kqql-,mz=6,mn-,zvg=9,xp-,fk-,rtclsf=5,tjfk-,gpjm-,kphb-,zv-,grkk=9,pzjgls=1,fn-,zjhht-,sgvz=4,ggf=6,zbc-,nptmr-,sbvx-,zzmxzs=2,dv-,xpl-,kbmc-,tn-,rzcx=7,vcp-,ps=5,lpd=4,dd=8,qg-,hd-,bj=8,qnn-,rqzxz=3,sspm=1,dnb=2,jf-,chfsm-,lh-,lzmb-,jx-,xzkj=5,lrdkf=3,mzfl=7,mxh=5,xxcc-,bjd-,ng-,vgdb-,vcp=1,qqj=9,gxc-,xp-,tb-,xp-,jk=4,rj=3,tbc=5,vmh-,zzx=8,tc=9,dgf-,ftp-,slds-,qbns=8,pssx=1,rd=8,zbc-,kglvq=5,nks=9,szdz-,bdlt=6,tm=7,psr=8,kp=7,rbt=9,kzt=8,gzx-,sdg-,pc=3,gxmgld=3,vmcsh-,dj-,kpv=2,lpd=5,hpmn-,nkccfg-,qbns-,jc-,mxh-,hgpd-,lcq=6,rqzxz=2,zk-,qjjfz-,fvpqcp=2,jpn-,mktfz-,vhzd-,dkv=2,px-,rzcx=3,dbs-,mlp-,mbrmr=5,hvvh=5,gdx=5,rxrt-,dvd-,sdbj=9,ncndp-,cb=1,xxcc-,hch=9,sn=5,pfxhxj=8,bfsnt=5,ltf-,qb=5,km=7,kd-,zzqmg=1,rlfgd-,kn-,hjx=9,jv=5,ntgd=3,rzcx-,mt=5,pzjgls-,rnk=9,stg-,tzz-,rv=1,qr=7,vcp=6,gdc=6,mnt=6,hch=4,mt-,rh-,zgs-,vnk=2,pb-,gxs=5,mn-,jnps-,px-,tzz-,jkz-,dsfb=8,pf-,cb=4,sx=8,lpd-,jhm=3,nnkl=6,sgv=8,xxcc=9,xjznm=9,vxr=1,xxcc=6,pjl-,chv-,zvg-,sqt-,vbs=2,pgpzq=9,nrvg=2,vgv-,lcm-,dj-,kq=1,mk=7,msl-,pgpzq-,mjx=7,kqql-,rbvl-,gxc-,xm-,qfpf-,nsnn-,gxd-,sx=7,nj=6,bclt-,sdg-,svg=2,ssp=4,gk-,scx=8,nsm=1,rvr=5,jkz=4,lcm-,pjl-,kr=1,gfjrh=6,dxtvkd-,qhsj=5,ckcslv=5,bnn-,hxl=8,rj-,kqql-,hp=8,nfv=7,vgdb=7,qb-,dcmx-,cf=4,nvx-,hh=5,hdn=5,bck-,chv-,xh=3,mdvnr=9,ztcgrm=2,vpnk-,jk=1,gnvcc-,ftlcft-,zj=2,tp-,crxg-,sft-,hp-,xv-,pjct=7,hb-,rlfgd=3,mt-,gbxh=1,vdfx-,xv=1,lbdrk-,xvh=6,jgs-,dbs=6,hhz=3,mcpkb-,qx-,sccd-,bjd=4,pz=5,xb-,mxh=8,vxlgph-,gnvcc=6,kbmc-,mn-,db-,mlp-,dnb=6,ps=8,ngqh-,vlnd=3,qndj-,nks=3,pjl-,vpnk-,dsp=9,tq=3,mdn-,jpb-,vhzd=3,kp=2,tm=1,lrdkf-,vg=4,mkn=4,xxcc-,lbdrk-,pc-,glmzc-,fqqx-,hmv=8,dk-,dkv-,dkv-,pb=6,vmcsh=5,pmp=8,khsf-,psb=5,jpb=8,pgpzq=5,scx=2,lh=1,tt-,pgp=4,dv=7,ss=5,rjrm-,sccd-,ph=2,dj=8,pdg-,rxrt-,mxtz=2,xj=9,jfrkh-,bt=9,bzk=3,ngs=8,gpt=6,fjrp-,kb=5,zzmxzs=7,px=5,nrvg=3,vcp=4,xqgl=5,qskn=3,mdvnr-,bg=5,rf-,pzjgls=5,rz=3,zsq-,vbjk=2,zsgl-,rh=5,zsq-,kgk=8,pdg=3,tt-,nmrt-,srb=5,dv=5,grkk-,sjdkl-,tjfk-,hmv-,kbqc=2,pfxhxj-,vbs=7,pgr-,jfrkh=1,qgt=4,kp-,jc=2,htn-,sspm-,nkr=4,cspg=2,tm-,mxtz-,qbns-,mxtz-,pgr=1,bclt-,xdk=1,clpc=1,gnvcc=9,lpd=1,tc-,sh=2,rzxt-,ts=6,rnk-,cmp=6,vl=2,psr=7,zzmxzs=7,td=8,snz-,kjcqvr=1,vhzd=6,fr-,htzgz=8,xv-,kpd-,rbt-,rvr-,jsz-,vss=3,xv-,sq=6,scx-,fjrp-,gxd-,js-,nkr-,cc-,mhqzc-,vv-,xdk=7,bck-,qh-,sq-,ckrt-,fkrs=2,zf-,prf=3,tjfk=5,sgv-,lk-,rqzxz=7,rvs=6,dsfb-,rvs=9,htn-,cpz=4,gtx-,jpb-,qbpq=7,hd-,cpz=6,mkn=2,bt=5,hp=7,gbxh=3,prf-,xp=3,lls-,qjjfz-,mnpbcf-,sx=4,mz=9,pzjgls-,szdz-,zzqmg-,mzfl=8,kpd=6,cqs-,zsg=2,qqj-,vhzd=7,qx=1,pxlvz-,mq=1,gk=7,lzmb=2,jbgf-,dcmx-,xzkj-,tg=8,fr-,mkn=1,tn=9,klnvl-,vmm-,zgs-,rj=3,zzmxzs=5,fpp-,stg=2,gk=9,cfx=7,bpf-,xkt=1,lrkmv=1,sgvz-,sdg-,rxq=3,lcq-,zsq-,smks-,ctg-,xqgl-,bb-,glmzc-,sdbj=9,rncmzp=8,ljr-,kz=6,bltn-,tjfk-,vcp=7,fk=1,fhp-,mcpkb=2,dsfb=3,vkm=9,thn-,tsvtm-,cf=2,flp-,rd=4,gc-,mdn-,zvg-,dgf=4,lqq=7,tcn=5,vgv-,rncmzp-,pjl-,sjdkl=3,rtclsf-,slds=7,pb=1,xvs-,vcp-,zsg=9,vsd=4,kgk-,lh-,mktfz-,bltn-,gdx=5,hzq=7,cpz=7,vld=1,nt-,cqs-,hl-,pzjgls-,cqs-,xg=3,ng-,dg-,nkzzc=1,hc=8,ggf-,zc=8,glmzc-,krdk-,cb-,vzp=2,mv=6,cspg=4,pb-,vmm-,sck-,vvl=9,qnn-,htn-,nt-,xqgl-,nvx-,qskn=8,vkf-,dvh=9,xc-,vh-,jq=2,zsq=1,jgrd-,kbmc-,mz-,dnb=5,njv-,mxh=3,bmhs-,jhm=7,ghk-,rnk-,tch-,xfg-,rxrt=7,tbc-,dg-,mhx=8,sh-,pz-,mnt=4,sbx-,mz=6,rv=5,gpt=8,nmrt-,bmxzp-,jv-,krdk-,tqhs-,gfjht-,sccd-,clpc-,xsbg-,jpn=9,szx=4,mhx-,mt=4,zvg=9,szx-,ng=4,mjx-,qg-,zzqmg=7,xb-,gr-,xm-,xxcc=8,mq-,hg=1,vz-,bqctt=6,rbvl-,gqgzxf=3,mk=6,thn-,mnt=4,mcpkb=7,knp=2,snz-,jzhvv=2,ndq=9,mq-,mkn-,mf-,ss=4,zbc=7,zzmxzs=1,pgr-,njv-,qb-,bfsnt=4,bnn-,hmv-,zbc-,ckrt=5,bpf-,vht-,sbg=7,vmcsh-,rbpp-,qgt-,lcm=9,rbpp-,bl=1,sck-,vsm-,rf-,krdk=4,mjx=6,pfsff=6,tg-,sn=7,qbns=2,vzp-,qx-,chv=1,qr=3,ch-,khsf-,sgv=9,qjz=1,smks-,rqzxz=7,cb-,nnkl-,kzzn=1,vphf=3,nt-,hxl=8,sh=2,rtclsf-,scx=7,kb-,mzfl-,zzmxzs=7,ssp=4,nptmr-,xlkb=4,jbgf=1,kf=3,tv-,zsgl-,xsh-,kq-,mch-,hb=5,vss=7,bg=9,msb-,fr-,pz-,zgs=6,ngs-,jdb=9,hjx-,dcmx-,rt=9,rbt-,vc-,tt-,qjjfz-,flp=5,hg-,xgrs=7,psf=1,vtms-,mkn-,mcpkb=1,tls=6,fqqx-,zgs=9,ckcslv-,kglvq-,dvh=3,sqt-,hhz=6,mnx=8,msl-,kzzn=2,flp-,hr-,jhm=6,qgp-,lqq=7,hpmn-,gzx=6,vdfx-,tm-,rfs=1,zc-,flh=1,lmhb=7,jf=1,vcp=7,vmh-,kr=9,hxl-,xlx-,vtms=5,px-,fjrp=8,lqq-,nfv-,vdl=8,tm-,vsd-,kb-,hp=8,ctg=9,hqlkpl-,fkrs=4,jvx-,hdn=8,zzqmg-,gzx-,kzt=9,dd-,ddn=5,sbg-,fqlnbc=7,shx-,fhp=4,ch=1,pnq-,nbd=2,xv=5,qbpq=6,jk=7,cc=4,mhqzc-,xfg=3,lvfdjv-,vv-,hjx=9,lkks-,pnq-,ngs-,nbd=5,td=5,flh=6,zbk=5,smnh-,rv=9,vv-,kg=1,jvx-,lf=2,gg=7,tqhs-,kpmfqs=1,xjznm=6,tb=7,zjhht=6,pssx-,zdjgj=6,rlfgd=6,mbrmr=8,dv-,psf-,sn-,qbpq=2,bqblll=6,xh=5,tqhs=8,gxc-,rzcx-,vp-,zc=4,fvpqcp-,kd-,pc=7,dbs=7,zbk-,pm-,cspg=7,qfpf-,hr-,dhjv=3,tbc-,tn-,sdbj=5,pxhnxj-,nsnn-,nmrt=1,sck-,zg=4,bdlt-,bc-,rncmzp-,khsf-,krdk-,lk=2,kjcqvr-,vkm=1,vtms-,nsm-,slds-,lcm-,kqql=3,mktfz-,shx-,xsh-,lh-,rl-,cc=5,pgpzq-,gdx-,vnz=5,bltn-,gtm-,vtms-,rh-,hjx=8,zc-,mzfl=2,vsm=7,pnq=5,rxq-,gcc-,zdks-,nn-,ngqh=1,clpc-,pxhnxj=2,hvs=6,dj-,pssx=7,jvx=1,zs=6,gk-,mnx-,jpb-,jxf-,jpb=4,pxhnxj=1,gp-,vht-,dnb=7,kd=9,pl-,kb=7,nt-,hmv=6,sx-,hxl=9,nmn=8,kq=9,df-,cxxrc=3,xvs=8,kphb=6,xlkb=5,lrkmv-,rjk=7,zf=1,scx=4,rfs-,ckrt=2,hgv-,qqj=5,lcm=7,hgpd=3,hjp=6,hzq=4,qjjfz=1,nmq-,thn-,ghk-,bk=4,kpv=9,xgrs-,dbs-,rxq=8,fpp=8,lpd=6,nmq=6,th=6,nk=6,sdbj=2,kr-,zg-,gnvcc-,hg=1,sh=8,nmq-,jzhvv-,ggf-,kgk-,kvkdr=7,xznvs=6,fr=9,tjfk-,rxrt-,sspm-,hdn-,xh-,grfm=2,mdvnr-,rh-,vh=2,nkccfg-,xlx-,dj-,vtms=3,gtm=6,vxlgph=9,rbvl-,lpd-,vmh-,tch=7,ckrt-,tqb-,dkv-,rfs-,pssx-,kglvq=6,jvx-,hz-,rt-,hg-,jk=7,kr-,bg=3,tch-,df-,cspg=4,qgp-,vc-,dgpf-,ff=2,hmv=8,jsz=5,hg-,zvg=7,cx-,gfjrh=3,xfg=2,jc=5,xzkj=4,xb=9,zbc=4,zdtb=5,jnps-,jxf-,nkr-,xdk=7,hpmn-,kpd=5,zk=5,gc-,dcmx=5,ngqh=8,rtclsf=1,gdx=3,hc=3,vphf-,mf-,vmcsh-,dj=9,bz-,zzx=7,kn=8,pvdzq=4,tch=1,tch=7,fv-,bk=5,kjcqvr=1,hgqr-,ddn-,bbth-,dj-,bclt=9,cxz-,pbdd=7,xxfrf=6,ltf-,nj-,zsgl=2,fqqx-,gr=4,hp=7,gdx-,msb-,vc=1,ml=9,lmpxsn=7,lpd-,fbng=3,mth=7,pbdd=5,fhp-,lkks-,zhd-,ltf=6,khsf=4,qr-,mcl=4,hhz=8,kbqc=3,vgc=6,px=7,stg-,fvpqcp=8,vdfx-,js-,hz=8,qndj=6,nsm=9,sx=4,ghk=2,xp=1,pfsff-,kd=5,rzpt=4,dhjv=2,xv-,mnpbcf=5,cc=9,xzkj-,pzjgls-,flp=4,ftlcft=4,hjx=6,rt-,dv=8,vtms-,xp-,hgjhv=6,ps-,rt-,kzt-,kg=7,sf-,dhjv=3,qb-,mbp-,fv=1,xh-,vdfx=8,scx-,dsfb=3,rnk=5,kp-,sgv=4,tbc=9,gpt-,cqs-,dnj=1,fk=2,mch-,tbc-,gxs=4,hqlkpl-,crxg-,qhsj-,clpc-,nptmr=7,krdk=2,rbvl-,ckrt-,zdjgj=4,smnh=5,fk-,hjp=9,jxf-,kpb-,ljr=6,jv-,msb-,xg=9,hb=6,tl=3,stg-,qbpq-,vgv=3,tl-,mkn=2,rvs=6,ngqh=8,bg-,crxg=2,gc=3,lh-,qqh=5,xzkj=1,zj-,mv=5,sdbj=5,jx=6,vm=6,jgrd-,rjrm-,jsz=8,th=8,njv-,dcmx=3,rd=5,rzpt-,mn=5,vtms-,zdks-,mktfz-,kf=1,mdn-,ff=8,fk-,dgpf=9,xdk=6,nnkl=4,xzf=4,kk=2,mcpkb=2,bck=8,vpnk=9,xznvs=2,lk=2,ltf-,tc-,nmn-,zs-,tl=2,vzp=4,szx=3,lmhb=7,psb=8,ps=4,jv-,qgt-,nk-,nk-,ssp=3,rf-,pxhnxj-,pfxhxj-,qgt=4,gnvcc-,sgvz=3,pt-,rv-,sf=6,vgdb-,bbth-,gr=7,kbmc-,nrvg-,cspg=9,kg=9,dvh-,lh=9,vnk=5,pvdzq=3,kn=8,mdn=8,nmq-,rq=4,kp=4,gfjht-,ckcslv-,fkrs=4,nks-,xqgl-,hc=8,ssp-,fz=1,ssp=7,ps=2,kphb=9,nsm-,stg=7,bmhs-,sck=1,xj-,cmp-,ghk-,nn-,zsgl-,qbns-,rtclsf=9,zhd-,lrc-,gdc=3,mch-,sjdkl-,bmxzp-,lvfdjv-,vg-,qgt-,cfx-,ph=3,xsbg-,hr-,dkv-,cc-,nptmr=2,nfv=7,sccd=8,hjp=6,dxtvkd=2,hz-,vkm-,xxcc-,hpmn-,sqt=9,qx-,bj-,vnk=2,lrc=6,hmv=4,hbg=4,kbqc=8,zxz=1,qg=9,dg-,kz-,bzk-,xzf-,hg=6,mch=5,dbs-,qx-,qgt=5,bqblll-,tl-,qx=2,nmq=3,mlp=1,hzq-,bnn-,vmm=1,ljr=9,tp-,qg-,jvx-,vtms=6,ltf=1,rbpp-,flp=6,gtx=4,gr-,pgpzq=2,nks=2,px-,rv-,hgjhv=6,dv=8,lmhb-,ch=3,htzgz-,sspm=3,jknn-,ndq=3,qbpq=7,dgpf=5,qndj-,ctg=4,kn-,cxz=8,lrkmv=5,krdk=6,gtx=8,hch=9,nkzzc-,cqs-,kg=4,zzmxzs-,jx-,gfjrh-,vld-,qpcvg-,hgv=4,dkv-,rxrt=2,vmm=5,mnx=7,kd-,dhjv=3,nks-,rp-,svg=4,glmzc-,lls=9,bqblll=9,qpn=8,qskn-,rbvl=6,vm-,mk=3,cspg=5,slds-,cl=6,xg-,xc-,rncmzp=4,pzjgls-,hd-,hvvh-,xkt=2,smnh=4,tm=4,lnc=4,gtm=1,snz-,rqzxz-,ssp-,xg=2,zv=7,pjct=6,mq-,bnn-,sx-,xfg=9,ljr-,bj=8,pbdd=8,ttk=7,cx=1,snz=6,dkv-,tv-,pxhnxj-,jpn-,jgs-,mxh=1,mf=7,kq-,hz-,vz=8,bzsx=4,jnps=1,dgf=8,zgs-,fbng=4,mk-,pt=7,nmq-,ngs=8,lh-,vkm=6,kqql-,vg=2,gg-,cxz=8,hr=4,tq-,gxs=6,cspg-,mth=9,xjznm=6,bzsx-,pzjgls=9,krdk=6,jxf=9,mdqh=5,ssp=6,njv-,mch=1,gqgzxf-,sgvz-,pssx-,zsq=7,ng=6,rzcx-,sdbj=1,zsgl=1,szx-,nrvg=1,dtdk=9,dbs-,kqql-,hjp=5,ddn=2,df=8,zg-,xfg=7,cx-,nmq=9,bzsx-,sft-,gfjht=2,bqctt-,gtm-,sqt=8,ljr-,shx-,gcc=3,kjcqvr=5,tt-,xvfc-,ghk-,tls-,hb=5,pz-,vphf=1,rv=6,zf=9,vzp=9,ml-,thl-,kbqc-,knb=4,tsvtm-,bzp-,pnq=2,scx=6,nt-,ngs=4,vpnk=5,pb-,lrdkf=6,jfrkh=8,crxg=8,gpt=6,bmhs-,vss=2,pgr=9,mhqzc=8,jgrd-,bz=2,kqql=9,gxmgld-,pl=8,dd-,hgqr=3,tcqz=9,zk-,zhd=3,pgp-,th-,vxlgph=9,gxmgld=5,gpjm-,cfx-,bbk=5,ltf=1,pgr=7,tjfk=3,vkf-,nfv=2,zdjgj-,knp-,bck-,vb=9,hd=5,sdg=6,vgv-,th=3,fqqx=8,gxs-,dcmx-,zs=4,fzs-,zsgl=9,nbd=1,fv-,lrdkf=6,vjv-,sck=1,qx=8,jdb-,zdjgj=5,sbg-,pgp-,kzt-,zg=4,pgpzq-,rtclsf-,bpf=6,dnb-,kzzn=4,cp=1,td=4,jpb-,xqgl-,lrpxp=7,xh-,tt=4,xgrs=3,vkm=9,xpl=6,nkccfg=8,sn=1,bl-,ssj=2,snz=5,dgk-,tch-,bmhs=5,mbp-,gtm=4,dg-,slds=5,gtx=5,xr=4,msb=2,ftp=5,tch=8,vl-,mdvnr=6,dk-,sgvz=4,fz-,rzpt-,sspm-,gr=6,nl=3,hp=9,pzjgls-,vdfx-,nj-,xxcc=5,db-,bjd=6,ps-,gtm-,psf-,ncndp-,nt-,mnx-,tc-,lkks=9,mn=7,rvs-,cpz-,vpnk=1,ks=8,vht-,nmn-,vpnk-,vxlgph-,xm=2,qg-,jv=8,sck=9,gpt-,rbt=2,mdn-,gxc-,bzsx=7,tm=5,lh-,nn=1,th=9,ckcslv=5,hvs=1,sccd-,mcpkb=4,vcp=6,vz-,rjk-,mcpkb=2,gcc-,jdb=4,bz-,kq=8,pnq-,ntgd=9,ss=6,pl-,szx-,lkks-,pmp-,lf-,ghk=7,ckcslv-,kz=5,hdn-,vxlgph=3,qqj-,gpjm=1,vmcsh=8,krdk-,mch=2,kpd=8,gdc=4,fz=4,fl=2,gc=2,mbp=3,kczrf=8,fk=2,gr-,fkrs-,dnb-,zs=7,xzf-,lnc-,xznvs-,rzgg-,xpl=5,dk=4,jk=9,mjx=6,kphb-,cpz-,lmhb-,fz=6,sgv-,zzmxzs-,cp=3,zzx=9,hb=7,nkzzc=2,kphb=9,nsnn-,jfsg-,pzjgls=7,fpp-,gqgzxf=4,tb=9,rz-,sqt=2,lqq=5,xvfc=2,mbp-,rp=8,zxz-,qg-,jknn=3,nks=2,dgk-,cf=8,gxc-,gq-,crxg-,qx=9,sbg-,vss=7,xt-,kqql-,khsf=1,dvd-,zc=6,vzp-,jvjdbb=9,kq=7,zdtb=1,slds-,msb=7,jfrkh-,vss-,xp=6,fvpqcp=6,bclt-,th=6,kpmfqs=5,sdbj=8,mth=2,cfx=5,kz-,kpmfqs=5,pgr=8,vm=8,bb-,sh-,bk=4,zzx=5,jpn=3,pgr-,pjl-,kqql=5,hhz=4,vnk-,mxh=6,zbc=7,dvd-,qpcvg=4,lpd-,hd-,gr=2,mq=3,nkccfg-,rzcx=8,sgvz=3,nks=3,qqj-,gxmgld=7,th=4,pjl=2,xvh-,df-,hl=3,zjhht=5,zgs=2,kp=4,rtclsf-,xvs-,bbth=3,pdg-,nmrt=9,smnh=3,vsd-,fkrs-,pf-,sbg=9,jfsg-,vcp=6,jb-,xzf=3,xvfc=8,kq=3,zbc-,hpmn-,rzcx-,tbc=3,zsgl-,lqq-,hzq=4,vdl=9,hd=1,mq-,prf-,qqh=2,lrdkf=5,vmcsh-,rjk-,pbdd-,sx-,jk=7,bmxzp=9,tq-,pgpzq-,jzhvv=9,fv=6,ks-,rf=7,bl=7,pdg-,pzjgls=7,mxtz-,hgpd=2,hb=2,rzcx-,vmcsh-,gxc-,kpmfqs-,mch=4,zzqmg=4,kczrf-,hz-,vhzd-,hzq=7,qhsj=5,mn=8,bzk=3,vgdb=8,vdfx-,nkccfg-,xzkj-,tv-,pssx-,gm=2,lbdrk=2,xvs=8,hb-,dnc-,mdvnr=2,lrpxp=1,hxl-,dgk-,ps-,vvl=1,xv-,vb=8,mch=4,rtclsf=9,rxq=6,hgpd-,zv=2,qnn=1,fkrs-,knb-,gm-,kczrf=5,gxmgld-,vxr=8,vgdb=3,pbdd=5,pssx-,zq=1,nfv=5,pxhnxj=8,hbg-,ngs=9,kglvq-,bg-,gk=2,cb=2,cxz-,vxlgph-,ml=3,lrc-,bfsnt=7,nk-,pb-,vp=2,vgv=7,flh-,pgpzq=3,rz-,xxfrf=2,hz=4,htn=5,sck=2,vhzd-,vc-,rq=4,vpnk-,mn=4,rzxt=2,hgpd-,lqq-,ssp-,kbmc=4,bz=3,rt-,shx-,pm=8,qhsj-,xb=2,hbg=9,kqql=4,mnpbcf-,kn-,ndq-,hvs=4,dgf=5,tqb=9,xvs=7,smnh-,htqt-,xvs=5,xvfc-,glmzc=9,gxd=2,fn-,jpb=5,jvx=3,vjl-,gq-,xxcc-,zhd-,zhd-,jhm-,ckrt-,vm-,vjl-,zj-,ftp-,xv-,dgpf=8,ttk-,nptmr-,zgs=3,tt-,vgc-,hb-,knb-,kpmfqs-,mlp=6,vgdb=5,hqlkpl-,tc-,fr=1,ljr-,ttk=4,xxcc=7,xt=9,rmm=9,fv=8,dhjv-,dgk-,tzz-,kczrf=9,kg-,jkz=6,xpl=9,ml-,qbns-,ttk-,mbp-,ddn=5,vhzd=8,kglvq=7,bpf-,crxg=9,vvl-,lnc-,jk-,xgrs-,gpjm-,hh-,zbc=3,ckcslv-,snz-,xpl-,fk=2,tjfk-,dbs-,mv-,ff-,pvdzq=1,nn-,kz=3,hgjhv-,km=8,rq=5,zgs-,lrdkf=8,krdk-,jhm=9,nks=9,szxdt-,knb=7,xsbg=6,dnj-,psr=5,lmpxsn-,bqblll=7,dnc=5,bdlt=3,tv=8,knp=1,mktfz-,vmcsh=2,hjx=1,gtm=3,xlx-,zsg=6,sqt=7,fk-,bc-,kq-,rxq-,jgs=2,lmpxsn-,ddn=9,sgv-,szxdt=2,cp=4,tp=5,xzf-,zhd=1,mfx=1,xg=4,fn=3,rjrm-,lrc=8,vg-,sgvz-,jf=5,qg-,fx-,msl=4,pl-,nk=6,jsz-,msb-,vg-,ngs-,szx=6,hjp-,vv=6,qjjfz-,sgvz-,tl=8,mxh-,xvfc-,ssp-,tqb=7,fn=5,gk-,nmn-,msb=2,ftlcft-,mfx=3,mjx-,lls=1,fqlnbc-,hc-,sf-,db-,gtx-,vc-,xznvs=6,hl-,vss=1,sft-,sspm-,sft=8,gtm-,gxc=2,tbc-,cfx-,lpd-,psb-,sft=9,kgk-,mn-,zvg=2,qgp-,vg-,bfsnt-,hvs=7,pjl-,njv=5,qbns-,qpcvg=9,rfs=9,bbk=3,qg-,tqhs=3,xsbg-,zfhmj=6,zsq-,hhz=3,mbrmr-,pbdd-,qb-,fhp=3,mbp=9,ch-,bg-,rz=7,rl-,qs=3,sjdkl-,xt=3,cp-,zsgl-,pdg-,bpf=6,krl=5,sck-,dg=4,hb=4,rncmzp=7,kbqc=8,nsm-,nfv-,bclt=4,hmv-,rt-,pvdzq=9,nnkl=2,dgk-,dgf-,vsd=7,kz=4,klnvl=6,rzcx-,mnx-,kpb=3,jq=6,db-,fx-,zjjmb-,jc=4,kzzn=3,vphf-,lh=9,mnpbcf-,hqlkpl-,szdz=5,xzf=8,rj=1,nnkl=9,qfpf-,xh=3,js=5,ggf=8,zdjgj-,zsgl-,zq-,psb-,cmp=5,glmzc-,gpjm=5,chfsm=5,lnc-,srb=1,xvs-,snz-,rncmzp=9,xsbg=4,pt-,smks=3,ljr-,ckcslv-,mfx-,mktfz-,mn=1,zhd-,nnkl=9,mzfl-,km=3,grkk-,crxg-,qrr=1,thn=1,hd-,gfjht-,xsh-,xdk=9,xzf=7,ks=1,kk=7,dsfb=2,hjx-,pgp-,qgp=5,qpcvg=4,xv=4,xxfrf-,pl=4,smks-,pt-,msb=4,bclt-,qndj-,jc-,ts=5,gbxh-,dhjv=1,sgvz-,mjx-,jkz=6,sf-,sjdkl=9,crxg-,zg=9,zjjmb=2,zc-,hxl-,mn=9,dvd-,vnk-,nbd=7,gbxh-,ljr-,hh-,kn=3,fn=1,xqgl-,ng=1,sx-,lrdkf=4,dg=9,ngqh=5,gxmgld-,hch-,qpn-,gcc-,zjhht-,df=8,rp-,rv=6,mktfz-,kr=9,bzk-,lpd- \ No newline at end of file diff --git a/2023/15-test-input.txt b/2023/15-test-input.txt new file mode 100644 index 0000000..4f58f74 --- /dev/null +++ b/2023/15-test-input.txt @@ -0,0 +1 @@ +rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7 diff --git a/2023/15.py b/2023/15.py new file mode 100644 index 0000000..5101b3f --- /dev/null +++ b/2023/15.py @@ -0,0 +1,67 @@ +class Box: + def __init__(self): + self.lenses = [] + + def add_lens(self, lens_to_add): + for i, lens in enumerate(self.lenses): + if lens[0] == lens_to_add[0]: + self.lenses[i] = lens_to_add + return + self.lenses.append(lens_to_add) + + def remove_lens(self, lens_to_remove): + for i, lens in enumerate(self.lenses): + if lens[0] == lens_to_remove[0]: + self.lenses.pop(i) + return + + def power(self, idx: int): + total = 0 + if len(self.lenses) == 0: + return 0 + for i, lens in enumerate(self.lenses): + if lens[1] is None: + continue + total += lens[1] * (i + 1) * (idx + 1) + + return total + def __str__(self): + return str(self.lenses) + +def get_hash(word: str): + array_total = 0 + ascii_num = [ord(char) for char in word] + for num in ascii_num: + array_total += num + array_total *= 17 + array_total = array_total % 256 + return array_total + + +# Read the file +file_path = '15-input.txt' +with open(file_path, 'r') as file: + line = file.readline() + +# Split each line into individual characters +words = line.split(',') + +boxes = [Box() for _ in range(256)] + +print(words) +total = 0 + +for word in words: + if word.count('-') == 1: + start, end = word.split('-') + box_idx = get_hash(start) + boxes[box_idx].remove_lens((start, None)) + else: + start, end = word.split('=') + box_idx = get_hash(start) + boxes[box_idx].add_lens((start, int(end))) + +for i, box in enumerate(boxes): + total += box.power(i) + +print(total) \ No newline at end of file diff --git a/2023/16.py b/2023/16.py new file mode 100644 index 0000000..2f91661 --- /dev/null +++ b/2023/16.py @@ -0,0 +1,57 @@ +import numpy as np + + +class Beam: + def __init__(self, start_loc: tuple, current_loc: tuple): + self.start_loc = start_loc + self.current_loc = current_loc + self.direction = None + self.beam_length = 0 + self.energized = set() + self.active = True + + def move(self, matrix: np.ndarray): + if self.direction is None: + self.direction = matrix[self.current_loc] + next_loc = get_next(self.current_loc, self.direction, matrix.shape) + if not (0 <= next_loc[0] < matrix.shape[0] and 0 <= next_loc[1] < matrix.shape[1]): + self.active = False + return None + self.current_loc = next_loc + self.beam_length += 1 + return next_loc + +def get_next(prev_loc: tuple, direction: str, shape: tuple): + match direction: + case '-': + return (prev_loc[0], prev_loc[1] - 1) + case '/': + return (prev_loc[0], prev_loc[1] + 1) + case '\\': + return (prev_loc[0] - 1, prev_loc[1]) + case '|': + return (prev_loc[0] + 1, prev_loc[1]) + case '.': + return prev_loc + +file_path = '16-input.txt' +with open(file_path, 'r') as file: + lines = file.readlines() +# Split each line into individual characters +lines = [list(line.strip()) for line in lines] + +# Build a NumPy matrix of all the lines +matrix = np.array(lines) +shape = matrix.shape +traverse = True +current_loc = (0, 0) +beams = [] +beams.append(Beam(current_loc, current_loc)) +while(traverse): + for beam in beams: + if beam.active: + next = beam.move(matrix) + + + + diff --git a/2023/2-input.txt b/2023/2-input.txt new file mode 100644 index 0000000..e3b74cd --- /dev/null +++ b/2023/2-input.txt @@ -0,0 +1,100 @@ +Game 1: 2 blue, 3 red; 3 green, 3 blue, 6 red; 4 blue, 6 red; 2 green, 2 blue, 9 red; 2 red, 4 blue +Game 2: 4 red, 1 green; 3 red; 13 green, 5 red, 3 blue; 3 green, 2 red; 3 blue, 5 red, 3 green; 2 red, 3 blue, 12 green +Game 3: 4 red, 1 green, 1 blue; 1 red, 1 blue; 6 red, 1 green; 6 red, 3 blue, 1 green; 4 red +Game 4: 4 blue, 12 red, 4 green; 6 green, 3 blue, 19 red; 3 blue, 2 red, 2 green +Game 5: 1 red, 5 blue, 16 green; 1 red, 6 green, 3 blue; 2 red, 12 blue; 17 blue, 3 green; 7 green, 2 red, 6 blue +Game 6: 3 green, 1 blue, 5 red; 5 green, 5 red; 2 green, 2 blue, 3 red; 5 green, 2 red; 3 green, 6 red, 3 blue; 5 green, 4 red +Game 7: 15 blue, 1 red, 6 green; 4 blue, 7 green, 2 red; 14 blue, 5 green, 2 red +Game 8: 6 blue, 3 green, 10 red; 2 blue, 1 green, 5 red; 6 blue, 3 green, 12 red; 11 red, 1 green, 1 blue; 5 blue, 14 red, 3 green; 3 red +Game 9: 15 red, 3 blue; 1 blue, 16 red; 1 red, 3 blue; 1 blue, 1 green, 9 red +Game 10: 1 red; 1 blue, 7 green; 1 green, 5 blue; 3 blue, 3 green; 1 green +Game 11: 19 blue, 13 green; 19 blue, 2 green; 10 blue, 3 red, 12 green; 11 blue, 1 red, 6 green +Game 12: 7 green, 5 blue; 6 green, 3 red, 6 blue; 2 red, 5 blue, 15 green; 2 red, 1 blue, 1 green; 4 red, 4 green, 2 blue; 3 blue, 6 green +Game 13: 9 red, 2 blue, 2 green; 1 blue, 2 red, 15 green; 9 green, 2 blue, 9 red; 5 blue, 8 green, 5 red; 2 blue, 11 green, 5 red +Game 14: 9 blue, 1 red; 10 blue, 4 green, 3 red; 2 red, 6 blue; 4 green, 2 blue, 1 red; 5 green, 2 red, 11 blue; 12 blue, 2 red, 1 green +Game 15: 9 blue, 7 green, 12 red; 9 red, 17 green, 8 blue; 6 red, 4 blue, 4 green; 5 red, 17 green +Game 16: 5 green, 4 red; 3 blue, 3 red, 14 green; 6 red, 5 blue, 12 green +Game 17: 8 blue, 5 green, 2 red; 6 red, 6 blue; 9 red; 5 blue, 2 green, 8 red; 13 red, 4 blue, 4 green; 9 blue, 3 green, 5 red +Game 18: 8 green, 1 red, 2 blue; 4 green, 4 red, 1 blue; 6 blue, 2 red +Game 19: 3 green, 9 blue; 4 blue, 10 red; 6 red, 3 green, 3 blue; 6 red, 4 green, 9 blue +Game 20: 11 green, 3 blue; 6 green; 3 green, 6 blue; 1 red, 5 green; 6 blue, 7 green +Game 21: 1 green, 1 blue, 12 red; 6 red, 2 blue; 5 green, 4 red, 2 blue; 11 red, 8 green, 1 blue +Game 22: 10 red; 1 red, 13 green, 9 blue; 6 blue, 12 red, 12 green; 10 red, 8 blue, 11 green; 2 green, 1 red, 3 blue; 7 red, 1 blue, 8 green +Game 23: 11 red, 15 blue; 10 blue, 16 red, 1 green; 14 blue, 5 red; 1 green, 9 red, 9 blue; 1 red, 7 blue, 3 green; 6 red, 2 green, 3 blue +Game 24: 6 blue, 11 red; 16 green, 2 red, 1 blue; 8 red, 7 blue; 14 blue, 9 green, 9 red; 13 green, 4 red, 8 blue; 2 red, 7 blue, 1 green +Game 25: 2 green, 12 blue, 1 red; 10 blue, 5 red, 5 green; 2 blue, 9 red, 3 green; 5 blue, 4 red, 2 green +Game 26: 7 blue, 6 red, 1 green; 2 blue, 3 green, 12 red; 2 blue, 6 red, 5 green +Game 27: 2 green, 3 red; 4 green; 2 red, 1 blue, 1 green; 2 red, 1 green, 2 blue +Game 28: 11 blue, 1 red, 5 green; 2 blue, 2 red, 4 green; 10 blue, 4 red, 1 green +Game 29: 6 blue, 17 red, 1 green; 8 blue, 4 red; 14 blue, 1 red, 3 green +Game 30: 2 blue, 4 green; 7 green, 1 blue, 1 red; 1 blue, 8 green +Game 31: 15 blue, 9 green, 2 red; 5 green, 4 blue, 1 red; 1 green, 15 red, 7 blue; 5 red, 2 blue +Game 32: 1 blue, 5 red, 3 green; 3 green, 8 red, 1 blue; 5 green, 1 red; 4 green, 3 blue, 15 red; 2 green, 1 blue; 4 blue, 15 red, 4 green +Game 33: 3 red, 10 blue; 4 red, 9 blue; 1 green, 10 blue +Game 34: 3 blue, 1 green, 9 red; 4 green, 2 red, 9 blue; 7 blue, 3 red; 6 blue, 13 red; 4 green, 13 blue, 9 red +Game 35: 14 red, 1 green; 1 red, 2 green, 4 blue; 3 blue, 10 red, 6 green; 5 blue, 6 red, 7 green; 7 blue, 5 red +Game 36: 2 blue, 8 red, 9 green; 9 green, 3 red, 10 blue; 6 red, 8 blue, 1 green; 6 green, 8 red, 4 blue +Game 37: 10 green, 3 red, 6 blue; 2 blue, 9 red, 5 green; 13 green, 9 red, 10 blue; 2 blue, 4 green, 9 red +Game 38: 4 red, 14 blue, 12 green; 6 red, 12 green, 18 blue; 6 green, 1 blue, 1 red +Game 39: 5 red, 1 blue, 3 green; 1 blue, 3 green, 8 red; 15 red, 1 blue, 5 green; 3 green, 5 red; 1 blue, 14 red; 3 green, 1 blue, 12 red +Game 40: 8 green, 4 blue; 5 blue, 7 red, 8 green; 5 blue, 8 green; 6 green, 3 red, 12 blue; 14 blue, 7 green, 2 red; 1 green, 7 red, 5 blue +Game 41: 7 red, 10 green; 10 red, 6 green; 9 red, 7 green, 1 blue; 3 red, 1 blue +Game 42: 3 green, 2 blue, 13 red; 1 blue, 3 red; 11 green, 16 red; 3 green, 1 blue, 16 red; 5 red, 8 green +Game 43: 12 blue, 9 red; 16 blue, 2 red, 7 green; 4 red, 1 blue, 11 green; 15 blue, 4 red, 9 green +Game 44: 17 green, 5 blue, 2 red; 9 green, 11 blue, 1 red; 20 green, 3 blue, 8 red; 2 red, 13 green, 9 blue; 15 green, 12 blue; 4 blue, 7 green, 9 red +Game 45: 5 green; 5 green, 1 red; 3 green, 2 blue; 1 green, 1 blue, 1 red +Game 46: 10 red, 11 green; 16 green, 8 blue, 12 red; 9 green, 9 blue +Game 47: 20 green, 17 red, 1 blue; 16 red, 2 blue, 11 green; 3 blue, 19 red, 1 green; 3 blue, 17 red, 17 green; 12 green, 2 blue, 7 red +Game 48: 1 red, 4 blue, 6 green; 19 green, 1 red, 1 blue; 16 green, 3 blue, 1 red; 3 blue, 17 green; 4 blue, 12 green +Game 49: 13 green, 2 blue, 1 red; 1 green, 8 red, 2 blue; 11 red, 11 green, 3 blue; 7 red, 8 green, 4 blue +Game 50: 11 blue, 1 red, 2 green; 1 green, 10 blue; 1 blue; 6 blue; 1 green, 2 blue +Game 51: 3 red, 3 green, 1 blue; 3 green, 3 red; 10 green, 4 red; 3 red, 2 green +Game 52: 1 red, 4 blue; 1 green, 11 blue; 1 green, 3 red, 6 blue; 4 red, 1 green, 4 blue; 9 blue, 1 green; 10 blue, 1 green +Game 53: 2 blue, 4 green, 1 red; 8 blue, 4 red, 7 green; 9 red, 7 blue, 6 green; 3 red, 7 green, 1 blue; 2 red, 9 blue, 5 green; 1 green, 7 red, 10 blue +Game 54: 1 red, 1 blue, 5 green; 2 red, 1 green, 2 blue; 3 green, 3 blue, 2 red; 4 red; 12 red, 5 green, 2 blue +Game 55: 2 red, 11 blue; 16 green, 7 red, 16 blue; 4 blue, 11 green, 7 red; 8 green, 18 blue, 8 red +Game 56: 2 blue, 2 green, 1 red; 1 red, 1 green; 1 red; 4 green; 1 blue; 1 blue, 7 green +Game 57: 4 blue, 3 green; 16 green, 2 red, 5 blue; 1 red, 13 green, 2 blue; 3 blue, 12 green, 2 red; 2 red, 5 blue, 4 green; 10 green, 2 blue +Game 58: 3 blue, 8 green; 4 green, 3 blue; 7 green, 5 blue, 5 red; 8 green; 3 red, 6 blue, 9 green; 2 red, 10 green, 4 blue +Game 59: 7 blue, 6 green, 5 red; 7 red, 2 blue; 5 red, 11 green, 14 blue; 8 green, 17 red +Game 60: 3 green, 8 blue, 2 red; 4 green, 7 blue, 6 red; 13 blue, 8 green, 2 red; 10 red, 6 blue, 5 green; 11 green, 3 blue, 4 red; 9 red, 5 green, 9 blue +Game 61: 4 red, 18 blue, 13 green; 9 green, 5 red, 3 blue; 4 green, 3 blue, 4 red; 8 red, 4 green, 7 blue; 8 red, 4 blue, 6 green; 10 green, 5 red, 14 blue +Game 62: 12 red, 14 blue, 9 green; 9 blue, 6 red, 4 green; 2 red, 5 blue; 1 red, 12 blue +Game 63: 11 blue, 13 red, 11 green; 4 blue, 9 green; 8 blue, 9 red; 7 red, 11 green, 7 blue +Game 64: 10 blue, 8 red, 12 green; 10 red, 12 blue, 9 green; 3 green, 17 red; 12 green, 15 blue, 16 red; 6 green, 15 blue, 1 red; 9 red, 6 blue, 10 green +Game 65: 7 red, 7 blue; 3 blue, 1 red, 1 green; 3 red, 8 blue +Game 66: 1 blue, 3 red; 10 green, 5 blue; 4 green; 3 red, 11 green; 3 blue, 15 green, 3 red +Game 67: 1 red; 2 blue, 2 green, 1 red; 6 green, 1 blue +Game 68: 7 red, 4 blue; 4 blue, 6 red, 7 green; 2 green, 19 red, 11 blue; 11 green, 9 red +Game 69: 4 blue, 3 green, 1 red; 7 blue, 1 red, 3 green; 5 blue, 1 green; 2 blue, 10 green, 2 red; 2 red, 6 green, 5 blue; 1 red, 4 green, 2 blue +Game 70: 9 blue, 7 red, 6 green; 19 blue, 4 red, 5 green; 6 blue, 7 red, 4 green; 3 blue, 4 red, 2 green +Game 71: 6 green, 12 blue, 4 red; 11 red, 10 green, 11 blue; 3 red, 14 blue, 13 green; 4 blue, 3 green +Game 72: 2 green, 1 blue, 9 red; 10 red, 3 green, 1 blue; 11 red, 2 green; 2 green, 1 blue, 5 red; 1 red, 1 blue, 3 green; 13 red, 4 blue, 1 green +Game 73: 11 green, 6 blue; 7 green, 6 blue, 7 red; 12 green, 8 blue, 11 red; 4 red, 2 blue, 9 green; 4 green, 7 blue, 2 red +Game 74: 3 blue, 7 red; 3 blue, 5 green, 2 red; 5 red, 1 green, 3 blue; 8 green, 2 blue, 11 red; 3 blue, 8 green, 10 red +Game 75: 2 green; 5 blue; 1 blue, 1 red; 1 red, 9 blue, 2 green; 2 blue, 2 green +Game 76: 12 blue, 13 green; 5 red, 11 blue, 9 green; 12 green, 6 red +Game 77: 1 blue, 15 green, 12 red; 15 green, 5 blue; 14 green, 3 blue, 8 red +Game 78: 11 green, 8 blue, 1 red; 9 green, 8 blue, 1 red; 13 green, 5 red, 6 blue; 5 red, 7 green, 20 blue; 10 blue, 5 red +Game 79: 3 blue; 6 blue, 5 red; 4 red, 1 green, 4 blue; 7 blue, 6 red; 7 red, 1 blue; 1 red, 1 blue, 1 green +Game 80: 11 green, 3 red, 8 blue; 2 red, 15 green, 2 blue; 5 green, 8 blue, 2 red; 8 blue, 14 green; 2 blue, 13 green +Game 81: 9 red, 4 green; 7 green, 4 red; 2 red, 4 blue, 6 green; 6 red, 4 blue, 9 green; 1 green, 3 red; 6 green, 1 blue, 8 red +Game 82: 5 blue, 3 red, 3 green; 5 red; 2 red, 3 green, 8 blue +Game 83: 10 green, 1 red, 1 blue; 3 red, 1 green, 1 blue; 4 red, 10 green +Game 84: 16 red, 2 green, 6 blue; 6 red, 3 green, 8 blue; 3 green, 10 red, 5 blue; 4 blue, 3 green; 15 red +Game 85: 3 green, 2 red; 5 green, 4 blue; 5 green, 8 red, 3 blue +Game 86: 7 green, 16 blue, 7 red; 1 green, 12 red, 2 blue; 15 green, 16 blue, 7 red +Game 87: 1 red, 6 green, 5 blue; 2 green, 1 blue; 2 green, 1 red, 1 blue; 5 green, 4 blue +Game 88: 3 green, 3 red, 4 blue; 1 red, 1 green; 6 blue, 9 red, 1 green; 1 green, 11 red, 3 blue; 7 red, 6 blue +Game 89: 2 blue, 3 red, 4 green; 5 red, 7 blue, 14 green; 8 blue, 5 red, 16 green; 2 blue, 5 red, 7 green; 5 green, 9 blue, 1 red +Game 90: 1 blue, 3 red, 7 green; 11 green, 4 red, 1 blue; 1 red, 1 blue, 6 green; 2 blue, 2 green; 8 green, 2 blue; 3 red, 2 blue, 4 green +Game 91: 6 blue, 4 red, 1 green; 8 red, 3 blue, 3 green; 1 green, 2 blue, 5 red; 1 blue, 3 green +Game 92: 8 green, 1 red, 5 blue; 2 green, 7 blue; 11 blue, 5 green, 8 red; 7 blue, 3 red, 4 green +Game 93: 3 green, 1 red, 9 blue; 13 red, 5 blue, 8 green; 5 green, 2 red, 7 blue +Game 94: 4 green, 10 blue, 8 red; 4 red, 10 blue, 2 green; 2 green, 10 blue, 5 red; 5 green, 2 red, 10 blue +Game 95: 5 green, 1 blue; 3 blue, 11 green, 8 red; 8 blue, 2 red, 12 green; 4 green, 4 blue, 4 red +Game 96: 1 blue, 13 green; 8 blue, 3 red, 4 green; 1 red, 3 blue, 10 green +Game 97: 18 green, 4 red; 1 blue, 2 red, 9 green; 6 red, 3 blue, 10 green; 3 blue, 15 green, 4 red +Game 98: 2 blue, 3 green, 6 red; 1 green, 1 blue, 8 red; 8 red, 3 green, 1 blue; 2 blue; 8 red, 2 green, 2 blue +Game 99: 1 green, 2 red, 1 blue; 8 green, 4 blue, 1 red; 7 blue, 1 red, 11 green; 9 green, 3 blue; 1 red, 2 blue; 1 red, 6 blue +Game 100: 7 blue, 9 green, 2 red; 5 red, 9 green; 1 blue, 8 red, 13 green \ No newline at end of file diff --git a/2023/2.py b/2023/2.py new file mode 100644 index 0000000..e902a32 --- /dev/null +++ b/2023/2.py @@ -0,0 +1,63 @@ +import re + +class Max: + def __init__(self, id, red, blue, green): + self.id = id + self.red = red + self.blue = blue + self.green = green + + def isValid(self, maxRed, maxBlue, maxGreen): + valid = self.red <= maxRed and self.blue <= maxBlue and self.green <= maxGreen + return valid + + def power(self): + return self.red * self.blue * self.green + + +def main(): + maxRed = 12 + maxBlue = 14 + maxGreen = 13 + with open("2-input.txt", 'r') as file: + array = [] + for line in file: + array.append(parseLine(line)) + result = 0 + power = 0 + for a in array: + if(a.isValid(maxRed, maxBlue, maxGreen)): + result += a.id + power += a.power() + print("power: " + power) + print("id addition: " + result) + +def parseLine(s: str): + idSplit = s.split(":") + id = getID(idSplit[0]) + green = 0 + blue = 0 + red = 0 + roundSplit = idSplit[1].split(";") + for round in roundSplit: + colorSplit = round.split(",") + for color in colorSplit: + green = max(green, getColor(color, "green")) + blue = max(blue, getColor(color, "blue")) + red = max(red, getColor(color, "red")) + return Max(id, red, blue, green) + + +def getColor(s: str, color: str): + split = s.strip().split(" ") + if(color == split[1]): + return int(split[0]) + return 0 + +def getID(split1): + digs = re.findall("\d+", split1) + id = digs[0] + return int(id) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/3-input-test.txt b/2023/3-input-test.txt new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/2023/3-input-test.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/2023/3-input.txt b/2023/3-input.txt new file mode 100644 index 0000000..811b9da --- /dev/null +++ b/2023/3-input.txt @@ -0,0 +1,140 @@ +416.........................559...............417...............785.......900.......284...........503...796....992.......................... +.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995...... +.....................458...856......+.........+....&..............680.......104.............%....516.................................*...... +...........822..174..*.....&...........711.746.......&............$....../.............656....#...........265=......634.*.............430... +..827.137..*...*....39................*..............856..............767........522......$..773....619..............*...287....501......... +..........726...511.............*.....320........476...............................*................%...899....72..731...........%....$..... +.....861..............232....223.933...............*.@........424*618.858.......................................$.......338.205........535.. +.......#.............-....................676...713...427.................-.......615.........126...................=..*.......*...&........ +....40..........996..............520.974.*..........#......*.566........907......................&...214...996*911.115.363..960..897........ +....+.............*....................$..172.....559...763.....*............554......*.............*....................................... +.......527...#.....90.+....66.................................890..............=...802.93.131..791...209......&........928......303....$.... +950.....*....773......105..............725........................................................%............886.......*........$.384..... +........383......741..............@..=....#.....179.18..%974..........624.......64.266.................701...........%..671.721.........942. +..................*.............914..548..........+.*.................*...........*...................*.........834.394.....*............... +.......502*80..960........................25........464.........831.846........25.........329..985...458.+.....&................377..659.... +..........................................*.....292...............*............/..................@......350........938............*....$... +...738..............428......+.......311...742.........236*631....816.&......+....86.........81.......................*.973*341.266......... +......*.....673......*......614.........*.......689.48.................450...816.....754...........258..@585.......154..............@....... +...231.....#.........681...........855...775..........*.....=..257...................................*.............................469..=682 +........#...................807...&.............418.19.....259....*459..906...185.356.......778.......230....................556............ +.......924.........459......*..............804.=.........................*...*...........&....*................=........836..+......618..... +.....=............#.......900........+...........702..383........%..*...250..503.......637.808.......97/....@...370.......&........#.....710 +..988........685............../663.273...........*...@..........16.251...........$..............*..........964.......658.....537........*... +...............*......171*......................714.....543............737.....372.............941.............113..*....=.......853....733. +............470..161......508.....56...170.............$...................389.....544.....208.....98.........%.....617...884......-..@..... +.766.591............../.........-......*.......210.........618......*874....-.........#...*....129.=..194......../...................992.... +....../....170@..140+..753....918....467.854....*................989..........979...............*.............-.907...276...931*618......... +..700............................................801....929..859.....#..........*.............594.493......981..........*................... +....+............173..............................................251........629..........970........*................136.........388...*... +......721.......$......911....766..................541.234....=...........47......614....@.....*217..885.680.742....................#..84... +.377*....*81.............*.......&...937...........+...*....155..@......*............*......648............&...*.....&401......493.......... +.....1.................533............*..399...........861......951..709.331..126.....876.....................289.........@.....*.......*... +..........107....452-......594.888.431....*..+660...........79................................$......275*876.......978.....594..400...39.... +.........+................*....*.........925..........$.......*........599.......228..........60....................+....#.................. +...283...................177...708...........642....661........294........*............................288*793.867.....482.479.769....73.... +...........617..855*...&.............605................783.91.........847................&...../...............*..#..........*.......+..... +.672..303+...*........967...............*453.....884@......*...208.949........*..........986.....249.....352..818.596.56.................... +...*..........88...............569.....................975.....*.....*..638....619.......................+.............*.......*.......462.. +....500.....=...................*.................*205..*..-...228.508....&........................395..............845.....683.365....*.... +........197.672.841..............214.=...847...912.....24.349...................%....584.257............152................................. +.626....-..........*..447............714....&.....................463....287...360........*............*...............*.................717 +..........53......334...*........................*167......................*.......................554..246...........295.396......./....... +.......24..............92...........897.......220...........................930..703...414.....711..*.........723.........*....117...146.... +.......&...........548.....324.21......................622.........820.404...............*....../..139......&......*.......578...*.......... +.....*......204......*..........*.............226...........663.......*......555.992.....502...........631..49.#....366........677.......... +..958.350.....*......44...694...449..-39........*...........-...786.........*......*............................140......................... +...............477.........*...................815..............*..........815.................521....................&...273........103.... +.........828............781....464..................276......646....665-............924..........*.......955........759.........934...#..... +........*..........*..........*..........15.193.......*.....................&.................808....347*......963........*....+............ +.........810.....360........638...434.....*....*751....812.....573...........85.........+.........95.......892...*...153...220..........187. +....714*....................................................80*....162=.................214...........842...&...39.......................... +........265.........................51.......285$.......................586.......=.................................*.....*..............948 +..989..........22.=......374.......%....................142.......736..@.....507.636.797.....273.........872.....567.978..334.....382...*... +..........@.......68..=......................116.130.......%.250../......-...=........*.........*486.415..........................*....813.. +.......505............61..140..........435..........*691......*........852..........571....408..............12......80.......228...109...... +.........................*.........207...*..24................402.=...........................@....................../...162................ +....285.................672.552........492....$./..................3..620.391...............................179............*................ +...*..........159...428.......*.................390.111.........$.....*...*..................348.355.481.......&.210..99...41............... +...52......12..@..........808.810.897...................663..280....57..............476.............*............*.....*........208=........ +..........*...............*.........@.286..................*...........................*..........................905.296..............148.. +.......298......119.....172.................622$..637................#......342.......679.111......-968..104*478............#.......*....... +.../.............*........../......................*..............658..........*718..........*136.....................503.899....889.498.... +....691........341.262..36.549...........386........437.............................662...........848............#......*................... +.......................*..........936...*...............................-...........*......516....%......358....707..535...........841...... +......$..............639............*..798.../..67%............137...716.......313.247......................-............@.....371.......... +....433.677..605.267................1.......930........478........*........565*................................869.......372..@....228...... +...........@..*..$...794.........................74.......#./......833.348.......................................+................*......... +......865...............*.........................*..........839.....................=......................................916..84.@....... +.................-....451........541@......468..684....18............759.............499................124.....426*.........*......882..... +...68*...........614........509...............*.........&...956*308.%........&....36...........480+....../..........917....32....#.......... +......363..377.............*..........441.....418..........................279.....*.................139..........................944....... +........................412............*..........%....920*585....526*............931.346&.807..840.....*.626-...#....................923... +.....283.....924...+..................628.......33....................908..766..............*........336..........446...........191......... +...............*.249........@264..35...................502.791.#...........*......=............126....................957....71....*.768.... +.........144&.36.....216.........*...........................&.730..........201..581.704.........$......715.............=......*.......%.... +...349..............*....598...949.........189....981.....#.............524...................*............=................440...847....... +.................967....#..........999*6..%.........-......604............&.189.626...#774.159.647....................168.........../...329. +..............................................481.....*........................*.................................747..%.................#... +..........245...878.......495....57....841.........351.517..........-297........................343.599/........&.......360..........-...... +430........&..............&.....*...&.....*885...........................9....392.......93..336*...........................*321.....86...... +....469......#.................999..796..................899.........250*........$.......*........247............................+.......328 +......*...696...615..300..603..............................*....232...................402...501......*.......77.271.....@.........146....... +......170......%....$.........*..991..........782.49.......128.............................*........161........*.....648......123........... +..........646................901..*.............*......134...........517..2..287........513...............................644...*........... +...................999*620.........541.379.....488..18*.......................*...............208....931.338..%143...........*...19......... +...+.......938...........................*...%.............&........626......268.418......841*..........*...............820.395..........913 +.723...834*..........+............162.667.....84............803.804...*............*................399........172..530*.................... +.....................596............*............................./.287............852....623....@.*..............@........168...965..*17... +.....=488...................758....607.....&......53%......................105.683......-...*.860..244.....&....$....232.................... +.............................*..........333....................197........+....*......334.954.............686...464...............544....... +.139=..............754...993.677..../.......933..........391....*....357*.....952......................@..........................*......... +..........831............../.........94.600................+.121.........183........18..686.....665*..823...........575...........68........ +141...800....*....692...........254@.....*...819-.....................................*..@...................17.......*...815...........686. +........%.602........%.................186..........562.93....774.....................11....948....912.........*328..243.*.................. +.......................................................*..........607....280..................&....+.....................548.&897.100@...955 +......504.....605...........889@.............975..664....$.....#............*....141.................378%.........812....................... +.....=...........*.....730...............%...............899..480.....*....375.....-.444.........47*.........@63...........828.....468..462. +.......607.../...23....=......=........383.............................522............*.............433..360..................*372...*...... +........*...975.............428...................592*......@258...114......%......431...................*......+........658.......560.163.. +........16........................329.......315.......973............*...333....@.......$....782..18...58....533........*...............*... +..327.............563...889.......*...........*..595...............913........671..354..937...%..*...&...........&.787...975.......676...247 +.....+..&...401..*..............713........=.757...#.873*47...#465..................................440..588/..859.%..................*..... +.665....133...%..196....907..............348..................................162........305...................................163.-........ +....*....................*...........170.........222.804....784..............*...................................................=.742...... +..239..338.....27-.437..543.........*....609......*..*......-...............582..-...........343*560....852.../....636..263................. +..........*900.......*............17...........948.....597.....=....922...........682./255................@..35.......*.......211-..#....... +.......*...........686........984..........78......896*......13........+....................985...&....................278.........876.835.. +....630.82....$851.....905.......*..281...*...............................352..........*746........215.877....845..........471.852.....*.... +.........................*.....757.*......625...........924......878..........912...............-.........*../.....538%......+.........871.. +..954*712..977.....-..762..........236.........527*674.*.........*........811*.....228....&.....5........739...483.......................... +..........*.......470..................................707....363.................*......525.......303..........*........463....537......... +...460...947...............130.....757./96........*.................=...529....+..466........527................65..%648....=.....*......... +.....*......................$....../..............968..............479.&....630............................598.................952.......... +.......&..........793...................................514...............-...................311..........=....83......#.............124... +.975....399.......*...-.......*814...663..................*....*...........381../...............*.............@.........284............*.... +...*............367....198..........@.....992.....716*529....96.................729.329.688...%.322.-......67.79......-.......335....997.... +488............................632........*...../......................387.............*....225......491.............391..750...%........... +.......861.527......778.165.......*........187..916.......845....-....*.......873.................................@......................... +..545.....*.....$.....*..*......627............................736.376..845...*....594........+.......171.........292...........*750..-..... +.................407.403............+...342.................+..........*.......897..........400.......$......................910.......350.. +...........................40..284.66...*......494..........255.......653..............866.................942=..................*52........ +....&........827.......296...*........$.401......*..............892*...................$.............1.164.......343..........485........... +.930............*.........*..944...308...........763....../.........62.....113....=...........421........*..........................580+.... +........50*.....934......705............................999..................*....541...............847-.950..............*131.............. +...........209....................................&404...............276..242.............723.652................873...313..............24.. +......*........606....550#.....2./........@..................899.......*.....................*..........235..112...........704.....337...... +.......837....*...............*...83...993.....*416.........-....580%..535......../.....-204...............#..*.....93+....*...723./........ +..............168.....753..593..............504......./........................488..............=.............458.......872...*............. +...#85...................&......911/...................880........315..872..........=....494..349....466..428..................40........... +........939........648......................*................227...*......*.......924...*...........*.....*................................. +918*......&.@........*...902..269..834....87.826.........../...*...919.118...817......109..........933..643...........&..............-...... +....949......883...111..%......*...%..................710.464.943.........../...................................842....305.....469..289..... +..........................%...974......*407..168.647...*..............617.......498/.....848...........@99........*...........+............. +..........176...........120.........469........&...#....997......464.......274.............*......./............477.417../.......738........ +.........*.......964.........291..........................................-.............2..29...272..465...............-..819........718*265 +....298...747.......#.......*.....+745...........460...741*762.275...491.......+.735*34.*............-....*841......+............*.......... +...*........................593..............298...#............%....$......225.........943........................23.....702.601.616....... +..889................695........654..750.....*.............637........./...............................780....*726....233...*............... +..................../.................*.....453.....642....*.........828......@...94...........152/...*....790.......*.....445......../..... +...........................51.......681........................271..........719.......................964......399..426...............456... \ No newline at end of file diff --git a/2023/3.py b/2023/3.py new file mode 100644 index 0000000..ea2fbe5 --- /dev/null +++ b/2023/3.py @@ -0,0 +1,78 @@ +import re + +def main(): + with open("3-input.txt", 'r') as file: + lines = file.readlines() + total = 0 + for line_index, line in enumerate(lines): + print(f"Line: {line_index + 1}") + digit = "" + for index, char in enumerate(line): + if char == '*' : + nr = [] + print(f"found *") + for i in get_number(line, index-1, index +1): + print(f"found {i} on same row") + nr.append(i) + if(line_index - 1 >= 0): + for i in get_number(lines[line_index - 1], index-1, index +1): + print(f"found {i} on above row") + nr.append(i) + if(line_index + 1 < len(lines)): + for i in get_number(lines[line_index + 1], index-1, index +1): + print(f"found {i} on lower row") + nr.append(i) + if len(nr) == 2: + total += int(nr[0]) * int(nr[1]) + + print(total) + +def get_number(line: str, from_index: int, to_index: int): + res = find_digits_with_index(line) + numbers = [] + for seq, idx in res: + if ranges_intersect(range(idx, idx + len(seq) - 1), range(from_index, to_index)): numbers.append(seq) + return numbers + +def find_digits_with_index(input_string): + pattern = re.compile(r'(\d+)') + matches = pattern.finditer(input_string) + + result = [(match.group(), match.start()) for match in matches] + return result + +def ranges_intersect(range1:range, range2:range): + # Check if either range's start is within the other range + if range1.start <= range2.stop and range2.start <= range1.stop: + return True + else: + return False + +# titta i en line från index -> index +def has_symbol(line: [], from_index: int, to_index: int): + if from_index < 0: from_index = 0 + for i, char in enumerate(line[from_index:]): + if(i + from_index > to_index): + return False + if(not notDigit(char)): + return False + if(isSymbol(char)): + return True + return False + +def isPartNumber(line: [], first_index: int, last_index: int): + is_match = False + if(first_index > 0): + is_match = isSymbol(line[first_index]) + return is_match or (last_index < len(line) and isSymbol(line[last_index])) + +def isSymbol(s: str): + pattern = r'[^0-9.\n]' + return re.match(pattern, s) + +def notDigit(s: str): + match = re.findall("\d", s) + return len(match) == 0 + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/3_input_test.txt b/2023/3_input_test.txt new file mode 100644 index 0000000..b97bb79 --- /dev/null +++ b/2023/3_input_test.txt @@ -0,0 +1,3 @@ +416.........................559...............417...............785.......900.......284...........503...796....992.......................... +.........702*....772............378..569.........&.49..606...14*..............$.453*.........307....*......$.....-.................995...... +.....................458...856......+.........+....&..............680.......104.............%....516.................................*...... \ No newline at end of file diff --git a/2023/4-input.txt b/2023/4-input.txt new file mode 100644 index 0000000..30a0d95 --- /dev/null +++ b/2023/4-input.txt @@ -0,0 +1,186 @@ +Card 1: 10 5 11 65 27 43 44 29 24 69 | 65 66 18 14 17 97 95 34 38 23 10 25 22 15 87 9 28 43 4 71 89 20 72 5 6 +Card 2: 25 43 15 31 45 19 36 73 34 85 | 92 11 85 68 74 20 19 71 1 36 43 32 77 33 14 31 73 15 45 83 34 25 6 88 57 +Card 3: 4 46 42 23 18 98 59 75 19 57 | 22 3 75 80 42 23 59 39 98 38 18 21 67 57 20 25 71 26 64 4 83 79 91 65 90 +Card 4: 92 13 56 27 19 44 70 93 32 66 | 38 4 19 75 87 93 32 1 23 14 51 22 42 44 33 63 13 56 70 66 18 92 47 53 27 +Card 5: 25 18 30 45 23 80 91 13 47 61 | 62 45 71 30 39 19 61 68 23 80 91 96 25 58 13 88 67 29 60 2 74 55 12 83 46 +Card 6: 20 36 26 18 61 35 94 58 79 19 | 85 68 56 7 53 58 19 20 79 59 26 61 18 15 94 33 29 71 35 89 17 36 3 67 72 +Card 7: 29 21 71 91 74 6 12 53 50 55 | 29 51 12 74 82 18 21 55 53 33 65 91 95 69 2 62 57 50 3 79 71 61 47 6 14 +Card 8: 24 72 46 88 65 12 48 97 76 73 | 17 97 87 18 83 11 49 44 88 79 64 55 19 25 63 74 73 14 82 15 72 43 76 48 46 +Card 9: 86 38 55 52 33 61 41 75 87 26 | 38 97 88 91 33 36 54 64 40 52 68 71 43 55 72 75 4 61 58 49 56 86 30 15 17 +Card 10: 15 37 72 5 66 81 33 6 80 76 | 52 34 21 68 72 82 91 81 7 19 86 67 94 87 16 63 43 9 14 23 44 60 18 4 74 +Card 11: 24 21 17 27 34 80 18 79 56 32 | 18 45 21 63 82 69 48 54 89 5 83 80 92 93 49 8 55 12 97 35 4 3 42 94 56 +Card 12: 90 61 45 54 64 93 69 85 58 88 | 79 89 74 45 27 61 9 56 69 88 13 80 66 4 16 62 34 51 71 54 48 64 58 63 50 +Card 13: 80 39 35 27 56 94 25 77 84 26 | 24 19 72 54 96 63 56 15 25 16 59 35 20 57 52 65 95 66 45 31 77 60 42 93 37 +Card 14: 33 83 94 41 7 79 18 40 24 97 | 49 27 45 21 20 8 93 26 12 42 94 33 96 57 98 91 19 52 78 2 18 80 65 72 44 +Card 15: 16 83 92 40 13 35 94 23 47 17 | 55 61 75 43 18 5 22 65 67 7 49 63 71 13 45 78 53 21 57 34 98 99 64 32 56 +Card 16: 14 76 72 8 42 61 60 82 24 21 | 56 10 38 11 37 45 29 22 51 98 86 49 26 13 16 52 50 14 70 30 87 73 66 77 88 +Card 17: 63 32 83 13 81 89 33 49 5 34 | 99 85 12 6 27 93 78 44 14 76 1 51 36 9 4 62 91 84 8 37 45 66 75 42 40 +Card 18: 43 97 37 61 69 94 60 67 91 99 | 87 25 65 98 26 62 42 11 61 32 34 76 14 20 44 92 22 5 12 46 21 33 3 15 59 +Card 19: 32 96 10 49 26 86 67 85 50 75 | 58 98 84 43 23 33 64 74 37 80 63 40 51 95 13 55 31 25 87 97 81 52 53 24 6 +Card 20: 7 70 41 40 16 15 20 72 47 93 | 93 41 7 79 62 86 69 70 75 67 51 72 81 15 22 48 47 80 71 38 40 97 20 82 16 +Card 21: 90 76 52 48 36 37 89 45 20 17 | 23 48 86 7 99 50 20 58 93 43 16 91 5 76 52 45 17 68 89 22 61 36 90 37 83 +Card 22: 85 71 20 58 32 83 53 94 61 80 | 88 59 66 80 49 53 19 97 5 20 62 8 94 54 67 73 93 12 10 61 32 41 71 72 85 +Card 23: 60 61 30 65 11 28 89 54 22 78 | 88 71 97 46 60 45 54 26 22 42 59 57 80 9 69 61 47 3 85 7 32 78 11 66 33 +Card 24: 35 16 5 85 87 58 66 39 88 12 | 51 32 59 41 73 21 58 79 72 10 74 28 95 69 16 92 88 18 34 46 77 17 65 76 99 +Card 25: 67 41 62 96 40 22 81 12 98 9 | 92 66 87 35 50 38 19 14 74 93 1 76 59 6 84 99 58 61 34 13 63 30 53 90 24 +Card 26: 10 78 28 1 72 94 60 71 37 89 | 71 9 28 11 4 72 43 90 74 37 18 14 40 16 21 97 59 13 73 89 63 60 5 10 70 +Card 27: 65 7 45 59 32 51 22 16 2 64 | 65 37 72 7 26 86 49 3 63 67 16 52 51 21 89 14 70 78 36 27 92 39 8 64 42 +Card 28: 89 17 93 57 78 33 52 97 53 4 | 23 20 66 55 42 28 52 61 35 41 60 51 84 83 49 67 22 5 48 9 2 7 87 38 93 +Card 29: 64 12 30 16 87 59 76 34 85 28 | 47 21 32 37 94 25 6 26 49 59 81 45 87 70 23 5 91 8 34 58 72 89 52 93 63 +Card 30: 11 69 86 19 59 28 41 68 81 66 | 92 33 1 43 88 75 42 29 38 55 24 89 4 95 47 70 30 65 83 72 25 82 14 85 21 +Card 31: 48 43 14 54 80 70 93 64 42 77 | 91 19 62 79 30 23 29 11 37 13 41 54 97 52 7 90 33 17 96 28 20 9 47 31 38 +Card 32: 78 91 2 56 93 3 88 50 20 12 | 2 20 18 84 12 82 43 76 39 53 32 79 57 17 63 28 30 9 1 55 96 70 29 25 87 +Card 33: 99 93 14 28 36 68 11 97 58 9 | 94 4 67 66 40 87 96 83 78 23 71 41 92 24 77 1 15 42 12 57 3 89 46 72 59 +Card 34: 20 88 61 67 31 21 90 30 26 56 | 6 71 18 34 66 10 41 37 58 32 13 76 3 96 86 47 50 91 17 15 39 68 73 27 12 +Card 35: 5 58 96 48 47 70 19 34 63 84 | 21 59 88 32 37 33 20 49 55 62 7 66 1 2 40 77 22 82 39 13 45 61 56 44 17 +Card 36: 36 66 44 13 33 2 60 46 4 31 | 73 99 13 72 44 80 60 77 65 19 46 4 59 97 61 98 31 92 83 2 68 36 66 33 22 +Card 37: 95 71 87 60 17 19 97 30 48 55 | 30 53 35 19 94 27 95 44 47 13 69 87 12 56 4 26 85 17 63 7 70 60 71 41 3 +Card 38: 61 16 20 92 98 19 79 62 45 91 | 79 44 60 23 25 83 92 19 16 38 66 48 75 20 2 98 24 87 45 62 61 32 91 69 13 +Card 39: 49 2 18 74 99 30 54 16 93 68 | 8 74 75 72 68 67 89 86 31 30 97 47 24 71 18 99 54 22 16 70 3 7 49 50 25 +Card 40: 12 45 7 15 65 84 77 36 28 1 | 51 35 63 43 59 81 88 58 56 71 94 46 9 86 28 13 30 99 20 17 95 23 32 54 47 +Card 41: 8 99 26 60 56 69 48 47 31 16 | 83 9 66 73 95 67 21 86 94 2 99 51 98 80 57 36 82 4 23 19 12 68 88 44 59 +Card 42: 99 48 94 50 91 55 2 12 67 36 | 47 45 62 66 31 84 26 20 52 41 40 55 21 35 37 15 69 53 72 65 79 60 25 48 57 +Card 43: 41 75 61 39 67 88 48 42 51 79 | 85 99 95 79 64 92 34 8 46 15 56 28 12 6 81 48 41 49 20 97 91 67 51 55 74 +Card 44: 10 99 33 96 21 6 49 62 82 38 | 68 41 88 24 6 28 98 66 96 49 30 33 94 85 1 75 21 61 60 99 89 81 31 54 20 +Card 45: 46 61 60 2 29 45 7 55 83 16 | 25 34 84 91 97 61 55 17 16 79 67 53 59 27 69 58 29 46 24 93 3 32 60 49 33 +Card 46: 93 25 42 68 22 85 58 61 63 50 | 8 46 4 15 96 83 94 13 19 65 24 80 64 38 89 44 52 78 98 36 47 51 97 2 57 +Card 47: 11 59 80 10 72 76 43 86 56 7 | 59 67 35 5 47 81 99 21 38 90 73 55 64 24 34 42 58 51 56 11 68 60 23 92 43 +Card 48: 97 88 28 44 24 10 17 27 83 12 | 67 92 74 50 4 35 77 47 6 40 11 20 76 16 42 9 3 79 68 82 43 41 60 94 89 +Card 49: 35 98 90 92 42 12 13 83 53 95 | 36 34 51 96 24 94 53 7 31 6 71 48 16 75 77 83 68 46 14 66 65 22 9 74 93 +Card 50: 1 65 66 2 76 36 78 56 99 90 | 12 13 3 38 96 20 10 14 57 81 7 35 88 55 68 48 31 52 89 9 70 15 79 80 16 +Card 51: 70 41 53 40 55 82 69 7 5 71 | 56 4 54 46 65 17 91 94 72 88 90 31 85 14 97 95 44 26 92 8 21 73 38 77 37 +Card 52: 62 16 85 42 56 1 82 92 43 37 | 74 28 19 42 82 21 85 37 75 50 17 16 1 76 56 86 91 31 3 92 6 62 43 64 83 +Card 53: 69 91 12 9 63 50 58 57 67 13 | 40 42 70 62 6 69 9 82 78 19 89 56 57 83 47 25 98 46 30 53 72 28 10 58 44 +Card 54: 73 44 64 21 16 50 63 41 36 51 | 6 4 66 39 21 14 67 50 15 1 35 40 64 44 24 73 28 47 80 13 2 43 91 46 16 +Card 55: 47 55 14 43 1 54 81 65 19 33 | 19 10 97 44 84 61 5 25 96 81 32 73 75 83 65 17 3 41 14 92 9 80 27 63 8 +Card 56: 43 26 93 75 33 51 89 60 1 81 | 9 10 16 60 84 81 93 26 4 96 17 91 79 18 43 67 47 92 1 33 21 63 51 75 89 +Card 57: 76 70 7 31 8 39 63 99 30 13 | 31 63 76 17 68 39 30 50 27 72 84 79 70 57 28 13 29 97 67 8 75 87 3 7 99 +Card 58: 28 29 86 65 7 36 38 3 20 43 | 70 20 65 64 43 98 18 19 78 87 7 55 30 35 28 37 56 29 39 38 3 40 36 86 75 +Card 59: 55 10 23 31 17 37 22 92 14 44 | 67 11 60 92 42 68 44 78 3 43 76 16 97 55 8 35 49 54 18 40 46 52 95 84 69 +Card 60: 34 13 63 27 44 11 80 9 43 28 | 48 44 95 59 41 13 30 40 73 33 10 19 74 14 78 12 37 28 35 63 87 39 53 11 93 +Card 61: 42 75 7 20 73 47 16 28 5 92 | 12 65 7 5 38 74 58 28 62 85 10 47 18 75 86 52 73 77 1 43 36 93 80 13 20 +Card 62: 47 35 92 12 61 25 83 96 6 87 | 5 21 56 66 24 13 19 54 68 92 87 12 93 35 88 11 49 79 69 31 42 96 47 59 84 +Card 63: 43 97 21 67 11 40 81 53 23 42 | 65 52 24 80 71 6 3 88 72 17 66 77 41 57 44 91 1 36 56 27 39 43 8 67 34 +Card 64: 96 73 20 69 19 93 98 99 41 24 | 20 19 52 63 60 34 8 40 14 6 89 1 94 62 98 96 22 71 65 35 28 18 25 59 42 +Card 65: 5 40 14 19 36 93 59 9 12 75 | 60 15 90 21 71 66 86 59 62 31 82 76 38 14 9 98 53 32 6 8 19 4 11 33 29 +Card 66: 97 35 40 5 62 15 79 72 38 32 | 69 8 94 75 35 9 64 96 42 76 67 91 31 92 52 71 77 45 18 12 61 25 88 20 50 +Card 67: 55 89 12 98 71 16 36 87 91 25 | 32 39 83 13 10 81 51 29 43 7 70 60 40 78 44 17 23 94 57 22 20 11 86 34 99 +Card 68: 53 37 26 55 34 39 62 35 68 86 | 44 85 58 41 42 31 52 35 66 49 77 65 27 60 7 2 45 21 26 40 20 18 69 4 99 +Card 69: 45 7 89 51 21 97 38 33 84 28 | 72 39 65 64 24 1 62 56 54 12 5 60 80 49 88 26 42 19 71 46 87 70 9 8 82 +Card 70: 50 92 10 16 56 40 14 6 61 30 | 11 68 37 3 74 32 58 66 18 20 69 33 22 19 97 7 53 39 64 91 57 55 51 87 83 +Card 71: 16 38 60 51 15 56 26 46 76 64 | 26 65 51 88 63 56 64 76 61 40 20 16 55 81 29 58 7 38 46 62 37 23 4 15 60 +Card 72: 48 3 37 4 61 7 63 69 18 38 | 7 63 22 48 8 91 2 77 40 44 69 86 51 74 37 53 38 96 49 3 4 61 18 15 43 +Card 73: 22 59 55 78 44 99 96 29 76 46 | 59 23 44 31 29 63 18 92 46 22 4 56 85 43 82 94 95 48 14 64 78 76 55 99 96 +Card 74: 49 46 66 52 68 64 62 93 81 96 | 83 31 15 98 68 17 74 79 81 20 25 66 16 53 43 46 30 21 24 70 63 1 82 71 72 +Card 75: 25 56 3 78 52 87 6 5 54 99 | 1 4 66 17 87 5 52 79 88 25 36 99 86 3 65 61 70 71 78 54 56 39 69 68 6 +Card 76: 62 66 78 11 51 71 42 84 39 33 | 26 29 45 7 32 58 83 72 19 82 67 91 76 59 39 93 41 5 12 47 79 49 21 11 20 +Card 77: 98 80 42 61 82 18 34 66 2 1 | 84 33 16 9 91 86 22 42 1 34 46 99 41 82 85 61 49 26 18 88 98 66 80 72 2 +Card 78: 74 69 73 62 50 86 14 34 15 57 | 73 40 62 15 52 9 68 82 46 86 89 22 83 74 50 58 38 8 34 16 14 69 57 64 60 +Card 79: 99 36 21 35 10 43 32 69 74 6 | 10 14 75 66 48 15 17 43 74 2 16 50 56 6 69 61 87 36 99 32 90 21 35 60 28 +Card 80: 63 3 55 47 54 20 95 72 36 57 | 80 57 63 66 47 44 49 38 3 54 15 52 11 75 16 72 50 55 36 95 33 81 26 45 20 +Card 81: 46 61 5 40 70 1 65 18 74 78 | 70 66 57 55 9 33 83 71 78 37 74 18 92 38 65 84 40 1 97 61 91 59 5 46 24 +Card 82: 85 25 81 91 76 71 8 12 24 21 | 37 76 74 34 85 91 44 41 99 8 25 28 98 39 24 12 71 75 95 47 21 69 46 81 40 +Card 83: 98 57 78 67 90 55 53 74 59 85 | 20 52 73 61 41 64 85 4 68 70 87 14 32 99 55 48 84 74 94 80 50 42 25 44 35 +Card 84: 22 56 11 9 47 49 1 91 78 55 | 52 28 97 67 44 37 4 61 36 53 96 30 2 19 9 43 29 15 49 41 68 72 7 38 94 +Card 85: 84 66 28 12 30 82 69 57 72 76 | 37 48 69 96 47 78 98 59 43 27 29 35 15 81 32 64 66 57 94 95 44 12 2 89 70 +Card 86: 47 5 23 50 56 45 25 54 60 42 | 34 71 3 94 42 46 43 5 39 83 95 27 40 18 13 14 47 59 65 12 38 11 15 82 28 +Card 87: 93 58 92 44 94 78 80 26 39 50 | 75 47 94 20 9 85 79 26 56 44 14 67 95 5 12 6 31 30 39 40 8 58 80 34 59 +Card 88: 61 20 91 64 69 87 50 2 8 45 | 61 14 28 67 11 91 82 51 18 52 66 24 62 59 92 69 2 49 3 46 42 35 4 27 20 +Card 89: 32 38 6 48 14 60 82 1 9 5 | 97 29 67 21 7 46 12 19 65 14 34 35 44 82 64 5 40 98 57 13 45 55 10 22 79 +Card 90: 89 54 9 27 86 29 17 26 20 47 | 46 51 40 60 2 41 59 89 79 47 73 52 15 29 81 84 96 22 44 13 10 72 87 28 86 +Card 91: 98 15 46 26 72 22 71 82 90 39 | 63 62 29 7 90 79 12 49 54 96 21 70 6 13 2 9 86 53 99 3 33 72 66 28 22 +Card 92: 65 33 98 12 70 18 47 71 69 59 | 58 66 85 27 26 43 87 51 39 83 73 33 17 54 90 5 99 29 8 49 34 71 45 19 78 +Card 93: 62 50 63 30 80 74 32 70 31 12 | 28 3 9 71 34 40 12 77 55 69 2 44 76 58 83 11 23 17 10 13 33 81 93 94 85 +Card 94: 21 23 14 63 32 5 70 79 81 44 | 4 1 18 35 64 58 80 42 47 92 25 78 82 11 9 83 65 86 17 90 69 56 98 85 84 +Card 95: 88 44 69 23 3 34 22 59 72 10 | 30 87 25 88 72 57 34 10 3 1 4 64 44 17 42 33 20 69 93 65 73 11 23 59 22 +Card 96: 51 94 55 41 65 57 59 98 39 96 | 38 54 83 39 96 94 88 65 32 41 9 55 51 73 93 59 58 63 64 98 45 57 8 33 74 +Card 97: 4 5 90 20 15 14 49 40 84 11 | 73 75 29 47 15 64 53 66 74 43 50 84 12 28 90 5 3 20 4 11 40 49 14 71 95 +Card 98: 74 49 44 95 50 71 77 22 41 57 | 4 75 47 3 45 82 58 53 88 69 59 17 51 68 66 67 36 25 7 14 78 12 49 73 9 +Card 99: 48 4 79 15 61 85 92 45 22 81 | 30 23 78 35 17 14 24 68 90 74 37 32 46 19 79 42 22 43 50 41 7 92 39 10 15 +Card 100: 26 67 9 17 82 11 34 47 10 20 | 56 10 73 34 59 62 97 67 12 48 47 20 17 90 7 40 50 13 55 9 27 65 31 38 26 +Card 101: 79 10 29 36 95 26 94 40 50 89 | 6 54 33 88 74 46 67 70 51 39 94 78 31 59 37 5 56 53 36 42 1 87 29 64 40 +Card 102: 50 40 34 30 2 32 95 70 10 16 | 57 66 90 83 94 31 79 67 14 93 28 52 32 22 9 43 54 39 49 40 35 21 87 78 88 +Card 103: 85 35 6 42 31 71 49 17 95 55 | 61 67 34 99 52 59 46 38 51 36 73 43 94 97 91 76 37 4 25 18 30 64 41 22 26 +Card 104: 89 73 65 69 94 68 28 49 19 55 | 14 33 51 92 40 70 73 91 45 20 72 21 69 43 19 52 56 27 4 37 67 1 13 80 83 +Card 105: 65 98 51 74 36 45 61 87 42 50 | 70 6 30 26 84 75 1 96 37 31 53 95 24 66 40 52 72 22 44 54 77 99 25 19 69 +Card 106: 35 46 52 34 28 3 36 42 80 10 | 53 43 20 22 62 75 83 11 44 85 78 39 72 90 73 18 86 16 65 19 98 47 41 45 88 +Card 107: 92 17 73 3 72 57 63 66 1 9 | 61 67 98 59 31 3 48 83 33 1 72 2 13 42 50 68 19 53 15 32 14 9 49 52 23 +Card 108: 9 27 28 88 4 82 63 73 36 92 | 99 45 20 57 31 94 7 22 39 55 86 79 95 62 96 58 97 12 15 56 34 40 17 51 33 +Card 109: 48 43 25 17 34 83 3 19 18 86 | 61 71 38 28 96 1 36 25 16 37 52 33 67 83 50 47 10 46 51 34 11 7 77 68 80 +Card 110: 36 41 13 69 51 66 48 79 60 93 | 94 80 37 81 66 97 17 73 13 35 27 67 88 29 84 57 96 77 12 75 33 85 15 82 58 +Card 111: 88 65 71 66 39 67 50 42 86 99 | 20 10 87 41 45 63 31 40 64 35 97 99 53 98 72 11 85 19 79 13 22 55 24 25 34 +Card 112: 75 37 68 18 90 88 42 20 50 40 | 31 5 15 80 33 66 35 69 64 97 11 92 85 94 24 65 44 22 71 36 17 12 29 39 98 +Card 113: 81 60 57 44 33 56 89 36 50 1 | 27 76 64 89 85 68 42 36 22 67 32 60 4 57 74 28 16 17 44 65 14 31 43 45 12 +Card 114: 34 92 35 43 65 63 29 49 48 13 | 13 16 12 31 14 75 2 30 3 37 28 11 91 50 69 72 87 52 95 85 58 94 49 19 23 +Card 115: 11 80 20 25 93 96 19 99 74 58 | 41 45 39 22 19 31 20 99 25 62 37 77 58 78 3 1 81 96 56 14 32 85 83 53 57 +Card 116: 86 83 81 62 55 80 77 46 53 38 | 62 80 30 83 70 54 38 51 25 46 84 81 27 53 58 55 56 41 9 77 22 49 18 86 78 +Card 117: 25 95 92 2 7 30 81 76 96 61 | 12 52 25 2 34 92 82 58 96 85 76 67 70 81 16 61 7 19 37 95 18 43 45 79 30 +Card 118: 91 45 52 34 15 28 48 83 67 38 | 98 6 92 67 38 79 34 4 80 48 58 91 88 72 3 33 52 73 45 89 28 63 41 54 17 +Card 119: 71 82 4 62 58 44 60 34 79 14 | 40 62 82 60 58 34 3 27 22 14 72 65 4 85 53 96 7 46 11 97 35 47 67 19 71 +Card 120: 63 80 9 4 94 46 66 61 81 76 | 47 35 81 21 73 23 63 38 55 65 94 76 54 15 87 43 8 72 70 75 9 3 66 80 85 +Card 121: 67 50 91 52 64 43 30 75 34 85 | 95 32 8 64 43 42 85 45 98 76 7 52 80 22 46 9 36 30 15 40 54 81 44 67 57 +Card 122: 19 62 83 56 46 1 47 64 25 23 | 67 50 30 79 58 90 39 80 69 20 91 37 94 65 88 98 18 92 73 33 66 44 70 11 64 +Card 123: 87 36 39 75 4 6 85 9 54 82 | 44 50 45 57 27 34 86 21 97 53 93 75 39 26 61 41 81 49 51 29 13 66 37 30 87 +Card 124: 74 32 61 26 52 21 3 30 5 58 | 38 69 20 31 68 60 44 61 97 79 29 66 23 62 37 94 33 54 96 71 87 1 9 50 11 +Card 125: 99 26 61 20 66 13 40 62 89 29 | 66 3 60 19 8 43 48 28 70 23 45 35 64 5 42 58 95 15 56 59 44 1 51 49 80 +Card 126: 51 1 62 49 98 34 36 74 73 17 | 67 92 29 10 21 59 91 89 11 15 83 9 63 99 41 60 31 73 78 25 72 96 35 87 71 +Card 127: 90 94 39 24 60 8 53 14 78 27 | 54 51 77 16 1 67 6 20 15 18 71 41 81 10 66 63 13 11 64 4 58 43 83 65 98 +Card 128: 43 40 76 96 65 82 15 5 23 16 | 70 24 56 40 52 71 96 7 87 91 11 75 43 41 5 45 30 33 34 15 80 27 61 76 17 +Card 129: 90 76 62 9 60 2 48 87 80 52 | 10 7 96 17 8 71 47 52 59 91 1 4 33 56 58 66 92 2 37 53 9 29 25 98 13 +Card 130: 88 44 46 35 38 33 86 60 40 83 | 86 92 43 88 40 26 80 4 11 54 46 44 50 60 58 33 35 83 82 48 67 18 55 89 38 +Card 131: 54 34 30 7 66 16 81 71 98 9 | 57 65 78 81 98 24 34 88 96 69 7 54 41 53 63 30 52 8 71 66 59 16 9 79 11 +Card 132: 51 40 52 69 64 83 5 39 2 58 | 58 5 88 83 93 56 78 50 40 63 39 62 89 52 75 81 6 43 65 55 69 2 64 33 51 +Card 133: 34 96 6 68 85 44 60 66 3 64 | 67 60 64 82 53 85 55 99 44 34 6 68 66 92 70 84 3 45 88 19 78 24 74 96 49 +Card 134: 60 85 79 76 9 68 49 67 5 44 | 79 2 68 59 76 14 3 96 67 13 7 73 88 4 77 71 43 44 11 5 27 95 60 80 20 +Card 135: 24 84 80 20 88 19 73 22 74 56 | 67 3 13 94 50 6 8 98 87 68 17 82 99 77 14 32 23 72 93 95 60 53 41 48 51 +Card 136: 40 21 95 86 63 78 61 49 14 67 | 92 84 85 79 55 56 96 52 34 22 57 26 65 93 43 5 50 8 36 94 46 30 97 64 80 +Card 137: 89 69 19 24 83 11 97 42 18 9 | 43 38 89 82 75 14 9 58 24 29 4 19 46 42 11 2 23 97 67 17 18 69 83 81 16 +Card 138: 70 72 41 78 17 85 93 97 99 73 | 11 93 97 81 52 17 49 10 91 20 99 58 13 89 74 47 70 23 65 90 7 4 64 28 85 +Card 139: 18 38 96 48 37 73 80 89 7 19 | 77 13 3 51 4 45 76 21 93 33 43 47 57 17 24 11 35 75 59 60 44 5 90 55 32 +Card 140: 52 2 39 85 65 97 5 87 20 90 | 42 26 34 60 65 50 90 94 23 84 73 16 89 37 79 3 17 55 33 14 9 98 70 96 56 +Card 141: 85 56 58 55 62 47 92 76 95 89 | 41 58 67 78 4 61 10 17 23 1 50 21 18 90 45 94 15 37 48 31 91 54 73 35 64 +Card 142: 71 70 76 83 96 52 33 66 6 50 | 16 82 5 21 55 80 51 52 72 65 1 86 15 11 54 57 77 70 59 18 48 12 78 67 25 +Card 143: 89 67 6 13 59 12 81 61 57 25 | 27 37 13 70 68 52 82 2 74 50 92 5 85 78 93 95 34 91 87 36 55 39 32 8 48 +Card 144: 69 50 46 63 88 9 7 20 49 79 | 5 91 95 71 86 32 66 76 56 33 96 15 42 22 34 27 6 67 43 19 36 23 63 20 75 +Card 145: 69 23 76 4 13 41 50 78 17 60 | 16 57 68 43 34 11 18 66 72 7 82 5 19 91 61 36 70 15 87 59 65 21 67 2 8 +Card 146: 27 79 9 28 56 36 48 31 20 6 | 78 94 48 1 97 12 99 19 74 47 30 98 14 70 44 23 35 42 73 60 17 29 89 58 95 +Card 147: 46 80 82 8 50 77 28 85 38 41 | 27 42 57 31 45 76 67 53 13 94 68 90 89 16 11 35 51 92 10 66 63 52 6 83 65 +Card 148: 80 44 24 98 26 78 4 1 55 88 | 53 8 55 79 86 16 77 93 88 58 23 44 64 73 11 83 24 29 26 74 13 40 21 62 9 +Card 149: 81 29 26 20 92 62 50 49 69 74 | 10 26 69 96 27 74 44 70 32 31 8 95 25 90 3 89 35 1 40 20 49 29 58 59 80 +Card 150: 32 43 16 36 73 18 22 30 63 38 | 38 91 18 45 67 22 96 32 71 5 95 93 28 69 33 34 14 72 36 11 35 83 43 70 30 +Card 151: 65 61 49 29 51 72 96 71 37 94 | 33 42 51 94 62 91 29 96 61 35 92 37 30 8 24 77 72 58 23 64 65 73 49 46 71 +Card 152: 32 35 90 5 81 84 76 63 41 52 | 11 76 29 77 81 80 4 18 16 88 90 98 41 35 43 84 28 52 63 1 65 5 72 32 56 +Card 153: 13 34 18 11 77 61 94 88 7 90 | 46 25 17 93 5 43 72 28 69 1 14 55 66 63 53 62 26 68 13 37 70 78 65 34 16 +Card 154: 74 84 32 51 5 93 4 13 87 83 | 85 62 75 36 10 43 68 47 90 79 6 66 26 67 34 60 65 1 25 81 98 91 16 28 82 +Card 155: 60 7 42 76 1 18 29 93 19 83 | 49 97 62 78 15 99 71 94 25 41 28 4 51 6 3 80 87 81 75 12 26 89 91 2 17 +Card 156: 95 57 27 1 97 33 50 38 22 64 | 38 65 67 27 85 57 3 97 60 21 34 79 20 89 86 22 13 8 64 50 11 39 41 12 2 +Card 157: 59 52 71 70 92 48 42 17 75 79 | 86 75 5 68 16 55 72 70 94 60 6 1 79 31 42 61 59 38 52 97 92 53 81 67 17 +Card 158: 31 58 68 7 24 18 30 32 19 92 | 57 2 92 33 60 84 76 51 79 31 42 99 81 3 88 17 47 67 48 13 6 28 20 23 56 +Card 159: 13 42 26 92 53 33 44 45 19 90 | 59 95 2 51 25 81 17 30 3 71 36 22 58 90 33 52 8 92 37 6 11 19 45 96 88 +Card 160: 94 76 70 63 43 53 59 19 20 64 | 5 68 35 74 79 19 62 40 33 11 63 69 60 24 1 85 96 55 91 70 10 12 71 50 42 +Card 161: 34 29 98 99 81 52 96 77 57 39 | 78 96 67 3 5 20 85 10 58 79 45 62 46 92 15 97 88 2 57 40 81 74 69 61 32 +Card 162: 38 24 86 51 80 1 16 83 58 34 | 77 58 45 18 80 39 31 23 11 13 46 28 65 62 60 33 20 6 10 99 37 35 40 91 64 +Card 163: 14 97 5 33 34 96 50 47 55 74 | 6 66 77 79 37 45 39 82 90 9 50 38 14 31 19 13 29 15 89 30 17 88 12 44 53 +Card 164: 56 31 76 6 69 27 65 74 39 49 | 4 89 2 75 20 12 53 73 14 40 86 24 82 11 88 90 57 22 35 54 30 64 15 32 41 +Card 165: 62 75 48 65 43 85 8 80 45 91 | 84 74 86 98 57 38 69 78 28 22 7 19 83 60 3 55 23 34 94 13 2 58 90 11 39 +Card 166: 17 21 56 71 10 84 50 83 25 61 | 39 83 68 27 43 4 15 10 21 25 54 7 17 29 14 28 56 64 24 58 33 62 44 22 48 +Card 167: 24 89 68 2 90 36 25 82 38 59 | 28 24 83 43 46 7 56 2 38 89 6 61 59 31 50 68 32 25 36 9 88 19 82 90 14 +Card 168: 58 22 65 47 99 85 72 29 25 12 | 11 21 39 51 26 77 2 31 99 33 15 95 4 62 69 22 38 50 97 20 55 72 8 12 89 +Card 169: 99 18 97 9 10 76 72 75 26 87 | 44 94 63 21 54 96 19 8 50 9 86 16 49 41 60 5 57 7 38 27 95 12 40 85 1 +Card 170: 43 35 76 13 27 60 70 54 23 83 | 46 56 59 54 62 70 76 29 23 83 13 27 68 15 11 7 60 4 28 43 61 33 35 47 99 +Card 171: 27 58 57 48 76 97 1 86 25 40 | 36 32 61 74 82 31 38 79 33 34 46 2 27 89 50 10 22 55 72 91 39 64 43 98 42 +Card 172: 12 13 84 55 27 67 10 78 11 16 | 24 9 11 96 12 60 46 6 76 31 85 49 53 8 64 74 65 15 18 90 82 67 16 57 73 +Card 173: 60 84 36 23 82 27 14 54 74 9 | 9 37 31 62 91 14 74 13 39 38 23 87 1 84 80 92 30 54 32 60 36 48 61 82 27 +Card 174: 25 21 34 45 32 86 99 42 72 98 | 95 34 91 32 25 86 98 21 80 75 84 70 7 99 72 45 17 40 79 63 1 19 61 42 87 +Card 175: 83 24 18 84 45 38 23 42 56 14 | 14 76 98 92 46 44 97 20 13 64 72 96 16 68 57 21 6 34 3 19 55 89 9 83 1 +Card 176: 25 71 31 38 3 55 96 76 6 69 | 63 66 19 98 27 87 96 8 54 31 67 46 53 33 28 12 99 88 80 17 13 71 93 14 1 +Card 177: 38 25 67 43 18 3 16 72 57 51 | 79 52 12 72 23 56 77 80 31 42 18 99 83 60 24 33 64 32 75 85 9 90 43 8 1 +Card 178: 39 62 57 1 11 79 8 99 56 52 | 20 81 94 41 95 1 39 82 5 97 7 68 24 64 99 98 67 53 9 86 33 43 17 46 88 +Card 179: 19 63 34 49 71 38 94 17 1 33 | 86 35 94 70 38 10 33 99 54 2 39 11 92 91 34 43 67 18 12 15 95 1 23 20 49 +Card 180: 45 81 55 44 80 73 7 25 31 59 | 83 93 49 20 72 29 92 35 91 89 52 70 27 75 48 33 21 41 46 74 56 4 6 87 36 +Card 181: 42 34 76 85 33 27 66 79 58 73 | 80 71 26 6 41 39 68 36 15 19 13 33 34 62 82 88 10 3 76 46 51 99 78 85 72 +Card 182: 68 80 84 58 75 67 44 92 18 65 | 34 89 9 87 40 88 72 73 33 74 11 6 69 4 63 70 86 2 7 82 66 81 24 77 22 +Card 183: 60 22 7 19 93 32 31 23 36 41 | 6 35 77 49 29 45 39 21 57 61 22 15 70 48 94 53 31 18 87 99 52 3 62 67 33 +Card 184: 95 26 39 98 51 33 67 43 59 11 | 19 44 30 10 18 47 57 95 25 78 53 61 2 87 88 22 37 45 75 83 29 34 48 97 84 +Card 185: 7 16 46 63 13 2 99 9 93 26 | 37 28 50 41 55 75 73 6 96 82 17 92 87 10 49 72 15 86 64 36 95 32 13 5 53 +Card 186: 14 21 68 8 64 78 15 89 19 59 | 43 22 10 85 63 60 90 62 97 17 33 39 7 6 58 51 47 54 11 50 36 2 31 46 34 \ No newline at end of file diff --git a/2023/4.py b/2023/4.py new file mode 100644 index 0000000..50e8aa7 --- /dev/null +++ b/2023/4.py @@ -0,0 +1,50 @@ +import re + +class T: + def __init__(self, id, winning, card): + self.id = id + self.winning = winning + self.card = card + self.instances = 1 + self.intersect = len((list)(set(winning) & set(card))) + + def addInstance(self): + self.instances += 1 + + +def main(): + with open("4-input.txt", 'r') as file: + array = [] + for line in file: + array.append(parseLine(line)) + for i, card in enumerate(array): + for ii in range(0, card.instances): + for iii in range(i+1, i + 1 + card.intersect): + array[iii].addInstance() + instancesArr = list(map(lambda x: x.instances, array)) + + print(sum(instancesArr)) + +def parseLine(s: str): + idSplit = s.split(":") + id = getID(idSplit[0]) + + cardSplit = idSplit[1].split("|") + winning = re.findall(r'\d+', cardSplit[0]) + card = re.findall(r'\d+', cardSplit[1]) + cardInstance = T(id, winning, card) + return cardInstance + +def getColor(s: str, color: str): + split = s.strip().split(" ") + if(color == split[1]): + return int(split[0]) + return 0 + +def getID(split1): + digs = re.findall("\d+", split1) + id = digs[0] + return int(id) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/5-2.py b/2023/5-2.py new file mode 100644 index 0000000..69019d7 --- /dev/null +++ b/2023/5-2.py @@ -0,0 +1,87 @@ +#!/usr/bin/env python3 +# 2023 Day 5: If You Give A Seed A Fertilizer + +def process_input(filename): + """Acquire input data""" + with open(filename) as file: + input = file.read().splitlines() + + seeds = [] + maps = [] + + for line in input: + if line == '': continue + + token = line.split() + + if token[1] == 'map:': + maps.append([]) + map_index = len(maps) - 1 + continue + + if token[0] == 'seeds:': + st = 1 + while st < len(token): + seed_start = int(token[st]) + seed_end = seed_start +int(token[st+1]) - 1 + seeds.append((seed_start, seed_end)) + st += 2 + continue + + dest = int(token[0]) + source = int(token[1]) + range_len = int(token[2]) + source_end = source + range_len - 1 + adjustment = dest - source + maps[map_index].append((source, source_end, adjustment)) + return seeds, maps + +def apply_maps(): + lowest = 99999999999999999 + for seed in seeds: + destinations = [] + destinations.append(seed) + for map in maps: + sources = destinations + destinations = [] + while len(sources) > 0: + source = sources.pop() + source_start, source_end = source + for range in map: + map_start, map_end, adjust = range + if source_start >= map_start and source_end <= map_end: + destinations.append((source_start+adjust, source_end+adjust)) + break + if source_end < map_start or source_start > map_end: + continue + if source_start < map_start: + sources.append((source_start, map_start-1)) + sources.append((map_start, source_end)) + break + if source_end > map_end: + sources.append((source_start, map_end)) + sources.append((map_end+1, source_end)) + break + else: + destinations.append(source) + seed_lowest = lowest_location(destinations) + lowest = min(lowest, seed_lowest) + return lowest + +def lowest_location(locations): + lowest = locations[0][0] + for location in locations: + lowest = min(location[0], lowest) + return lowest + +#----------------------------------------------------------------------------------------- + +filename = '5-input.txt' +#filename = 'sample.txt' + +seeds, maps = process_input(filename) + +lowest = apply_maps() + +print() +print('Location:', lowest) diff --git a/2023/5-3.py b/2023/5-3.py new file mode 100644 index 0000000..8122598 --- /dev/null +++ b/2023/5-3.py @@ -0,0 +1,31 @@ +import re +import time + +def main(): + with open("/Users/samuelenocsson/dev/advent-of-code/5-input.txt", 'r') as file: + row_cache = {} + start_time = time.time() + seed_string = file.readline() + lines = file.readlines() + maps =[] + for idx, line in enumerate(lines): + numbers = [int(digit) for digit in re.findall(r'\d+', line)] + if len(numbers) > 0: + maps.append(numbers) + + seeds = [int(digit) for digit in re.findall(r'\d+', seed_string)] + for seed in seeds: + sources = [] + sources.append(seed) + for m in maps: + current = sources.pop() + current_start = current[0] + current_end = current[1] + + + + location = -1 + next = 0 + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/5-input.txt b/2023/5-input.txt new file mode 100644 index 0000000..67f1430 --- /dev/null +++ b/2023/5-input.txt @@ -0,0 +1,250 @@ +seeds: 1263068588 44436703 1116624626 2393304 2098781025 128251971 2946842531 102775703 2361566863 262106125 221434439 24088025 1368516778 69719147 3326254382 101094138 1576631370 357411492 3713929839 154258863 + +seed-to-soil map: +2056129205 3495540274 7275274 +2093671499 2217398614 16037515 +144190400 1167267743 4402289 +685148999 560842720 46363553 +148592689 1382926008 71816170 +241575914 1243634776 139291232 +1686196783 543577846 17264874 +2601917866 2486088541 222990187 +1703461657 1454742178 45658441 +4200618033 2052611543 79792525 +2063404479 2445531749 30267020 +3026695548 4113017544 181949752 +73663477 607206273 70526923 +3412143232 2195535041 20126067 +1381626519 809568775 38912495 +4280410558 3277485604 9635485 +1285511345 435930218 30230711 +2009679577 4060471919 23976534 +491535670 129136847 193613329 +3016405776 2475798769 10289772 +2035393617 2709078728 12153762 +1760083914 1171670032 71964744 +3988522413 2233436129 212095620 +2824908053 4084448453 28569091 +799335774 434222608 1707610 +2109709014 3568263067 492208852 +2047547379 3502815548 8581826 +1275917650 466160929 9593695 +731512552 475754624 67823222 +380867146 698900251 110668524 +1315742056 1500400619 65884463 +801043384 848481270 151647344 +3208645300 3292042342 203497932 +952690728 0 129136847 +1081827575 1000128614 167139129 +0 1731434235 73663477 +1749120098 423258792 10963816 +2853477144 3511397374 56865693 +1585688167 322750176 100508616 +3432269299 2721232490 556253114 +1420539014 1566285082 165149153 +2973473810 2009679577 42931966 +220408859 677733196 21167055 +4290046043 3287121089 4921253 +2033656111 2215661108 1737506 +1248966704 1805097712 26950946 +2910342837 2132404068 63130973 + +soil-to-fertilizer map: +3192416630 3819045895 47516706 +39972266 597632895 4546595 +2584201752 2580457211 100644566 +2272135078 174545609 40291463 +2819419661 2681101777 89335599 +3239933336 3528823147 72816699 +44518861 2232362178 145175982 +2519969464 2377538160 64232288 +1852478702 2770437376 313570784 +2166049486 2441770448 106085592 +4133995881 3866562601 160971415 +1626150228 975660836 106177604 +2908755260 422379995 175252900 +3312750035 4178991584 115975712 +1142288544 1324281099 483861684 +833150172 1928293653 304068525 +1732327832 1808142783 120150870 +2684846318 39972266 134573343 +3133663001 4027534016 58753629 +189694843 602179490 373481346 +3758375673 4086287645 92703939 +3428725747 3199173221 329649926 +1137218697 2547856040 5069847 +4068485661 3133663001 65510220 +590707513 1081838440 242442659 +2312426541 214837072 207542923 +563176189 2552925887 27531324 +3851079612 3601639846 217406049 + +fertilizer-to-water map: +153835826 1814144363 127150990 +1926426485 1614900585 14868868 +2139872846 3136260217 42408895 +3310771078 2202805875 59788141 +83898078 1578023222 36877363 +652411041 1574694502 3328720 +2080480520 3785135933 59392326 +3370559219 3272622808 82257970 +3132498144 2037809941 164995934 +2678755579 3455437189 65205729 +3674754588 3844528259 234175097 +2182281741 3520642918 59000325 +570340096 1492623557 82070945 +2779822218 2446205321 138940597 +2037809941 2703025450 42670579 +3515202222 2342244856 103960465 +3998026660 4136896949 144793347 +955105072 0 84792564 +3452817189 3073875184 62385033 +77176799 1459627033 6721279 +4142820007 4078703356 58193593 +280986816 1091602584 230166265 +1701766245 1321768849 78671169 +2987155826 2872940965 145342318 +2418013523 3615504153 169631780 +2587645303 2262594016 79650840 +2667296143 3354880778 11459436 +2743961308 3579643243 35860910 +1880850385 1046026484 45576100 +3297494078 4281690296 13277000 +2918762815 2804547954 68393011 +1854575140 1466348312 26275245 +3908929685 3366340214 89096975 +511153081 1400440018 59187015 +655739761 864167436 181859048 +120775441 1629769453 33060385 +2241282066 2745696029 58851925 +2300133991 2585145918 117879532 +4201013600 3178669112 93953696 +837598809 84792564 117506263 +1039897636 202298827 661868609 +3619162687 3018283283 55591901 +0 1736967564 77176799 +1780437414 1662829838 74137726 + +water-to-light map: +279076302 606101520 367597147 +3291538704 3736283841 125013874 +0 1709355698 279076302 +2106348780 1988432000 822929157 +2929277937 0 362260767 +890514202 2811361157 924922684 +3416552578 973698667 444745137 +1815436886 1418443804 290911894 +646673449 362260767 243840753 + +light-to-temperature map: +208346365 819874354 29069132 +731840321 689055790 58614896 +4186248520 4104876526 108718776 +3429769554 3384048873 23936103 +1459123931 2691296758 217855736 +790455217 952719646 105546549 +1416544830 2047230764 42579101 +0 1202755810 208346365 +1399364673 1598820754 17180157 +2576491919 747670686 452381 +901868462 2408707242 282589516 +3626168682 4259315983 35651313 +341191657 748123067 71751287 +2721433915 1411102175 187718579 +3822370242 3740998248 198425166 +3245552556 4213595302 45720681 +1676979667 100628240 254569707 +896001766 2041364068 5866696 +3291273237 3245552556 138496317 +3661819995 3580448001 160550247 +2063025564 380090092 308965698 +4020795408 3939423414 165453112 +237415497 848943486 103776160 +1931549374 1909887878 131476190 +2576944300 1058266195 144489615 +717031505 2089809865 14808816 +412942944 2104618681 304088561 +1209350123 0 100628240 +1309978363 1820501568 89386310 +3453705657 3407984976 172463025 +2371991262 1616000911 204500657 +1184457978 355197947 24892145 + +temperature-to-humidity map: +4116612848 1770461885 178354448 +475467700 3077125572 130863723 +1272723717 1181397963 5578998 +3758341401 495891106 279864899 +1687813623 1591451985 2235236 +2530388822 2518678506 215908033 +2282034531 2032693852 208761140 +1471990450 379604394 116286712 +1817301926 3588566075 238614487 +3086830522 2960704657 28309403 +3692580145 2002277669 19886809 +616860797 3221548716 360840790 +3115139925 1226570112 16611162 +336172750 170230298 133118381 +977701587 1693223682 77238203 +1366414227 775756005 105576223 +2055916413 2734586539 226118118 +4038206300 2287329439 78406548 +3712466954 2241454992 45874447 +3556277513 2516499157 2179349 +1278302715 2989014060 88111512 +1588277162 1593687221 99536461 +2746296855 3827180562 340533667 +469291131 3582389506 6176569 +1054939790 1960273136 42004533 +1247816059 3207989295 13559421 +2490795671 1186976961 39593151 +1261375480 1948816333 11348237 +36107015 881332228 300065735 +1096944323 2365735987 150763170 +3131751087 303348679 76255715 +3558456862 36107015 134123283 +3208006802 1243181274 348270711 +606331423 2022164478 10529374 +1690048859 4167714229 127253067 +1247707493 1960164570 108566 + +humidity-to-location map: +3760908805 3662107228 155796250 +1580497895 3884288658 144897726 +3166374808 442179790 213926492 +121876139 656106282 138383174 +393463083 2300882189 128101885 +2948945727 3512929162 110263469 +521564968 2652674020 210495874 +1940349169 3864399213 19889445 +1197505529 794489456 93759960 +904168980 2539693608 75416982 +1725395621 3623192631 38914597 +2881030575 888249416 49678445 +2116891732 1943237764 146499392 +979585962 2615110590 37563430 +3143485439 3262014106 22889369 +791255257 4029186384 109003936 +4209132419 4140663408 85834877 +1764310218 192277746 165625801 +2023373170 2466550792 73142816 +4140663408 4226498285 68469011 +2269931546 1003317103 611099029 +1291265489 0 119152028 +2930709020 3243777399 18236707 +732060842 1884043349 59194415 +1410417517 1614416132 170080378 +1960238614 937927861 63134556 +1929936019 2089737156 10413150 +3380301300 2863169894 380607505 +3916705055 3291443897 221485265 +355896365 2428984074 37566718 +2254686 3817903478 46495735 +2096515986 2280506443 20375746 +1017149392 2100150306 180356137 +0 1001062417 2254686 +260259313 1784496510 95637052 +48750421 119152028 73125718 +3059209196 357903547 84276243 +2263391124 3284903475 6540422 +900259193 1880133562 3909787 \ No newline at end of file diff --git a/2023/5-test-input.txt b/2023/5-test-input.txt new file mode 100644 index 0000000..bd902a4 --- /dev/null +++ b/2023/5-test-input.txt @@ -0,0 +1,33 @@ +seeds: 79 14 55 13 + +seed-to-soil map: +50 98 2 +52 50 48 + +soil-to-fertilizer map: +0 15 37 +37 52 2 +39 0 15 + +fertilizer-to-water map: +49 53 8 +0 11 42 +42 0 7 +57 7 4 + +water-to-light map: +88 18 7 +18 25 70 + +light-to-temperature map: +45 77 23 +81 45 19 +68 64 13 + +temperature-to-humidity map: +0 69 1 +1 0 69 + +humidity-to-location map: +60 56 37 +56 93 4 \ No newline at end of file diff --git a/2023/5.py b/2023/5.py new file mode 100644 index 0000000..8a20b73 --- /dev/null +++ b/2023/5.py @@ -0,0 +1,96 @@ +from concurrent.futures import ProcessPoolExecutor +import re +import time + + + +def main(): + with open("/Users/samuelenocsson/dev/advent-of-code/5-input.txt", 'r') as file: + row_cache = {} + start_time = time.time() + seed_string = file.readline() + lines = file.readlines() + for idx, line in enumerate(lines): + numbers = [int(digit) for digit in re.findall(r'\d+', line)] + row_cache[idx] = numbers + + digits = [int(digit) for digit in re.findall(r'\d+', seed_string)] + seeds = [] + location = -1 + next = 0 + + with ProcessPoolExecutor() as executor: + for i, d in enumerate(digits): + if i != next: continue + first = digits[i] + first_range = digits[i+1] + print(f"{first} -> {first + first_range}") + results = [] + get_location(first, first_range, row_cache) + + + next += 2 + #seeds = getSeeds(seed_string) + + #for seed in seeds: + #seed = get_location(lines, seed) + #locations.append(seed) + #location = min(f.result() for f in seeds) + location = min(seeds) + print(f"Closest location {location}") + end_time = time.time() + elapsed_time = end_time - start_time + print(f"Elapsed time: {elapsed_time} seconds") + +def chunks(lst, chunk_size): + for i in range(0, len(lst), chunk_size): + yield lst[i:i + chunk_size] + +def process(list, row_cache): + seeds = [] + for s in list: + #seeds.append(executor.submit(get_location, s)) + seeds.append(get_location(s, row_cache)) + #return min(f.result() for f in seeds) + return min(seeds) + +def get_location(from_seed, to_seed, row_cache): + nrLines = len(row_cache) + init_seed = seed + #print(f"finding location for {seed}") + new_seed = seed + fast_forward = False + for i in range(0, nrLines): + mappings = row_cache.get(i) + if len(mappings) > 0 and fast_forward: continue + if len(mappings) == 0: + fast_forward = False + continue + source = mappings[1] + destination = mappings[0] + r = mappings[2] + if source <= seed <= source + r: + diff = seed - source + new_seed = destination + diff + fast_forward = True + + #print(f"{seed} -> {new_seed}") + seed = new_seed + #print(f"Location {init_seed} -> {seed}") + return seed + +def getSeeds(s: str): + digits = [int(digit) for digit in re.findall(r'\d+', s)] + seeds = [] + next = 0 + for i, d in enumerate(digits): + if i != next: continue + first = digits[i] + first_range = digits[i+1] + for nr in range(first, first + first_range): + seeds.append(nr) + next += 2 + return seeds + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/6-input.txt b/2023/6-input.txt new file mode 100644 index 0000000..cb8e56a --- /dev/null +++ b/2023/6-input.txt @@ -0,0 +1,2 @@ +Time: 44 89 96 91 +Distance: 277 1136 1890 1768 \ No newline at end of file diff --git a/2023/6-test-input.txt b/2023/6-test-input.txt new file mode 100644 index 0000000..b39f49d --- /dev/null +++ b/2023/6-test-input.txt @@ -0,0 +1,2 @@ +Time: 7 15 30 +Distance: 9 40 200 \ No newline at end of file diff --git a/2023/6.py b/2023/6.py new file mode 100644 index 0000000..a4f49a8 --- /dev/null +++ b/2023/6.py @@ -0,0 +1,25 @@ +import re + +def main(): + with open("6-input.txt", 'r') as file: + winning_distances = [] + lines = file.readlines() + time = ''.join(re.findall('\d+', lines[0])) + distance = ''.join(re.findall('\d+', lines[1])) + result = calcualte_distance(int(time), int(distance)) + winning_distances.append(len(result)) + winning_totals = 1 + for value in winning_distances: + winning_totals *= value + print(winning_totals) + +def calcualte_distance(time: int, distance: int): + reaches_longer = [] + for i in range(0, time): + d = i * (time - i) + if d > distance: + reaches_longer.append(d) + return reaches_longer + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/7-input.txt b/2023/7-input.txt new file mode 100644 index 0000000..3c739a6 --- /dev/null +++ b/2023/7-input.txt @@ -0,0 +1,1000 @@ +T33AA 613 +J5JJ5 411 +J4444 240 +T5K98 463 +7Q6K2 4 +772T2 730 +23228 608 +T254A 212 +TJ584 169 +5T555 349 +5A5A5 539 +66K55 341 +7TJK2 70 +Q9999 763 +555J7 359 +A2Q22 607 +699J6 922 +QQQ66 110 +K9KKK 225 +Q646Q 96 +AJ66A 51 +6J234 615 +QAAAQ 723 +99992 453 +77666 497 +8TKQ7 325 +88988 842 +8724K 89 +QJQ53 626 +A5AKA 145 +25TT2 267 +22T69 414 +63A7Q 941 +69655 461 +QT7T3 648 +82929 121 +424Q2 846 +53935 224 +633TJ 619 +42494 85 +39J35 661 +9J449 596 +TTATT 74 +KK88K 219 +99696 811 +33347 916 +6AJJA 716 +24334 281 +T3TTJ 472 +T6TJK 952 +32883 378 +A9J5T 934 +99888 103 +688QQ 836 +45J97 152 +KQJK5 80 +26QKK 499 +3333J 138 +22JQ8 789 +T66TT 475 +9JQA2 511 +356A8 462 +Q8AQQ 148 +6AT95 696 +3752Q 58 +5K88T 270 +TAAA5 793 +J7479 647 +444QQ 853 +83922 584 +34T72 114 +8T23A 546 +999J6 269 +895K9 203 +J58T8 831 +8AK44 875 +A3333 531 +29K67 604 +J9K97 680 +A7AAA 286 +8927T 717 +7KKK8 492 +98839 64 +63K83 444 +QJ2QQ 882 +J828J 769 +3A77A 217 +T9228 266 +73A44 250 +2KK7Q 39 +44KA5 708 +K8K64 535 +3AA9A 981 +KT6TK 825 +4T6TJ 503 +632TK 948 +QT869 813 +24249 348 +A3Q8A 519 +T6385 291 +935Q4 543 +88585 796 +49777 244 +Q3J33 971 +T5J44 868 +99797 319 +88J2K 627 +224JT 571 +J45A4 216 +76847 130 +4922A 263 +66Q49 991 +22J32 823 +48675 277 +AT9QT 153 +86848 232 +QQK6J 669 +K22JK 662 +28TKJ 737 +QJ88Q 745 +39338 177 +TQ5Q4 624 +4J549 752 +AQJT3 228 +736Q6 392 +22A3A 656 +7KK27 724 +4K444 826 +85888 347 +7746J 639 +67777 822 +K9989 671 +5T267 659 +KKTKK 815 +92279 541 +47422 82 +9T3TJ 26 +TTK7Q 13 +Q9J9Q 625 +T495Q 798 +794T6 963 +99TT9 508 +27433 32 +29282 260 +28Q82 521 +95449 756 +28666 191 +A84QT 616 +292Q2 282 +K4JQ5 442 +T3883 866 +66TKT 918 +44KK7 892 +T5T9A 122 +77J79 635 +447J7 273 +8448T 598 +29JTT 5 +33KJT 7 +52454 634 +99A9A 527 +228TQ 747 +3J3AT 715 +QQ6QQ 421 +65KK3 750 +9KK4J 970 +4K769 201 +2255K 183 +95598 564 +7797Q 94 +84442 706 +T28AA 832 +TT949 498 +8669J 218 +5262A 454 +3829J 593 +2J74J 47 +76K95 940 +99899 695 +K252K 298 +AT6K3 173 +T4A22 409 +85558 555 +5TJJT 930 +Q79KA 477 +J83JQ 185 +57J87 630 +JJJ44 643 +JAAAA 787 +6J344 684 +A7J7K 415 +TKATT 242 +K7JA6 873 +22999 170 +T73K6 664 +696T2 699 +9KK9K 707 +J55J9 645 +5Q555 691 +9JJ95 81 +A75J2 621 +KK6K4 274 +92T92 436 +66555 614 +47J69 924 +58A85 673 +6666K 709 +24A8J 220 +3T779 481 +AK478 479 +9QTT9 120 +95Q78 227 +67469 71 +KK9KJ 268 +62599 72 +73733 147 +KJQQQ 761 +33335 294 +355T5 777 +93T62 550 +5777Q 526 +JAJK7 25 +AAA8A 510 +9JTT4 457 +A9AKA 711 +K333K 426 +QQ22Q 222 +8J7K3 986 +KK8TA 894 +6TJQ6 722 +A44KA 418 +794TA 272 +JT5J6 814 +T5328 686 +AA2AA 28 +K39A3 160 +T9A67 382 +JJJJJ 917 +2424J 666 +745AA 312 +4K56K 383 +3K25A 712 +88QQ5 76 +927QT 570 +7K249 288 +5565J 252 +4QQ4T 651 +QQ666 435 +2Q262 967 +K59AQ 175 +K2K26 402 +89J64 188 +8K866 379 +A69J5 331 +77474 504 +AK4A8 352 +T5TKQ 563 +4Q23K 578 +226J2 966 +Q93A5 590 +28T25 505 +6A49T 512 +TTT8T 513 +24342 500 +82882 48 +37JA9 432 +596J8 259 +93993 207 +6A636 629 +TQKKT 938 +66786 433 +96976 243 +A6J33 88 +TATA4 12 +9A999 365 +5623J 292 +6K6KK 158 +6T665 441 +3Q57Q 3 +64644 898 +68888 223 +J8889 14 +T4J6J 360 +J7773 357 +QA4AQ 601 +83A62 812 +QJ7J7 434 +QTK86 705 +5T885 896 +A9575 261 +A95AT 164 +AJJ68 583 +KQJ2Q 742 +7JQ79 518 +T27JJ 317 +QTTTT 586 +5677Q 146 +42442 797 +4AT7T 490 +88JTT 59 +77T77 253 +88JAA 37 +3T633 221 +K28KK 395 +2J22K 1000 +66T54 416 +K2KKK 264 +248Q5 989 +88A87 390 +555JJ 890 +22662 556 +54J54 559 +22264 179 +TA253 694 +TTT9T 27 +3A9K2 861 +Q87QJ 600 +A7K4J 190 +99J99 239 +5JA64 725 +28TAQ 530 +69Q6Q 314 +46443 620 +9Q993 256 +J7K47 482 +26J66 108 +J5855 978 +4QJQK 720 +44449 790 +T5JTT 912 +773TT 862 +9J6K8 340 +K77QQ 744 +T94J4 878 +J2K9T 305 +TTT22 692 +4J877 284 +QJQQQ 487 +3Q39Q 641 +22KKK 494 +8JQK5 591 +J99J2 937 +K3845 19 +55755 278 +82AT8 721 +J6666 323 +K2K6K 77 +T3QJ8 358 +KQTKK 837 +222QQ 968 +263Q3 655 +99222 582 +555KQ 877 +TJTJ4 663 +3KQ4T 985 +268Q4 214 +AAJJA 872 +K444K 9 +89J8Q 753 +22488 144 +Q82J8 734 +54545 20 +99JQJ 886 +88TTA 129 +22525 287 +52A99 182 +8654T 575 +T9572 731 +AQAJQ 611 +8AT45 420 +99934 393 +J5KJK 580 +43A4J 529 +48465 450 +36AA6 998 +KT2JQ 927 +65Q78 488 +89T5A 33 +72AA7 623 +7777J 406 +JQ999 16 +42TK6 729 +Q2QQQ 949 +8J3JK 560 +32323 438 +6687Q 53 +7A7A7 166 +8Q5Q5 828 +899QK 867 +JK4A5 87 +3A33Q 788 +4Q734 821 +33JJJ 746 +7TAAA 118 +AA44J 538 +5JJ8T 931 +JTQ6T 155 +J5555 493 +2AA5T 301 +72732 78 +KTJ7T 255 +KAAAJ 906 +63QQ7 443 +T2653 2 +3Q334 728 +T4J67 205 +7QT86 926 +4J4K4 495 +A7227 68 +69984 786 +2J95A 757 +94AAQ 380 +T2J5A 198 +J5995 22 +54444 91 +K3QA5 840 +4TT44 396 +88883 194 +77722 136 +9A9T6 502 +K54KK 176 +73878 549 +87JA5 758 +KK555 38 +34A44 689 +436K9 123 +9A286 391 +66A56 215 +9QQK9 63 +99392 887 +99994 817 +A9229 125 +446A3 921 +QAAA9 113 +222TT 295 +66227 262 +QTTAA 804 +362A4 417 +AQAAA 976 +5535J 809 +8858T 69 +745QA 486 +62626 928 +92Q2T 558 +55889 445 +QJ857 465 +QQ99Q 925 +69657 576 +33KKK 478 +33QKQ 448 +744AA 300 +36363 322 +2TTJT 785 +QQ8QQ 776 +AQ2K7 740 +J666J 425 +7463Q 79 +TQQQQ 933 +6898J 710 +7Q629 36 +55Q5J 141 +3A7AJ 302 +2K229 458 +JJ999 929 +2J222 368 +55577 167 +5A8J2 960 +74434 806 +3JQ3Q 904 +44884 848 +AATAK 864 +8833Q 67 +788J8 738 +49443 741 +TJTTJ 603 +9999K 11 +43JAA 399 +Q8Q98 953 +996T9 779 +J92AA 171 +4A339 439 +7QJ67 102 +5T52T 446 +9T555 735 +37582 162 +9949T 714 +62444 124 +KTTKT 506 +Q7TK4 473 +4A4J4 983 +K8QT5 587 +9Q299 572 +J252J 683 +23T4Q 181 +Q96AT 820 +8J47J 841 +TA9TA 318 +A58TT 654 +5555K 895 +24372 154 +TTTJT 977 +88285 805 +2T8J4 367 +A7AA7 818 +TT44J 964 +Q799Q 573 +KJQ8Q 829 +2JT23 592 +9A9AJ 585 +J799T 883 +AATTA 568 +39395 289 +A8557 553 +TKTTT 115 +5AA35 132 +T67Q6 507 +KJ773 844 +J39AK 371 +444TJ 397 +7548K 958 +6676J 192 +22822 275 +4J343 638 +93JAQ 525 +TA34K 229 +T44KK 408 +2J229 381 +49JJJ 657 +622K2 364 +66654 111 +KKK4T 394 +35885 551 +J49J9 363 +99567 542 +K49JA 957 +55335 713 +K5577 431 +69987 66 +J9KAK 557 +297A8 994 +799AJ 299 +K3647 276 +33KQ4 988 +8J338 332 +5368J 469 +66AK4 168 +8T688 135 +KK698 336 +7TJ77 987 +TAT43 748 +6K466 703 +TQ567 845 +94998 55 +32363 233 +K2J28 835 +383J3 99 +7629A 65 +4447A 178 +TJTKK 134 +5TTQ5 324 +7KQK7 681 +87877 196 +82282 419 +23TTJ 165 +A888A 850 +7945T 474 +6K339 231 +A5A2K 577 +97A39 491 +766JA 139 +AK73A 951 +3AA99 794 +8JQ47 484 +4QQ47 956 +8ATJA 857 +9KK8Q 57 +6K6K2 675 +Q3QKQ 515 +93J8T 483 +66J46 489 +7QQQ7 765 +T2T45 6 +JA2AJ 992 +434K9 356 +K85TK 610 +QK543 485 +23232 204 +222Q2 697 +668T8 8 +TTJAT 236 +5KKKK 852 +666QJ 876 +84544 579 +9T43Q 93 +53424 561 +7KA42 471 +5J3A5 246 +QKK6Q 567 +3T33J 362 +5967J 827 +3333Q 801 +97832 290 +89299 802 +ATJQ5 727 +22924 954 +8J888 676 +32396 90 +3533K 384 +977T7 910 +TQ4TT 678 +84K44 310 +T8T67 116 +A72K5 839 +TTJTK 100 +A8A6A 133 +A3384 751 +J77J7 733 +A4TJ4 60 +53974 640 +749TK 501 +TT333 516 +6TQQK 387 +T4QT4 112 +747J7 863 +J3868 97 +93K33 995 +8K888 468 +72777 754 +8QQ8Q 803 +48T59 107 +T9TQQ 451 +33JJ3 900 +TT6TT 783 +3JA73 375 +59235 644 +3322Q 781 +T7TTT 843 +KKK68 372 +QAQ5T 52 +7K2KK 528 +J2A82 106 +A5J7A 385 +758Q7 524 +62767 333 +8JAQ2 901 +674AQ 186 +A9T34 10 +3K333 562 +39433 935 +QQQQ5 633 +38Q55 234 +555JK 337 +KKKQ9 407 +QTTQQ 388 +66AQ7 701 +25AA5 338 +QA397 29 +44424 979 +A4JQJ 685 +Q8888 30 +333J6 328 +KKKK3 913 +33897 343 +AATA8 606 +845QJ 589 +93733 98 +4J338 536 +J8488 313 +33T33 49 +7TKTK 280 +QAQQQ 374 +TT7T7 235 +944T9 335 +4KAKA 386 +A8A48 959 +67647 1 +66466 456 +2JT77 35 +Q4QQQ 547 +3J8AA 800 +T5444 354 +7732J 514 +KKTAA 311 +8JJJA 792 +75KKK 427 +JT2K3 137 +K354A 540 +T5TTT 424 +7Q594 303 +J6J6J 642 +65384 914 +5A8AA 189 +82249 984 +8Q76K 140 +875KJ 565 +QJA23 40 +QQ82Q 946 +94T28 258 +7222T 636 +6A9K2 127 +J7725 452 +56656 351 +99969 447 +K3Q63 92 +QJJ58 370 +24368 854 +JJ9K9 612 +8J3J8 833 +88QQ8 321 +JT479 736 +522J6 889 +Q57JT 202 +A5KJT 83 +TTTAA 285 +2A2AA 326 +TQT4A 149 +93333 353 +KKKJK 693 +828J8 62 +95544 860 +2JJJ9 480 +33666 574 +KQ293 915 +888T8 31 +762AJ 637 +43483 599 +46544 377 +8A588 43 +TT35T 668 +59795 226 +2KKKJ 509 +QT492 865 +J3634 945 +88877 279 +49J26 423 +Q838T 307 +A73A3 780 +J3J36 955 +45655 771 +752A4 888 +6A4AA 84 +62Q5J 665 +A222A 858 +QQQQ7 773 +JJJJ8 943 +5AAAA 520 +28696 389 +J9939 15 +57385 618 +2T4J9 874 +99K9K 199 +39749 455 +94273 719 +88358 849 +74TTQ 17 +JK6AQ 117 +K7525 75 +3Q2A6 760 +2J969 460 +55QJT 464 +T2222 544 +9898T 595 +J6866 982 +QJQ54 467 +66996 962 +2552Q 532 +66QQJ 939 +QK477 41 +838J8 755 +5969Q 622 +32555 739 +5TQ79 602 +63979 871 +J3AA3 808 +TTJJJ 791 +88284 923 +666T6 554 +4J4AQ 193 +QT32K 672 +KTA96 403 +TT4TT 251 +5AA86 942 +7373J 950 +45QT8 581 +99Q7J 413 +2662K 838 +77J55 880 +Q8393 157 +KAAAA 936 +T7QKK 329 +JKQAK 412 +22242 45 +7T5T8 105 +5A69K 881 +TJAAA 316 +4A36A 911 +5JJ66 265 +48884 766 +TA385 605 +7A72J 762 +43A3A 652 +24K4Q 195 +67K5T 632 +55TT5 919 +T686T 617 +83667 306 +T6TA6 932 +QJ746 430 +29TQK 772 +63J38 18 +QT2J5 449 +79737 893 +79J8J 104 +Q762J 180 +7J433 996 +9K6K6 34 +K972Q 552 +57877 702 +4AQJA 851 +23337 768 +TTJ67 376 +66686 320 +KA7KA 847 +444AA 210 +58226 346 +AJK22 649 +6AJJ6 631 +TJJT9 698 +T583K 42 +2Q2JQ 334 +99KK8 24 +QQQJJ 770 +J9599 879 +K6287 646 +AA858 891 +3TT3T 400 +5K982 537 +5764T 315 +A8828 73 +TQ8AT 980 +83J27 197 +778KA 594 +335T6 257 +3Q925 670 +5KJKK 237 +8TKJ4 660 +A8AA3 679 +8Q889 131 +726T2 174 +QQ8T8 682 +36436 126 +5J329 21 +J8A9J 920 +JQA95 855 +9Q263 653 +K2555 297 +65J33 990 +2A49T 163 +AQTK2 903 +TK7TT 366 +6A2J4 870 +55534 704 +66469 588 +5K5KK 172 +6AT3A 293 +A5AA9 440 +685Q3 885 +T5A97 767 +K6258 466 +4Q28A 726 +7T555 404 +7KKKK 345 +JJJ88 330 +222KK 496 +ATJQJ 690 +QT563 308 +Q48KQ 206 +TTJT8 209 +TTT3T 522 +82878 405 +JA37T 628 +3T878 159 +77Q96 597 +K9488 245 +J8448 972 +69743 254 +J72Q5 369 +69666 749 +2KTAA 373 +JK556 816 +43833 230 +42242 743 +A28T5 775 +K585J 361 +Q4433 119 +333J4 344 +3A7T9 961 +JT236 249 +84899 807 +TT99K 830 +AAJ2A 50 +36333 429 +9K9KA 869 +J2777 774 +4455T 150 +3KQ87 718 +AAKKJ 247 +94K94 271 +J2759 46 +32495 899 +4T68Q 156 +6JA66 428 +QQ464 213 +9T92J 248 +K7QA8 459 +KJJKK 523 +22JJ2 534 +J96Q6 884 +4K4KJ 327 +66777 109 +K6336 908 +2Q2TT 200 +98494 907 +74547 401 +959J6 545 +444T4 947 +32222 56 +3K66K 834 +AKAAK 859 +3Q3QQ 688 +Q4Q4Q 759 +JJ667 974 +TAQTJ 969 +97474 86 +87K49 142 +J6T77 241 +T99J6 677 +67666 810 +J9K38 784 +24JJ4 410 +A73T6 569 +77377 856 +74784 973 +496JK 339 +2T7KQ 184 +Q52Q8 905 +47AA3 161 +836TK 476 +KT2TT 517 +77QK7 309 +4344J 208 +45J55 824 +57757 355 +J22J3 609 +9AJA7 658 +293T9 993 +66499 674 +7Q777 650 +TA4J3 296 +QQKQQ 304 +48944 799 +25TKJ 342 +T4TT4 795 +88TT8 128 +8A787 187 +K9KK6 44 +64A48 965 +K84KJ 143 +78A5T 548 +66636 23 +Q737Q 470 +83A2J 211 +3Q8K8 902 +T655T 54 +54745 398 +QA869 422 +893AQ 909 +K66J6 819 +99J86 997 +99A9J 95 +44237 566 +3J2T3 975 +J5223 732 +97J7J 778 +67QQ6 350 +7444Q 944 +69Q4A 764 +5TT8T 533 +52242 999 +K5KJ5 687 +JJ87K 667 +TTT2T 283 +QKKKK 437 +J9555 151 +53335 238 +55554 700 +7A6TQ 101 +57AJQ 897 +83485 782 +K7773 61 \ No newline at end of file diff --git a/2023/7-py b/2023/7-py new file mode 100644 index 0000000..e69de29 diff --git a/2023/7-test-input.txt b/2023/7-test-input.txt new file mode 100644 index 0000000..21c24a2 --- /dev/null +++ b/2023/7-test-input.txt @@ -0,0 +1,14 @@ +AAAAA 2 +22222 3 +AAAAK 5 +22223 7 +AAAKK 11 +22233 13 +AAAKQ 17 +22234 19 +AAKKQ 23 +22334 29 +AAKQJ 31 +22345 37 +AKQJT 41 +23456 43 \ No newline at end of file diff --git a/2023/7.py b/2023/7.py new file mode 100644 index 0000000..2df8229 --- /dev/null +++ b/2023/7.py @@ -0,0 +1,94 @@ +from functools import cmp_to_key + +value = ["J","1", "2", "3", "4", "5", "6", "7", "8", "9", "T", "Q", "K", "A"] + +class Hand: + def __init__(self, hand: str, bet: int, power: int, unsorted_power: int): + self.hand = hand + self.bet = bet + self.power = power + self.unsorted_power = unsorted_power + + def bet(self): + return self.bet + +def main(): + with open("7-input.txt", 'r') as file: + hands = [] + for line in file.readlines(): + line = line.strip() + split = line.split(' ') + hands.append(Hand(split[0], int(split[1]), power(split[0]), unsorted_power(split[0]))) + p = list(sorted(hands, key=cmp_to_key(custom_comparator), reverse=True)) + mapped= list(map(lambda x: (x.hand, x.power, x.bet), p)) + print(mapped) + result = 0 + for i, hand in enumerate(p): + rank = (len(p)-i) + product = hand.bet * rank + result = result + product + print(result) + +def custom_comparator(element1: Hand, element2:Hand): + # Replace this with your own logic to compare two elements + # Here, we are comparing based on the length of the strings + + if element1.power < element2.power: + return -1 + elif element1.power > element2.power: + return 1 + else: + for i in range(0,5): + v1 = value.index(element1.hand[i]) + v2 = value.index(element2.hand[i]) + if v1 < v2: + return -1 + elif v1 > v2: + return 1 + return 0 + +def unsorted_power(hand: str): + unsorted_hand_power = 0 + for i, char in enumerate(hand): + unsorted_hand_power += value.index(char) * (1000 - (pow(i, 2))) + return int(unsorted_hand_power) + +def power(hand: str): + power = [] + j_count = hand.count("J") + if j_count == 5: return 500 + for char in hand: + if char == 'J': continue + count=hand.count(char) + t = (count, char, value.index(char)) + if count > 0 and power.count(t) == 0: + power.append(t) + s = sorted(power, key=lambda x: (x[0],x[2]),reverse=True) + highest = s[0] + nd_highest = None + if len(s) > 1: + nd_highest = s[1] + + count = highest[0] + if count == 5 or count + j_count == 5: + return 500 #+ value.index(first[1]) + if count == 4 or count + j_count == 4: + return 400 #+ value.index(first[1]) + if count == 3 or count + j_count == 3: + j_count = 0 + if nd_highest != None: + second = nd_highest[0] + if second == 2 or second + j_count == 2: + return 300# + value.index(first[1]) + value.index(second[1]) + return 200# + value.index(first[1]) + if count == 2 or count + j_count == 2: + j_left = count - j_count + second = nd_highest[0] + if second == 2: + return 150# + value.index(first[1]) + value.index(second[1]) + return 100# + value.index(first[1]) + return 1 + +if __name__ == "__main__": + main() + diff --git a/2023/8-input.txt b/2023/8-input.txt new file mode 100644 index 0000000..c8d6906 --- /dev/null +++ b/2023/8-input.txt @@ -0,0 +1,740 @@ +LLRLLRRLRLRRRLRRLLRRRLRLRLRRLRRRLRRLRLRLLRLLLRRRLRRLRRRLRRRLRRRLRLRRLLRRLRRLRRLRRRLRLRRRLLRLRRLRRRLRLRRRLRRRLRLRRRLLRRRLRRRLRLRRLRLRRRLLRRLRRLRRLRRLRLRLRRRLLRRRLRRLRRRLRLRLRRRLLRLRRLLRLRRLRLRRRLRLRRLLRRRLLRRLRLRLLRLLRRLRRLLRRLRLRRLRLRLRRRLRRLRLLLLRRLRLRLRRRLLLRRRLRRLRRLRLLRLRRRLLLRRRLRRRLRRRR + +NQT = (TXC, RVJ) +FPT = (PNS, KJL) +BNQ = (THG, LCV) +SPL = (VBH, NNV) +TLM = (LVQ, PGT) +GHC = (XKN, SPR) +PHT = (HMF, DST) +FSF = (JCM, SMT) +GDD = (FHJ, RBS) +GVR = (FVD, FVD) +SST = (PMF, MGC) +ZZZ = (VLV, SQV) +SDV = (DBL, GTL) +XSP = (GRV, RFM) +SKG = (NGH, VDX) +BPK = (RMK, LCQ) +VSC = (DRN, SFR) +BFR = (BJR, GMD) +HTM = (PFM, LVD) +XVP = (LDP, LDP) +DRD = (SCH, LKD) +DSJ = (GSQ, JTN) +VTS = (BNQ, VFX) +KVF = (HTP, MQK) +GPS = (FXQ, TPF) +VRC = (RTK, RTK) +HRD = (PMQ, JCR) +DJK = (FTC, KXH) +VGJ = (PCJ, TVH) +QMN = (TLC, HNG) +DMH = (QSD, PDP) +CRL = (VFR, MDR) +XGV = (CMV, FTV) +XJX = (HTM, HHG) +SQP = (XKK, KJF) +PXZ = (JCK, PTH) +BDV = (JMH, CND) +FBD = (CQS, QCN) +TRS = (FGM, NKF) +TLC = (HBC, FRC) +DKR = (LCP, VLD) +GTF = (QHD, PBB) +NCC = (HJF, LNR) +KGS = (KPF, GTB) +CPQ = (SLR, DRD) +RJQ = (KXK, BFR) +XSQ = (PNN, NMG) +DVP = (MBH, QLV) +CQL = (DVP, VHQ) +CPV = (MDL, VFB) +VHV = (CQS, QCN) +NRD = (KSC, HKX) +STX = (CGJ, PGK) +CNP = (FVB, MCN) +JXT = (DXT, LHK) +GHG = (MCL, MPB) +PGK = (RMS, SBC) +DNH = (FSV, RNS) +TFZ = (NQT, PBD) +MBQ = (DPH, FDK) +SJQ = (JLB, LJJ) +MBN = (FTD, CDB) +TDJ = (FJB, PQX) +DXT = (FJP, HGQ) +MSG = (MSM, CXN) +RTK = (GVR, GVR) +SDX = (VTS, MRG) +VCX = (QTL, NVV) +XCS = (KLR, THD) +RDD = (QDS, JST) +FVB = (BLD, NPF) +LVD = (JXC, FQR) +TMR = (SNJ, DML) +RCH = (JST, QDS) +RVJ = (XMN, SDT) +SQV = (MVP, MKC) +HDB = (LTL, JJP) +LVC = (CLL, CLL) +FGM = (TPG, PHK) +SCS = (MLK, TKF) +PRF = (TLB, KTT) +MPM = (NMN, KGS) +MGC = (NLT, MGS) +CNK = (BFR, KXK) +FXQ = (JMX, LLL) +GTB = (MFM, PMV) +VXS = (DPN, FPN) +NRB = (SCS, SGH) +QLJ = (NLL, VMM) +PNN = (SFJ, HSR) +BRJ = (RMQ, XLJ) +SNF = (FMH, MNR) +VLD = (SHN, FBG) +FSM = (GKF, DBC) +MHP = (LBX, KQH) +NSQ = (QKK, KND) +RRT = (RMK, LCQ) +BCX = (GTM, MVV) +XSX = (XFK, XNF) +TKF = (MFF, VCV) +HPD = (GHC, RKN) +MRG = (BNQ, VFX) +QTK = (QRT, RRB) +HFF = (NKD, SXP) +MFM = (BRB, DDN) +VVL = (GPC, BRJ) +CST = (GQT, NLG) +THD = (MVK, DRJ) +XFN = (JNC, MNF) +NKH = (PMD, BDV) +NLT = (HKK, KCD) +VXR = (XCS, GRX) +SDS = (JBV, JFM) +BFM = (XXG, CHQ) +PMD = (JMH, CND) +VVF = (GQT, NLG) +FGG = (NRD, SNP) +LKD = (NGK, SQP) +RSV = (TXL, GPD) +LNR = (RDB, NTD) +RPL = (SNB, MHK) +CCG = (JDT, PJD) +TKR = (TMD, VCL) +DRJ = (CQL, XFH) +JFM = (MMV, GPS) +FJP = (BDM, QXN) +QJS = (BFM, RHM) +KTT = (PXV, VJV) +XXB = (VKG, HXL) +RMK = (DBR, HFQ) +NGK = (KJF, XKK) +NPF = (SMK, BTJ) +RBS = (PGN, GNH) +PNS = (VTJ, KSM) +BCK = (SDX, NRF) +RNS = (XVS, KFX) +PDB = (BHH, BHH) +GMQ = (MRD, JRG) +DGM = (HDV, GSD) +TLB = (PXV, VJV) +QRT = (FRS, FFT) +VSX = (NLL, VMM) +GSQ = (JRJ, LGV) +TXC = (XMN, SDT) +HGQ = (QXN, BDM) +PMQ = (KBB, NRH) +KRC = (DGM, XCR) +QLZ = (TKM, HTF) +NJM = (GPC, BRJ) +FRG = (QLS, GXP) +NMG = (SFJ, HSR) +JDT = (TDF, QHT) +LFC = (RFM, GRV) +TXL = (XSX, FTP) +DKG = (JNL, XBR) +VKF = (GTM, MVV) +VQV = (RHT, SDS) +SJH = (LPV, TRQ) +KSM = (LHX, CPQ) +QMH = (MMD, GPB) +VNP = (TRQ, LPV) +NBM = (JPF, KRM) +RGQ = (TMH, KQR) +RSM = (SMP, KSG) +HDV = (VXS, VQG) +TTD = (CDB, FTD) +GXF = (SLN, SCF) +QHT = (TMR, QTH) +MNR = (VXR, GDS) +GSA = (THS, NKH) +XKN = (GNB, VLQ) +HHQ = (RRB, QRT) +CLC = (THS, NKH) +BSN = (QKN, QKN) +QRB = (KDT, JSL) +JCX = (VCX, DXP) +BDM = (SQN, TBH) +GQT = (DNB, NTS) +QSF = (KXH, FTC) +HFQ = (NNQ, LLM) +VFB = (NGF, NXB) +JMX = (HFB, DNR) +VKS = (NBM, NQF) +PGN = (FBD, VHV) +PNQ = (KQR, TMH) +QLM = (VVL, NJM) +PRB = (KQD, QRB) +GTL = (VQJ, DJR) +KNL = (JRN, KVF) +VMT = (LTL, JJP) +QKN = (PHM, VQS) +QBL = (LXK, PRF) +PCT = (VNP, SJH) +QLV = (HXF, DXH) +HNN = (DSJ, XDN) +LGV = (VVD, XXB) +XCB = (XXQ, CHX) +GXC = (FGG, MSX) +SLN = (VLP, SST) +NQQ = (SXP, NKD) +DRN = (DPC, TCV) +JHF = (QTK, HHQ) +GPM = (GTF, NCX) +PFM = (JXC, JXC) +KBT = (KQH, LBX) +XFH = (VHQ, DVP) +CPT = (VSD, TKR) +GSX = (CTF, XXX) +SPR = (GNB, VLQ) +XBP = (MXH, TBJ) +VKG = (PKS, CPT) +THG = (FRP, FRP) +SHN = (FRG, TCF) +BFS = (RPL, JRV) +PHK = (BQG, BMH) +SMK = (VRV, FDG) +PBF = (MSG, XGT) +NKF = (TPG, PHK) +VDQ = (MHP, KBT) +JRG = (DXJ, JCX) +MHK = (QTS, CRL) +CXN = (FBR, FCT) +DHT = (XXQ, CHX) +DML = (SPL, TBX) +BTJ = (FDG, VRV) +KVG = (TJJ, TRS) +JPH = (CLC, DXZ) +HXL = (PKS, CPT) +RDB = (PKM, FLG) +CTF = (NLX, SJQ) +BMH = (GVP, NSQ) +GTP = (NMG, PNN) +KJL = (KSM, VTJ) +SLR = (LKD, SCH) +TJJ = (NKF, FGM) +DPH = (HHT, NRB) +PBN = (CLC, CLC) +FFT = (DJK, QSF) +RTL = (TBJ, MXH) +PJD = (TDF, QHT) +HTP = (BGK, NCC) +MDL = (NXB, NGF) +CGJ = (SBC, RMS) +RTR = (LHK, DXT) +MLR = (JNC, MNF) +DXL = (RKN, GHC) +QTS = (VFR, MDR) +LLM = (KSK, BHN) +FFJ = (HGD, HGD) +PQX = (VRC, KXG) +XFK = (QNM, TMC) +FVD = (HTF, TKM) +CSR = (XDN, DSJ) +VPN = (DPH, FDK) +TJN = (HGC, HJH) +KSC = (SVX, SVX) +TLH = (FSV, RNS) +QTH = (DML, SNJ) +VQJ = (SMR, KCL) +GNP = (JRQ, GBR) +TKB = (TLC, HNG) +FBV = (BFM, RHM) +DMS = (BTG, NXV) +VDX = (BCM, RNG) +MSN = (QTK, HHQ) +TKM = (LSM, PBF) +FSS = (MCN, FVB) +DLA = (PHM, VQS) +LXK = (KTT, TLB) +JBV = (MMV, GPS) +FFQ = (QJS, FBV) +MXH = (RPP, LKF) +RKN = (SPR, XKN) +FDG = (RSC, QMH) +NLL = (VKS, FPF) +XDN = (JTN, GSQ) +FLS = (JNL, XBR) +MLA = (PTH, JCK) +GTM = (FSS, CNP) +NVV = (LLR, NLV) +TBX = (VBH, NNV) +HTG = (VDQ, GFH) +VLQ = (HXR, QNQ) +JSL = (MVC, DJM) +BPX = (VVL, NJM) +FBG = (FRG, TCF) +PFS = (HMH, KFF) +GPB = (DDH, RSM) +JFB = (FXX, GXC) +XJZ = (VQS, PHM) +FRS = (QSF, DJK) +NKP = (PDB, SGT) +KSB = (CTF, XXX) +DTL = (FMH, MNR) +HSN = (PBN, JPH) +JCQ = (XCB, DHT) +GBR = (NKP, GHV) +BKL = (CKM, XJX) +JLH = (XGV, MXR) +TBJ = (LKF, RPP) +RSJ = (HVN, KKH) +SVX = (BSN, BSN) +GRV = (CHT, NMV) +TKX = (RHT, SDS) +MQK = (BGK, NCC) +KLR = (DRJ, MVK) +NCH = (BCX, VKF) +NLX = (JLB, LJJ) +VHQ = (MBH, QLV) +QXR = (NCH, FRT) +FQS = (VGJ, HFG) +LCP = (SHN, FBG) +NCX = (QHD, PBB) +SXK = (HGD, ZZZ) +RNR = (RTR, JXT) +VQG = (FPN, DPN) +RMJ = (HNN, CSR) +KSL = (BCK, QQJ) +HCK = (QMN, TKB) +LBX = (HFD, XQH) +MTL = (NCH, FRT) +XHR = (KFL, TLM) +LLH = (LFC, XSP) +JRJ = (XXB, VVD) +KGM = (FQS, KGC) +SDT = (MNQ, GTN) +GJQ = (KLG, DMS) +RNG = (RNR, GHB) +DCK = (TXL, GPD) +DXJ = (DXP, VCX) +SNP = (KSC, HKX) +KRS = (BMQ, GBP) +GPC = (RMQ, XLJ) +CDB = (MXQ, XLM) +NLV = (FGS, KNL) +GNB = (HXR, QNQ) +KFL = (PGT, LVQ) +HQL = (QXR, MTL) +BJR = (PBH, PHT) +QTL = (LLR, NLV) +SNB = (CRL, QTS) +LDP = (PBN, PBN) +DFJ = (FHJ, RBS) +JJP = (XMJ, VVQ) +GQC = (QRB, KQD) +SFR = (DPC, TCV) +MPB = (FSM, GGL) +SXP = (QFP, GFQ) +MNF = (DKG, FLS) +KLG = (NXV, BTG) +TVH = (JFB, PJJ) +SHJ = (SFX, TMT) +RHF = (SRD, KBV) +XBR = (NQQ, HFF) +PBD = (RVJ, TXC) +XXQ = (KSL, DDL) +FTP = (XNF, XFK) +HBC = (JTF, LLH) +BTG = (HDB, VMT) +KFX = (DMH, GBM) +SGH = (MLK, TKF) +CVS = (GBP, BMQ) +DDL = (BCK, QQJ) +PKM = (QNV, DPJ) +QSR = (KJL, PNS) +KPD = (PCT, MCP) +BHH = (LVC, LVC) +MDR = (HTG, SFD) +HKK = (DXL, HPD) +SMD = (RCQ, NJD) +XMJ = (MKM, NTN) +CQS = (DNH, TLH) +PBH = (HMF, DST) +MKC = (CJH, JDQ) +KLL = (FJB, PQX) +CXP = (VGS, HFX) +JPF = (STX, BXV) +CRV = (RCQ, NJD) +FDK = (NRB, HHT) +BTT = (CRV, SMD) +RHT = (JBV, JFM) +MXR = (FTV, CMV) +DBL = (DJR, VQJ) +CHX = (DDL, KSL) +JKX = (VDX, NGH) +MQA = (HTF, TKM) +DJQ = (DLT, SBS) +VFR = (SFD, HTG) +NMN = (KPF, GTB) +JNK = (VNQ, TPT) +KJH = (GTF, NCX) +QLS = (GXF, SCK) +NHR = (PNQ, RGQ) +FPF = (NBM, NQF) +BKP = (KLL, TDJ) +SBC = (TTF, SSS) +XMN = (GTN, MNQ) +PBB = (RRT, BPK) +XVS = (GBM, DMH) +HFX = (MPN, JLH) +KDS = (TXG, DBT) +DDN = (GDD, DFJ) +SSS = (CST, VVF) +NGH = (RNG, BCM) +HNG = (HBC, FRC) +CND = (RCH, RDD) +HFD = (NHR, RDV) +FRC = (JTF, LLH) +TBH = (KDS, CNQ) +QNQ = (TFB, KGM) +SMT = (MBK, TJN) +NGF = (BPV, JNR) +XLM = (XVP, QCK) +JLB = (SNF, DTL) +NXV = (HDB, VMT) +VSD = (TMD, VCL) +TMT = (GHG, PVG) +NNV = (JKX, SKG) +HFB = (QQK, BKP) +BLD = (SMK, BTJ) +JGH = (TKB, QMN) +XXX = (NLX, SJQ) +LQH = (VLD, LCP) +KRM = (BXV, STX) +HVN = (FTH, QBL) +QXM = (KLG, DMS) +DBR = (LLM, NNQ) +MVP = (CJH, JDQ) +FBR = (MBQ, VPN) +SFP = (HRD, SGC) +HGD = (SQV, VLV) +CJH = (JNK, DXR) +DJM = (XSQ, GTP) +KXG = (RTK, RKV) +HTF = (LSM, PBF) +FXX = (MSX, FGG) +MFF = (VSC, QCP) +TMH = (HQL, GSJ) +KBB = (CHN, FSF) +XTV = (SBH, SGR) +MFH = (JGH, HCK) +SGC = (JCR, PMQ) +TRQ = (LVM, FFQ) +VCL = (DXK, RBD) +QSD = (VQF, JCQ) +FQR = (FFJ, SXK) +KQD = (KDT, JSL) +XLJ = (DCG, MPM) +FXL = (TFF, SSP) +RRN = (DBL, GTL) +CKM = (HTM, HHG) +VLP = (MGC, PMF) +KPQ = (MDL, VFB) +XQH = (RDV, NHR) +JRN = (MQK, HTP) +JMH = (RCH, RDD) +JRV = (SNB, MHK) +QCP = (DRN, SFR) +LLR = (KNL, FGS) +NMV = (DLJ, DJQ) +KBV = (GQC, PRB) +JXC = (FFJ, FFJ) +LFS = (MHB, VXT) +DST = (XHR, PCS) +SNJ = (TBX, SPL) +KND = (FDH, CCG) +CMT = (KPK, RMJ) +HHG = (PFM, LVD) +RPP = (MBN, TTD) +MBK = (HJH, HGC) +NQF = (JPF, KRM) +FPN = (BFS, RVB) +GFQ = (RTL, XBP) +SCH = (NGK, SQP) +VFX = (THG, LCV) +CTG = (TMT, SFX) +PGT = (CMT, RFB) +RLB = (TFF, SSP) +STD = (SJT, TFZ) +VMM = (FPF, VKS) +SFX = (GHG, PVG) +BXV = (CGJ, PGK) +FBT = (TBM, RHF) +LJJ = (SNF, DTL) +LKF = (MBN, TTD) +QNV = (KRC, VMF) +VGS = (MPN, JLH) +MKM = (JJD, BKL) +HKX = (SVX, RKF) +MSL = (CRV, SMD) +RHM = (CHQ, XXG) +FRP = (MSF, MSF) +VCV = (VSC, QCP) +FMH = (VXR, GDS) +FLR = (VGS, HFX) +GHV = (PDB, SGT) +FHQ = (MRD, JRG) +HJF = (RDB, NTD) +MSM = (FBR, FCT) +GHB = (JXT, RTR) +BMQ = (MFH, GTR) +MCP = (VNP, SJH) +SRD = (PRB, GQC) +DXR = (TPT, VNQ) +RFB = (KPK, RMJ) +GSJ = (MTL, QXR) +FHJ = (PGN, GNH) +LCQ = (DBR, HFQ) +GBM = (PDP, QSD) +TPT = (JHF, MSN) +MVV = (CNP, FSS) +KXD = (LQH, DKR) +PXV = (QXM, GJQ) +BHN = (KPQ, CPV) +SBS = (RRN, SDV) +LHX = (SLR, DRD) +TBM = (KBV, SRD) +DXK = (PLP, FGX) +NKD = (QFP, GFQ) +PVG = (MCL, MPB) +TTF = (VVF, CST) +PDP = (VQF, JCQ) +MSX = (NRD, SNP) +CMV = (RSV, DCK) +PMF = (NLT, MGS) +MSF = (SJT, SJT) +NTC = (DKR, LQH) +GNH = (VHV, FBD) +GSD = (VQG, VXS) +VBH = (JKX, SKG) +GTR = (JGH, HCK) +SSL = (MHB, VXT) +NLG = (NTS, DNB) +JRQ = (NKP, GHV) +MLK = (MFF, VCV) +BLF = (HRD, SGC) +BGK = (HJF, LNR) +VQF = (XCB, DHT) +GVP = (QKK, KND) +FTD = (MXQ, XLM) +JST = (JFC, KVG) +JFC = (TJJ, TRS) +MMD = (DDH, RSM) +SBH = (TKX, VQV) +PDH = (CVS, KRS) +NRH = (CHN, FSF) +MRD = (JCX, DXJ) +KGC = (VGJ, HFG) +RRB = (FFT, FRS) +KQR = (GSJ, HQL) +FSV = (XVS, KFX) +DBC = (PSR, QXX) +GMR = (KKH, HVN) +CLG = (CLL, PXZ) +JNL = (HFF, NQQ) +JCR = (KBB, NRH) +FTV = (DCK, RSV) +DPC = (FHQ, GMQ) +MVC = (XSQ, GTP) +KXK = (GMD, BJR) +DPJ = (KRC, VMF) +FTC = (GSX, KSB) +TBK = (QKN, XJZ) +VFG = (SHJ, CTG) +VXT = (QLJ, VSX) +MHB = (VSX, QLJ) +MMV = (TPF, FXQ) +QCN = (DNH, TLH) +KPK = (CSR, HNN) +RDV = (PNQ, RGQ) +DCG = (KGS, NMN) +FJB = (VRC, KXG) +NTD = (PKM, FLG) +DBT = (GPM, KJH) +LLL = (HFB, DNR) +SMR = (BPX, QLM) +MGS = (HKK, KCD) +HHT = (SCS, SGH) +MVK = (CQL, XFH) +GFH = (KBT, MHP) +JNC = (FLS, DKG) +QHD = (RRT, BPK) +NTN = (BKL, JJD) +VQS = (CNK, RJQ) +KQH = (XQH, HFD) +GGL = (DBC, GKF) +QQK = (KLL, TDJ) +LHK = (HGQ, FJP) +RKV = (GVR, PLT) +VKV = (TBM, RHF) +MPN = (XGV, MXR) +PHM = (RJQ, CNK) +TPG = (BQG, BMH) +CLL = (PTH, JCK) +MXQ = (XVP, QCK) +NXB = (BPV, JNR) +GTN = (PFS, HGV) +FRT = (VKF, BCX) +GRX = (THD, KLR) +VLV = (MVP, MKC) +NJD = (QBX, XTV) +VJV = (QXM, GJQ) +KPF = (MFM, PMV) +JCM = (TJN, MBK) +HFG = (TVH, PCJ) +HJH = (QNB, PDH) +JTN = (JRJ, LGV) +CHQ = (XFN, MLR) +JNR = (TXN, KPD) +BCM = (RNR, GHB) +PCS = (TLM, KFL) +DXP = (QTL, NVV) +KJF = (NTC, KXD) +DLT = (RRN, SDV) +QXN = (TBH, SQN) +TMC = (FBT, VKV) +PJJ = (GXC, FXX) +KXH = (KSB, GSX) +GDS = (XCS, GRX) +BQG = (GVP, NSQ) +XNF = (TMC, QNM) +RFM = (CHT, NMV) +JDQ = (JNK, DXR) +LKP = (MSF, STD) +TFB = (FQS, KGC) +DNR = (BKP, QQK) +FGX = (FPT, QSR) +HXR = (KGM, TFB) +XKK = (NTC, KXD) +FDH = (JDT, PJD) +FTH = (PRF, LXK) +TCF = (GXP, QLS) +TXN = (PCT, MCP) +TPF = (LLL, JMX) +LPV = (LVM, FFQ) +HXF = (FXL, RLB) +HGV = (KFF, HMH) +MCN = (BLD, NPF) +SMP = (BTT, MSL) +LVM = (FBV, QJS) +TCV = (GMQ, FHQ) +FLG = (DPJ, QNV) +PTH = (LFS, SSL) +SQS = (SHJ, CTG) +GBP = (MFH, GTR) +QCK = (LDP, HSN) +JCK = (LFS, SSL) +TNL = (LVC, CLG) +GKF = (QXX, PSR) +PCJ = (PJJ, JFB) +MBH = (DXH, HXF) +PLP = (FPT, QSR) +VXQ = (JRQ, GBR) +DDH = (KSG, SMP) +PKS = (TKR, VSD) +JRT = (CXP, FLR) +HMH = (SQS, VFG) +DNB = (JRT, BRM) +BRB = (DFJ, GDD) +PSR = (SFP, BLF) +KSK = (KPQ, CPV) +QXX = (BLF, SFP) +SSP = (GMR, RSJ) +VMF = (DGM, XCR) +MNQ = (PFS, HGV) +HSR = (VXQ, GNP) +KSG = (MSL, BTT) +VRV = (RSC, QMH) +XXG = (MLR, XFN) +RVB = (JRV, RPL) +KDT = (MVC, DJM) +SQN = (CNQ, KDS) +BPV = (TXN, KPD) +SJT = (PBD, NQT) +LCV = (FRP, LKP) +CNQ = (TXG, DBT) +GPD = (FTP, XSX) +CHN = (SMT, JCM) +XGT = (MSM, CXN) +TFF = (GMR, RSJ) +QKK = (FDH, CCG) +CHT = (DLJ, DJQ) +BRM = (CXP, FLR) +KFF = (VFG, SQS) +FGS = (KVF, JRN) +SFD = (GFH, VDQ) +RMQ = (MPM, DCG) +AAA = (SQV, VLV) +JJD = (XJX, CKM) +VVD = (HXL, VKG) +SCF = (VLP, SST) +RKF = (BSN, TBK) +LVQ = (CMT, RFB) +SCK = (SCF, SLN) +TXG = (GPM, KJH) +DXZ = (NKH, THS) +HMF = (PCS, XHR) +KKH = (QBL, FTH) +THS = (PMD, BDV) +FCT = (MBQ, VPN) +VVQ = (MKM, NTN) +QNM = (VKV, FBT) +LTL = (XMJ, VVQ) +TDF = (QTH, TMR) +VNQ = (JHF, MSN) +KCL = (QLM, BPX) +RMS = (TTF, SSS) +HGC = (QNB, PDH) +JTF = (LFC, XSP) +PMV = (DDN, BRB) +VTJ = (CPQ, LHX) +NNQ = (BHN, KSK) +NRF = (VTS, MRG) +QNB = (KRS, CVS) +RCQ = (QBX, XTV) +MCL = (FSM, GGL) +NTS = (JRT, BRM) +QQJ = (NRF, SDX) +QFP = (XBP, RTL) +DPN = (BFS, RVB) +XCR = (HDV, GSD) +SGT = (BHH, TNL) +JGA = (PBD, NQT) +LSM = (XGT, MSG) +PLT = (FVD, QLZ) +RSC = (MMD, GPB) +DXH = (RLB, FXL) +TMD = (DXK, RBD) +QDS = (JFC, KVG) +KCD = (DXL, HPD) +GMD = (PHT, PBH) +DLJ = (DLT, SBS) +DJR = (SMR, KCL) +SGR = (VQV, TKX) +RBD = (FGX, PLP) +SFJ = (GNP, VXQ) +GXP = (SCK, GXF) +QBX = (SBH, SGR) diff --git a/2023/8-test-input.txt b/2023/8-test-input.txt new file mode 100644 index 0000000..e94e6bd --- /dev/null +++ b/2023/8-test-input.txt @@ -0,0 +1,10 @@ +LR + +FFA = (FFB, XXX) +FFB = (XXX, FFZ) +FFZ = (FFB, XXX) +DDA = (DDB, XXX) +DDB = (DDC, DDC) +DDC = (DDZ, DDZ) +DDZ = (DDB, DDB) +XXX = (XXX, XXX) \ No newline at end of file diff --git a/2023/8.py b/2023/8.py new file mode 100644 index 0000000..ab9fb3f --- /dev/null +++ b/2023/8.py @@ -0,0 +1,52 @@ +import re +import math + +def main(): + with open("8-input.txt", 'r') as file: + maps = {} + starting_nodes = [] + lines = file.readlines() + directions = re.findall("[a-zA-Z]", lines[0]) + + for i, line in enumerate(lines[2:]): + parsed = re.findall("[a-zA-Z]+", line) + if len(parsed) == 0: continue + if parsed[0].endswith('A'): starting_nodes.append(parsed[0]) + maps[parsed[0]] = (parsed[1], parsed[2]) + + steps = [] + for starter in starting_nodes: + steps.append(traverse_map(maps, directions, maps[starter], 0)) + print(steps) + print(find_lcm_of_array(steps)) + +def find_lcm_of_array(arr): + # Ensure the array is not empty + if not arr: + return None + + # Initialize lcm with the first element of the array + lcm_result = arr[0] + + # Iterate through the array and find the LCM + for i in range(1, len(arr)): + lcm_result = math.lcm(lcm_result, arr[i]) + + return lcm_result + + +def traverse_map(maps, directions, nd, steps): + while(True): + step = steps % len(directions) + dir = directions[step] + if dir == "R": + next = nd[1] + if dir == "L": + next = nd[0] + steps += 1 + if next.endswith('Z'): + return steps + nd = maps[next] + +if __name__ == "__main__": + main() diff --git a/2023/9-input.txt b/2023/9-input.txt new file mode 100644 index 0000000..e72fdf5 --- /dev/null +++ b/2023/9-input.txt @@ -0,0 +1,200 @@ +26 35 42 63 136 327 729 1457 2648 4480 7229 11394 17952 28881 48234 84291 153739 289701 557511 1087187 2143197 +-6 -7 -7 -6 -4 -1 3 8 14 21 29 38 48 59 71 84 98 113 129 146 164 +10 21 39 71 124 205 321 479 686 949 1275 1671 2144 2701 3349 4095 4946 5909 6991 8199 9540 +17 36 64 110 196 368 721 1447 2915 5792 11214 21016 38030 66460 112343 184105 293221 454988 689420 1022274 1486216 +14 33 64 116 204 363 671 1289 2540 5066 10129 20190 40081 79524 158734 320937 659964 1379861 2920964 6221222 13247612 +10 17 41 95 198 375 657 1081 1690 2533 3665 5147 7046 9435 12393 16005 20362 25561 31705 38903 47270 +14 29 64 124 216 352 565 958 1808 3743 8000 16767 33646 64419 118683 213748 383770 699853 1311392 2526026 4956236 +19 30 47 86 178 369 720 1307 2221 3568 5469 8060 11492 15931 21558 28569 37175 47602 60091 74898 92294 +1 13 30 66 156 361 782 1589 3082 5828 10975 20973 41216 83707 175021 373168 802624 1726245 3691904 7830015 16453595 +7 6 12 33 86 197 399 741 1345 2591 5587 13218 32302 77760 180292 399922 849043 1730420 3398238 6454079 11895222 +20 40 66 104 168 288 538 1089 2290 4780 9636 18566 34162 60236 102272 168039 268424 418560 639342 959444 1417972 +4 1 8 49 171 457 1047 2169 4174 7572 13095 21883 36015 59804 102558 183893 343184 655371 1256114 2380229 4418451 +11 21 44 94 190 354 607 963 1421 1955 2502 2948 3112 2728 1425 -1295 -6081 -13759 -25360 -42150 -65662 +-5 2 24 67 140 257 432 667 941 1223 1565 2410 5431 15611 46111 129246 340658 851773 2042419 4740096 10722177 +30 42 54 78 144 309 666 1353 2562 4548 7638 12240 18852 28071 40602 57267 79014 106926 142230 186306 240696 +4 5 6 4 -2 -6 16 144 614 2030 5756 14577 33738 72479 146164 279025 507368 882763 1474194 2367290 3657486 +15 39 71 119 214 419 847 1704 3385 6680 13205 26287 52768 106695 216910 442638 905099 1850193 3769279 7624639 15257058 +3 12 37 84 157 259 396 590 917 1601 3217 7084 15961 35198 74558 151062 293511 549970 1000717 1781348 3124429 +30 52 78 111 156 226 363 678 1414 3032 6311 12445 23129 40681 68393 111605 180538 296816 506992 908439 1695878 +13 11 22 61 142 275 477 809 1456 2892 6241 14089 32266 73589 165430 364651 786707 1661933 3443480 7011621 14053570 +12 39 91 193 395 786 1514 2811 5024 8670 14583 24331 41297 73223 137768 274043 565775 1186884 2489910 5175384 10611406 +17 30 44 61 96 187 413 924 1999 4173 8512 17166 34394 68332 133865 257067 481789 879104 1560460 2695547 4536052 +4 11 19 37 82 184 404 887 1995 4606 10740 24810 56050 123161 263200 548769 1121742 2260137 4510825 8950315 17687738 +7 27 59 103 159 227 307 399 503 619 747 887 1039 1203 1379 1567 1767 1979 2203 2439 2687 +24 33 35 39 72 183 445 955 1832 3213 5247 8087 11880 16755 22809 30091 38584 48185 58683 69735 80840 +14 25 44 81 158 317 646 1349 2901 6354 13911 29992 63242 130402 263910 526903 1042536 2050026 4008556 7783136 14964330 +14 36 82 176 361 717 1400 2716 5251 10085 19128 35643 65091 116595 205685 359815 630008 1116030 2020826 3766194 7231721 +7 22 46 81 131 199 287 419 728 1675 4501 12052 30162 69830 150484 304688 584717 1071500 1886512 3207283 5287285 +0 13 51 141 338 752 1597 3285 6611 13106 25672 49656 94583 176907 324514 584721 1040090 1842598 3291085 6008902 11347440 +26 54 99 165 256 376 529 719 950 1226 1551 1929 2364 2860 3421 4051 4754 5534 6395 7341 8376 +5 8 30 96 252 576 1189 2266 4047 6848 11072 17220 25902 37848 53919 75118 102601 137688 181874 236840 304464 +18 30 38 43 47 60 122 355 1072 2987 7605 17945 39891 84713 173697 346423 675094 1288516 2410936 4423047 7955159 +15 33 70 148 318 690 1491 3159 6476 12736 23937 42981 73861 121799 193252 295586 435973 618611 838592 1069506 1239992 +12 25 44 83 177 411 974 2247 4940 10314 20568 39558 74189 137162 252394 465548 863972 1613295 3022404 5655077 10515841 +17 23 28 32 35 37 38 38 37 35 32 28 23 17 10 2 -7 -17 -28 -40 -53 +20 27 34 41 48 55 62 69 76 83 90 97 104 111 118 125 132 139 146 153 160 +14 28 63 140 289 549 968 1603 2520 3794 5509 7758 10643 14275 18774 24269 30898 38808 48155 59104 71829 +11 13 25 60 131 258 496 1006 2196 4970 11163 24360 51603 107183 221143 457846 954845 2000571 4182761 8660420 17643527 +1 12 46 110 209 345 517 731 1033 1584 2809 5682 12277 26869 58216 124413 263297 554524 1165328 2442470 5090777 +1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 +10 19 28 36 37 21 -18 -55 28 563 2326 6990 18036 42542 94505 200604 409561 806558 1534779 2827723 5059814 +8 31 67 121 207 352 604 1053 1886 3529 6995 14671 31953 70390 153340 325587 668932 1326467 2539083 4698765 8424403 +15 39 77 136 230 387 668 1209 2294 4459 8612 16133 28911 49357 80812 129945 215765 396795 842423 2002558 4981136 +8 4 -7 -26 -38 11 245 898 2373 5351 11022 21596 41452 79760 156506 316211 658402 1402950 3024695 6519782 13912298 +24 49 97 177 299 483 776 1277 2170 3765 6547 11233 18837 30743 48786 75341 113420 166777 240021 338737 469615 +-5 -4 3 23 81 241 651 1635 3864 8647 18392 37296 72332 134610 241198 417498 700281 1141494 1812961 2812109 4268859 +13 24 37 60 120 280 664 1498 3179 6388 12267 22684 40614 70668 119806 198274 320809 508160 788977 1202124 1799476 +-8 1 27 85 201 414 780 1377 2310 3715 5761 8649 12607 17880 24714 33333 43908 56517 71095 87373 104805 +4 10 26 58 117 232 475 1002 2120 4392 8797 16987 31757 58013 104866 190153 350020 658890 1270556 2501848 5000829 +5 23 60 133 271 521 957 1692 2895 4833 8000 13465 23669 44023 85797 170932 339537 660931 1249132 2283653 4036307 +-6 0 21 76 210 510 1137 2387 4793 9279 17376 31509 55363 94335 156078 251142 393716 602474 901527 1321482 1900608 +7 26 69 161 350 715 1369 2453 4123 6547 9953 14802 22202 34730 57889 102496 188375 349816 643357 1158551 2032494 +8 24 59 124 241 451 822 1457 2502 4154 6669 10370 15655 23005 32992 46287 63668 86028 114383 149880 193805 +14 25 29 28 36 87 252 670 1597 3476 7030 13379 24181 41796 69471 111543 173656 262987 388475 561046 793826 +13 30 69 137 253 466 879 1679 3173 5830 10329 17613 28949 45994 70867 106227 155357 222254 311725 429489 582285 +19 26 27 20 5 -1 63 341 1111 2848 6299 12570 23225 40397 66911 106419 163547 244054 355003 504944 704109 +11 27 63 139 287 567 1091 2060 3840 7143 13442 25839 50726 100735 199668 390336 746521 1390611 2518849 4436587 7606449 +8 16 24 32 40 48 56 64 72 80 88 96 104 112 120 128 136 144 152 160 168 +24 40 58 74 78 56 3 -38 120 1023 4036 12295 32615 79211 180836 394437 831547 1710256 3459759 6934492 13857367 +21 45 80 133 233 459 998 2243 4936 10358 20569 38708 69378 119166 197385 317176 497175 764035 1156198 1729439 2564855 +-6 4 24 55 102 175 297 527 1012 2103 4618 10422 23632 52956 115951 246348 506054 1004014 1924812 3570721 6421890 +5 14 25 41 81 201 538 1392 3361 7544 15827 31267 58589 104811 180012 298258 478701 746866 1136141 1689485 2461369 +8 15 20 23 24 23 20 15 8 -1 -12 -25 -40 -57 -76 -97 -120 -145 -172 -201 -232 +13 20 30 48 76 118 195 384 904 2280 5634 13208 29381 62826 131291 272156 564999 1177756 2456894 5095984 10438354 +27 53 96 159 255 426 783 1588 3411 7409 15783 32472 64154 121681 222249 393008 677615 1148649 1931134 3246025 5487861 +27 51 87 147 252 443 811 1568 3204 6815 14760 31931 68124 142316 290137 576563 1116981 2111495 3899953 7049103 12489112 +15 38 65 106 199 432 972 2103 4287 8284 15397 27949 50166 89761 160728 288225 517106 927093 1660904 2979519 5376696 +0 6 31 85 194 412 837 1643 3145 5918 10995 20188 36667 66241 120629 226030 444760 927057 2029015 4569804 10373398 +19 26 33 40 47 54 61 68 75 82 89 96 103 110 117 124 131 138 145 152 159 +10 25 53 115 238 467 889 1678 3189 6155 12074 23913 47303 92453 177072 330656 600572 1060453 1821507 3047439 4973788 +-5 6 42 116 241 430 696 1052 1511 2086 2790 3636 4637 5806 7156 8700 10451 12422 14626 17076 19785 +13 40 92 178 320 570 1025 1832 3175 5243 8195 12175 17526 25612 41304 79628 181985 452774 1136694 2772588 6484284 +19 23 26 28 29 29 28 26 23 19 14 8 1 -7 -16 -26 -37 -49 -62 -76 -91 +17 28 51 84 122 162 210 294 504 1118 2937 8043 21309 53122 123918 271257 560267 1098336 2054903 3687062 6371412 +20 28 35 44 76 178 438 1031 2334 5162 11191 23648 48362 95284 180598 329559 580208 988128 1632419 2623084 4110032 +5 20 47 86 137 200 275 362 461 572 695 830 977 1136 1307 1490 1685 1892 2111 2342 2585 +26 38 56 87 148 291 641 1446 3149 6514 12872 24600 46007 84877 155011 280219 500340 880014 1521096 2579789 4289782 +10 18 29 45 77 160 369 829 1716 3258 5769 9790 16486 28609 52706 104067 217586 470910 1031969 2252631 4845759 +-1 10 31 62 103 154 215 286 367 458 559 670 791 922 1063 1214 1375 1546 1727 1918 2119 +8 12 20 49 121 260 489 827 1286 1868 2562 3341 4159 4948 5615 6039 6068 5516 4160 1737 -2059 +0 -4 -4 15 71 192 450 1034 2366 5263 11181 22696 44675 87230 172812 352167 738124 1573554 3362222 7111453 14767575 +19 37 73 130 204 280 340 404 636 1566 4512 12341 30798 70777 152136 310006 605061 1139971 2085359 3720200 6494028 +2 5 28 82 185 374 731 1434 2842 5621 10916 20572 37405 65522 110687 180728 285978 439741 658772 963758 1379785 +27 49 80 126 197 310 504 885 1731 3696 8158 17757 37162 74103 140767 255956 449312 771177 1316772 2284435 4111174 +-9 -14 -19 -24 -29 -34 -39 -44 -49 -54 -59 -64 -69 -74 -79 -84 -89 -94 -99 -104 -109 +6 15 27 46 76 121 185 272 386 531 711 930 1192 1501 1861 2276 2750 3287 3891 4566 5316 +10 9 8 12 42 163 524 1407 3284 6886 13297 24100 41622 69352 112641 179837 284062 445903 697366 1087532 1690458 +0 9 24 44 68 105 193 433 1055 2544 5865 12837 26717 53066 100980 184780 326266 557651 925302 1494426 2354850 +10 12 10 4 -6 -20 -38 -60 -86 -116 -150 -188 -230 -276 -326 -380 -438 -500 -566 -636 -710 +8 20 45 89 168 331 691 1470 3073 6209 12068 22530 40306 68775 111098 168065 234382 294482 323003 304787 309948 +24 49 89 155 273 496 928 1779 3491 7003 14260 29127 58966 117310 228381 434731 810146 1481285 2663507 4719187 8250799 +19 33 62 128 264 514 933 1587 2553 3919 5784 8258 11462 15528 20599 26829 34383 43437 54178 66804 81524 +8 22 53 122 270 578 1193 2355 4413 7810 13019 20456 30543 44436 66599 111605 219725 490109 1149268 2691985 6174015 +26 50 82 123 185 303 566 1175 2531 5351 10805 20662 37428 64454 105987 167132 253688 371816 527492 725693 969259 +14 35 80 158 278 449 680 980 1358 1823 2384 3050 3830 4733 5768 6944 8270 9755 11408 13238 15254 +11 11 15 23 35 51 71 95 123 155 191 231 275 323 375 431 491 555 623 695 771 +6 16 24 35 58 96 141 187 289 723 2341 7266 20135 50173 114468 242916 485416 922018 1676862 2936893 4976496 +11 20 49 110 227 453 898 1768 3424 6485 12017 21877 39339 70262 125339 224493 405397 739562 1361669 2521064 4668871 +20 37 80 158 285 497 885 1648 3160 6035 11176 19837 33870 56674 96069 171621 331201 685379 1474871 3198556 6854496 +4 6 20 55 138 338 805 1841 4037 8544 17608 35600 70923 139390 269951 514014 960066 1755866 3141164 5494709 9400256 +8 13 34 90 208 430 841 1627 3186 6356 12910 26629 55545 116404 243087 501667 1015960 2008922 3867653 7245316 13228060 +3 16 37 69 124 232 465 1001 2269 5236 11921 26249 55390 111764 215933 400645 716343 1238504 2077229 3389565 5395104 +24 45 85 166 322 598 1063 1847 3218 5732 10517 19791 37764 72135 136467 253806 462004 821311 1424917 2413252 3992990 +7 24 56 109 189 302 454 651 899 1204 1572 2009 2521 3114 3794 4567 5439 6416 7504 8709 10037 +6 6 15 43 91 159 276 558 1303 3152 7405 16728 36804 80099 174024 377639 814012 1729858 3600691 7309097 14436681 +14 20 37 71 127 210 320 440 518 446 41 -965 -2917 -6200 -11160 -17968 -26410 -35584 -43483 -46441 -38417 +12 17 16 12 25 120 460 1409 3724 8883 19602 40622 79965 151215 278256 505768 922388 1709889 3242580 6278524 12310953 +9 9 10 7 -6 -23 -1 179 775 2311 5872 13776 30987 67865 145228 303374 617945 1227749 2383562 4533485 8470988 +9 11 14 19 43 131 362 843 1689 2997 4835 7291 10709 16508 29705 65926 169073 452107 1184316 2966327 7062159 +4 19 44 77 112 138 134 62 -137 -530 -1130 -1722 -1448 2152 15406 53958 155715 410547 1025294 2459060 5690975 +17 19 21 23 25 27 29 31 33 35 37 39 41 43 45 47 49 51 53 55 57 +28 38 41 31 8 1 117 624 2070 5435 12324 25277 48475 89589 164469 308195 599485 1212145 2520288 5309464 11194667 +1 4 2 -6 -13 14 174 709 2139 5482 12592 26654 52881 99464 178832 309285 517069 838968 1325494 2044762 3087143 +-1 15 45 97 186 335 592 1078 2095 4347 9373 20396 44024 93710 196770 408372 838760 1704980 3427198 6805400 13340371 +24 49 98 179 297 454 662 979 1576 2850 5634 11665 24741 53576 118484 266044 599328 1336819 2921754 6216539 12835689 +21 43 91 177 313 527 903 1662 3307 6861 14233 28753 55923 104437 187529 324714 543993 884599 1400367 2163817 3271045 +10 20 48 110 232 449 817 1461 2691 5227 10583 21669 43679 85342 160622 290962 508176 858102 1405138 2237792 3475386 +11 35 84 169 305 523 890 1537 2706 4864 9012 17463 35603 75523 162993 350202 738357 1517321 3035288 5922273 11310317 +5 16 36 79 164 317 575 988 1620 2577 4149 7249 14465 32206 74610 170076 371463 771142 1522162 2866763 5173298 +23 47 91 180 355 676 1237 2209 3932 7082 12944 23827 43662 78829 139264 239902 402517 658025 1049321 1634726 2492125 +15 23 27 34 62 157 432 1136 2766 6255 13310 27042 53131 101922 192141 357660 660775 1220785 2279451 4353200 8580138 +22 35 50 71 109 182 315 540 896 1429 2192 3245 4655 6496 8849 11802 15450 19895 25246 31619 39137 +19 46 99 184 301 445 609 789 991 1240 1591 2142 3049 4543 6949 10707 16395 24754 36715 53428 76293 +16 35 78 161 304 532 886 1455 2451 4374 8370 17012 36007 77877 169678 368610 792378 1676029 3474614 7042651 13938682 +11 21 37 74 161 344 684 1257 2179 3705 6498 12267 25210 55211 124765 283528 637855 1408801 3042715 6416976 13214939 +28 50 82 125 194 336 661 1391 2939 6053 12112 23759 46217 89871 175017 340071 654974 1241980 2306406 4180161 7380828 +16 33 52 76 116 194 346 625 1104 1879 3072 4834 7348 10832 15542 21775 29872 40221 53260 69480 89428 +13 19 43 102 215 403 689 1098 1657 2395 3343 4534 6003 7787 9925 12458 15429 18883 22867 27430 32623 +23 28 25 23 41 115 318 793 1799 3774 7427 13883 24921 43365 73712 123109 202823 330384 532621 849855 1341561 +8 13 31 81 190 392 739 1348 2529 5075 10857 23969 52827 113862 237783 479848 936198 1769113 3245075 5790809 10074060 +5 -1 -3 1 24 102 309 788 1831 4088 9089 20476 46745 107008 242462 538106 1162045 2433793 4938737 9713831 18540218 +23 36 67 128 238 432 765 1304 2096 3100 4082 4498 3433 -276 -7530 -17782 -26795 -22876 18957 145468 436960 +19 19 10 -13 -55 -121 -216 -345 -513 -725 -986 -1301 -1675 -2113 -2620 -3201 -3861 -4605 -5438 -6365 -7391 +13 22 35 63 127 273 594 1257 2533 4828 8713 14951 24519 38623 58704 86433 123693 172546 235183 313855 410783 +15 29 62 138 301 623 1211 2210 3808 6273 10109 16538 28739 54658 112833 243745 531201 1142472 2405599 4965114 10110423 +22 31 40 45 47 68 173 508 1375 3376 7669 16390 33306 64775 121100 218375 380932 644509 1060270 1699819 2661361 +16 37 69 115 199 383 781 1560 2922 5084 8336 13405 22681 43553 96491 233174 574927 1390866 3252030 7329342 15962906 +25 37 46 52 55 55 52 46 37 25 10 -8 -29 -53 -80 -110 -143 -179 -218 -260 -305 +-2 -1 16 58 135 261 456 747 1168 1759 2564 3628 4993 6693 8748 11157 13890 16879 20008 23102 25915 +7 17 54 130 269 530 1052 2143 4445 9217 18788 37242 71407 132230 236630 409931 688987 1126121 1794010 2791658 4251609 +15 31 72 160 334 671 1314 2518 4741 8835 16445 30812 58307 111210 212522 404027 759535 1406459 2560962 4585380 8082232 +24 33 42 51 60 69 78 87 96 105 114 123 132 141 150 159 168 177 186 195 204 +-5 -7 8 61 189 455 970 1944 3787 7293 13979 26755 51348 99453 195748 393249 805935 1675617 3503846 7302341 15051147 +11 20 46 108 230 441 775 1271 1973 2930 4196 5830 7896 10463 13605 17401 21935 27296 33578 40880 49306 +11 12 23 66 175 396 787 1418 2371 3740 5631 8162 11463 15676 20955 27466 35387 44908 56231 69570 85151 +15 22 38 68 118 206 383 768 1612 3433 7323 15646 33567 72250 155262 330921 695341 1434220 2896652 5722340 11055780 +3 7 20 59 150 322 611 1085 1914 3548 7156 15669 36147 84904 198134 453125 1009261 2185081 4599544 9425143 18831724 +5 15 27 42 71 139 295 632 1326 2724 5557 11438 23947 50845 108404 229791 481678 998568 2056522 4234421 8765038 +30 44 56 72 112 216 447 889 1638 2784 4382 6410 8712 10924 12381 12003 8158 -1500 -20220 -52372 -103696 +16 22 30 43 71 138 296 646 1378 2880 6037 12959 28588 64067 143715 319587 702164 1525018 3279356 6987931 14747917 +5 -1 -10 -24 -33 3 180 683 1836 4211 8897 18122 36552 73767 148641 296637 581375 1112247 2070344 3745532 6588173 +-5 3 30 90 209 447 946 2018 4291 8943 18077 35324 66803 122611 219053 381840 650467 1083915 1767680 2821894 4409941 +1 -6 -22 -51 -92 -122 -67 239 1107 3058 6900 13817 25470 44110 72703 115067 176021 261546 378958 537093 746504 +19 35 71 138 255 454 787 1341 2267 3829 6479 10964 18471 30816 50683 81919 129891 201911 307735 460142 675599 +5 1 -4 -15 -36 -60 -48 122 773 2679 7552 18927 43690 94632 194650 383626 729701 1347765 2429692 4293397 7461472 +22 47 84 133 194 267 352 449 558 679 812 957 1114 1283 1464 1657 1862 2079 2308 2549 2802 +27 39 50 67 106 190 350 637 1153 2109 3918 7331 13624 24844 44122 76061 127207 206611 326490 502995 757094 +21 36 62 113 217 419 794 1493 2869 5767 12110 25974 55446 115785 234945 463719 895201 1702826 3214226 6051331 11387971 +-4 11 40 84 152 276 534 1089 2268 4728 9788 20048 40471 80195 155561 295458 551743 1021562 1897525 3580679 6928437 +-3 -5 -7 -9 -11 -13 -15 -17 -19 -21 -23 -25 -27 -29 -31 -33 -35 -37 -39 -41 -43 +21 43 73 123 229 467 976 1988 3865 7143 12583 21229 34473 54127 82502 122494 177677 252403 351909 482431 651325 +19 29 34 46 94 224 497 985 1765 2911 4484 6520 9016 11914 15083 18299 21223 23377 24118 22610 17794 +8 20 32 44 56 68 80 92 104 116 128 140 152 164 176 188 200 212 224 236 248 +13 9 14 36 82 168 347 777 1871 4603 11095 25687 56799 120029 243083 473279 888469 1612225 2833960 4834202 8014380 +25 52 95 155 233 330 447 585 745 928 1135 1367 1625 1910 2223 2565 2937 3340 3775 4243 4745 +3 -1 -2 20 104 313 751 1601 3198 6178 11813 22782 44894 90788 187635 392864 825918 1731880 3607877 7451423 15241457 +11 18 34 74 172 382 776 1446 2531 4313 7458 13519 25868 51283 102484 201989 387747 721100 1297730 2262360 3828100 +8 9 20 59 166 424 993 2158 4401 8543 16094 30140 57443 113004 229225 473103 976710 1988685 3957728 7663297 14414036 +8 17 43 97 193 355 637 1160 2170 4121 7787 14407 25867 44923 75469 122854 194252 299089 449531 661037 952981 +5 18 52 121 242 433 719 1158 1897 3263 5891 10909 20287 37707 70876 137305 277557 583511 1255976 2720254 5860036 +26 48 79 117 160 206 253 299 342 380 411 433 444 442 425 391 338 264 167 45 -104 +4 20 64 149 286 484 750 1089 1504 1996 2564 3205 3914 4684 5506 6369 7260 8164 9064 9941 10774 +5 3 -2 -7 4 66 232 572 1184 2228 3986 6935 11795 19479 30826 45940 62887 75417 69278 16573 -132522 +29 46 64 77 76 47 -27 -150 -260 -81 1250 6043 19894 55385 139172 325018 716889 1508424 3047842 5940189 11200546 +7 31 76 154 286 522 977 1884 3677 7145 13741 26179 49495 92794 172036 314672 568255 1018307 1827378 3319972 6160648 +19 43 90 171 309 555 1000 1776 3052 5057 8209 13520 23625 45116 93448 202656 443653 957187 2010888 4094557 8074321 +14 31 63 137 309 692 1505 3161 6436 12799 25035 48359 92299 173720 321469 583243 1035418 1796727 3046839 5051069 8192641 +-7 -9 1 45 169 453 1023 2063 3818 6573 10587 15954 22359 28711 32700 30500 17219 -10581 -47711 -63885 29897 +5 8 18 46 107 216 385 636 1070 2070 4761 11892 29330 68346 148806 303230 581419 1054940 1820164 2997730 4725213 +0 12 32 64 133 307 740 1752 3974 8606 17870 35802 69654 132452 247836 459451 849236 1572432 2922448 5446084 10138507 +15 22 48 120 277 570 1062 1828 2955 4542 6700 9552 13233 17890 23682 30780 39367 49638 61800 76072 92685 +-1 8 36 92 185 324 518 776 1107 1520 2024 2628 3341 4172 5130 6224 7463 8856 10412 12140 14049 +24 54 114 233 454 838 1483 2582 4571 8460 16502 33454 68859 141115 284789 564103 1098634 2113702 4040682 7716703 14777228 +20 25 26 22 13 13 87 421 1430 3916 9320 20183 41055 80282 153373 289016 539288 996203 1817478 3265284 5762801 +9 14 30 68 146 310 661 1381 2749 5136 8966 14628 22322 31820 42121 50977 54265 45178 13206 -57124 -187782 +15 29 57 109 202 360 614 1002 1569 2367 3455 4899 6772 9154 12132 15800 20259 25617 31989 39497 48270 +1 -3 -11 -24 -42 -62 -67 -1 281 1125 3361 9019 23021 56870 136134 314735 700845 1501645 3097193 6156590 11811100 +15 40 76 138 251 454 820 1509 2883 5740 11784 24555 51208 105772 214907 427910 834275 1595448 3004280 5598992 10382837 +9 21 53 124 274 582 1207 2466 4963 9783 18765 34868 62644 108832 183087 298858 474429 734137 1109781 1642236 2383286 +5 8 7 2 -3 0 23 82 197 392 695 1138 1757 2592 3687 5090 6853 9032 11687 14882 18685 +17 32 48 73 137 316 778 1868 4250 9118 18486 35601 65661 117400 207006 367840 673662 1291711 2598975 5427196 11561076 +2 8 10 15 40 116 298 695 1555 3470 7810 17562 38853 83592 173896 349294 678160 1275444 2329586 4142553 7188278 +10 19 34 65 132 270 540 1046 1958 3541 6190 10471 17168 27336 42360 64020 94562 136775 194074 270589 371260 +10 18 18 9 -7 -25 -37 -32 4 88 240 483 843 1349 2033 2930 4078 5518 7294 9453 12045 +12 28 55 106 203 370 630 1008 1533 2219 2990 3512 2955 -59 -6445 -12294 4101 115235 521500 1722951 4891122 +7 11 18 46 125 297 616 1148 1971 3175 4862 7146 10153 14021 18900 24952 32351 41283 51946 64550 79317 +-4 2 13 29 50 76 107 143 184 230 281 337 398 464 535 611 692 778 869 965 1066 +1 1 3 6 16 56 181 502 1224 2706 5573 10986 21362 42224 86628 185139 407435 908045 2021984 4462911 9729426 +18 33 64 121 214 363 613 1050 1822 3197 5745 10819 21640 45488 97833 209864 442106 909229 1825714 3590277 6941170 +5 18 44 95 192 363 652 1159 2143 4239 8878 19090 41095 87619 185057 389110 818618 1727421 3653857 7725842 16273119 \ No newline at end of file diff --git a/2023/9-test-input.txt b/2023/9-test-input.txt new file mode 100644 index 0000000..70c5595 --- /dev/null +++ b/2023/9-test-input.txt @@ -0,0 +1,3 @@ +0 3 6 9 12 15 +1 3 6 10 15 21 +10 13 16 21 30 45 \ No newline at end of file diff --git a/2023/9.py b/2023/9.py new file mode 100644 index 0000000..2b6382a --- /dev/null +++ b/2023/9.py @@ -0,0 +1,44 @@ +import re + +def main(): + with open("9-input.txt", 'r') as file: + lines = file.readlines() + values = [] + for line in lines: + values.append(get_value(line)) + summerize = 0 + for v in values: + summerize += v + print(summerize) + +def get_value(line: []): + values = [int(digit) for digit in re.findall(r'-?\d+', line)] + values.reverse() + history = [] + history.append(values) + for i, arr in enumerate(history): + if all(value == 0 for value in arr): + break + m = [] + history.append(m) + for ii, val in enumerate(arr): + if ii + 1 < len(arr): + diff = arr[ii+1] - val + m.append(diff) + + history.reverse() + for i, arr in enumerate(history): + if i == 0: + arr.append(0) + else: + last_value = arr[len(arr) - 1] + next_value = last_value + history[i-1][len(history[i-1]) - 1] + arr.append(next_value) + last_index = len(history) - 1 + input_value = history[last_index][len(history[last_index]) - 2] + last_value = history[last_index][len(history[last_index]) - 1] + print(f"{input_value} -> {last_value}") + return last_value + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/2023/['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJ b/2023/['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJ new file mode 100644 index 0000000..239e98a --- /dev/null +++ b/2023/['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJ @@ -0,0 +1 @@ +['AAAAA', 'JJJJJ', 'AAAAJ', 'JAAAA', 'JJJJ2', '2AAAA', '2JJJJ', 'Q2Q2Q', 'QQQJA', 'T55J5', 'T3Q33', 'KK677', 'KTJJT', 'Q2KJJ', 'T3T3J', '32T3K', 'J345A', '2345A', '2345J'] \ No newline at end of file diff --git a/2023/open-ai-5.py b/2023/open-ai-5.py new file mode 100644 index 0000000..4653e0f --- /dev/null +++ b/2023/open-ai-5.py @@ -0,0 +1,70 @@ +import re +import time +from concurrent.futures import ProcessPoolExecutor + +row_cache = {} + +def main(): + with open("/Users/samuelenocsson/dev/advent-of-code/5-test-input.txt", 'r') as file: + start_time = time.time() + seed_string = file.readline() + lines = file.readlines() + lines_count = len(lines) + digits = list(map(int, re.findall(r'\d+', seed_string))) + next_index = 0 + for idx, line in enumerate(lines): + numbers = [int(digit) for digit in re.findall(r'\d+', line)] + row_cache[idx] = numbers + + with ProcessPoolExecutor() as executor: + futures = [] + for i in range(0, len(digits), 2): + first, first_range = digits[i], digits[i + 1] + print(f"{first} -> {first + first_range}") + end_range = first + first_range + + for s in range(first, end_range): + if s % 100000 == 0: + elapsed = time.time() - start_time + print(f"{s - first} done in {elapsed} seconds") + + futures.append(executor.submit(get_location, lines_count, s)) + + next_index += 2 + + location = min(f.result() for f in futures) + + print(f"Closest location {location}") + end_time = time.time() + elapsed_time = end_time - start_time + print(f"Elapsed time: {elapsed_time} seconds") + +def get_location(nrLines, seed): + init_seed = seed + new_seed = seed + fast_forward = False + + for i in range(0, nrLines): + mappings = find_numbers(i) + + if len(mappings) > 0 and fast_forward: + continue + + if len(mappings) == 0: + fast_forward = False + continue + + source, destination, _range = mappings + + if source <= seed <= source + _range: + diff = seed - source + new_seed = destination + diff + fast_forward = True + + return new_seed + +def find_numbers(idx): + return row_cache[idx] + +if __name__ == "__main__": + main() diff --git a/2023/test.py b/2023/test.py new file mode 100644 index 0000000..98901ec --- /dev/null +++ b/2023/test.py @@ -0,0 +1,12 @@ +def nextCharIsSymbol(line, index): + for i, char in enumerate(line[index:], start=index): + if not char.isdigit(): + return True + return False + +# Example usage: +my_line = "416.........................559...............417...............785.......900.......284...........503...796....992.........................." +my_index = 3 + +result = nextCharIsSymbol(my_line, my_index) +print(result) \ No newline at end of file diff --git a/2024/1.py b/2024/1.py new file mode 100644 index 0000000..1e46218 --- /dev/null +++ b/2024/1.py @@ -0,0 +1,64 @@ +# day1.py +from base import AoCBase +from typing import List +import re + + +class Day1(AoCBase): + def __init__(self): + super().__init__(1) # Pass the day number to base class + + def parse_input(self) -> List[int]: + reg = r"(\d+)\s+(\d+)" + raw = self.raw_data.strip().split("\n") + data = [] + for line in raw: + match = re.search(reg, line) + if match: + one = int(match.group(1)) + two = int(match.group(2)) + data.append([one, two]) + pass + + return data + + def part1(self) -> int: + result = 0 + row1 = [] + row2 = [] + for tuple in self.data: + row1.append(int(tuple[0])) + row2.append(int(tuple[1])) + pass + + row_sorted1 = sorted(row1) + row_sorted2 = sorted(row2) + + distance = 0 + for i in range(len(row_sorted1)): + distance += abs(row_sorted1[i] - row_sorted2[i]) + pass + + result = distance + return result + + def part2(self) -> int: + result = 0 + row1 = [] + row2 = [] + for tuple in self.data: + row1.append(int(tuple[0])) + row2.append(int(tuple[1])) + pass + + for i in range(len(row1)): + n = row1[i] + count = row2.count(n) + result += n * count + + return result + + +if __name__ == "__main__": + solution = Day1() + solution.solve() diff --git a/2024/10.py b/2024/10.py new file mode 100644 index 0000000..177b3df --- /dev/null +++ b/2024/10.py @@ -0,0 +1,80 @@ +import numpy as np +from base import AoCBase +from typing import List + + +class Day10(AoCBase): + def __init__(self): + super().__init__(10) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + trail_map = np.array([list(row) for row in self.data]).astype(int) + starting_points = np.argwhere(trail_map == 0) + for i in range(0, len(starting_points)): + visited = set() + print(starting_points[i]) + trails = find_trail(trail_map, starting_points[i], visited) + result += trails + print("found", trails) + + return result + + def part2(self) -> int: + result = 0 + trail_map = np.array([list(row) for row in self.data]).astype(int) + starting_points = np.argwhere(trail_map == 0) + for i in range(0, len(starting_points)): + visited = None + print(starting_points[i]) + trails = find_trail(trail_map, starting_points[i], visited) + result += trails + print("found", trails) + + return result + + +def find_trail(trail_map, point, visited) -> int: + trails = 0 + if visited is not None and (point[0], point[1]) in visited: + return 0 + if visited is not None: + visited.add((point[0], point[1])) + number = trail_map[point[0], point[1]] + print(point[0], point[1]) + if number == 9: + print("found") + return 1 + next_number = number + 1 + shape = trail_map.shape + from_row = point[0] - 1 + to_row = point[0] + 2 + from_col = point[1] - 1 + to_col = point[1] + 2 + + subset = trail_map[ + max(0, from_row) : min(shape[0], to_row), + max(0, from_col) : min(shape[1], to_col), + ] + # print(subset) + next_point = np.argwhere(subset == next_number) + + if len(next_point) == 0: + return 0 + for i in range(0, len(next_point)): + row = next_point[i][0] + max(0, from_row) + col = next_point[i][1] + max(0, from_col) + if col != point[1] and row != point[0]: + continue + trails += find_trail(trail_map, (row, col), visited) + + return trails + + +if __name__ == "__main__": + solution = Day10() + solution.solve() diff --git a/2024/11.py b/2024/11.py new file mode 100644 index 0000000..2756e13 --- /dev/null +++ b/2024/11.py @@ -0,0 +1,89 @@ +import math +import numpy as np +from base import AoCBase +from typing import List, Dict, Tuple +from re import findall +import cProfile + +division_cache: Dict[int, Tuple[int, int]] = {} +digits_cache: Dict[int, int] = {} + +class Day11(AoCBase): + def __init__(self): + super().__init__(11) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip() + + def part1(self) -> int: + regex = r"(\d+)" + numbers = findall(regex, self.data) + data = np.array(numbers).astype(int) + data = self.blink(data, 25) + + return len(data) + + def part2(self) -> int: + regex = r"(\d+)" + numbers = findall(regex, self.data) + data = np.array(numbers).astype(int) + data = self.blink(data, 40) + + return len(data) + + def blink(self, data, blinks): + for i in range(blinks): + arr = np.array(data) + + # Handle zero separately as it has special behavior + arr[arr == 0] = 1 + + # Calculate number of digits for all elements + digit_counts = np.vectorize(lambda x: math.floor(math.log10(abs(x))) + 1 if x != 0 else 1)(arr) + + # Find indices of numbers with an even number of digits + even_digit_indices = np.where(digit_counts % 2 == 0) + + # Iterate over these indices, split the numbers, and replace them + new_data = [] + for idx in even_digit_indices[0]: + n = arr[idx] + num_digits = digit_counts[idx] + first_half, second_half = split_number_in_half(n, num_digits) + new_data.append(first_half) + new_data.append(second_half) + + # Handle the rest of the numbers that do not meet the splitting condition + for idx in range(len(arr)): + if idx not in even_digit_indices[0]: + new_data.append(arr[idx] * 2024 if arr[idx] != 0 else 1) + + data = new_data + + return data + +def count_digits(arr): + return np.vectorize(lambda x: math.floor(math.log10(abs(x))) + 1 if x != 0 else 1)(arr) + +precomputed_divisors = {i: 10**i for i in range(1, 20)} # Adjust the range as needed + +def split_number_in_half(number, num_digits): + key = (number, num_digits) + if key in division_cache: + return division_cache[key] + + half = num_digits // 2 + divisor = precomputed_divisors.get(half, 10**half) + + first_half = number // divisor + second_half = number % divisor + division_cache[key] = (first_half, second_half) + + return first_half, second_half + + +if __name__ == "__main__": + solution = Day11() + #solution.solve() + cProfile.run("solution.solve()") diff --git a/2024/12.py b/2024/12.py new file mode 100644 index 0000000..06d7fcf --- /dev/null +++ b/2024/12.py @@ -0,0 +1,43 @@ +from base import AoCBase +from typing import List +import numpy as np + + +class Day12(AoCBase): + def __init__(self): + super().__init__(12) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + data = np.array([list(row) for row in self.data]) + unique_values = np.unique(data) + print(unique_values) + + for value in unique_values: + indices = np.argwhere(data == value) + edges = set() + for i in range(0, len(indices)): + if i == 0: + edges.add(indices[i]) + continue + + + + + + return result + + def part2(self) -> int: + result = 0 + for line in self.data: + pass + return result + + +if __name__ == "__main__": + solution = Day12() + solution.solve() diff --git a/2024/2.py b/2024/2.py new file mode 100644 index 0000000..3d1c08c --- /dev/null +++ b/2024/2.py @@ -0,0 +1,92 @@ +from base import AoCBase +from typing import List +from re import findall + + +class Day2(AoCBase): + def __init__(self): + super().__init__(2) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + regex = r"(\d+)" + safe_increment = 3 + for line in self.data: + valid = True + matches = findall(regex, line) + numbers = list((int(match) for match in matches)) + + previous = None + current = None + is_increase = numbers[0] < numbers[len(numbers) - 1] + + for number in numbers: + previous = current + current = number + if previous is None or current is None: + continue + if ( + abs(previous - current) > safe_increment + or previous == current + or is_increase != (previous < current) + ): + valid = False + break + + if valid: + result += 1 + return result + + def part2(self) -> int: + result = 0 + regex = r"(\d+)" + safe_increment = 3 + for line in self.data: + valid = True + matches = findall(regex, line) + numbers = list((int(match) for match in matches)) + is_increase = numbers[0] < numbers[1] + + valid = self.is_safe(safe_increment, numbers, is_increase) + + if not valid: + for i in range(0, len(numbers)): + n_copy = numbers.copy() + n_copy.pop(i) + is_increase = n_copy[0] < n_copy[1] + valid = self.is_safe(safe_increment, n_copy, is_increase) + if valid: + break + + if valid: + result += 1 + else: + print(f"Invalid numbers: {numbers}") + return result + + def is_safe(self, safe_increment, numbers, is_increase): + previous = None + current = None + valid = True + for i in range(0, len(numbers)): + previous = current + current = numbers[i] + if previous is None or current is None: + continue + if ( + abs(previous - current) > safe_increment + or previous == current + or is_increase != (previous < current) + ): + valid = False + break + return valid + + +if __name__ == "__main__": + solution = Day2() + solution.solve() diff --git a/2024/3.py b/2024/3.py new file mode 100644 index 0000000..8ccc2b1 --- /dev/null +++ b/2024/3.py @@ -0,0 +1,48 @@ +from base import AoCBase +from typing import List +from re import findall + + +class Day3(AoCBase): + def __init__(self): + super().__init__(3) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip() + + def part1(self) -> int: + result = 0 + regex = r"mul\((\d{1,3},\d{1,3})\)" + data = self.raw_data.split("/n") + for line in data: + matches = findall(regex, line) + for match in matches: + n = match.split(",") + result += int(n[0]) * int(n[1]) + pass + + + return result + + def part2(self) -> int: + result = 0 + regex = r"(mul\((\d{1,3},\d{1,3})\))|(do(?!n't))|(don't)" + skip = False + matches = findall(regex, self.data) + for match in matches: + if match[2] != "": + skip = False + elif match[3] != "": + skip = True + if match[1] != "" and skip is False: + n = match[1].split(",") + result += int(n[0]) * int(n[1]) + + + return result + + +if __name__ == "__main__": + solution = Day3() + solution.solve() diff --git a/2024/4.py b/2024/4.py new file mode 100644 index 0000000..73adfde --- /dev/null +++ b/2024/4.py @@ -0,0 +1,68 @@ +from base import AoCBase +from typing import List +from re import findall, search +import numpy as np + + +class Day4(AoCBase): + def __init__(self): + super().__init__(4) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + + data = np.array([list(row) for row in self.data]) + count = 0 + for i in range(0, 2): + rot = np.rot90(data, i) + print(rot) + r = self.count(rot) + print(i, r) + count += r + for ii in range(-len(rot) + 1, len(rot)): + diag = np.diagonal(rot, ii) + print(diag) + rr = self.count(diag) + print(ii, rr) + count += rr + + result = count + return result + + def count(self, data): + flat = data.flatten() + s = "".join(flat) + return s.count("XMAS") + s.count("SAMX") + + def part2(self) -> int: + data = np.array([list(row) for row in self.data]) + dict = {} + count = 0 + print(data) + re = r"(MAS|SAM)" + for ii in range(-len(data) + 1, len(data)): + diag = np.diagonal(data, ii) + flat = diag.flatten() + s = "".join(flat) + matches = search(re, s) + if matches is not None: + idx = matches.start() + dict[idx] = ii + pass + + + for k in dict: + k + + + + return 0 + + +if __name__ == "__main__": + solution = Day4() + solution.solve() diff --git a/2024/6.py b/2024/6.py new file mode 100644 index 0000000..f8e1a5e --- /dev/null +++ b/2024/6.py @@ -0,0 +1,34 @@ +from base import AoCBase +from typing import List +from re import findall +import numpy as np + + +class Day6(AoCBase): + def __init__(self): + super().__init__(6) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + data = np.array([list(row) for row in self.data]) + + + + + return result + + + def part2(self) -> int: + result = 0 + for line in self.data: + pass + return result + + +if __name__ == "__main__": + solution = Day6() + solution.solve() diff --git a/2024/7.py b/2024/7.py new file mode 100644 index 0000000..a59ff52 --- /dev/null +++ b/2024/7.py @@ -0,0 +1,70 @@ +import numpy as np +from base import AoCBase +from typing import List +from re import findall +from itertools import chain + + +class Day7(AoCBase): + def __init__(self): + super().__init__(7) # Pass the day number to base class + + def parse_input(self) -> List[str]: + return self.raw_data.strip().split("\n") + + def calc(self, sum, numbers, target) -> List[int]: + if len(numbers) == 0: + return sum + + sum_1 = self.calc(sum + numbers[0], numbers[1:], target) + sum_2 = self.calc(sum * numbers[0], numbers[1:], target) + + return [sum_1, sum_2] + + def calc_part2(self, sum, numbers, target) -> List[int]: + if len(numbers) == 0: + return sum + + sum_1 = self.calc_part2(sum + numbers[0], numbers[1:], target) + sum_2 = self.calc_part2(sum * numbers[0], numbers[1:], target) + sum_str = str(sum) + "" + str(numbers[0]) + sum_3 = self.calc_part2(int(sum_str), numbers[1:], target) + + return [sum_1, sum_2, sum_3] + + def part1(self) -> int: + result = 0 + regex = r"(\d+)" + for line in self.data: + numbers = findall(regex, line) + target = int(numbers[0]) + numbers = list(map(int, numbers[1:])) + sum_1 = self.calc(0, numbers, target) + arr = np.array(sum_1) + print(arr.flatten()) + targets = np.argwhere(arr == target) + if len(targets) > 0: + result += target + + return result + + def part2(self) -> int: + result = 0 + result = 0 + regex = r"(\d+)" + for line in self.data: + numbers = findall(regex, line) + target = int(numbers[0]) + numbers = list(map(int, numbers[1:])) + sum_1 = self.calc_part2(0, numbers, target) + arr = np.array(sum_1) + print(arr.flatten()) + targets = np.argwhere(arr == target) + if len(targets) > 0: + result += target + return result + + +if __name__ == "__main__": + solution = Day7() + solution.solve() diff --git a/2024/8.py b/2024/8.py new file mode 100644 index 0000000..9bdf2c7 --- /dev/null +++ b/2024/8.py @@ -0,0 +1,130 @@ +import numpy as np +from base import AoCBase +from typing import List + + +class Day8(AoCBase): + def __init__(self): + super().__init__(8) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + np.set_printoptions(threshold=np.inf) + data = np.array([list(row) for row in self.data]) + u = np.unique_values(data) + dict = {} + antennas = {} + for val in u: + if val == ".": + continue + indices = np.argwhere(data == val) + for idx in indices: + row, col = idx + antennas[(row, col)] = val + for i in range(0, len(indices)): + idx_2 = indices[i] + row, col = idx - idx_2 # -1 ,3 + row_2, col_2 = idx_2 - idx # 1, -3 + if row == 0 and col == 0: + continue + a_r, a_c = idx + np.array([row, col]) + a2_r, a2_c = idx_2 + np.array([row_2, col_2]) + dict[(a_r, a_c)] = (a_r, a_c) + dict[(a2_r, a2_c)] = (a2_r, a2_c) + + shape = data.shape + + for k in dict: + if k[0] >= 0 and k[1] >= 0 and k[0] < shape[0] and k[1] < shape[1]: + data[k[0], k[1]] = "#" + result += 1 + + s = np.array2string(data, 250) + v = replace_chars(s) + with open('output.txt', 'w') as f: + f.write(v) + + return result + + def part2(self) -> int: + result = 0 + np.set_printoptions(threshold=np.inf) + data = np.array([list(row) for row in self.data]) + u = np.unique_values(data) + dict = {} + antennas = {} + shape = data.shape + for val in u: + if val == ".": + continue + indices = np.argwhere(data == val) + for idx in indices: + row, col = idx + antennas[(row, col)] = val + for i in range(0, len(indices)): + idx_2 = indices[i] + row, col = idx - idx_2 # -1 ,3 + row_2, col_2 = idx_2 - idx # 1, -3 + if row == 0 and col == 0: + continue + + a_r, a_c = (0, 0) + a2_r, a2_c = (0, 0) + curr_idx = idx + curr_idx_2 = idx_2 + while True: + a_r, a_c = curr_idx + np.array([row, col]) + a2_r, a2_c = curr_idx_2 + np.array([row_2, col_2]) + dict[(a_r, a_c)] = (a_r, a_c) + dict[(a2_r, a2_c)] = (a2_r, a2_c) + print(a_r, a_c) + print(a2_r, a2_c) + curr_idx = np.array([a_r, a_c]) + curr_idx_2 = np.array([a2_r, a2_c]) + + idx_ob = is_index_in_bounds(data, a_r, a_c) + idx_ob_2 = is_index_in_bounds(data, a2_r, a2_c) + if (not idx_ob) and (not (idx_ob_2)): + break + + for k in dict: + if k in antennas: + continue + if k[0] >= 0 and k[1] >= 0 and k[0] < shape[0] and k[1] < shape[1]: + data[k[0], k[1]] = "#" + result += 1 + + result += len(antennas) + s = np.array2string(data, 250) + v = replace_chars(s) + with open('output.txt', 'w') as f: + f.write(v) + + return result + +# Function to check if an index is within bounds +def is_index_in_bounds(array, row, col): + num_rows, num_cols = array.shape + return 0 <= row < num_rows and 0 <= col < num_cols + +def replace_chars(input_string): + # Replace single quote + updated_string = input_string.replace("'", "") + # Replace open square bracket + updated_string = updated_string.replace("[", "") + # Replace close square bracket + updated_string = updated_string.replace("]", "") + # Remove spaces + updated_string = updated_string.replace(" ", "") + + + return updated_string + + +if __name__ == "__main__": + solution = Day8() + solution.solve() diff --git a/2024/9.py b/2024/9.py new file mode 100644 index 0000000..b47820f --- /dev/null +++ b/2024/9.py @@ -0,0 +1,102 @@ +import numpy as np +from base import AoCBase +from typing import List + + +class Day9(AoCBase): + def __init__(self): + super().__init__(9) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip() + + def part1(self) -> int: + result = 0 + n = list(self.data) + numbers = np.array(n).astype(int) + d = [] + id = 0 + for i in range(0, len(numbers)): + for j in range(0, numbers[i]): + if i % 2 == 0: + d.append(id) + else: + d.append(None) + if i % 2 == 0: + id += 1 + + array = np.array(d) + none_pos = np.argwhere(array == None) + pos = np.argwhere(array != None) + for i in range(0, len(none_pos)): + if none_pos[i][0] > pos[len(pos) - 1 - i][0]: + break + # print("swap", none_pos[i], pos[len(pos) - 1 - i]) + array[[none_pos[i][0], pos[len(pos) - 1 - i][0]]] = array[[pos[len(pos) - 1 - i][0], none_pos[i][0]]] + # print(array) + + none_pos = np.argwhere(array == None) + for i in range(0, none_pos[0][0]): + result += array[i] * i + + return result + + def part2(self) -> int: + result = 0 + np.set_printoptions(threshold=np.inf, linewidth=np.inf) + n = list(self.data) + numbers = np.zeros(len(n), dtype=np.uint8) + d = [numbers, n] + d = np.array(d) + id = 0 + for i in range(0, len(numbers)): + if i % 2 == 0: + d[0, i] = id + id += 1 + else: + d[0, i] = '.' + + for i in range(d.shape[1] - 1, 0, -1): + if i % 100 == 0: + print(i) + size = d[1, i] + val = d[0, i] + if val == '.': + continue + positions = np.argwhere(d[0] == '.') + for pos in positions: + if pos >= i: + continue + dot_size = d[1, pos][0] + if dot_size >= size: + d = np.insert(d, pos, [[val], [size]], axis=1) + new_dot_size = int(dot_size) - int(size) + d[1, pos + 1] = new_dot_size + d[0, i +1] = '.' + break + + print(d) + + idx = 0 + pos = 0 + while d.shape[1] > idx: + val = int(d[1, idx]) + id = d[0, idx] + if id == '.': + pos += val + idx += 1 + continue + id = int(id) + for j in range(1, val + 1): + print(id, '*' , pos) + result += pos * id + pos += 1 + idx += 1 + + return result + + +if __name__ == "__main__": + solution = Day9() + solution.solve() diff --git a/2024/Untitled-1.py b/2024/Untitled-1.py new file mode 100644 index 0000000..8897eec --- /dev/null +++ b/2024/Untitled-1.py @@ -0,0 +1,22 @@ + +import numpy as np + +# Your input data as a list of strings +data = [ + "MMMSXXMASM", + "MSAMXMSMSA", + "AMXSXMAAMM", + "MSAMASMSMX", + "XMASAMXAMM", + "XXAMMXXAMA", + "SMSMSASXSS", + "SAXAMASAAA", + "MAMMMXMMMM", + "MXMXAXMASX" +] + +# Convert each row into a list of characters, then stack them into an array +array = np.array([list(row) for row in data]) + +# Display the array +print(array) \ No newline at end of file diff --git a/2024/_template_ b/2024/_template_ new file mode 100644 index 0000000..66244a8 --- /dev/null +++ b/2024/_template_ @@ -0,0 +1,30 @@ +from base import AoCBase +from typing import List +from re import findall + + +class Day3(AoCBase): + def __init__(self): + super().__init__(2) # Pass the day number to base class + + def parse_input(self) -> List[str]: + """Override with specific parsing for this day.""" + return self.raw_data.strip().split("\n") + + def part1(self) -> int: + result = 0 + + for line in self.data: + pass + return result + + def part2(self) -> int: + result = 0 + for line in self.data: + pass + return result + + +if __name__ == "__main__": + solution = Day3() + solution.solve() diff --git a/2024/base.py b/2024/base.py new file mode 100644 index 0000000..99a9337 --- /dev/null +++ b/2024/base.py @@ -0,0 +1,35 @@ +# base.py +from pathlib import Path +from typing import Any +from abc import ABC, abstractmethod + +class AoCBase(ABC): + def __init__(self, day: int): + self.day = day + self.raw_data = self.read_input() + self.data = self.parse_input() + + def read_input(self) -> str: + """Read input file.""" + return Path(f"inputs/day{self.day}.txt").read_text() + + @abstractmethod + def parse_input(self) -> Any: + """Parse the input data as needed.""" + pass + + @abstractmethod + def part1(self) -> Any: + """Solve part 1.""" + pass + + @abstractmethod + def part2(self) -> Any: + """Solve part 2.""" + pass + + def solve(self): + """Solve both parts and print results.""" + print(f"Day {self.day}") + print(f"Part 1: {self.part1()}") + print(f"Part 2: {self.part2()}") \ No newline at end of file diff --git a/2024/import numpy as np.py b/2024/import numpy as np.py new file mode 100644 index 0000000..718cf08 --- /dev/null +++ b/2024/import numpy as np.py @@ -0,0 +1,14 @@ +# Parse the grid into a dictionary of (y,x):c +data = open("inputs/day4.txt").readlines() +H, W = len(data), len(data[0])-1 +grid = {(y,x):data[y][x] for y in range(H) for x in range(W)} + +# Part 1 - Find anything that says 'XMAS' +TARGET = "XMAS" +DELTAS = [(dy,dx) for dy in [-1,0,1] for dx in [-1,0,1] if (dx!=0 or dy!=0)] +count = 0 +for y, x in grid: + for dy,dx in DELTAS: + candidate = "".join(grid.get((y+dy*i, x+dx*i),"") for i in range(len(TARGET))) + count += candidate == TARGET +print("Part 1:", count) \ No newline at end of file diff --git a/2024/inputs/1.txt b/2024/inputs/1.txt new file mode 100644 index 0000000..efba5ed --- /dev/null +++ b/2024/inputs/1.txt @@ -0,0 +1,1000 @@ +62619 25903 +30326 94750 +84092 60901 +37915 71402 +15035 84878 +18777 73294 +95618 11556 +40228 14340 +64337 95628 +74895 95628 +60933 57743 +63659 71402 +96094 71097 +83473 16153 +37963 81398 +28922 62792 +33312 56198 +33041 32752 +42401 98096 +91919 15189 +90401 91974 +59102 81363 +36684 83913 +77675 26541 +20021 57743 +60735 67798 +23105 29010 +86145 20180 +34121 42958 +45549 94750 +21335 97630 +30251 83564 +98372 27653 +60916 15189 +81588 93448 +31108 43699 +57324 77707 +62333 95456 +63344 70149 +18409 84619 +39611 51457 +60844 56450 +24661 20851 +83216 54572 +26451 13071 +40779 25903 +69948 80817 +80307 79233 +74779 15189 +51254 25615 +78563 21903 +44445 11964 +19525 66306 +59383 24932 +51882 27120 +15214 94897 +25903 62440 +19142 37258 +89958 55770 +93819 95582 +92302 60901 +92207 21547 +46605 72682 +47019 87607 +91181 18344 +33427 58733 +63738 67384 +58722 92349 +68791 62680 +37498 71342 +42522 37702 +36868 17661 +93701 66457 +59077 81363 +29985 32727 +97380 39888 +91074 51996 +34578 43591 +36474 76040 +83694 30713 +23025 21910 +65352 18691 +26765 46401 +29699 58503 +22892 42958 +33183 14340 +93681 94750 +87781 44627 +73912 61890 +69862 47551 +83666 50441 +14505 93279 +76546 60901 +85046 15189 +96647 63933 +20361 60901 +54414 74008 +73807 42958 +88028 37620 +47837 67798 +39975 79734 +59258 37388 +30532 95336 +63303 99491 +29900 77971 +18886 30672 +69149 16262 +71315 12428 +92786 77707 +81870 71402 +28377 80029 +38482 83084 +42311 43457 +40133 67348 +47350 58722 +94899 39437 +80383 73056 +50777 29099 +82097 66680 +57866 94991 +93259 95336 +83163 66970 +12322 68796 +86718 60901 +62860 16276 +61538 74693 +78862 71402 +71051 79270 +65274 94750 +95081 95454 +35994 69752 +23142 21903 +41794 28870 +81143 82713 +98552 53936 +42716 27120 +31949 81363 +24961 69060 +37205 12866 +53468 93380 +56879 73099 +68473 63243 +25609 86891 +63903 58722 +42541 42958 +95908 40858 +80056 74693 +23919 68796 +88345 37620 +47504 51825 +63031 43591 +83304 92302 +44174 18382 +53110 27120 +92382 57743 +95060 74693 +20870 31509 +38624 73935 +23048 21277 +71387 51004 +94750 71744 +86172 42002 +66293 20509 +17059 42958 +67035 10373 +75394 37620 +41855 43093 +23490 70386 +14833 60901 +17857 59270 +48666 62028 +19457 15189 +97382 74244 +59739 52959 +45275 92302 +15577 57743 +87651 18920 +98358 58538 +56785 68796 +17775 94456 +68554 36320 +85702 54050 +12351 64531 +75012 73099 +24159 72040 +14167 95347 +90037 27340 +57691 43591 +47008 18691 +10950 69642 +57987 23221 +77285 25903 +54353 19109 +75869 79832 +50446 46147 +84638 42958 +17751 60901 +67211 58733 +44169 48158 +91044 38933 +79885 11964 +78386 67798 +69398 72938 +21600 84819 +50224 81272 +78056 88646 +56837 31411 +39171 61608 +78080 43591 +54257 92150 +82021 15189 +19615 98246 +24648 76873 +45477 11964 +59179 59232 +66194 25903 +40847 58733 +34375 33041 +11740 67798 +94666 55770 +68611 91621 +91769 13515 +35492 58722 +84448 92302 +56613 62766 +99254 74693 +96650 10088 +39437 51388 +33069 91054 +52418 71402 +75251 80449 +31445 36392 +71195 53910 +72666 41650 +17608 95908 +12078 45665 +17604 64904 +78291 34090 +57437 57743 +91805 96758 +99250 95908 +64757 58722 +87843 64996 +88951 45003 +74539 77911 +58846 18920 +16307 94750 +69837 95908 +76898 40815 +16205 71402 +98688 46854 +69901 42958 +53438 34139 +19832 60901 +71402 55957 +38182 59508 +75973 52291 +63146 58733 +38891 52963 +83937 42855 +13073 58733 +25736 58733 +25961 91001 +98087 36622 +62673 45577 +81720 30395 +42981 58722 +99960 94750 +89819 73483 +46042 93254 +94494 58722 +90404 16308 +88078 95908 +59505 94750 +94839 18691 +51439 60901 +45408 94213 +46301 96771 +82342 95336 +87415 50494 +68995 18920 +69097 57463 +52090 76541 +57743 71402 +92558 26149 +33393 14340 +17956 77707 +93740 44925 +84324 81363 +99452 11104 +77578 58733 +23972 67830 +95336 94750 +96712 98246 +41647 76926 +74996 47307 +31798 81363 +84956 55640 +33185 57743 +74028 83220 +12168 40375 +27300 95908 +73132 82757 +11593 37620 +76794 99477 +53045 67798 +16203 67839 +43013 30796 +21653 66822 +99785 60901 +41534 99505 +34746 98777 +91326 15189 +41238 10056 +27120 89435 +61455 55770 +32332 12560 +74212 58722 +79815 43591 +51266 24297 +29290 42582 +32564 81503 +33451 58722 +74693 44992 +90825 95908 +18434 37620 +51381 69567 +51357 80756 +41367 42958 +18034 87111 +35090 48309 +52050 19848 +31615 18691 +26163 55382 +54155 98380 +32766 95628 +66811 70762 +56835 74954 +68966 98773 +64000 80941 +17133 28149 +46113 11964 +44129 95908 +75450 11493 +33226 67397 +61957 64071 +75928 43095 +93920 67730 +65403 24083 +43381 95908 +81291 46446 +41878 68263 +92914 41085 +34436 57743 +79389 40570 +56226 23464 +79465 94750 +30601 22367 +74416 85052 +69119 20905 +78029 31117 +56600 20434 +88792 76040 +70653 15946 +26166 44783 +29517 60996 +85852 80100 +39106 11294 +77438 83568 +37856 46541 +58097 37572 +83261 77394 +71449 21903 +15327 71144 +66853 18920 +76787 51780 +62338 39437 +97231 72705 +93048 20279 +45014 58733 +48454 25802 +16977 52014 +24139 15189 +97186 68796 +63132 55770 +28951 95908 +52068 94750 +92193 25450 +94762 68225 +94439 75090 +49183 76040 +15650 72780 +43617 25654 +48000 57743 +44802 20665 +69533 40698 +99506 71402 +10188 81093 +45642 12405 +41525 95628 +63406 58722 +38086 82686 +78248 92302 +35534 25903 +40908 60096 +34570 54450 +50290 20272 +49022 76863 +69525 15189 +77707 77671 +72455 71402 +26834 55770 +68910 42924 +54344 16132 +67895 92302 +74034 55770 +29963 11964 +28687 48072 +47125 58722 +15698 23211 +25279 33041 +35856 58733 +29506 92630 +83164 58503 +25652 43591 +10150 60901 +68681 75492 +25928 62173 +90996 60901 +34150 25903 +45505 24919 +32302 16979 +70135 60901 +47220 38697 +66939 18691 +60367 74693 +46402 54059 +37333 38708 +15675 56777 +94947 64270 +92421 64575 +18644 18920 +85453 55949 +24398 25465 +51537 60901 +73029 18691 +10372 21582 +13221 60772 +96312 48448 +41962 18894 +95628 25903 +86774 67798 +97328 94768 +12739 83965 +35805 55770 +71377 51057 +27624 21704 +47608 15189 +33867 40404 +97161 68446 +20645 11768 +14224 78983 +62080 95908 +19102 75534 +63525 59254 +17179 68796 +98286 45885 +34018 97839 +99672 15422 +76115 25674 +51884 85901 +34047 27120 +29743 21903 +93768 76389 +97460 34263 +19836 94750 +83921 86722 +65076 81363 +79604 45182 +73999 95908 +51995 44729 +46824 23356 +76384 95908 +45206 95435 +48366 72348 +37898 82291 +31126 58733 +22018 83516 +12071 67798 +83202 27120 +56135 58733 +75630 37620 +14382 65093 +45237 50541 +25430 29954 +28105 70054 +67794 58722 +35237 21506 +38802 62056 +60276 31607 +35441 47957 +16202 21963 +86355 16631 +73689 21903 +69007 30198 +45510 98246 +85154 11881 +62930 58733 +70284 37620 +49335 84284 +81363 88599 +59481 25903 +45212 47786 +15302 95908 +45855 37620 +88386 92865 +11859 37620 +73264 60901 +83068 42996 +84915 76266 +17696 95628 +14367 52703 +30852 76040 +71184 78571 +42578 22158 +41197 33041 +96461 98246 +97118 60120 +77919 13391 +11964 71571 +75993 93850 +76867 23238 +22690 95908 +23262 37620 +25242 25903 +73440 44034 +98379 41045 +15645 53820 +55979 45441 +98508 64885 +34278 91871 +92424 21903 +99804 27550 +98275 39480 +77311 66522 +71457 71402 +45125 58722 +46725 31005 +11667 35829 +88568 38127 +84705 93869 +49426 58722 +95141 37826 +60901 17434 +51036 13775 +66121 55476 +99712 76291 +64183 76040 +14340 42364 +41256 42609 +88529 38809 +24137 86477 +50030 84350 +28692 39437 +76103 18691 +55768 95504 +81529 82684 +32989 68796 +62430 57117 +47161 95628 +98041 77707 +17293 60901 +26322 25201 +18691 68796 +53748 27211 +79920 61870 +13414 98246 +37753 42958 +99192 43795 +47951 78295 +65705 80132 +93270 18691 +49617 22313 +58116 68802 +41599 77917 +88070 73053 +57636 74708 +61320 55770 +28126 68211 +45326 68796 +83242 78622 +64432 95336 +66184 14776 +79662 78288 +31559 31202 +55770 37957 +23887 14766 +42104 12084 +86533 73495 +66370 77751 +90530 95628 +95401 43591 +43376 95257 +70768 58733 +12478 71571 +15957 17223 +81250 57743 +60475 10079 +40232 74136 +19774 97772 +18621 16958 +14875 76440 +90673 30928 +23096 58503 +97595 45435 +73191 42958 +81767 97406 +54334 56241 +27617 47748 +74196 73890 +83232 16958 +75027 74693 +80951 58733 +34912 42958 +85763 46782 +46474 94750 +66031 90078 +84048 71118 +94904 37620 +65760 66261 +85805 41397 +71175 16972 +48344 75703 +13102 88952 +42495 95358 +26249 18691 +19568 58733 +31959 55770 +55075 71571 +32241 88856 +94349 14340 +15189 16227 +28021 74374 +13676 33041 +59997 24406 +54305 41257 +37110 55770 +35881 32739 +21529 12177 +79138 42450 +29787 24438 +34894 68796 +21203 81363 +56933 66257 +95760 97152 +60050 94750 +41753 34287 +39341 95186 +49927 42958 +74695 31124 +57847 92741 +20288 98129 +51699 52019 +19072 68796 +82231 43640 +60534 20761 +10461 58503 +36149 27120 +96959 79965 +77827 60351 +91876 56195 +25787 60363 +86997 67798 +68922 46729 +19622 81363 +66080 91186 +27682 55770 +25942 65557 +89459 14340 +79797 74254 +96138 98246 +33238 59314 +30173 67798 +95078 68796 +54586 39437 +75238 37620 +39202 29637 +16867 19899 +82302 53887 +45302 27732 +30954 95908 +83543 98246 +54381 95336 +34144 12236 +17402 90976 +92020 71571 +62781 15189 +29546 99770 +11926 90890 +69879 68796 +76480 16106 +33328 50342 +58455 58733 +86164 14225 +33489 92807 +76961 26383 +77335 89466 +26454 94750 +67798 52555 +92671 42002 +23218 60901 +58564 34904 +19943 11014 +16341 11964 +35741 37620 +25711 95628 +70338 23595 +73099 14679 +40606 57743 +79029 84965 +40776 84207 +57543 57743 +55122 67798 +54036 89387 +34686 95336 +78969 19676 +93072 27772 +81688 14502 +18807 15639 +70774 57743 +87430 74693 +91599 26911 +37620 39437 +61886 71402 +58325 62504 +42822 33723 +67981 95908 +48046 77843 +45220 45628 +78085 33041 +46449 58722 +98918 59087 +32267 76647 +31728 27120 +15735 10521 +57336 58733 +86936 74693 +73719 50149 +84110 74693 +31202 27513 +68796 77160 +58416 69672 +57865 37620 +71850 50968 +53522 77707 +21173 42834 +92464 92615 +29744 37620 +52306 22486 +98899 16166 +22476 91919 +59967 19305 +43591 36485 +31809 63171 +79033 56343 +67656 98246 +13587 95822 +27782 42530 +19352 22300 +96569 42958 +95188 73716 +85777 27120 +76336 25264 +11596 51174 +62131 35355 +32737 87896 +21792 94314 +97535 42958 +67772 30847 +23372 10581 +91532 33811 +55873 74693 +36678 12576 +45099 73044 +43192 55240 +21903 55521 +88321 67798 +24368 39437 +79046 21903 +22881 95336 +41519 18920 +33709 68796 +72476 25903 +58512 27120 +86413 14340 +72964 16152 +96531 19099 +98791 73099 +17155 90626 +42612 27830 +55602 12838 +25290 30145 +59246 42958 +66301 29947 +36333 96445 +24171 58722 +87662 10983 +42958 71773 +58636 68421 +98695 25903 +87852 33041 +74343 57743 +39643 33041 +85380 27500 +48388 42958 +37761 77707 +97130 37620 +43580 38826 +47926 98004 +90396 18691 +45920 71402 +81997 71402 +94726 94750 +48358 27344 +71254 22993 +80275 34237 +72241 72611 +34532 68796 +55121 34876 +29318 57743 +75556 21903 +91485 21903 +58503 37620 +76040 58722 +64723 58001 +66467 95336 +53823 12613 +48859 61366 +76368 18920 +26043 94750 +60819 43935 +49793 74693 +49787 20795 +23373 58699 +69380 73099 +75462 63798 +45493 77707 +33090 98246 +40903 27639 +96473 76040 +89947 55467 +97538 76040 +94950 97842 +83847 64791 +51408 85287 +90641 25175 +59205 68796 +37106 21903 +31891 69062 +52732 21031 +16958 21903 +12830 12782 +88886 21500 +96198 96776 +10176 25136 +71571 42958 +16588 60751 +49639 94413 +94373 37620 +57909 42958 +23337 70169 +40204 10854 +51290 89920 +57936 61689 +52963 95336 +78553 55770 +28898 94685 +56962 20975 +98246 27120 +13251 31202 +12386 16958 +44211 44328 +51354 95336 +51903 84162 +74681 67073 +78792 46321 +47448 76040 +54001 41269 +83049 71402 +18666 88848 +91604 77707 +18218 74693 +70012 74693 +64340 15653 +61733 94750 +53459 25903 +89495 48179 +50543 14337 +53778 68796 +19573 76040 +48966 37491 +79009 65520 +75853 64389 +72020 55770 +85683 36279 +14091 95628 +81225 85177 +20253 99653 +83272 12892 +80793 74693 +60228 51271 +25762 30744 +45133 41216 +20563 87233 +58733 68796 +18187 58733 +27577 74693 +19450 72555 +54043 43176 +48494 42958 +88375 99208 +72864 49040 +23351 45233 +89758 20480 +11846 71402 +71123 37789 +85916 73099 +26278 42958 +45147 40390 +47700 94750 +71287 43591 +21893 95628 +30860 91205 +88771 25107 +63695 15189 +54022 78028 +18920 18691 +54215 53466 +37444 55606 +33508 79502 +51867 25903 +11633 73099 +95809 57743 +59336 58775 +92131 73399 +80096 28127 +92889 37549 +58711 16441 +56446 95908 +78562 16751 +87872 94750 +81757 64583 +94079 25109 +57657 60516 +87129 85261 +24276 41375 +58930 42002 +99351 74693 +49268 42002 +42002 64504 +81164 30052 +33506 60901 +54186 99255 +84054 85285 +63793 71402 +84019 21903 +12310 27120 +37386 33041 +72232 52481 +50872 43591 +88150 39972 +36699 31090 +11657 88797 +66278 81363 +20963 61397 +12046 55357 +81706 82079 +39853 71402 +59229 21903 +29455 80276 +14789 15466 +51944 81395 +26965 60546 +74750 55770 +80093 74559 +40585 65129 +79995 14340 +91325 69036 +36866 32940 +96216 67016 +45649 43967 +63836 21903 +57153 67798 +65895 27120 +41014 58733 +81492 95336 +55192 94646 +74304 65351 +91142 74386 +61587 43591 \ No newline at end of file diff --git a/2024/inputs/day10.txt b/2024/inputs/day10.txt new file mode 100644 index 0000000..a4396aa --- /dev/null +++ b/2024/inputs/day10.txt @@ -0,0 +1,53 @@ +45678701021256787218432154301232100012334301023456789 +32569892430543298909845067210145621965421012310545869 +01210743549612187610756778143296534874310123458930978 +12323651258703066525643889050387546789210234567821567 +01434210367012178434512918761236695694391349650131054 +12544303438124569232101109678945784321487658743232343 +43695496549433450143001234532034653210156961234589787 +94786987834342100154519873541128763165432870234671096 +85677889929854343267610565690639454076501210165692345 +76012870010767256998701234788748348987432101156787654 +01043961171258107887898345659654239858901101089810123 +32154552987349016576987454564980108765432232123209874 +43960143476987657607876523875676501678921349854112365 +54871232564890548510965014934189432578900458963012453 +69890121465431239423454876821054329657811467874501412 +78781230656322102347623945498765018746324320189432303 +45610945567212121098510130340121201235435410234534564 +44327876438901010101498321233290345110346761809621875 +34387654323432129812367321044789876011289898918760976 +45297890012343456703455433445602345895670767823451987 +56187781201278914567526932563211056734321296744589854 +67096654302107803498017801074787654321234585430076763 +78945109213456012332101301985698543210987676121125892 +21032238376788768945432452394987650121789678032434981 +32561247487699854876983345401276345430678549140123470 +23470056794521003123476236982345036781565432101210565 +14980129873430412001569107810034129092634307870389874 +05691234562541343432018098941125678104321216921010123 +06788765101632234589127657832103543219450325432167012 +12109453210762103678934566543012354308765014703458983 +43898344789899872100129875414983989412894327812565410 +56701235692198561091223014305894876543781016945678320 +12345106541085432782014323216765321789692345238769801 +01416787632176306654105450125601450694547654199654432 +12109898501201217653296961234702364543498703080123569 +01234549654323898741787870149810676032107012678034078 +67899678760015677230765487654321980121978710569985127 +58908707871234982101896398923450890120879623450276434 +43211216910123878982363210110961051234566542141105589 +52890345034987965985476545607872340345651033032234676 +01761212125675654876983432787401456978762122345897655 +10354305430234503210012301294301967869887831056798587 +23487416521105012342121345385210876778896990987123496 +96596547012276109653010256106321236569045781234012345 +87432108983489298764560187287810345652134650965421004 +76545017698548345675078894396923456743221045874540218 +89632123087632210982189123405410567892100038973234389 +56749834128901043983458016512321098754321122980198476 +43898765439456712276567087695632347665430101076567567 +32109650169329803125690198787541056578920122345445898 +78980543278019874034787239645670567810110233410336765 +65211230165216565129876543532789436921898398561221234 +34302321254305653210210123401890125432765487652310123 \ No newline at end of file diff --git a/2024/inputs/day11.txt b/2024/inputs/day11.txt new file mode 100644 index 0000000..528f9d5 --- /dev/null +++ b/2024/inputs/day11.txt @@ -0,0 +1 @@ +125 17 \ No newline at end of file diff --git a/2024/inputs/day12.txt b/2024/inputs/day12.txt new file mode 100644 index 0000000..0b328f1 --- /dev/null +++ b/2024/inputs/day12.txt @@ -0,0 +1,10 @@ +RRRRIICCFF +RRRRIICCCF +VVRRRCCFFF +VVRCCCJFFF +VVVVCJJCFE +VVIVCCJJEE +VVIIICJJEE +MIIIIIJJEE +MIIISIJEEE +MMMISSJEEE \ No newline at end of file diff --git a/2024/inputs/day2.txt b/2024/inputs/day2.txt new file mode 100644 index 0000000..d2ba2ef --- /dev/null +++ b/2024/inputs/day2.txt @@ -0,0 +1,1000 @@ +5 6 7 10 13 16 13 +19 21 24 27 28 28 +16 18 20 21 23 25 29 +44 46 48 49 52 55 56 62 +51 52 53 50 52 +10 11 12 14 11 10 +80 83 85 86 88 85 85 +89 90 88 90 94 +85 86 83 85 92 +31 32 32 33 36 +17 18 18 19 16 +33 34 34 37 39 40 43 43 +86 87 89 90 92 92 96 +7 9 11 13 16 16 23 +59 60 64 67 69 +43 45 49 51 48 +11 13 14 17 21 22 24 24 +74 75 78 82 83 86 88 92 +7 8 9 12 16 18 23 +35 36 39 45 48 49 +10 12 14 15 22 24 21 +4 6 11 12 12 +84 86 88 93 97 +5 7 8 15 16 23 +67 66 68 70 71 74 76 +17 16 19 20 22 25 22 +41 40 42 45 46 47 47 +59 56 58 61 63 67 +26 25 26 29 31 32 38 +81 78 76 79 82 85 86 88 +54 52 49 52 54 55 53 +24 23 25 23 25 25 +29 28 27 30 31 34 38 +65 64 66 64 69 +88 86 86 87 90 93 96 +98 97 97 99 97 +68 67 68 71 71 72 72 +45 42 45 46 49 49 53 +91 89 89 91 92 99 +63 62 65 67 68 72 75 +79 76 79 80 82 85 89 87 +37 35 38 42 42 +90 87 88 92 93 97 +80 77 80 82 85 89 94 +9 6 12 13 15 +88 87 89 96 99 97 +39 37 39 45 46 49 52 52 +6 4 5 6 12 13 16 20 +2 1 4 9 12 14 21 +80 80 81 84 86 +82 82 84 86 85 +49 49 51 52 53 54 54 +79 79 80 83 85 86 88 92 +56 56 59 62 64 65 72 +56 56 59 61 63 66 64 67 +59 59 58 60 57 +66 66 67 68 67 67 +25 25 22 25 29 +4 4 6 5 12 +89 89 89 91 93 +6 6 9 11 11 13 16 15 +33 33 36 38 39 39 40 40 +60 60 63 63 66 67 68 72 +62 62 64 67 67 74 +30 30 33 37 40 42 44 +16 16 20 23 26 27 24 +79 79 83 84 85 86 86 +28 28 32 34 37 39 43 +39 39 40 43 46 50 56 +3 3 5 11 14 17 20 +54 54 55 56 57 64 62 +37 37 42 45 47 47 +44 44 50 53 56 59 60 64 +32 32 37 40 45 +20 24 27 28 30 33 35 +15 19 22 25 27 25 +84 88 91 92 93 95 97 97 +80 84 86 88 89 93 +79 83 86 87 88 90 97 +39 43 40 43 44 46 +70 74 73 76 73 +10 14 15 18 16 17 17 +44 48 47 49 51 53 57 +9 13 14 17 18 20 19 26 +60 64 67 70 73 76 76 78 +62 66 69 69 70 69 +17 21 24 24 27 27 +8 12 12 14 17 21 +30 34 35 35 38 40 41 48 +12 16 20 23 26 +67 71 73 75 79 77 +37 41 44 48 49 49 +24 28 29 32 36 40 +63 67 71 74 76 83 +58 62 68 70 73 74 75 +75 79 81 83 90 89 +5 9 14 15 15 +10 14 15 21 23 25 27 31 +3 7 12 15 20 +9 14 17 18 19 21 22 23 +1 6 9 12 15 16 15 +86 91 92 94 94 +64 70 71 74 77 79 83 +42 47 49 52 54 61 +66 72 74 73 74 75 78 79 +41 47 49 48 47 +47 53 52 54 54 +55 61 62 59 62 63 65 69 +60 67 70 67 69 72 77 +59 65 67 67 70 73 75 +41 48 50 50 51 50 +34 41 41 43 44 44 +54 60 62 63 64 65 65 69 +79 84 87 87 89 92 93 99 +11 16 20 21 24 +48 53 55 56 60 63 66 64 +75 81 83 87 87 +24 30 33 37 41 +18 23 26 29 33 34 41 +10 17 20 22 29 31 33 +74 80 83 86 91 89 +48 53 59 61 62 62 +25 30 32 37 39 42 46 +59 66 72 73 78 +34 32 29 27 24 22 20 23 +99 97 95 92 90 89 86 86 +23 22 21 20 17 16 13 9 +77 74 73 71 68 65 64 59 +31 29 27 24 25 23 +91 90 88 85 84 81 84 87 +32 31 30 27 25 27 27 +52 50 48 46 49 48 47 43 +16 15 12 10 8 7 8 1 +12 11 8 8 5 2 1 +15 13 12 9 9 10 +74 71 70 70 67 64 64 +68 67 66 65 63 63 61 57 +45 42 41 41 34 +40 38 34 33 31 28 +45 42 38 36 34 37 +93 92 90 89 88 84 83 83 +31 30 26 23 19 +33 32 30 28 26 25 21 14 +68 67 60 57 55 54 53 51 +32 31 28 25 19 21 +83 80 74 72 69 68 68 +44 41 38 37 34 29 28 24 +59 56 54 47 45 44 37 +40 41 38 37 35 33 32 +52 53 51 48 47 46 47 +32 35 34 32 30 30 +58 59 57 54 51 49 46 42 +48 51 48 45 44 38 +32 35 38 37 34 33 +86 89 91 88 85 83 86 +61 63 61 60 58 59 57 57 +97 98 97 95 92 89 92 88 +36 38 41 39 38 33 +87 89 89 88 86 +92 95 95 92 89 88 91 +70 73 71 71 71 +69 70 70 68 67 65 61 +61 62 62 59 56 54 47 +64 66 64 61 57 54 +23 24 21 17 15 12 11 14 +14 17 16 12 10 8 8 +80 81 77 74 72 70 66 +30 31 29 27 23 20 17 11 +28 31 26 23 21 18 +20 21 16 15 12 11 13 +41 44 38 36 36 +59 60 59 53 49 +28 31 30 28 23 22 17 +42 42 41 39 37 35 34 31 +47 47 44 41 43 +89 89 88 85 84 82 80 80 +59 59 56 55 52 49 48 44 +55 55 54 51 50 43 +24 24 21 24 21 19 16 13 +92 92 90 89 87 84 85 86 +98 98 97 98 97 97 +58 58 56 55 58 57 56 52 +44 44 43 41 43 41 34 +57 57 57 55 54 52 49 +87 87 87 86 87 +89 89 86 86 85 85 +18 18 15 15 14 13 9 +34 34 34 31 29 27 26 20 +71 71 70 66 65 +64 64 62 61 57 56 58 +18 18 14 11 9 6 6 +83 83 81 78 76 72 68 +72 72 68 67 66 65 60 +85 85 84 83 77 75 74 71 +53 53 51 44 46 +8 8 6 1 1 +17 17 11 9 5 +68 68 67 64 61 55 54 48 +20 16 13 12 9 8 +99 95 92 89 88 90 +33 29 26 23 20 20 +70 66 63 60 56 +37 33 31 29 28 23 +27 23 21 22 19 +81 77 76 73 71 69 70 72 +30 26 29 28 27 24 23 23 +21 17 19 18 15 13 9 +91 87 85 82 80 82 80 73 +83 79 79 77 75 74 +86 82 81 81 78 79 +85 81 78 76 76 76 +77 73 73 71 69 66 62 +68 64 62 62 55 +26 22 19 15 13 +10 6 2 1 4 +56 52 51 48 45 41 38 38 +21 17 14 11 7 3 +61 57 53 52 50 43 +23 19 17 10 8 6 +81 77 76 74 68 66 68 +87 83 78 75 75 +42 38 37 35 29 26 25 21 +62 58 55 54 47 40 +70 65 63 62 61 58 56 53 +88 82 81 78 76 75 74 76 +29 24 23 21 20 19 18 18 +26 20 18 16 14 11 10 6 +68 61 59 58 57 55 52 46 +25 19 16 19 18 15 +51 45 43 46 47 +24 18 21 20 19 18 18 +30 23 21 24 20 +72 65 63 65 64 58 +81 74 71 68 68 66 63 +46 41 40 40 37 34 33 36 +51 45 45 42 40 39 39 +47 41 39 39 35 +32 25 24 24 19 +89 82 80 78 74 71 +70 64 61 59 58 54 55 +66 61 59 55 55 +60 54 53 49 46 43 39 +70 63 61 59 55 52 45 +37 30 23 22 20 19 16 13 +70 64 57 55 56 +72 67 64 61 59 57 52 52 +67 62 57 54 53 50 46 +40 34 31 28 21 20 17 11 +52 55 57 60 63 66 63 +10 11 12 13 14 16 16 +84 87 88 90 91 95 +12 14 17 19 20 21 26 +46 49 48 51 54 +16 18 21 20 19 +66 68 71 69 71 72 72 +9 12 14 11 14 18 +79 80 82 80 83 90 +13 14 17 17 20 +4 5 6 6 7 10 9 +76 77 79 79 79 +70 73 73 75 76 78 79 83 +29 31 34 34 37 38 45 +69 71 74 78 80 81 +7 8 11 15 17 14 +43 44 48 49 50 50 +1 3 7 8 12 +40 42 46 47 52 +65 66 67 73 74 +11 14 16 17 23 22 +4 6 7 9 15 16 16 +68 69 70 73 75 81 85 +46 48 55 56 58 64 +34 33 34 35 38 41 42 45 +76 75 78 79 81 84 83 +78 76 78 80 82 85 88 88 +9 6 7 10 14 +4 1 2 3 4 5 8 13 +22 20 23 25 23 25 27 29 +51 50 53 50 52 54 57 55 +79 77 76 77 77 +30 28 31 33 36 35 39 +76 75 76 79 81 80 81 88 +6 3 4 6 9 9 12 14 +31 30 32 32 33 30 +91 89 92 92 94 94 +79 78 81 84 86 86 90 +4 2 5 5 7 9 11 17 +15 13 15 17 21 22 +33 30 31 34 38 35 +49 46 50 51 54 55 55 +65 63 67 70 72 76 +11 9 10 11 15 18 21 28 +6 4 6 8 15 18 +74 71 73 78 81 83 84 82 +62 60 67 68 69 69 +71 70 73 75 76 79 85 89 +11 9 12 14 19 22 24 29 +31 31 33 36 38 40 42 45 +8 8 9 12 14 16 17 15 +57 57 59 61 62 64 64 +29 29 32 35 37 39 42 46 +56 56 57 60 61 62 69 +66 66 67 66 69 +31 31 28 30 28 +20 20 19 20 22 25 25 +2 2 3 5 8 7 11 +5 5 6 9 12 11 14 21 +15 15 16 18 20 22 22 23 +90 90 90 92 95 97 96 +54 54 56 56 59 59 +67 67 68 69 69 70 74 +44 44 44 46 51 +7 7 9 12 16 19 +46 46 47 51 52 51 +22 22 26 27 29 30 30 +76 76 78 79 82 84 88 92 +16 16 17 19 23 25 30 +28 28 31 36 39 42 +13 13 14 20 18 +41 41 46 47 50 50 +79 79 84 87 91 +79 79 80 87 89 90 93 99 +6 10 11 13 16 +80 84 86 89 91 93 91 +24 28 30 31 34 37 37 +49 53 55 57 61 +44 48 51 53 59 +17 21 24 25 26 25 28 +73 77 79 77 79 77 +76 80 79 80 82 84 84 +75 79 80 81 83 82 86 +26 30 33 36 37 35 41 +52 56 59 59 61 62 65 67 +9 13 16 18 18 21 19 +78 82 82 85 87 87 +22 26 28 31 31 35 +48 52 52 55 60 +43 47 48 52 54 56 +24 28 30 32 36 39 38 +46 50 54 56 57 58 61 61 +13 17 20 24 28 +8 12 14 17 19 23 30 +7 11 12 14 21 24 26 28 +25 29 35 37 38 41 39 +34 38 44 46 48 48 +40 44 45 52 53 57 +74 78 79 80 86 93 +72 77 79 80 81 83 +77 83 86 88 90 92 91 +65 70 73 76 79 82 83 83 +31 36 39 42 43 47 +41 47 48 49 50 51 52 59 +35 40 37 38 41 +73 80 79 80 81 80 +77 83 84 87 86 89 92 92 +29 34 36 39 40 39 43 +2 7 9 10 9 14 +81 87 89 89 90 93 +68 75 77 80 80 83 84 83 +76 83 86 86 87 89 89 +56 61 64 67 67 69 71 75 +54 60 61 64 64 71 +50 55 59 62 65 +43 48 51 55 57 56 +51 56 57 60 63 67 69 69 +54 60 63 64 68 71 75 +52 59 63 64 69 +67 72 75 81 84 +6 12 17 20 23 24 25 22 +6 13 14 16 17 24 24 +40 46 49 50 57 60 61 65 +6 11 18 21 23 28 +16 13 12 9 8 11 +68 67 66 65 62 62 +46 45 44 42 40 36 +49 48 47 46 43 42 41 34 +93 92 91 88 90 88 +87 86 87 84 83 85 +35 34 31 28 31 31 +15 13 15 13 9 +63 61 58 56 57 54 49 +21 20 20 19 16 14 13 +54 53 52 52 49 51 +17 15 14 11 11 11 +89 86 83 83 82 81 77 +99 98 97 94 94 88 +38 37 34 30 28 +19 17 16 14 10 13 +46 43 39 37 34 33 30 30 +17 14 13 9 6 5 1 +20 18 14 11 5 +91 90 89 88 87 80 79 78 +62 60 57 56 54 48 47 49 +94 92 90 85 85 +50 49 44 42 38 +49 46 39 37 36 34 32 26 +63 66 63 60 57 55 +58 60 58 56 57 +49 51 50 49 47 47 +50 52 51 50 48 47 43 +9 11 10 8 1 +48 49 52 49 46 44 +46 47 46 43 40 43 40 42 +87 90 89 92 90 90 +98 99 97 96 95 97 96 92 +76 77 79 77 71 +28 29 29 27 25 23 22 +95 98 98 95 92 90 87 89 +64 67 64 62 59 58 58 58 +92 95 92 90 87 87 83 +51 53 52 50 50 44 +81 82 78 77 75 72 69 68 +53 56 55 51 49 51 +26 29 25 24 21 21 +40 41 39 35 32 29 26 22 +22 25 21 19 17 11 +65 68 62 60 57 +75 77 76 70 68 66 64 65 +50 52 46 43 43 +53 55 53 46 43 40 36 +63 64 63 57 56 53 48 +42 42 41 39 36 35 34 31 +70 70 69 66 65 68 +82 82 79 78 78 +47 47 46 44 40 +55 55 53 50 44 +62 62 59 58 61 59 58 +88 88 87 85 87 88 +68 68 66 68 68 +32 32 29 28 29 27 25 21 +24 24 26 24 18 +95 95 93 92 92 89 +72 72 69 69 68 67 64 67 +27 27 24 22 19 19 19 +26 26 23 20 20 19 17 13 +9 9 8 8 6 1 +58 58 57 54 53 51 47 45 +95 95 91 90 92 +13 13 10 6 6 +87 87 85 84 80 76 +81 81 77 74 73 71 66 +94 94 92 91 85 83 82 +33 33 32 30 29 23 20 22 +92 92 91 84 83 83 +16 16 10 8 7 5 1 +60 60 58 55 50 48 43 +43 39 37 36 34 33 32 29 +88 84 81 80 78 75 74 76 +37 33 30 29 26 25 23 23 +76 72 69 68 67 63 +95 91 90 87 82 +85 81 78 81 80 77 +35 31 28 26 27 29 +80 76 78 77 75 75 +35 31 29 31 29 25 +96 92 89 91 90 87 81 +51 47 45 44 44 41 +91 87 86 83 80 79 79 82 +50 46 46 45 44 42 42 +60 56 54 54 50 +86 82 79 79 78 77 70 +63 59 55 54 51 +39 35 33 30 29 25 23 26 +90 86 83 79 77 75 74 74 +70 66 63 62 61 57 53 +63 59 56 52 51 48 45 38 +77 73 67 66 64 62 61 +22 18 15 14 8 5 8 +82 78 76 75 68 66 66 +31 27 22 21 17 +70 66 61 58 57 51 +61 54 52 49 46 45 43 +81 75 72 69 66 65 66 +37 30 29 28 25 24 24 +75 70 67 65 64 60 +59 53 50 47 44 41 40 34 +48 43 45 43 42 +41 34 37 35 38 +52 46 43 41 40 37 39 39 +38 32 35 32 29 27 23 +76 70 73 71 69 66 60 +16 11 9 9 6 5 +20 13 13 10 8 10 +71 66 64 63 61 61 61 +60 55 53 51 51 47 +27 20 20 18 17 10 +83 77 75 73 71 67 65 62 +87 81 79 75 78 +81 75 71 69 66 66 +76 71 70 67 65 61 57 +72 67 64 62 59 56 52 45 +39 32 30 24 23 20 17 15 +94 88 86 80 79 82 +27 20 19 13 10 10 +96 89 82 80 77 73 +34 27 25 20 18 16 11 +46 47 49 50 54 56 59 63 +87 87 90 91 92 91 92 92 +80 81 80 78 75 68 67 67 +29 28 25 23 18 15 13 +29 29 27 24 21 17 +62 64 65 64 66 69 72 72 +18 18 21 24 21 28 +55 57 52 49 45 +76 78 76 73 69 66 66 +77 76 73 70 66 60 +73 77 81 84 86 +64 70 72 75 78 81 81 81 +79 80 87 89 90 91 96 +22 26 29 28 30 36 +76 73 72 70 70 68 66 63 +44 41 42 44 46 52 +47 47 45 44 41 39 38 37 +52 50 48 48 47 47 +33 37 41 42 43 45 45 +31 37 37 39 42 45 46 +36 38 40 43 46 51 +69 62 61 59 58 55 55 +64 66 67 67 69 71 69 +58 58 60 60 63 +50 53 51 52 50 47 43 +76 72 70 69 67 69 +38 33 32 34 33 +20 20 17 17 16 13 7 +49 50 52 53 57 58 +67 66 67 70 72 74 77 80 +54 50 45 43 41 38 35 35 +13 12 13 14 18 +90 86 82 81 79 72 +97 90 89 85 82 82 +70 77 79 81 88 90 92 96 +89 85 82 82 83 +41 41 40 39 39 37 34 +43 41 44 47 46 49 +38 42 47 48 49 +89 90 97 99 98 +20 27 31 32 35 38 38 +41 41 38 37 34 32 32 +23 19 17 16 15 16 16 +93 93 92 91 90 92 +79 75 74 73 69 66 65 61 +67 70 71 72 73 75 78 78 +35 40 41 42 39 38 +87 84 83 81 78 77 76 76 +62 56 55 58 54 +55 53 57 60 63 64 +20 22 19 20 19 19 +14 14 11 14 16 +27 26 27 28 31 30 31 37 +15 9 8 7 6 6 2 +41 38 37 30 29 27 21 +70 75 76 77 80 83 86 86 +20 18 14 13 10 7 3 +47 44 40 38 36 +10 14 15 18 19 20 22 27 +60 60 62 64 66 69 74 76 +13 17 15 17 18 19 20 17 +12 11 13 15 15 16 +97 97 94 91 91 94 +30 32 33 33 36 39 41 45 +46 40 39 36 39 +33 39 41 44 48 50 49 +31 31 29 27 25 18 16 18 +12 12 15 17 19 23 21 +43 42 45 45 46 49 46 +47 49 50 52 53 56 59 63 +59 60 58 58 56 54 53 +15 20 22 25 27 28 34 37 +54 57 58 59 62 68 69 +43 47 49 50 48 +63 67 68 69 71 74 78 +82 85 84 80 77 74 71 67 +85 90 91 94 95 98 97 +85 81 79 80 77 76 +26 20 16 14 13 11 5 +57 59 60 63 62 65 68 72 +21 21 18 12 7 +62 59 57 55 54 51 50 44 +64 66 65 65 60 +12 16 15 17 19 +12 14 14 13 11 8 8 +92 90 89 91 93 95 97 95 +90 88 91 93 95 92 +79 84 87 94 95 96 99 96 +20 23 24 26 29 33 34 41 +48 43 42 41 40 37 +37 37 40 39 36 36 +56 56 57 58 61 60 +68 66 66 65 63 61 58 53 +59 61 60 57 57 +56 49 47 49 47 46 43 36 +21 19 17 16 10 9 7 7 +28 35 38 42 43 50 +83 83 80 77 76 72 69 69 +33 32 36 38 39 40 44 +67 71 72 73 72 74 77 81 +31 36 39 39 41 45 +61 64 68 71 73 70 +64 64 64 67 70 73 76 82 +47 40 39 36 33 31 28 22 +48 51 49 44 42 41 +48 47 48 50 51 51 51 +69 69 73 74 77 79 81 85 +5 9 10 13 15 15 17 21 +71 75 78 82 87 +46 42 39 38 35 36 35 38 +10 12 14 17 18 22 23 23 +75 76 76 78 81 83 85 85 +11 15 16 18 19 23 27 +64 68 75 76 79 82 87 +81 79 76 73 75 75 +21 17 15 10 9 6 4 3 +67 74 76 77 82 +22 26 30 32 35 32 +23 20 17 15 13 11 10 6 +64 63 62 60 55 53 56 +34 34 36 40 42 44 +43 43 42 42 38 +31 28 32 33 36 39 36 +74 71 75 77 79 81 88 +97 90 88 86 79 73 +60 60 61 63 64 68 +46 44 41 44 48 +17 13 14 13 12 9 8 4 +75 69 67 64 59 57 58 +27 21 21 19 16 14 9 +29 29 26 23 21 20 18 11 +57 60 63 66 67 69 71 68 +75 78 75 73 74 71 73 +46 40 33 30 27 24 22 22 +71 73 69 66 63 65 +79 81 80 82 84 81 +79 83 84 85 86 88 89 89 +8 12 17 20 23 27 +78 83 86 89 91 95 99 +39 40 38 35 28 25 24 25 +50 47 50 51 53 59 56 +75 75 74 70 69 67 70 +81 74 73 71 70 66 62 +34 30 27 23 20 17 15 15 +49 52 49 46 43 41 +50 55 56 53 57 +57 57 57 59 60 64 +87 81 80 77 80 78 78 +69 68 71 72 73 74 78 78 +46 40 38 31 29 27 25 +24 23 22 22 19 16 14 16 +22 27 28 31 32 33 +90 90 84 81 80 76 +51 55 58 59 60 63 66 +9 7 14 16 20 +47 51 53 53 55 57 58 +63 59 56 53 50 47 40 +52 45 42 38 35 34 33 +27 24 24 26 32 +13 18 21 22 19 20 23 +21 20 23 25 32 33 35 35 +80 81 82 85 86 86 92 +49 49 51 50 48 46 43 41 +69 63 62 61 57 56 55 57 +8 8 9 11 8 12 +90 86 83 81 84 78 +94 94 91 88 85 81 79 73 +14 17 16 15 12 10 7 3 +70 65 63 63 60 60 +72 72 70 66 63 61 58 54 +72 68 66 63 56 54 50 +56 55 52 51 50 48 44 45 +95 88 88 87 86 83 85 +41 45 47 50 55 58 58 +71 74 77 74 73 70 67 60 +74 74 81 83 85 86 87 91 +22 26 27 25 25 +89 88 85 84 87 89 +86 84 81 82 81 74 +49 42 37 34 30 +83 81 86 89 96 +82 77 79 77 80 +24 29 30 33 36 40 41 +62 69 72 75 77 81 +27 23 20 18 17 14 14 +25 26 21 20 19 12 +18 18 16 15 16 13 12 6 +65 65 62 61 58 52 51 51 +53 53 55 56 59 66 73 +52 55 56 54 56 59 +87 90 88 87 89 +68 64 61 58 55 52 50 +76 77 75 78 77 74 +53 49 47 44 40 +66 62 60 59 55 53 55 +73 69 65 63 60 58 55 52 +10 17 19 26 28 34 +36 36 38 40 42 46 47 47 +29 33 36 36 37 39 36 +6 9 16 19 22 26 +46 40 40 38 36 34 33 +70 70 71 72 73 80 83 83 +66 64 61 60 60 57 53 +38 34 27 26 24 23 25 +70 67 66 69 70 73 73 +15 12 10 7 5 +61 62 65 66 69 71 73 76 +75 76 77 80 82 85 87 90 +83 82 81 78 76 +52 50 48 46 43 42 +34 32 31 30 29 27 +53 55 57 58 61 64 65 68 +23 22 19 18 16 15 +36 35 33 30 29 26 23 21 +43 41 38 35 32 31 28 +96 94 91 89 88 86 84 83 +94 93 92 90 87 85 84 81 +83 86 89 90 93 +42 45 48 51 52 53 +3 4 6 7 10 +83 81 80 78 77 74 71 69 +69 66 63 61 58 +17 16 14 12 9 +74 73 70 68 65 63 +41 44 46 47 48 51 +81 79 78 77 74 +11 14 16 17 18 21 23 +79 82 83 85 86 89 92 95 +88 87 86 83 82 79 76 +28 31 33 36 37 38 40 +55 56 59 60 61 63 65 +57 60 62 64 67 70 73 +58 60 63 66 69 70 73 74 +24 22 21 20 18 +76 79 82 85 87 90 93 +29 27 25 23 22 +31 32 33 35 37 39 40 +14 12 11 8 7 5 4 +80 77 74 71 68 67 66 63 +57 59 60 63 65 66 69 +96 93 92 90 87 85 +76 77 80 82 83 86 +20 23 25 27 30 32 +26 29 32 34 37 38 41 +31 30 29 27 24 +31 34 35 36 37 38 41 +78 77 75 72 71 69 66 +49 47 45 42 40 37 34 +94 93 92 91 88 +81 78 76 75 74 72 71 +7 10 13 16 17 20 23 +63 64 66 67 68 +9 7 5 4 3 +75 73 71 68 66 64 61 +64 67 68 69 71 74 +60 62 64 67 70 71 73 +63 64 67 70 73 75 +95 93 92 89 88 +40 39 38 36 35 +30 28 26 24 23 +26 24 21 20 18 17 15 +90 91 92 93 96 97 +4 5 6 8 10 12 14 +36 33 32 30 28 +67 66 64 62 60 58 56 +52 51 49 48 46 45 +16 17 18 21 23 24 27 28 +26 28 31 33 35 37 39 40 +79 81 82 85 88 +36 39 41 44 46 +43 45 46 48 51 52 53 +49 46 45 43 41 39 +24 27 29 32 34 36 +55 54 52 49 48 +69 72 75 77 80 81 82 +13 12 10 7 6 +9 10 12 15 16 18 20 +76 77 78 80 81 82 84 +68 71 72 73 74 +26 24 23 22 20 18 +38 37 34 33 30 29 +53 52 49 48 47 45 42 +32 30 27 24 22 20 18 +34 35 37 38 41 44 46 +5 6 8 10 13 16 17 19 +40 38 37 34 31 28 25 23 +4 6 7 9 12 15 18 +9 11 13 14 16 19 22 23 +69 67 66 65 63 62 59 57 +81 84 85 87 90 91 94 97 +54 56 59 62 65 67 68 70 +53 55 58 61 64 +65 66 69 71 74 76 77 +93 92 90 88 87 85 83 81 +83 80 77 75 74 +77 76 75 74 73 +90 88 85 84 82 80 77 74 +58 60 61 62 65 +2 5 7 8 9 10 12 +46 45 44 41 40 +85 83 82 80 79 77 75 72 +99 97 95 93 92 89 +67 69 72 75 78 +79 77 76 74 72 +43 45 48 51 54 57 60 +98 95 92 91 90 88 +41 44 47 49 52 55 56 57 +68 66 64 62 61 59 56 55 +66 69 72 74 76 78 80 81 +72 75 76 79 81 84 86 +99 97 94 91 89 +52 55 58 59 61 63 +80 81 84 86 88 91 93 +8 9 10 12 15 17 18 +90 91 93 96 99 +30 31 34 36 38 +90 88 85 82 79 76 74 72 +82 84 87 88 89 92 +12 9 7 6 3 +83 84 87 89 91 94 97 +33 36 39 41 42 45 48 +7 8 11 13 14 15 +48 49 50 51 54 56 +92 89 86 83 80 78 +60 62 63 66 67 70 71 +25 24 21 19 16 13 +29 26 25 23 21 +71 68 67 64 63 +83 85 88 89 90 91 93 95 +2 4 7 10 12 13 +54 53 50 47 45 +8 10 12 13 15 18 19 20 +83 82 81 80 77 76 74 71 +93 90 88 87 85 84 81 79 +76 77 80 81 82 85 86 +42 39 37 36 34 32 29 26 +48 47 46 44 41 39 36 +39 38 37 36 33 32 30 +12 15 17 19 20 21 22 +30 29 28 27 24 22 +37 40 42 43 46 48 50 +35 38 39 42 45 48 50 +55 58 59 60 62 +7 8 11 13 15 16 18 +68 67 66 64 61 60 +77 79 81 83 84 87 88 +60 59 56 54 52 51 50 49 +14 16 17 20 22 25 28 30 +60 63 66 68 69 70 72 +19 16 14 11 9 6 5 3 +57 58 61 64 65 66 68 +44 42 41 38 37 +72 74 75 78 79 82 84 +51 54 56 59 60 +69 67 66 64 62 +33 30 27 25 24 +56 54 53 52 50 48 +76 78 81 84 86 89 90 93 +77 74 71 68 66 64 61 59 +41 39 36 35 32 31 +75 73 71 69 68 67 64 +75 76 78 81 82 83 +78 81 83 86 87 88 91 94 +33 30 27 25 24 21 19 16 +46 47 48 50 51 54 56 59 +76 78 79 82 84 87 +71 73 75 77 78 79 80 +52 54 56 59 61 63 65 +7 10 12 13 15 18 +3 6 8 10 12 13 +78 80 82 84 86 +58 55 53 50 47 45 +88 85 82 79 78 77 74 +8 7 6 5 3 2 +38 36 33 30 29 28 +59 62 63 66 68 70 +83 86 88 89 91 93 96 99 +19 21 23 26 28 31 +14 16 19 22 25 27 +91 90 88 87 86 85 84 83 +5 8 11 14 17 18 20 +87 88 91 92 94 96 97 +4 5 6 8 9 +32 30 27 24 23 20 +56 55 54 52 49 48 +31 30 28 27 24 22 19 +79 82 85 86 88 89 90 91 +92 89 87 84 83 80 +75 72 71 69 67 +54 51 49 46 45 44 41 38 +38 36 35 34 31 +68 66 63 62 59 58 +90 89 87 86 84 81 78 +51 52 54 57 59 60 61 62 +18 19 20 21 23 25 +52 50 47 45 44 +71 73 74 76 79 82 85 +19 21 23 25 26 +47 46 43 41 40 38 36 33 +32 35 37 40 42 43 45 +57 54 52 50 47 46 44 42 +33 35 37 40 43 44 +38 35 33 32 29 26 24 23 +63 61 60 57 56 +90 87 84 83 81 80 79 76 +11 13 14 15 18 19 21 +59 56 53 51 48 47 44 +54 56 57 60 61 63 +26 27 29 31 34 35 38 +64 63 61 59 58 55 54 +17 15 14 12 10 7 +85 86 88 91 94 +23 26 29 30 32 33 36 37 +31 32 33 34 36 38 39 +88 89 92 94 97 +74 72 70 67 64 61 +18 17 14 11 10 8 5 2 +66 63 60 57 54 51 48 +49 52 55 56 58 59 62 +55 52 49 48 47 46 45 +59 57 56 55 54 53 50 +25 26 28 29 31 32 33 +52 50 48 47 46 45 44 41 +48 47 46 44 41 +16 14 13 12 9 +18 19 20 21 24 +34 37 40 43 44 +46 49 51 54 56 +81 79 78 77 75 72 69 68 +26 24 22 19 17 16 13 +19 21 24 26 27 30 +13 14 16 18 19 22 24 26 +41 43 45 46 47 48 +92 89 87 85 84 +34 35 38 39 40 41 44 +96 95 93 90 89 +66 68 69 70 71 72 +82 79 78 77 74 +40 38 37 34 33 31 28 +71 72 74 76 78 80 81 83 +37 36 34 32 31 28 27 25 +40 42 44 47 49 51 52 +84 81 78 77 76 75 +22 23 25 26 29 31 32 35 +35 34 33 31 29 28 25 +34 36 38 41 44 46 47 49 +51 48 46 43 42 41 38 36 +1 2 4 5 7 +70 68 65 64 62 +34 31 30 29 27 26 +35 34 31 29 26 +33 35 38 39 42 45 +65 64 61 59 56 53 +65 63 60 57 55 +38 36 33 32 29 +59 61 64 65 66 +93 92 89 86 84 83 82 +14 13 12 9 7 +63 66 69 70 72 75 76 79 +31 32 33 36 37 39 +37 39 40 42 45 47 +20 22 23 25 26 +55 52 49 46 45 42 +19 21 23 24 27 30 33 +2 4 6 7 9 12 15 16 +76 79 80 82 83 84 87 +49 51 52 53 55 57 +54 55 57 59 61 +3 5 6 9 12 14 15 +95 92 91 88 87 84 83 80 +54 56 57 58 61 62 63 +1 3 5 6 8 10 +76 79 80 82 85 +21 23 24 27 28 31 33 +52 49 46 43 41 40 38 +69 71 74 76 77 +57 55 52 49 48 +22 19 16 14 11 +67 68 70 72 73 74 75 76 +17 14 13 10 7 6 3 2 +76 73 72 71 69 67 66 +70 72 73 75 78 79 +56 53 50 47 44 43 42 39 +72 70 68 66 64 61 +80 81 84 86 87 90 +35 32 29 28 26 25 +30 33 35 36 39 40 41 43 +62 59 57 56 53 +51 48 46 44 43 +32 31 29 28 25 23 21 19 +90 89 87 85 84 81 80 79 +66 64 62 59 56 55 54 53 +70 71 72 73 74 76 79 81 +84 86 88 89 92 94 95 98 +61 60 58 56 54 +79 81 83 86 87 89 92 +23 20 17 16 15 14 11 8 +39 38 37 34 33 32 +14 13 10 8 7 6 +29 31 34 37 38 41 43 +22 24 26 28 29 30 +31 28 27 25 24 +51 50 49 48 46 44 43 +69 70 71 74 75 77 \ No newline at end of file diff --git a/2024/inputs/day3.txt b/2024/inputs/day3.txt new file mode 100644 index 0000000..732dc43 --- /dev/null +++ b/2024/inputs/day3.txt @@ -0,0 +1,6 @@ +;({where()+'what()mul(445,324)#what()select()(+mul(430,603)why()@^&why()'$>{!*]mul(11,880)#?$##:@mul(653,180)mul(343,172)^*({]!&!@~mul(121,364)>(~ mul(905,512)!''&;{%?why()mul(253,82)%&mul(173,725)''[mul(948,412)])how()select()) don't()where()mul(688,386)mul(798,885)+:&:)mul(139,466)from();what()'*( +,mul(337,913)!?,why(315,219)why()]@'when()mul(299,848)?-mul(404,810)don't()who()[$@$)mul(562,587)/%%mul(930,204)?$?why()mul(671,431)]from()#+(who()who();mul(467,198)select()what(748,331)from()[when()%@:do();mul(648,804))~where()who()mul(433,801)':how();@!'^{mul(294,95)&?mul(394,740)((}:select())mul(627,328)?how()who()>+where()select()!mul(726,536)^what()select(603,656)#@];~~mul(100,802)where()what()mul(675,411)$((+how();/%mul(858,719)from()-do()what()*]~;mul(873,971)//%mul(78,89)~'from()&where()@from()mul(308,52)mul(959,448)why()#%select()#(mul(379,76)}how(678,794)mul(575,884)how())*do()mul(829,831)why()how(999,884)who()where()^(@mul(686,468)}from() how()&<&mul(886,603) +;]?from()why()*do()&~!;mul(247,653)-mul(828,136)when()select()from()mul(258,842)what()?<)#];mul(517,650)!%+'~-mul(215,28)*-^*mul(810,676)select()%who():where(){>who()when()mul(632,298)how()'how()from()mul(823,219)what()'@^who():when()mul(400,833)from()$%'/,[(]mul(216,848),#!/#:mul(725,486) }~~<(mul(564,772)where())mul(819,487)]:)-&/}mul(71-(mul(732,511)~ (where():- mul(773,414)what()how(581,907)[how(218,409)?//mul(94,697)))?<-#>mul(89,657)mul(385,928)%what()why(467,355)&->mul(757,734) ]mul(517,244)]select()when(253,938)^>/'&(mul(232,10)mul(665,886&mul(880,285) +what()#where()&$mul(310,297)%>why()^what()]mul(593,941^where(),-select()mul(937,169),+!why()>when()([>+do()%]select()why()mul(104,652)[*;^who()-}#(mul(963,537)mul(579,212)select()--{from(644,349)+:select(857,111)mul(531,515)(&,%how()}$:mul(989,356){;{,))}'mul(142,281)&@~!]mul(289,916)%+when()from()/$:mul(551,55)from()from()$how();;why()}mul(738,532)< (~mul(547,99))how()>mul(159,62)(^*who()where()@@who()*^do()^'*&what()mul(34,665)-do()%@how(732,538)mul(459,928)what()*mul(407,795)+^+@{[:[mul(695,539)mul(359,852)mul(132,930)mul(729,877)/^(^mul(727,452)(mul(782,665)when()>*mul/^mul(688,251),(mul(117,838)mul(313,301)??from():mul(918,351)>mul(513,285](what()&why()~what()who()mul(493,941)(%who():mul(298,591)]:select()&/mul(91,464)}(%*,{-mul(316,801)/$+'~select()[!do()?>%,mul(253,555)*@when():why()>what()mul(511,598)/where() /#'?mul(193,147)mul(693,462)>}~}mul(942,134)%mul(545,298)select(883,847)'&;what()why()])]select()mul(932,859),;*who()mul[what()where()/&%mul(479,587)%?{<-^]select()#where()mul(992,583)who()[&[&[mul(714,106){% where())]~'mul(158,893)/select(){when()~select()*:from()[don't()@select()>~^$how()%}mul(262,794)who()/how()mul(856,695)}(;who()+from()what()mul(203,385)select()@<^;?>-';mul(409,500);why()+ mul(721-{where();{mul(419,384)when()from()where()+~%select()mul(23,108)/~}select(932,457)/[from()mul(381,237)(mul(249,569)mul(332,31)from()select()$mul(760,792){'why()%< @mul(378,678)-/mul(146,764)+:[why()mul(262,148)*?,who()%mul(209,306)$]*@from()>(;how(),mul(992,237)from()};+{who()&when()!mul(941,631))~what()$what()]mul(528,570)what()select()when()<#}what()don't()>*#-mul(379,986)!()]select(9,153)mul(942,395)><#?what(313,440)where()@how()from(){mul(663,775)*^what()[mul(584,62)when();$#mul(270? ])>&select(){ ^how()mul(837,91)what()where(){%^&!!mul#>^~<'#]-%mul(160,825)?*&%)({!'$mul(488,459)mul(466,879)#,!%+ ](+%mul(371,785)-(,mul(884,509)<,select();mul(423,954))what()[what()what()~mul(548,650)']don't()where()[]'mul(892,161)who();)]?mul(54,246)!-mul(140,679)who()@)@mul(193,36)mul(64,972)&;+)@mul(152,414)where()when(748,355)mul(778,929)*<[&*$mul(549,697),mul(183,897)when()/':&%:&#mul(428,989)mul(220,961)}do()what()$what(536,484)*[]:$select()}mul(943,870)'mul(658,52)->(^!;select()^)$mul(474,140)where()mul(700,771)]^%>]^'mul(933,512) +:]$^do()select()^~]who()& ^}mul(142,82)(?{mul(324,299) ^&@mul(426,954)*why()mul(535,943)'^)*<]mul(540,959)~select(),how(770,994)select()mul(623,558)#mul(778,72)+-*where(631,115)how()mul(777,784):+mul(834,445)*-$do()mul(504,419)mul(760,788)%~why()-mul(861,519)},how()~*#mul(654,701)/;/mul(765,616)}- ]why()!#mul(695,46)~!/,#~&mul(867,931)mul(69,230)/[?mul(937,711)+#;don't()-when()mul(287,875)who()>*^who()how()how(59,735)when()what()mul(642,627)&:from()how(){:mul(273,186)mul(513,893)<+when()'select()(mul(250,147)mul(944,800)&}/:}%don't()/when(763,491))&what()~mul(369,406)when()) [$<'mul(17,672)mul(882,623who()[)'[why())#'?mul(81,716)+ mul(447,640)mul(653,686)when()-!)*>']@mul(261where()(($(who()why()^~mul(513,546):?@',who()when()??[mul(133,831)what(642,114)- from()$mul(688,974)&mul(130,103)!+what(){&%)mul(208,734)@do()<($<>)%,-mul(184,818)mul(890,576)how()mul(837,954)'select()([;*)>,;mul(238,270)^^what()](/mul(850,817)^what()+'why()<](;mul(399,231)+how()when()-mul'when()*<+('->what():mul(57,595)+where()mul(61>{from()who())when()mul(20,581)^'?<+#mul(506,640)select()'[)&{^from()$mul(238,389)select()when(41,502)@what()[-where(),select()who()mul(330,955)~^/when(134,118)&<@%!mul(766,471)mul(292$select()what()^)}{mul(294,301)select()+mul(4,456);]what(270,427)/what(638,143)#mul(567,277)+~what()when()mul(291,92)&what()mul(883,529);}'+>>/;%^)mul(837,12)why()#[>@mul(180,108)<)^)-select()mul(790,366) mul(477,626)who();don't()what():>})>select()#,select()mul(970,250)+!why() (&+mul(702,494))-^when()>mul(365,357)who(823,464)>@from()when()~#mul(193,867[)$mul(59,73)what()/mul(150,669)$}who()why()why()?>+,mul(503,887)~!&&(:#&,}mul(770,232))mul(608,780)}what()>@where()mul(814,784)how();mul(195,454)/]why()how()who()mul(119,155),^mul(840,203)'+]<};mul(307,495)#(who()what()$select()when()$;+mul(26,644)how()+;select(255,590)mul(531from()select()'mul(714,614),mul(325,872)<<[mul#}!:mul(394,222)@%what(588,571)-,:<&mul(400,422)-]do()what()how()#{&why()%when(466,904)~mul(851,835)~how()where()&*why(499,551)*mul(910,493),!what()>where(303,78),'select()%mul(625,527)mul(479,758)mul(327,98)mul(554,259)select()}mulwhy() !;]@'/mul(113,41)where()$how()*select()do()%'^]@mul(285,496)&select()do()[/!?/[mul(27,435),{;;from()?/{}^mul(918,36)!{? [![:mul(490,857)where()((,mul(428,611)-$,/><#(who()mul(456,409)when(369,358) :~+where()-(what()@mul(733,862)'@$(mul(131,879)from()~-$select()mul(734,484)from()what()what()mul(507,287)where(),why(284,579)>>!]from()who()mul(295,272)-mul(882,901)/]<-$^+#*mul(745]:when()::$-where()how()/mul(898,313)do()<$why()!! why(839,58)$,mul(788,713)from()+[what()}~#what()+do()[ $*where()~@!@+mul(603,956)when()mul(601,972)what(56,144)do():why(){mul(103,342))$>who()'mul(60,904){why()/)who()$mul(761,131)!&->when()mul(560,725)from()mul(818,250when())(<(#/-mul(387,817){ ;!-^mul(702,837)';don't() $}]@mul(461,199)$'where()~:from()from(171,996) }don't()/-??$}mul(994,543):#!why(),'>mul(442,181) ;!@%mul(601,317)+?-+$mul(909,275)when(296,190)when()select():->when(453,892)'mul(551,960)mul(507,289)what()when()+mul(671,135)select()+~from()}when(),why()/mul(121,912)from()#who()mul(799,631)mul(784,458),'do()::~+}how())mul(454,304)who()%what()select()what() what()~mul(94,667)mul(360,282)mul(528,823) *;;when()?~)mul(848,397)}[/^({/%mul(261,776)-from(),mul(726,676)$what()+)mul(641,845:+*#mul(729,810)!how())$/mul(352,322)how()from(156,362)(}>:$,])mul(784,187) +mul(989,116)what()? mul(240what()^&;;mul(154,827)^@what()mul(254,522)select()how()'why()(?do()@}#where()mul(193,567)/mul(775,751)([]!what()>%(mul(788,585)&/,mul(475,307){when(140,109)-why()/mul(349,674)how()from()<$%when():where()#mul(227,383)when()%#-mul(711,505)what()why()#^'}}why(){what()mul(717,303)how()>mul(760,51)%&-~)>!mul(674,136)mul(140,636),)~&-mul(908,30)mul(154,688):from()-when()<^#!?mul(417,70)%>do()~^--#'<@>>mul(354,115)~when()'what():from(354,427)>mul(279,257)mul(292,504):[{[who()('what()^mul(893,699)^+&)[//mul(753,807)><+])}~mul(957,644)$]]+how()~$mul(53,811)mul(447,226)select()mul(774,984)why()why()'![don't()+$where()>$&from(16,716)}?mul(252,848)]#&from(){mul(895,641)///when()#)mul(482,275)how()) )select()from(){mul(645,131)*));*+mul(266,281)%[mul(446,962):)< who();/mul(876,107)%*>mul(187,697)-how();select()$mul(962,372)mul(276,649)}what()!#select(),from()? who()mul(540,977)why()#}why()-mul(527,726)!/select()%?mul(602,536)/?what()why() select()%/mul(926,882)why()who()-}*/mul(960,515) >~!?^!how()select()mul(597,249)what()/<@$~$what(708,877)/mul(871,408)mul(178,932)/why():why(541,591):why():$+%mul(107,703)[@*from();who()don't()? [>*mul(345,156)< ?];^)>from()select(549,167)mul(764,609)&where(32,545)#mul(35,321)<&when(241,647)/mul(414,62)[![how(243,208)-)mul(399,237)#'#+when(820,119)where()($mul(418,23)what()mul(618,231)$(mul(864,185)'#!^mul(730,572)#];what()$>};why(866,942)mul(196,426)($@where()where(),mul(51,66)from()[)#<;where()<:mul(504,489),@*when()why()mul(979,151),]@*^(^where(48,22)why()mul(910,862)mul(58,405)#>' ~from()when()mul(817,943)*(who()[[*%;+who():mul(140,620)~[mul(93,354),do()how()who(){how()'$-what()why()mul(542,872)<;mul(490,224)+*):}when() ]mul(840*]what()}('&mul(563,138)when()mul(298,803)+!'&#+~+mul(914,40)~+how()mul(766,174){/#what()who()when()~)%don't()&where(){mul(587,419)'!don't()&where()'/+mul(629,54)$!!where()/what()*~mul(523,43)?where(686,184)#>%how()-; +mul(165from()mul(137,486)(;}when()!?from()where()where()^mul(694,53)what()mul(631,877)(how()?/'@)-from()mul(711,927)+what()when()&how()mul(66,129)from())],}/$what()#mul(347>mul(691,91)mul(791,897)when()~ }-)mul(325,178)mul(105,565)^<*mul(193);;]how()mul(355,707)#{#%mul(27,653) +%how()how():?:mul(766,746)*@mul(364,566)-< who()(*':mul(999,344)*/select()--mul(672,593){how())(who()'/mul(722,627)>-?mul(231,501)~}#!mul(694,751)when()how()- where(202,572)select() }*^mul(17,75):+'what(),&mul(413,505)mul(113,65)[-+{,[mul(83,722)((mul(475,980)mul(588,832):/;)what()/+mul(103,764)?{$:?{{+:select()mul(583,487)mul(757,133)why()??mul(47,54)<]>select()>^?$mul(201,196)$from()]^~#where()mul(494,817)]?//-#select()%+mul(444,319)%?from()mul(316,303)}-~'<<-when()when()mul(350,810)mul(557,674)~##(select()$mul(97,781)who()(>>' >!),mul(473,488)who(290,952)mul(33,630)why()>do():)mul(267,367)+/who())^select()^from()$!mul(409,900)*what()[)]who())[+where()mul(309,751)~don't()!mul(165,206)mul(113,418)]from(),'&do()select()/*:)]!mul(272,138) mul(211,851)]/$mul(916,846)mul(203,199)mul(40,428){&*from()%mul(305,353)? >}where()%mul(397,337)]!mul(352,23)@don't()where()^{from()mul(804,392)${<}!mul(392,298),>>mul(572,89)+why()$*;when())#where()$mul(458,495);mul(375,386)~from()mul(429,704),{*%select()$who()]mul(442,21)#why()@?!mul(659,81)when()<($%^&&don't()!mul(934,729)/<[:how(288,214)'mul(971,226);+!%!mul(465,736)/]&%&^what(),+mul(613,544)-/from()what() },<-!mul(906,152)[who()&when()select()mul(612,56)~&<')/!mul(247,423)from()[{&who()mul(979,442)[mul(319,494)~%/+mul(781,251);<>)who()%from()[from()mul(27,381)}+)what()%/select(),,mul(324,64)mul(938,422)how():@>}:%'/&mul(388,707)]@mul(98,712)~who()$%@?(what()from()who()mul(161,906)~where():#mul(198,30)why() ~!>how()['-who()mul(5,68)what()<%%{mul(829,126):,mul(509,883)mul(142,939)do()#>mul(53,112)!(what()/?do()(,how()%mul(523,469) who(){what()'/mul(356,713)~@;!~ ->mul(309,932)where()mul(93,190)where()select()){how()}why()mul(202,888))!,{{:what(),~mul(591,813)select()<&{[&mul(652,199) \ No newline at end of file diff --git a/2024/inputs/day4.txt b/2024/inputs/day4.txt new file mode 100644 index 0000000..c41c5ea --- /dev/null +++ b/2024/inputs/day4.txt @@ -0,0 +1,10 @@ +MMMSXXMASM +MSAMXMSMSA +AMXSXMAAMM +MSAMASMSMX +XMASAMXAMM +XXAMMXXAMA +SMSMSASXSS +SAXAMASAAA +MAMMMXMMMM +MXMXAXMASX \ No newline at end of file diff --git a/2024/inputs/day6.txt b/2024/inputs/day6.txt new file mode 100644 index 0000000..b60e466 --- /dev/null +++ b/2024/inputs/day6.txt @@ -0,0 +1,10 @@ +....#..... +.........# +.......... +..#....... +.......#.. +.......... +.#..^..... +........#. +#......... +......#... \ No newline at end of file diff --git a/2024/inputs/day7.txt b/2024/inputs/day7.txt new file mode 100644 index 0000000..ac951b4 --- /dev/null +++ b/2024/inputs/day7.txt @@ -0,0 +1,850 @@ +426048: 425 608 69 88 1 282 +1234: 8 53 21 2 611 1 538 +3493064: 42 823 101 932 966 +7851123: 81 52 937 7 9 +109137611815: 9 4 9 1 9 5 13 97 18 1 4 +143516213: 2 906 6 5 12 22 578 3 3 +629453: 7 492 3 28 6 6 9 104 +5423661: 5 2 8 8 91 4 6 7 3 40 8 6 +18682395: 93 37 3 1 431 765 2 +556488358421: 794 98 33 6 917 7 +14604120: 89 13 65 703 17 +51347: 24 9 908 8 9 3 6 36 41 6 +1200264: 1 324 69 614 9 34 52 +84467: 99 1 694 50 64 +832680: 3 58 68 45 3 +13238: 4 3 58 9 652 +1505251: 3 24 97 1 29 669 5 +28869324: 99 749 1 46 74 +125890: 6 894 7 6 87 9 2 +265251: 8 9 8 87 251 +928664914: 4 7 6 8 664 8 2 9 1 +103228624: 7 2 73 7 94 91 95 26 +5765376: 442 85 4 41 8 742 8 4 8 +101551004: 2 78 991 38 75 8 4 +11531: 4 42 589 122 1 +230639: 88 6 3 722 3 9 1 +533796498: 66 80 3 2 101 4 5 2 501 +8494148: 32 35 79 2 8 3 30 2 8 +222246692: 23 41 13 94 970 689 +9841934: 2 998 419 815 5 809 +2186556: 51 9 9 660 4 2 9 8 69 7 3 +11207789126: 1 9 425 1 68 5 9 2 293 9 +33355203: 7 199 5 84 119 57 +60424: 989 61 79 8 8 +651253: 3 4 904 8 2 8 72 87 493 +2099106644: 277 842 9 624 22 +29145931: 3 6 15 3 7 9 70 6 1 1 6 5 +63140: 8 79 61 77 82 +720845730: 9 3 43 1 53 45 650 81 +3030: 45 57 85 280 5 94 +64316066: 7 6 7 422 14 953 37 4 2 +31898201: 77 74 3 622 3 797 +99024982725: 48 77 1 3 47 8 1 30 846 +3086415: 5 139 1 6 1 8 2 24 2 3 6 9 +1604915280: 2 7 652 74 321 7 18 4 +1040: 316 22 7 3 4 +792201: 748 7 22 488 99 493 4 +1449102: 23 525 6 4 4 5 82 +6672: 8 1 563 7 9 593 863 1 4 +641235: 18 5 76 3 87 8 8 93 15 +836: 399 2 31 7 +2589888404878: 4 8 94 21 41 40 4 8 77 +79158297957: 221 570 58 29 795 6 +94656: 64 547 254 223 87 +158670130: 2 9 3 4 32 2 645 2 6 5 +1172900: 5 624 9 5 3 69 38 +18570144924: 6 3 570 144 926 +11809188: 63 26 801 77 7 9 90 +17569711116: 9 9 2 2 156 793 3 109 4 +72864: 8 2 3 1 5 3 99 8 4 72 +30090677155977: 38 89 11 5 217 41 9 79 +54186: 5 418 6 +536456640: 1 53 273 27 3 1 35 52 +1324: 568 47 2 45 5 2 40 +255466537: 98 49 133 4 82 56 +108593: 440 931 5 635 54 +274562: 18 4 88 12 3 +2310: 168 125 6 551 1 +158226796: 4 2 1 71 56 18 67 +227860: 632 36 2 68 5 +254276307: 211 927 13 62 57 90 +969151: 96 75 1 79 6 608 1 856 +1381920960: 329 7 7 6 4 3 5 51 5 4 3 8 +57750433: 466 22 1 43 6 1 131 +2039463: 8 532 4 2 2 4 3 59 245 1 +924: 4 2 42 57 2 23 +984: 9 5 1 3 4 +3490: 32 9 8 5 7 7 18 +764789: 47 91 3 83 341 2 942 4 +8761312983: 1 5 1 645 2 56 981 +49375245: 46 16 94 4 67 +1371731088: 258 80 58 98 119 1 6 +1691074: 3 653 36 8 2 4 61 153 +237984: 3 60 942 4 84 514 +8487: 3 836 6 3 7 +1302665: 8 327 850 4 8 848 637 +338504789434: 9 7 96 4 27 58 1 7 7 431 +4375: 5 320 13 87 62 +39114592: 24 74 32 3 53 53 8 58 9 +55211: 1 2 5 261 3 6 6 3 873 6 5 +3930310: 6 727 89 883 77 +105416741: 8 6 2 7 830 2 7 81 29 72 +1864306: 752 37 67 22 76 +10308245: 460 6 22 56 243 +8724688: 61 143 1 688 +802716549428: 81 991 6 5 494 30 +4542460: 5 11 52 818 924 +3187936924: 8 9 54 879 356 +63545: 1 459 7 429 71 +117919: 9 76 202 28 91 1 +3743973: 74 82 5 41 5 269 +861952: 57 558 68 7 2 +3334911: 668 16 39 8 255 +66798536: 27 9 931 6 92 65 3 3 +8653262: 4 82 5 326 2 +658062508: 5 97 94 2 5 6 9 3 55 6 7 +22128516: 111 222 898 +1200278: 40 5 6 269 1 8 +8492254: 465 206 452 28 74 6 +3976640: 97 49 2 8 340 +6598260668: 7 20 3 459 9 9 9 66 8 +349711968: 699 417 1 4 1 9 50 4 4 8 +4360998090: 46 474 98 40 5 9 586 2 +38968452095: 4 8 59 12 7 172 6 592 +7435934408: 521 8 34 8 32 2 2 2 7 79 +3601746: 772 4 711 1 61 7 +1037835487: 2 33 58 143 836 7 +5238563720270: 5 238 5 5 4 9 720 27 2 5 +73195290: 1 5 3 442 4 46 2 7 74 9 +39219: 7 612 3 676 2 9 5 58 3 3 +171333389699: 63 45 681 1 9 868 3 96 +5938: 5 554 315 59 8 +26921: 93 28 3 36 843 +462492: 370 38 563 73 443 +372492502: 9 1 521 5 407 +252499564: 6 1 676 72 5 91 736 44 +9089304: 8 405 786 1 28 +22290929687: 18 8 255 512 849 +496884960: 62 9 691 5 3 52 2 418 1 +52469758: 7 21 96 244 80 +1915494: 72 667 81 32 1 5 +9240: 10 4 9 8 48 21 +1229174: 39 965 1 6 16 2 676 73 +63520233: 629 6 20 20 2 31 +40053664: 520 36 298 72 207 +31513519: 5 63 13 52 1 +73259497328: 105 380 5 4 81 92 2 82 +380149: 5 2 9 59 84 52 +3532752: 75 6 40 8 7 9 1 4 7 7 48 +735865836: 2 63 65 3 220 42 58 +1036899: 1 972 63 89 6 +119723575: 885 89 2 8 95 775 +3394585738: 1 14 571 49 3 218 264 +43184: 9 47 91 47 18 728 +49179361: 3 2 358 1 27 7 8 5 1 35 1 +60589: 51 9 55 8 31 +3853: 376 9 454 6 9 +97218628: 727 238 7 1 5 3 562 67 +573: 3 18 8 47 306 +2673281: 37 17 850 5 31 +2519097323: 4 4 5 97 433 8 9 95 142 +6282472: 46 1 691 942 3 472 +1997842: 25 474 46 4 4 +21463827009: 6 23 2 74 68 7 1 540 5 6 +52876: 55 96 7 3 3 +5458: 97 56 11 8 8 +306: 4 93 5 1 3 +2246440404358: 35 2 97 944 68 53 358 +2156122429948: 627 6 8 625 3 796 3 1 9 +705471450: 257 448 47 1 450 +12086441200083: 60 4 322 5 3 8 5 5 20 86 +95185977895: 98 5 36 209 966 +66643: 1 3 7 1 6 43 +243331: 233 9 57 6 756 +12661228256: 590 33 4 6 7 5 4 774 8 4 +1100: 141 1 952 1 5 +10510801045: 69 2 2 9 86 5 9 1 76 28 3 +9888464534: 77 6 246 98 7 74 967 5 +361718875114: 2 97 4 725 12 1 5 186 6 +106512316: 40 7 2 8 449 818 536 +7588010: 64 694 772 1 291 +991: 23 4 7 1 +417: 6 45 7 75 65 +15920852: 55 93 8 8 3 3 5 8 5 7 8 9 +699: 4 8 55 43 589 +35097279829: 4 6 2 2 7 9 58 9 5 7 982 9 +108684: 5 6 2 62 283 1 6 4 9 2 1 6 +35276: 28 575 4 57 677 +8895075: 5 175 18 8 8 171 +40618: 7 219 38 7 558 54 46 +55909321: 4 4 4 6 3 2 41 705 8 3 +176390408: 496 6 61 6 8 3 64 5 2 5 +407788355: 40 778 7 603 3 747 +102608197: 81 5 348 5 7 26 1 4 237 +8020532: 9 9 9 1 969 8 4 5 8 884 +2581035: 66 5 388 83 7 +802185122: 561 993 4 360 +3277848705: 9 6 53 9 95 6 7 11 7 6 +134464957445: 1 493 1 9 495 74 44 +229748861160: 67 46 3 205 234 518 +2940111322: 37 12 917 589 22 +18670960793: 9 6 5 3 9 8 261 3 1 46 4 +1142150721: 5 16 55 5 212 5 5 2 18 3 +22196443505: 815 786 45 77 4 1 +573211: 2 377 7 24 18 9 +4843: 3 6 9 44 4 82 8 +302249666485: 3 194 57 134 54 717 +662063: 5 3 2 1 624 +132572: 6 8 36 82 57 2 +3864582: 2 3 24 7 582 +1690: 102 691 4 128 765 +1209: 19 8 7 7 96 +126089845: 7 5 8 5 98 736 3 7 9 1 7 6 +46487320: 7 1 664 7 249 71 +39486: 46 405 1 87 160 +2736552: 3 28 8 83 7 28 537 +2172301065: 63 91 618 3 55 +523522: 93 1 67 362 522 +986428764: 985 978 446 4 722 43 +12315880: 9 29 96 8 470 +3984391: 39 843 92 +5689708: 5 4 5 7 7 576 6 157 6 19 +64505661: 64 1 505 397 262 +227515138: 227 5 1 513 5 +215361445: 3 83 63 820 93 86 2 46 +34003007060: 651 993 2 526 60 +16267: 920 7 1 2 834 6 58 69 +267374268991: 6 89 73 9 8 826 8 71 59 +112166154: 10 2 93 5 66 155 +135: 9 1 5 42 43 +11248: 70 1 423 8 +2911500: 7 1 379 10 647 +65618: 984 65 686 971 1 +1423917: 23 24 26 9 18 1 3 99 +1436633024645: 2 84 134 9 2 9 9 8 79 8 2 +280912: 935 3 3 62 52 +102593598: 442 2 326 89 3 4 1 7 75 +38611: 3 9 503 9 6 7 +36060: 5 8 1 16 4 601 +28487: 73 691 6 37 +721930973: 72 18 830 479 70 +36324778803: 800 100 3 2 26 454 +70492231245: 571 990 211 5 591 +801607886: 2 79 33 888 80 7 886 +15442400: 28 69 999 3 72 157 8 +354682: 8 40 1 3 5 5 4 8 3 18 9 1 +11718044: 9 180 31 20 43 +2292878: 7 56 82 229 425 +8686510: 37 390 2 64 1 9 291 4 3 +47239: 2 77 52 4 9 9 +23755253: 2 3 1 14 707 19 10 22 1 +20814560: 68 8 44 536 1 3 2 4 2 2 +431195040: 3 579 696 74 1 +29632103424: 32 66 6 7 6 62 898 +3417: 8 81 2 28 869 +10513496180: 211 3 56 7 2 6 7 135 47 +4575903869: 45 6 2 3 9 1 903 8 6 9 +481562: 2 15 946 50 5 9 3 +23919714428: 27 8 335 3 2 6 39 4 2 6 +7227024325: 393 870 603 211 22 +113705615: 16 7 76 94 561 4 +36627744: 31 879 122 467 76 +9682305217682: 3 1 3 8 5 9 739 1 1 835 1 +1883: 19 215 8 1 14 +310865765704: 4 5 93 47 8 3 6 8 5 703 4 +65640: 2 3 9 5 671 1 89 9 3 9 3 +34615688: 8 581 1 9 1 6 5 699 4 90 +2874960: 136 2 372 936 55 +125692: 11 4 89 28 2 +21607840833966: 9 9 950 1 75 96 871 39 +23335608: 45 75 54 7 51 +6234: 20 18 819 73 6 654 +250181: 92 8 4 338 50 7 4 +38566354: 9 7 120 611 37 +62704469: 2 8 9 71 5 66 44 5 6 10 +385850: 5 8 8 7 2 8 63 6 3 678 3 2 +115032285: 8 150 96 7 913 15 21 +24871: 8 3 270 600 1 +77113465: 7 555 723 1 6 7 465 +6231: 5 8 5 956 5 +388: 4 291 1 18 4 72 +63870451184: 1 1 3 2 911 508 8 293 +961: 5 9 1 8 4 9 87 5 10 5 26 1 +651002: 2 861 685 2 84 5 2 +2999: 9 328 41 3 3 +697540864632: 38 79 4 2 726 8 4 316 2 +13399549: 3 1 11 73 8 59 +3562090: 866 1 6 83 674 +7828907: 74 2 706 87 2 10 +2386854: 1 2 6 68 78 5 2 4 3 5 5 4 +81760686: 706 5 7 1 6 6 2 7 2 19 87 +214797: 8 9 3 421 8 1 3 4 1 9 42 9 +54427336: 30 712 8 173 53 79 73 +1053341344949: 65 569 3 712 238 4 +1448736525566: 160 97 9 6 4 6 8 57 563 +2123419597390: 606 83 8 9 9 6 6 9 7 393 +123978240: 336 8 4 9 4 6 8 7 7 2 8 60 +35148535: 2 7 4 48 565 8 4 2 8 9 5 2 +204124802990: 9 630 13 340 36 7 583 +539960: 44 66 196 25 960 +37179596269: 5 9 63 806 153 6 267 +46944: 256 517 694 4 8 +164447918604: 3 3 5 68 2 239 59 3 20 1 +606512067: 202 5 85 25 2 1 7 4 6 +582: 6 82 4 78 1 8 +358489335615: 4 8 36 290 49 3 356 12 +37968920318: 619 787 27 6 9 203 1 8 +45917891663: 6 97 6 743 4 91 665 +56974260612: 681 192 73 598 894 +1433362936: 23 81 301 2 938 +13387282062: 71 5 209 7 382 7 +1440477: 3 9 37 3 66 4 2 667 58 9 +54297: 87 359 12 77 5 2 7 +45930136: 75 180 3 3 8 378 104 8 +15415060: 60 9 86 5 795 94 115 +152568: 9 1 61 5 68 +27460988: 2 74 60 488 501 +1057969: 284 4 4 93 +2426020: 856 7 13 202 2 +49096: 6 5 24 2 68 +9219: 345 9 3 85 8 23 15 5 +502450092967: 1 142 17 6 6 1 85 589 +252469069: 478 8 7 1 57 8 66 59 +24272: 1 8 8 7 4 752 9 6 1 +156972819: 21 9 858 968 3 +4435814457: 77 9 8 8 6 1 14 460 +7029: 57 3 5 6 971 +7053569543: 70 52 914 2 653 531 9 +19649102: 9 7 9 5 22 545 4 839 94 +267089242: 3 5 3 83 8 2 342 7 29 5 7 +93765: 40 945 53 957 47 +815253659: 48 97 581 700 8 52 7 +14381: 70 1 91 2 1 +6727770: 8 5 1 2 7 47 96 2 4 2 9 38 +488959: 12 7 770 5 7 +444850: 57 3 7 68 6 350 +359101435530: 819 36 14 3 143 553 2 +255298640: 5 7 2 336 9 6 25 6 226 8 +627971804: 91 69 71 723 81 +376876294: 603 625 5 15 779 +4870224: 8 32 3 2 68 8 93 +2921378615: 7 3 1 1 7 7 272 2 3 953 5 +25762: 22 3 475 1 288 +9334: 8 9 6 1 5 125 42 364 +61711944: 453 61 26 6 4 8 3 +31159097: 62 1 5 953 605 32 97 +1486721291: 178 87 68 96 9 +164195070864: 93 879 40 795 8 4 22 +209: 2 83 46 +448419: 16 657 642 341 4 +2213729487: 7 9 9 7 1 33 6 6 7 457 3 4 +826: 83 91 642 8 2 +69845916113: 4 6 87 39 6 1 6 62 78 77 +420247390: 7 8 70 5 9 6 6 33 1 9 6 53 +468391418: 1 5 4 363 885 7 3 9 6 3 8 +730151: 729 320 7 816 9 +6121517413: 707 9 6 6 4 4 6 43 6 9 3 4 +1331520: 8 304 44 288 95 +2651662: 24 755 9 34 1 +55557168: 45 8 7 13 6 49 716 8 +925030462: 453 992 2 8 8 64 4 2 3 +22929993: 6 1 9 403 8 6 7 9 677 9 8 +136079: 10 7 80 8 1 +4018560: 24 2 115 4 182 +155443251648: 1 89 7 9 6 2 2 819 48 +47311914088: 1 739 4 9 498 7 71 7 4 +12959675904: 7 558 529 98 1 84 64 +117075505: 4 651 2 693 2 63 6 89 7 +8663990338: 3 5 36 5 2 989 3 23 337 +38598654357: 8 78 6 7 3 2 5 1 9 1 343 +1066: 3 68 3 447 7 +9763884: 4 8 11 4 806 +2649: 710 3 76 94 1 3 +97022: 6 5 4 84 77 2 +4436743: 2 4 20 36 7 37 6 +10887: 8 1 931 930 26 +41289: 5 160 2 2 4 +64001920: 561 4 3 61 38 +4877046: 961 40 84 3 58 +94551: 942 3 5 3 1 +2348968: 234 86 3 6 8 +4829697944: 5 51 4 9 7 8 687 122 8 +1275687: 531 4 6 262 9 9 +866: 5 3 7 3 8 +62826: 1 6 1 1 6 2 634 84 491 7 +234421278: 586 4 2 12 81 +987: 5 81 3 31 864 +1512712546: 9 8 7 63 7 125 47 +81507: 1 4 800 69 38 +6885843415: 743 5 546 570 926 +28383880: 20 47 9 76 1 89 469 +8399: 73 86 242 8 877 994 +6734289681: 841 681 9 889 +2487534047373: 259 5 3 948 9 974 101 +11402873: 17 96 609 414 17 553 +18904325600: 55 21 735 4 325 600 +1335462451: 16 5 9 9 14 8 3 3 70 955 +70253: 2 115 30 9 2 38 +17112: 9 5 4 7 9 66 1 6 5 1 9 2 +240212907: 4 9 83 31 381 71 8 21 4 +1137902: 24 89 78 71 31 +17115001: 8 9 5 100 978 2 +8596391: 85 8 7 3 87 9 24 3 5 5 22 +536020: 80 67 17 +1999835: 8 241 881 8 790 +91503776: 1 6 419 4 5 7 7 2 6 8 91 7 +141043433: 470 5 59 6 4 796 1 2 3 +662831: 69 96 6 5 31 9 +2527482: 5 670 26 6 8 4 3 6 6 258 +663617436: 3 8 420 90 66 91 7 +5117396: 9 43 45 5 32 34 74 +286833458: 299 976 59 956 +1810904: 402 12 2 15 73 351 3 +14755500281: 339 44 1 161 3 3 2 1 3 2 +891738: 8 2 2 43 1 6 4 93 2 963 +1431924: 1 32 3 124 9 92 4 +18526: 572 3 33 7 71 27 4 +204101449: 650 314 9 5 50 +19637: 54 6 5 57 55 +46435032: 4 5 706 87 84 +3901884025: 21 5 80 167 377 335 +1357110633: 798 3 2 85 633 +368814453: 93 509 63 8 612 +16783688: 4 9 9 417 4 972 5 31 9 +12778007: 75 949 14 552 167 +3103890: 775 4 3 89 3 +746384: 52 14 91 74 5 8 305 9 8 +1324077: 1 132 24 2 1 6 674 967 +6907431: 203 9 3 7 2 6 3 6 30 4 3 3 +291241150: 142 5 2 5 909 5 500 86 +10416: 35 4 9 217 +222786114772: 428 3 36 98 836 1 52 +30956235: 5 263 130 3 193 37 +1807890624: 973 24 27 1 688 +70133160056: 822 711 9 1 4 2 6 5 5 5 7 +882460946: 1 8 8 6 3 1 3 2 5 943 2 3 +2371851: 8 27 50 5 890 +40024680321: 1 8 5 7 65 5 4 38 941 3 7 +487213: 29 9 661 697 9 +740743860807: 77 75 6 2 46 134 812 +17850: 20 9 9 26 83 5 +83290948: 5 91 8 75 2 927 +586005: 584 894 66 816 228 +483120417: 3 3 72 4 50 99 4 17 +21612195: 117 9 6 9 6 1 3 379 5 6 9 +1146285425: 70 5 863 1 945 427 +311680: 8 8 5 4 81 3 621 3 4 1 6 5 +81: 2 5 2 4 1 +1692432: 6 80 5 764 8 146 +982802: 73 73 2 8 4 3 8 5 3 5 7 2 +25409164560: 1 6 9 1 188 7 2 5 7 9 12 5 +366260: 318 47 47 1 78 7 +168240337: 5 944 11 6 9 9 4 3 5 2 67 +156807: 47 4 8 456 80 7 +14995745: 6 714 25 35 870 +24780095: 8 15 5 5 4 7 67 4 3 7 11 +104125: 557 482 2 22 2 +1844501: 41 2 9 357 7 202 32 5 +6275963892: 1 482 98 9 9 699 1 12 1 +3890574408: 176 78 786 6 28 +47467: 293 9 3 6 1 +926285: 9 2 532 96 5 +2209: 7 1 8 94 20 9 +219763712: 294 7 62 184 8 8 +1754288721: 344 99 440 155 814 9 +531930: 49 85 694 65 6 900 85 +1005239880: 1 733 9 94 6 997 2 4 60 +462: 33 9 26 131 8 +6132669: 9 52 546 4 6 +14541: 30 6 1 8 8 +49132039: 57 7 6 4 6 8 98 5 2 5 2 42 +10597759252: 40 7 3 622 8 10 9 7 7 6 9 +750879481848: 55 65 6 1 6 5 8 7 3 31 9 5 +301540320: 46 510 83 819 8 795 +25711201: 3 7 337 9 296 2 2 60 5 7 +3131219615335: 6 1 51 20 21 9 615 3 35 +190931: 6 6 9 7 836 2 1 7 6 1 552 +39873482: 1 61 950 90 687 +136495497599: 4 878 7 7 4 48 5 3 7 99 2 +62: 5 9 3 +4072901: 4 52 40 14 1 2 9 1 4 1 8 8 +3639889: 665 7 2 540 6 46 7 1 +44833: 8 910 6 472 1 8 3 672 +226176: 2 65 275 30 608 +100819083: 3 9 6 7 16 325 116 9 18 +2124636580913: 5 382 61 9 6 580 91 1 +18389: 71 5 6 4 6 2 +74957687: 7 2 7 8 5 9 5 59 9 636 6 +1935561104: 70 129 276 8 5 58 561 +285412: 39 26 7 961 98 2 +910425: 7 9 111 4 4 5 427 +1868263488: 7 973 1 56 654 52 +356: 9 9 7 64 4 +121563: 2 3 84 6 25 566 +11793880: 9 1 1 61 292 577 +6433920: 50 265 4 8 4 +757114712: 677 795 6 739 29 86 4 +92196314: 91 427 769 314 +3622: 9 5 32 3 9 8 9 20 65 +748249: 41 5 3 5 3 9 1 101 4 810 +57521100: 67 570 940 490 3 +694140: 42 712 4 1 92 +2584: 1 9 2 2 6 8 7 8 12 7 460 4 +1299844: 72 4 567 8 8 47 +4438062035: 7 710 541 133 8 1 996 +17848382: 733 639 949 13 44 +1285415254454: 377 73 415 786 82 3 2 +42573460: 1 8 2 3 317 730 79 381 +6487474065: 4 6 6 6 4 42 4 48 4 5 7 89 +11248830: 1 570 7 7 4 3 5 7 11 6 9 6 +1236900001: 24 10 720 625 57 +774935037: 293 473 63 40 66 +121832: 7 5 3 2 6 88 1 1 552 7 3 3 +1016743: 76 37 6 658 58 +2533368513: 61 4 55 636 596 21 +6990058: 4 1 835 30 204 +1847406607: 20 526 740 9 8 +779328000: 6 373 4 2 3 8 80 9 12 5 8 +96371: 3 5 88 208 156 7 +5419039: 3 8 517 90 41 +249830: 99 374 8 177 3 7 9 8 90 +100166088: 8 9 99 5 45 733 9 264 +3376144: 7 157 927 442 7 584 6 +43593660: 11 9 537 99 41 +411324689: 7 21 208 389 4 41 29 6 +234004: 61 323 7 87 89 62 +23183285: 23 18 26 6 88 +97916165533: 269 91 4 165 535 +1112448: 9 61 841 2 5 4 3 8 9 6 89 +8963: 896 5 1 +73558189852: 5 6 9 4 6 97 6 658 2 98 7 +13680414: 49 47 66 90 594 +24172014797: 48 336 8 5 1 479 7 +9967992824: 9 41 946 706 93 28 2 4 +76153297584: 47 81 66 2 975 84 +541346194846: 45 1 6 73 5 2 97 4 2 2 5 2 +2476666710: 2 630 15 208 17 630 +60279278: 6 982 17 61 6 3 845 +55027351: 4 528 9 2 88 135 +929699919: 3 89 480 9 8 2 99 5 4 21 +257203: 304 846 14 3 2 +19954464: 4 2 199 29 8 7 2 8 6 8 12 +349703121: 87 425 69 5 1 43 8 8 9 +9607739480: 120 8 1 4 3 7 3 6 3 4 74 3 +70229: 6 57 4 3 227 +19346675608: 4 3 7 4 3 7 466 3 5 5 609 +59456: 9 39 3 3 875 64 +4049373107: 490 831 2 825 85 1 7 +38708598: 9 8 89 40 412 1 7 18 2 5 +217787072132: 186 39 5 2 3 6 9 5 355 6 +1252444294: 382 309 78 42 9 +7796721302: 7 796 71 6 5 300 +232741316: 8 29 741 314 1 +26910444: 298 907 9 879 9 15 +40916974: 2 8 5 2 9 8 6 1 5 16 971 +34830687: 15 387 6 668 19 +49022893747: 778 140 1 17 7 4 9 +240774: 4 815 4 1 5 +2030: 4 95 11 46 895 +141432: 8 9 395 3 5 8 7 8 3 49 7 1 +466823: 1 32 544 26 71 +5847912: 202 47 694 82 7 +242621: 232 7 801 56 67 +330876: 8 4 2 2 2 2 7 150 5 18 7 +93687: 25 197 3 19 55 +71444393: 1 6 5 9 7 8 5 789 8 423 9 +6751035: 1 21 553 845 258 5 1 +191462315465: 957 31 2 3 15 464 +15511497: 55 8 2 94 73 289 +494852056149: 918 7 65 77 610 4 9 +116901382: 42 97 79 9 847 3 608 6 +287727946: 1 643 7 8 1 2 799 5 1 7 +26218340: 244 68 525 56 8 8 5 5 4 +76566: 9 77 13 60 6 +1830: 292 29 891 531 87 +403126: 356 9 148 58 706 +26406: 799 7 32 525 2 79 8 +61533769122: 1 551 8 75 6 983 189 +5083523328: 909 3 8 7 1 3 976 4 1 68 +35952796: 7 5 952 35 39 5 51 +167412767: 5 1 4 1 9 8 94 38 6 7 7 70 +2195302: 85 6 308 41 46 +1474198: 69 9 5 70 54 +364088987: 88 8 41 8 987 +78139858: 1 4 5 2 19 3 628 2 7 6 5 6 +4404409: 63 832 69 +78435: 7 47 2 61 5 16 7 21 5 +757520426: 77 2 98 98 26 +203318778: 4 281 991 7 5 62 31 8 +287102009: 8 88 930 764 73 6 8 7 +90227: 48 705 88 61 26 +8181666: 73 8 8 166 9 +4345042264: 16 1 3 8 23 5 183 8 62 +1748: 74 8 5 4 2 +253: 1 3 5 5 160 54 +7800887: 9 4 5 7 5 99 79 15 94 7 +5590: 14 42 8 5 81 +37762: 87 9 48 2 9 167 +333279: 2 2 58 80 363 524 1 57 +171214269218: 844 322 681 3 63 +118944: 5 8 7 873 93 +124807260: 419 9 9 3 40 8 270 300 +57067: 5 2 65 9 88 41 1 +67645321537: 92 3 2 715 36 71 4 4 9 6 +897: 1 7 827 62 +1191701596: 94 6 393 18 83 83 3 15 +1273: 3 4 7 1 +144149: 5 9 32 78 68 +1256472: 63 7 3 2 1 539 71 277 6 +30990621: 309 83 94 668 4 +38536499222: 2 510 18 1 9 95 88 780 +856374: 5 802 1 492 5 7 17 +130842660: 3 6 58 8 1 3 793 9 4 9 +69578132: 7 21 1 5 2 47 6 99 7 1 3 3 +5276748016: 8 7 53 1 208 226 93 +48947804: 5 910 9 3 8 1 330 773 2 +194740286300: 5 8 3 275 5 5 2 67 5 89 9 +22422998: 337 7 85 37 95 905 +6918244: 6 8 497 29 1 +45185615913: 97 710 90 9 1 9 1 810 3 +316116: 27 527 2 312 54 +11292: 929 9 4 5 201 64 9 384 +143302570: 4 16 808 8 117 82 888 +6574936: 810 8 94 844 91 +19500766: 927 48 20 7 67 +5496862: 4 4 2 5 86 8 399 28 3 3 7 +4081: 4 74 6 281 7 +107041551: 2 57 2 900 35 9 52 +365716: 8 34 43 277 3 719 +233199: 34 225 11 9 +75781172: 315 75 3 8 2 9 1 6 4 +6441: 3 601 327 1 3 6 45 +72: 7 5 6 +1847: 2 645 49 191 869 90 1 +689524: 27 4 504 47 44 +421965206413: 87 9 6 8 4 5 206 391 25 +965613600002: 4 846 6 280 7 140 690 +50559280: 8 1 6 4 2 4 567 26 534 4 +365496049: 9 4 32 4 8 7 6 686 7 4 2 5 +64994090: 2 9 4 1 21 74 3 73 79 7 +1241: 1 3 4 2 7 1 927 298 +7392027906: 8 350 66 4 2 7 909 +72665135998: 6 6 743 1 3 4 3 68 727 8 +42527813: 6 563 5 4 3 74 13 +2085967: 414 4 499 14 7 +10090710861: 386 49 70 80 95 41 21 +188483597: 7 582 4 8 218 54 1 877 +367380998: 2 2 2 6 96 3 900 5 998 +68095186: 23 615 83 8 58 665 27 +6509884572: 69 3 7 3 5 447 3 29 45 +24930077: 28 690 986 2 4 3 8 70 +886840: 24 5 86 770 45 5 883 +42180751: 55 6 7 350 535 356 90 +73846429: 761 303 97 4 36 +118157648: 762 70 33 91 1 9 221 +31303: 316 129 114 56 +2340: 1 2 1 90 13 +38925682: 993 392 77 2 5 +132208396: 881 37 1 90 5 8 7 3 +17362906539: 165 30 832 90 653 6 +513060: 806 636 6 352 86 +13556739: 451 47 42 13 3 +87166290: 5 85 372 295 72 4 +2085930558: 856 47 3 770 559 +1271377657: 9 33 460 8 7 7 8 914 6 3 +92480: 40 514 24 4 40 +203612568029: 9 8 9 3 4 593 8 4 4 80 3 1 +997367027585: 79 95 567 99 21 6 2 +14986059: 5 53 1 4 2 4 3 8 9 2 2 338 +16943: 7 4 20 353 +192411245217: 1 4 16 3 411 243 2 214 +3267945: 932 5 35 316 8 35 993 +7584118814: 7 671 470 45 7 3 34 +92005506: 773 3 57 87 6 1 761 8 +83148275295: 3 339 4 451 3 44 80 9 7 +2758387: 393 7 7 3 88 +158229124: 29 55 19 2 19 6 28 3 +19731329: 2 9 1 83 7 94 6 1 2 980 9 +372969: 6 731 54 84 9 +44398676936: 995 485 95 8 446 +29: 4 8 2 5 +28812: 917 31 113 6 27 +3221058: 4 4 121 4 4 5 83 41 620 +5012875154: 898 6 867 8 88 75 157 +619: 81 324 57 159 +2000875149: 877 559 36 5 57 387 8 +538511: 4 7 544 52 863 +37415205: 7 45 7 9 84 9 78 4 9 991 +87187684: 567 6 8 2 951 2 +723726: 7 146 73 188 2 12 9 62 +5611: 15 2 2 547 8 +161732: 8 19 1 4 8 39 32 +77322232001: 8 26 104 9 591 9 93 4 1 +7664: 9 8 5 45 7 2 +43978994: 462 45 951 +184200: 63 29 10 5 4 +24754844735: 574 385 653 66 2 +38841958460: 447 488 62 14 60 +512307698: 78 476 8 7 92 35 2 978 +978764208: 1 83 5 78 7 56 484 4 8 4 +51510: 9 1 77 9 7 32 38 7 583 +519848234: 89 192 64 9 659 7 8 4 3 +279759946564: 694 6 76 839 58 1 6 8 2 +27642337368: 30 7 9 658 999 7 368 +1714046887054: 9 4 3 88 3 699 1 7 3 976 +2096866: 762 7 4 2 9 7 4 7 1 2 27 2 +829347: 57 9 11 283 50 19 +5188: 9 98 18 397 4 +8546580: 3 931 494 63 95 +2569449: 4 318 202 3 8 +1008685401: 3 24 22 9 26 3 511 2 8 +38907: 341 1 41 3 61 4 64 +47134149: 59 5 6 423 9 55 2 6 37 +156: 4 5 48 80 8 +13690: 373 8 21 967 3 +152680: 5 4 62 3 9 75 1 7 6 2 5 4 +22638959: 203 8 12 282 4 90 +667766987: 6 184 969 39 93 7 5 3 2 +491050285: 9 3 9 9 9 7 6 28 270 6 8 3 +123681: 9 1 5 8 4 88 91 3 4 5 14 3 +2442314: 2 5 7 9 947 +66996296: 6 1 9 7 48 8 1 1 8 4 4 372 +527: 6 5 6 4 2 +18881838: 929 53 32 45 52 21 6 +41565: 44 3 73 665 8 52 2 +38558: 1 5 21 68 21 +6715471: 839 434 8 +6389: 91 7 6 9 5 7 178 974 5 4 +2117591196: 3 5 748 679 614 9 3 94 +28162196: 8 7 1 32 2 196 +35808181: 2 2 8 746 180 +9867444479: 73 352 40 6 9 1 2 48 1 4 +78674: 7 501 25 659 66 +45024: 4 4 3 3 18 18 57 276 7 +19756: 4 99 3 942 7 +799: 34 57 708 +157466: 8 2 6 8 7 678 40 9 6 69 +12013722: 53 771 14 3 7 +305851750: 8 736 8 8 5 6 3 34 8 7 5 1 +31627: 85 8 4 85 7 +120636732: 750 274 14 587 7 7 +239363098: 57 7 6 69 1 1 1 8 59 5 4 6 +23142: 7 7 4 3 8 579 6 6 8 8 50 +330: 3 42 4 9 8 5 +610059: 3 3 2 541 80 888 +15743730746: 31 237 561 6 84 +1289162: 5 6 57 370 11 28 8 5 2 +4912012: 49 120 12 +21034792439: 47 1 58 1 7 2 7 915 9 39 +10550: 2 3 9 970 45 8 514 1 5 +27651: 2 9 1 8 1 5 8 7 8 4 4 35 +53322: 8 87 4 8 2 66 63 96 759 +138446470: 26 6 47 682 4 71 +1648416: 9 278 7 657 3 +6538688411: 30 351 741 838 668 +1344480: 7 466 85 43 7 56 424 +244514648942: 468 4 7 2 5 2 1 2 37 945 +241060: 8 3 5 67 8 69 6 48 4 +40133289211: 659 7 87 9 7 2 9 17 4 1 +435126: 783 57 518 8 +17711006228220: 76 834 259 998 890 +5734080: 36 1 1 288 55 +8979895786: 9 2 93 110 38 8 5 21 +3330: 532 23 6 +10241840: 102 34 7 8 38 +13305407: 2 1 4 5 8 7 259 5 2 12 5 2 +1433165: 3 9 1 891 73 367 65 +177433659084: 44 3 58 41 477 10 4 2 +222432: 311 919 67 3 4 6 71 56 +85538: 1 4 7 2 910 +32399920: 9 4 9 9 9 343 93 8 3 8 70 +3157308169: 1 373 938 9 169 +48314570: 8 329 1 58 9 3 470 5 +2157760504767: 751 9 9 76 9 2 9 7 9 2 8 3 +113124347: 1 9 87 43 2 9 95 347 1 +234373743: 2 9 28 89 3 4 285 +65134472: 65 133 910 5 559 +5111: 5 42 2 513 9 53 +280608943: 45 909 7 7 7 5 5 9 4 587 +4944: 40 1 9 45 +177101: 80 4 186 35 2 +8123256299: 643 1 251 7 58 4 9 296 +2610013: 28 55 24 2 655 487 6 +3473695: 10 681 6 7 17 5 +102288: 44 8 693 6 8 980 4 2 +792006: 80 9 71 8 1 44 73 6 82 +8393424: 656 4 6 4 3 8 4 9 8 87 3 4 +3357448904: 9 2 514 71 901 +11955840: 5 778 1 3 2 8 3 2 4 4 16 +33523655: 1 1 3 1 1 294 8 68 4 5 8 3 +40658: 1 477 43 78 20 +419: 5 99 4 +10692: 9 8 4 4 27 +2316100872: 772 5 1 6 812 6 +8456347: 98 587 147 25 +45388: 6 755 4 4 18 59 +98449258: 90 859 57 260 7 +290537744: 880 4 3 514 8 11 +1920630535: 5 7 1 57 4 6 4 84 1 771 +41738341141: 8 3 103 9 3 4 6 5 962 +267888: 53 5 71 5 36 +457162268328: 14 3 754 7 71 9 6 318 +9818370: 378 26 9 30 10 3 90 +136158886: 8 1 7 95 325 2 1 5 3 8 7 +407: 6 42 69 8 78 +1012705468: 822 4 44 7 657 811 +4180406340096: 466 981 98 12 6 36 9 4 +10705064: 4 424 136 5 931 181 +2217819683: 7 51 62 9 9 423 96 3 5 4 +7508279323: 3 250 555 272 3 6 32 2 +2658216: 558 18 25 4 66 +59297: 60 97 2 747 351 +7495229447: 8 328 9 266 28 50 +2644059830523: 57 55 2 97 574 815 8 +54008124608: 94 751 10 958 57 +2207268: 50 592 72 49 50 7 9 +9395936945: 83 33 540 34 9 806 4 +65754981: 340 41 89 53 +5424: 267 8 2 69 +194627: 564 43 8 613 1 +75167376: 75 166 1 972 404 +237336645000: 628 915 45 700 590 +522553: 7 58 4 91 7 2 7 9 148 49 +4897: 29 13 6 95 +13670996090: 500 614 6 73 31 610 +16290039939: 74 7 6 1 7 882 87 2 438 +2804002896239: 85 2 41 17 5 52 774 5 +86506: 910 1 29 157 73 74 +21660911180: 722 2 15 911 180 +6815: 6 743 72 +114802992537: 6 17 215 5 39 1 5 186 2 +720907: 203 61 587 39 81 8 +15904808: 28 3 80 96 5 5 +200829237621: 999 710 37 3 744 27 +95188135587: 835 3 68 49 755 579 8 +61525: 81 49 4 75 3 4 5 8 28 +13221210319: 3 486 9 6 6 4 20 5 5 6 2 8 +3728996709124: 945 71 9 708 62 96 6 1 +39283710: 7 46 6 3 64 51 9 717 +24046652: 1 8 92 61 34 2 646 46 7 +178492223: 4 1 18 61 81 5 7 2 8 194 +1677144138: 6 123 83 227 39 +105579656: 2 3 4 7 2 96 8 6 63 6 366 +78276190303: 7 94 9 131 13 41 3 7 9 +110367683: 778 9 8 5 5 3 4 9 394 9 +7626312605: 4 502 5 552 1 72 598 5 +56319236258: 9 5 39 82 6 8 9 548 258 +5406139: 642 842 45 4 6 +45342: 7 29 96 267 8 1 2 50 +7525096: 1 820 330 35 97 +80899207: 11 236 80 9 7 +1022048029: 328 76 82 5 24 7 +853304431680: 313 630 752 6 603 +4608388638: 31 9 958 177 93 +68959734: 7 8 33 5 44 732 6 2 6 4 +4653: 845 319 4 +2523796352: 2 51 789 2 4 8 98 +185856: 885 21 6 +19948509: 72 83 24 3 910 396 +1680716: 236 37 35 71 3 \ No newline at end of file diff --git a/2024/inputs/day8.txt b/2024/inputs/day8.txt new file mode 100644 index 0000000..940e078 --- /dev/null +++ b/2024/inputs/day8.txt @@ -0,0 +1,50 @@ +...d............................J................. +......e.............................J............. +..........6............7.......................... +........................P7........................ +.................................................. +.........6........................................ +e..........................x.................E.... +...G...A.......d...........................o...... +.....A.e...........................J......8....... +................6....9.....J.............E.8...... +..........d.9.........7..K....E................... +...e.....U....9................x..K............... +......A......O...........P................o....... +......................x..................M..E..... +........................x........p................ +........A..................O...................... +.......r.f....O.......P9..G.........m............. +u...df..r...............7......................... +.....g.............nXu......N.........K........... +..............l..........0..............p......... +.......lu...................p......o.............. +....g..........l........0p..G.....F............... +.....................................8......F..... +...................................C.............. +....3................G0......................M.... +2...f....g..........3........P......O......F...... +g......3.....0....H......................F..M..... +.............c................m...h.....M......... +...........2....l................................. +..U...c......2...........................K........ +.D....................r.....f..................... +....................N............................. +.U..............h................................. +...a.............u..............C................. +c...Uj....a..6...H...................R............ +...3....j................H...............m........ +.......................5.......C..........4....m.. +......................H.........R......N....X..... +.........h..2.................R................N.. +.......................r...........q...n.......... +.....c..............5............................. +..a..h....D.................................n..... +......qk..................D............1.....X.... +.k..................................q............. +..k..........a.............L................1....4 +......k..........RQ..5.L.j..1..................4.. +.................................................. +..............L.....................oX............ +........Q.............L.........n................. +...........Q.D........5..........1............4... \ No newline at end of file diff --git a/2024/inputs/day9.txt b/2024/inputs/day9.txt new file mode 100644 index 0000000..5ff5aae --- /dev/null +++ b/2024/inputs/day9.txt @@ -0,0 +1 @@ +2333133121414131402 \ No newline at end of file diff --git a/2024/inputs/result_8.txt b/2024/inputs/result_8.txt new file mode 100644 index 0000000..7d1227b --- /dev/null +++ b/2024/inputs/result_8.txt @@ -0,0 +1,12 @@ +##....#....# +.#.#....0... +..#.#0....#. +..##...0.... +....0....#.. +.#...#A....# +...#..#..... +#....#.#.... +..#.....A... +....#....A.. +.#........#. +...#......## \ No newline at end of file diff --git a/2024/output.txt b/2024/output.txt new file mode 100644 index 0000000..a896e8c --- /dev/null +++ b/2024/output.txt @@ -0,0 +1,50 @@ +...d......###......#.##........#J.#.#.#....#.....# +..#..#e#..#........###.#.#...#....##J............# +#.....#.#.6##..###.#.#.7............##..#..##..... +#.#...#...#....##..##...P7#......#..##...##.#....# +###.#.....#####....##......#..##..#.#.#........### +..#...##.6##.#....#..........#..#..##.##..#..#...# +e.#.##..##...#..#..#..#....x...#..#.#...###..E..## +...G..#A#.#..##d#..........##..#.#.#..##.#.o.#...# +....#A.e##..#..#............#.##...J..#..#8.#....# +#..##.#####.#.#.6.#..9....#J.####..#.#..#E.8...... +.#........d.9.#.#..##.7..K....E..##....#....#...#. +.##e...##U###.9#..###...#...##.x..K......#...##... +...#..A##....O..##..##...P....#...#..#.#.#o#..#..# +....##.#...#.##.#.#..#x#....#.....#...##.M..E#.#.# +....####......##.#..##..x..##....p...##.##....#### +#.....#.A...#####.....#...#O##...##..##...##.....# +#.....#r#f....O.......P9#.G##.....##m.#.#.....#..# +u#..df#.r..#.##..###....7##.#.#......#..##.....##. +##..#g.#.##..#.#...nXu#...##N#..#.##.#K..##....### +..........#...l...##.....0....##..#.....p##..#...# +....##.lu.##..####.#....#.#.p.#.##.o#...#..#...#.# +#...g....#..#.#l#....#..0p#.G..##.F.####.....##... +.#..#....#.#.#..#....###.......#.##.#8..##..F.#..# +.#.##....##...#.#..#...###.###.#...C..#...##..##.. +#..#3..#.#..#####.#..G0...#...#.##.#...###..#M.#.. +2###f#...g...#..##..3.#......P......O...#.#F#.#### +g.##...3..#.#0...#H.#..###....#.....#....F.#M..##. +..##...#.#..#c#.###.##...#...#m.#.h..#.#M.#...#... +....#..#..#2.#..l#.#........##.....###....##.#.##. +.#U..#c.#.#..2#..#.###..........#.##.....K....###. +.D.....#.#.#.#.#..#..#r.#..#f....###.##...#.#.#... +..#.......#.##.#.###N.###...#..###.......####..##. +#U#.......##.##.h####..#.##..#..#.....#.#####.#... +###a...#.##..#..#u####..#.#####.C......##......... +c...Uj.#..a.#6.##H.#...#.#.#.....#.##R#.##........ +#..3....j#...#...#.#..##.H#..#.#..#.#..#.m...#..## +....##.#.#.##.#..###.##5####...C###..#.#..4#...m#. +##............#.#.##..H##...##.#R.#..#.N##..X....# +.........h#.2#.#.#......##...#R###....#........N.# +.#....#.#..###.#.#.##..r##..#.#..#.q..#n.....#.#.. +....#c.....###.....#5..#..###..##.##.##....##..#.. +..a..h....D#.##.#...##.####..#..#...##.###..n...#. +##....qk.##....##.#...###.D.##.#.#.##..1.....X.... +.k.....#....##......#.#...#..####.#.q#...###.....# +.#k..#..#.#.#a#..###.#.....L...##.##.#.....#1.##.4 +...#..k##.#.#...#RQ..5#L.j.#1...#.#.#.#......#.4.. +.##.#.#...#.#.#.##.####.#.#.......#.###..#...#.#.# +.....#.#...##.L#........#.#.#.....##oX#....##.#.## +.....##.Q.##.###.##...L.####.##.n#.....###.....#.. +.#..##.##.#Q#D..#.##..5....#.##..1##...##.#...4... \ No newline at end of file diff --git a/2025/aoc/__init__.py b/2025/aoc/__init__.py new file mode 100644 index 0000000..3fba7c6 --- /dev/null +++ b/2025/aoc/__init__.py @@ -0,0 +1,17 @@ +"""Advent of Code 2025 utilities.""" + +from .helpers import ( + read_input, + read_lines, + read_ints, + read_grid, + read_blocks, +) + +__all__ = [ + "read_input", + "read_lines", + "read_ints", + "read_grid", + "read_blocks", +] diff --git a/2025/aoc/helpers.py b/2025/aoc/helpers.py new file mode 100644 index 0000000..6341885 --- /dev/null +++ b/2025/aoc/helpers.py @@ -0,0 +1,52 @@ +"""Input parsing and common utilities for Advent of Code.""" + +from pathlib import Path +from typing import Callable, Any +import numpy as np + + +def get_input_path(day: int) -> Path: + """Get the path to input file for a given day.""" + return Path(__file__).parent.parent / "inputs" / f"day{day:02d}.txt" + + +def read_input(day: int) -> str: + """Read raw input for a given day.""" + return get_input_path(day).read_text().strip() + +def read_lines_and_split(day: int, split: str) -> list: + """Read input as lines, optionally parsing each line.""" + return [line for line in read_input(day).split(split)] + +def read_lines(day: int, parser: Callable[[str], Any] = str) -> list: + """Read input as lines, optionally parsing each line.""" + return [parser(line) for line in read_input(day).splitlines()] + + +def read_ints(day: int) -> list[int]: + """Read input as list of integers (one per line).""" + return read_lines(day, int) + + +def read_grid(day: int, dtype=str) -> np.ndarray: + """Read input as a 2D numpy grid of characters or digits.""" + lines = read_input(day).splitlines() + if dtype == int: + return np.array([[int(c) for c in line] for line in lines]) + return np.array([list(line) for line in lines]) + + +def read_blocks(day: int) -> list[str]: + """Read input split by blank lines (paragraphs).""" + return read_input(day).split("\n\n") + + +# Common grid directions +DIRS_4 = [(0, 1), (1, 0), (0, -1), (-1, 0)] # right, down, left, up +DIRS_8 = DIRS_4 + [(1, 1), (1, -1), (-1, 1), (-1, -1)] # + diagonals + +# Direction mappings +DIR_MAP = { + "R": (0, 1), "L": (0, -1), "U": (-1, 0), "D": (1, 0), + ">": (0, 1), "<": (0, -1), "^": (-1, 0), "v": (1, 0), +} diff --git a/2025/day01.py b/2025/day01.py new file mode 100644 index 0000000..b63a225 --- /dev/null +++ b/2025/day01.py @@ -0,0 +1,62 @@ +"""Day 1: Advent of Code 2025.""" + +from aoc import read_lines, read_input + +def get_pointer(dial, move, pointer): + dir = move[0] + n = int(move[1:]) + if dir == 'L': + pointer = (pointer - n) % len(dial) + elif dir == 'R': + pointer = (pointer + n) % len(dial) + return dial[pointer] + +def part1(data): + dial = range(100) + password = 0 + pointer = 50 + for line in data: + move = line.strip() + pointer = get_pointer(dial, move, pointer) + if pointer == 0: + password += 1 + + return password + +def get_new_index(dial, move, pointer): + dir = move[0] + n = int(move[1:]) + if dir == 'L': + pointer = (pointer - n) + elif dir == 'R': + pointer = (pointer + n) + return pointer + +def part2(data): + dial = range(100) + password = 0 + pointer = 50 + for line in data: + move = line.strip() + if len(move[1:]) > 2: + n = int(move[1:][:-2]) + move = move[0] + move[-2:] + password += n + + idx = get_new_index(dial, move, pointer) + if pointer != 0 and (idx < 0 or idx > len(dial)): + password += 1 + pointer = idx % len(dial) + if pointer == 0: + password += 1 + + + return password + + + +if __name__ == "__main__": + data = read_lines(1) # or read_input(1), read_ints(1), read_grid(1) + + print(f"Part 1: {part1(data)}") + print(f"Part 2: {part2(data)}") diff --git a/2025/day02.py b/2025/day02.py new file mode 100644 index 0000000..3ff552d --- /dev/null +++ b/2025/day02.py @@ -0,0 +1,52 @@ +from aoc import read_lines, read_input +from aoc.helpers import read_lines_and_split + +def part1(data): + ids = [] + for line in data: + n = line.strip().split("-") + r = range(int(n[0]), int(n[1]) + 1) + for rr in r: + ss = str(rr) + if (len(ss) % 2) == 0: + f = ss[:len(ss)//2] + s = ss[len(ss)//2:] + if f == s: + ids.append(rr) + + return sum(ids) + +def find_pattern(s): + if len(s) < 2: + return False + n = int(s) + if all_same(n): + print(f"Found pattern: {n}") + return True + for i in range(2, len(s) // 2 + 1): + pattern = s[:i] + repeated = pattern * (len(s) // i) + if str(repeated) == s: + print(f"Found pattern: {pattern} in {s}") + return True + return False + +def all_same(n): + return len(set(str(n))) == 1 + +def part2(data): + ids = [] + for line in data: + n = line.strip().split("-") + r = range(int(n[0]), int(n[1]) + 1) + for rr in r: + ss = str(rr) + if find_pattern(ss): + ids.append(rr) + + return sum(ids) + +if __name__ == "__main__": + data = read_lines_and_split(2, ",") # or read_input(2), read_ints(2), read_grid(2) + print(f"Part 1: {part1(data)}") + print(f"Part 2: {part2(data)}") \ No newline at end of file diff --git a/2025/inputs/day01.txt b/2025/inputs/day01.txt new file mode 100644 index 0000000..f9b734c --- /dev/null +++ b/2025/inputs/day01.txt @@ -0,0 +1,4387 @@ +L23 +R14 +L50 +R27 +L33 +R36 +L11 +L32 +R46 +R36 +R2 +L32 +L42 +L11 +L10 +R31 +L36 +R33 +L11 +R38 +L22 +L1 +R33 +L4 +L12 +L29 +L14 +R4 +L13 +R50 +L30 +R20 +R11 +L37 +R49 +R10 +R7 +R20 +L36 +L15 +R24 +L48 +R36 +L49 +L21 +R18 +L13 +R27 +R26 +L43 +R30 +R29 +L94 +R30 +L55 +R90 +R54 +R60 +R86 +R81 +L53 +R23 +L2 +R78 +L27 +L61 +L74 +L96 +R98 +R33 +L88 +L12 +R45 +L45 +L19 +R46 +R38 +R96 +R39 +R41 +L41 +L48 +R60 +R88 +L8 +R90 +R79 +L61 +R21 +R17 +L37 +R99 +R67 +R23 +L73 +R83 +L59 +R42 +R84 +R33 +L84 +R206 +R61 +R133 +L13 +R36 +R61 +L92 +R84 +R961 +L53 +L91 +R28 +L78 +L59 +L97 +R97 +L42 +L47 +R7 +R12 +R24 +R93 +L2 +L48 +L34 +R72 +R38 +L56 +L19 +R283 +R525 +L28 +L597 +L18 +R151 +L4 +L37 +R727 +L89 +L96 +L15 +R83 +R10 +L15 +R122 +L80 +R36 +R71 +L12 +R85 +R41 +L20 +R805 +L26 +R22 +R45 +R25 +R94 +R47 +L333 +R72 +L72 +L78 +R2 +R76 +R76 +L762 +L15 +L99 +R436 +R17 +R24 +R669 +L246 +L70 +L45 +R58 +R57 +R55 +L34 +L62 +R41 +L13 +R58 +L68 +R23 +R31 +R69 +L69 +R797 +L9 +L71 +L21 +R4 +L86 +R385 +R70 +L94 +L47 +L398 +L6 +L61 +L694 +R434 +L34 +L882 +R82 +R64 +R2 +R43 +R91 +R32 +R68 +L291 +R91 +R786 +L327 +R75 +L858 +L41 +R27 +L44 +R89 +R388 +R68 +L63 +R65 +R923 +R47 +R63 +R27 +R27 +R48 +L41 +L59 +L82 +L32 +L8 +L90 +R21 +L9 +L47 +R5 +R42 +R55 +L55 +R827 +L89 +R20 +L80 +R922 +R11 +R42 +R660 +L49 +R36 +L21 +L67 +L28 +R316 +R88 +R14 +L809 +R715 +L375 +R367 +R77 +L77 +L71 +L6 +L823 +L22 +L17 +R87 +R62 +L60 +R50 +R80 +L74 +R94 +R55 +L43 +L12 +L97 +R61 +L25 +R861 +L306 +L94 +L96 +R796 +L5 +L67 +L10 +R36 +R46 +L559 +R52 +R42 +R723 +L58 +R60 +L45 +L14 +L1 +R57 +L54 +R97 +R147 +L18 +L29 +R67 +L667 +L88 +L23 +L89 +L29 +R4 +L75 +R4 +L96 +L8 +L78 +L22 +R406 +R3 +L184 +R75 +R81 +L37 +R52 +R4 +R84 +R306 +R66 +L56 +L53 +L47 +L387 +R87 +R34 +R466 +L606 +L70 +L24 +R72 +R67 +R91 +L49 +L81 +L2 +L29 +R131 +R25 +R134 +R91 +L750 +L90 +R490 +R37 +R63 +L89 +L11 +R353 +L53 +L7 +L723 +L98 +L65 +R70 +L77 +R1 +L58 +R57 +L416 +R15 +R39 +R62 +R68 +L21 +R53 +L80 +R18 +R632 +L70 +R36 +R32 +R532 +L68 +R68 +R151 +L96 +R345 +R18 +R78 +R759 +L84 +R529 +L65 +L735 +L69 +L73 +R80 +L55 +L85 +R2 +R30 +L89 +L180 +R338 +L40 +R15 +L74 +R51 +R649 +L129 +R29 +R21 +L44 +L436 +L86 +L155 +R929 +R32 +L47 +R71 +R95 +L80 +L52 +R86 +R97 +L21 +L10 +L12 +R54 +L93 +L625 +R32 +L86 +L38 +L32 +R455 +L94 +L61 +R404 +R96 +L68 +R846 +R46 +R76 +L121 +L37 +R40 +R18 +R193 +R23 +L95 +R4 +L48 +R402 +R89 +L68 +L823 +R9 +R7 +L7 +L9 +L1 +R72 +R55 +L3 +R748 +R127 +L75 +L70 +L30 +L56 +R73 +L17 +L49 +R59 +L610 +L437 +R37 +L361 +L297 +R98 +R71 +L13 +L98 +L59 +L29 +L97 +R64 +L73 +L5 +L89 +L12 +L80 +R80 +L630 +L48 +R14 +R99 +L119 +L316 +L18 +R18 +R94 +L94 +L77 +L23 +L661 +R911 +R50 +R12 +R12 +R776 +L175 +R1 +R74 +R27 +L52 +L90 +L55 +L30 +R10 +R4 +L7 +R625 +L32 +R37 +L82 +L59 +R84 +R55 +R29 +L13 +L51 +L150 +L58 +R38 +R81 +L11 +L78 +R1 +R14 +R63 +L51 +L6 +R57 +L12 +L65 +L57 +R9 +R621 +R98 +R6 +L27 +R52 +L56 +L18 +L94 +L16 +R559 +L67 +R67 +R1 +L12 +R30 +R424 +L315 +L39 +L89 +L35 +L33 +R49 +R44 +L25 +L76 +L24 +L30 +L70 +R82 +L421 +L22 +R89 +L28 +R88 +R62 +L68 +R18 +L69 +L76 +L76 +L279 +R76 +R24 +R77 +L77 +L933 +L67 +L59 +L398 +L55 +L488 +R52 +R30 +L17 +R35 +R42 +L442 +L29 +L71 +R68 +R841 +R11 +L815 +L5 +L18 +L49 +R58 +R74 +L506 +R31 +R10 +L36 +L89 +L53 +R56 +R325 +R76 +R90 +L90 +L25 +L71 +R17 +R89 +R879 +L14 +R46 +L7 +L611 +R18 +L53 +L78 +R40 +L63 +R954 +R905 +L542 +L95 +R32 +L41 +L90 +R96 +R35 +L10 +L9 +L81 +L15 +L785 +L35 +L66 +L99 +L81 +L970 +R82 +L64 +R278 +R55 +R131 +R75 +R71 +R1 +R22 +R1 +R99 +L11 +R23 +L754 +R97 +R83 +R31 +R868 +R63 +L62 +L37 +L24 +R81 +R15 +L73 +L59 +R59 +L52 +R4 +L87 +R39 +R50 +L11 +R57 +L318 +R887 +L54 +L62 +L85 +L60 +R34 +L20 +R596 +R82 +L673 +L51 +L76 +R476 +R48 +L63 +R39 +L349 +L151 +L762 +R76 +L80 +R866 +L67 +R67 +L784 +L10 +R89 +L91 +R846 +R450 +L94 +L984 +R766 +R92 +L96 +L84 +L88 +L12 +L91 +L44 +R70 +L6 +R27 +L56 +R55 +L40 +L15 +R92 +R36 +L828 +L89 +L611 +R26 +R42 +L68 +R41 +R50 +R9 +R813 +R16 +R8 +L137 +L26 +R26 +R85 +R24 +R16 +L88 +L637 +R87 +R581 +R17 +L70 +L15 +L92 +L808 +R80 +L60 +R86 +L35 +L98 +R64 +L1 +R64 +L4 +L96 +L51 +L82 +L67 +R92 +L45 +L5 +R58 +R547 +R61 +R58 +L458 +L708 +R1 +R78 +L84 +R87 +L82 +R32 +L81 +R82 +R67 +L51 +R21 +L47 +L23 +L76 +R14 +R58 +R83 +R167 +L27 +R81 +R61 +R39 +R59 +R69 +L20 +R69 +L819 +R89 +R53 +R886 +L24 +L50 +L279 +R85 +L36 +R50 +L632 +L1 +R1 +R57 +R46 +L75 +L867 +L17 +L7 +R63 +R908 +R92 +L274 +R90 +L77 +R61 +L68 +R75 +R580 +R370 +R28 +L85 +R55 +L55 +R68 +R47 +R85 +L61 +R61 +L64 +L44 +R28 +R71 +L44 +R937 +L74 +L57 +R2 +R879 +L80 +L54 +R50 +L41 +L78 +L31 +L39 +R70 +L70 +R39 +L270 +L13 +R16 +L33 +L27 +R27 +R32 +R68 +L32 +R1 +R15 +L17 +L333 +R66 +L573 +R169 +R4 +L62 +L95 +L16 +R17 +R95 +R18 +L57 +R47 +L819 +R72 +L13 +R76 +R37 +R90 +L90 +R2 +L33 +R31 +L24 +R43 +R45 +L22 +R22 +R26 +L74 +R64 +R55 +R757 +L948 +R37 +R563 +R49 +R79 +L24 +R73 +L54 +L94 +R27 +R50 +L59 +R54 +R67 +R31 +R57 +L5 +R67 +L62 +L13 +L87 +L854 +L46 +L40 +L24 +L31 +R22 +R80 +R38 +R58 +R85 +L922 +L18 +L74 +L74 +R64 +R72 +R64 +R349 +R563 +L4 +L8 +R24 +L783 +R50 +R9 +L772 +R278 +R85 +R125 +R2 +L83 +L51 +L584 +R321 +R85 +L19 +R81 +L96 +R30 +L61 +L71 +R30 +R796 +L936 +R47 +R58 +R22 +L87 +R68 +R2 +R30 +L92 +R2 +R522 +R468 +R17 +R49 +L55 +R46 +R99 +R65 +R72 +L2 +R9 +L82 +R12 +L74 +R751 +R74 +L2 +L920 +L95 +R30 +R6 +L40 +R13 +R427 +L48 +L40 +L6 +R43 +L49 +L56 +L14 +R70 +L96 +R71 +L53 +R91 +L736 +R502 +R89 +L68 +L61 +L589 +L50 +R8 +L42 +R9 +L40 +R274 +R94 +R898 +L47 +R232 +R93 +R321 +R76 +R24 +R945 +R807 +R6 +L769 +L15 +R43 +L51 +L66 +L66 +R26 +R83 +R513 +R561 +R36 +R59 +R21 +L86 +L47 +R31 +R68 +R48 +R87 +L46 +R77 +R21 +L86 +L89 +R61 +L90 +R85 +R392 +L57 +L282 +R23 +L43 +L97 +L88 +R88 +L45 +R74 +L32 +L85 +L930 +R8 +R56 +R2 +L57 +L45 +L49 +L70 +R709 +R61 +R99 +R801 +L77 +L23 +R730 +L630 +R9 +L9 +L38 +R36 +L71 +R55 +L282 +R60 +R40 +L76 +L92 +L2 +R11 +R51 +L89 +R22 +R18 +L543 +L40 +R498 +L158 +R13 +R70 +L683 +R80 +R87 +L43 +R258 +L6 +L76 +R462 +R67 +L29 +R60 +R840 +L99 +L74 +R6 +R67 +L875 +R84 +R71 +R48 +L31 +R3 +R98 +R35 +R67 +L46 +R447 +L1 +L90 +R28 +R47 +L29 +L869 +R282 +L58 +L67 +L49 +R82 +L267 +L940 +R17 +R48 +L79 +R78 +L48 +L89 +L45 +R29 +L45 +L57 +L92 +R26 +R83 +L596 +R74 +R10 +R580 +R36 +R70 +R94 +R89 +L53 +L31 +L71 +R28 +R87 +L413 +R11 +L11 +L35 +R21 +R14 +L217 +L15 +L68 +R96 +R20 +L16 +R81 +R64 +L45 +L454 +R354 +R504 +L404 +L90 +R90 +L347 +R8 +R39 +L51 +L419 +R92 +R78 +R30 +L34 +R623 +L34 +R15 +L23 +L77 +L22 +L96 +R52 +L2 +L32 +L54 +R99 +L45 +R60 +L901 +R252 +L11 +L3 +R3 +L50 +L50 +R322 +L20 +R98 +L71 +R95 +L157 +L67 +L21 +L96 +L14 +L40 +R8 +L88 +L85 +R36 +R60 +L60 +R2 +R41 +R176 +R81 +L74 +R138 +R384 +L91 +L970 +L87 +L610 +R72 +L472 +R10 +L774 +R33 +L959 +R73 +L79 +R2 +L3 +L93 +R77 +R90 +R133 +R96 +R4 +L51 +R727 +L24 +L4 +R52 +R12 +L503 +R33 +R95 +L76 +R39 +L335 +L990 +L57 +L85 +R823 +L93 +R56 +R89 +R69 +R223 +R33 +R67 +L514 +L5 +L81 +R2 +L1 +R52 +R65 +L18 +L86 +R286 +L63 +L41 +R57 +L67 +L581 +R187 +R53 +R55 +L427 +L816 +L90 +L17 +R967 +R16 +R90 +L49 +R926 +L58 +R92 +L44 +L66 +L556 +R32 +L89 +L21 +R10 +L42 +L894 +L926 +R62 +L72 +L28 +R78 +R622 +R71 +L73 +R41 +R856 +R46 +L46 +L95 +R67 +R33 +R26 +R65 +R9 +L790 +R840 +R50 +R23 +R993 +L16 +L61 +R91 +R92 +R78 +L42 +R42 +R917 +R22 +R25 +R236 +R688 +L82 +R179 +L52 +R286 +L441 +R722 +L32 +L80 +R4 +R186 +R622 +R38 +L438 +R81 +L17 +R36 +L9 +L284 +L44 +R26 +L85 +R96 +L781 +L9 +R590 +L543 +L97 +L60 +R45 +L45 +R21 +L21 +R17 +L17 +R14 +R86 +L32 +R11 +R821 +L64 +R149 +L91 +R6 +L15 +L85 +R72 +R79 +R49 +R61 +L40 +L21 +R93 +L42 +R11 +R62 +L224 +L5 +R28 +R83 +L106 +R57 +L257 +L58 +L42 +L28 +L11 +L61 +R964 +R636 +L41 +R22 +R6 +R72 +L56 +R97 +L52 +R252 +L59 +R59 +R40 +R60 +R93 +R607 +L89 +L16 +R68 +R59 +R74 +L514 +R18 +L32 +L94 +L74 +L167 +L33 +L18 +R72 +R111 +R335 +R71 +L71 +R586 +R314 +R44 +R635 +R21 +L16 +R42 +L93 +R73 +R2 +R49 +L57 +R82 +R95 +R47 +R34 +L372 +L33 +R88 +L41 +L40 +R37 +R1 +L193 +R6 +R872 +L68 +R70 +R61 +R3 +R51 +R87 +R13 +L829 +L71 +R3 +R44 +L7 +R764 +R78 +L82 +L37 +R9 +R66 +L60 +L28 +L40 +L446 +R36 +R135 +L92 +R61 +R23 +R94 +L41 +L99 +R19 +L61 +R91 +L875 +R65 +L20 +R72 +L49 +L23 +R92 +L242 +L75 +L75 +R25 +R75 +R75 +R31 +R83 +R935 +R9 +R67 +L828 +R95 +R11 +L78 +R96 +R15 +R7 +R341 +L21 +R62 +L1 +L646 +R66 +L19 +L85 +R85 +L32 +R18 +L86 +L33 +L767 +R58 +R42 +L18 +L79 +L57 +R62 +R94 +R41 +R457 +R4 +R67 +R293 +L30 +R66 +L6 +R61 +R67 +R95 +R83 +R18 +L18 +R31 +R9 +R619 +L92 +R733 +R57 +R50 +R8 +R12 +R73 +L86 +R86 +L67 +R17 +R50 +R6 +R23 +L29 +R71 +R89 +R59 +L3 +R84 +R39 +R49 +R59 +L111 +R64 +R74 +L74 +R481 +L55 +R74 +R85 +L16 +L369 +R23 +R16 +R82 +R68 +L1 +L88 +L90 +R19 +L66 +L63 +R13 +L17 +R51 +L47 +L29 +L49 +L22 +R25 +L25 +R82 +L82 +R14 +L497 +R94 +L91 +R60 +R439 +L995 +R876 +L54 +L46 +L14 +R98 +L92 +R167 +R49 +L8 +R38 +R93 +L31 +R520 +R46 +R93 +L81 +L75 +L52 +L94 +L3 +L298 +R44 +L53 +L72 +L898 +R95 +R821 +R49 +L999 +L67 +R95 +L810 +R77 +R5 +R11 +R49 +L29 +L31 +R37 +L80 +R14 +R86 +L89 +L23 +L64 +L20 +L28 +L50 +R74 +R26 +R5 +R69 +R72 +L21 +L51 +R99 +R379 +R22 +L616 +L26 +L19 +R63 +R14 +R15 +R69 +R35 +L24 +L11 +L66 +R31 +R73 +L38 +R25 +R27 +L52 +R526 +L84 +L42 +R34 +L34 +R2 +L980 +L704 +R82 +L20 +L780 +L16 +R16 +L84 +L71 +R89 +R19 +L147 +L65 +R59 +R13 +L13 +L61 +R16 +L755 +L98 +L24 +L78 +R14 +L18 +R53 +R851 +R12 +R928 +L751 +L53 +R879 +L102 +L53 +L56 +L47 +L50 +L507 +R46 +R54 +R84 +L884 +L98 +R6 +L60 +L48 +R40 +L58 +L97 +L85 +R85 +L85 +L40 +L70 +R78 +L914 +L54 +R19 +L212 +L49 +L44 +R456 +L83 +R13 +R8 +L66 +L779 +L333 +L43 +R271 +L33 +R12 +L294 +R78 +L680 +R942 +R99 +L82 +L67 +L33 +R97 +R62 +L59 +L74 +L97 +R140 +L90 +L459 +R20 +L40 +R280 +R39 +L116 +L734 +R23 +L21 +L4 +L567 +R52 +L52 +R36 +R57 +L50 +R468 +L40 +L19 +L32 +R80 +R7 +R232 +L685 +R27 +R77 +R34 +R8 +L52 +R97 +L87 +R42 +R20 +L95 +L61 +L30 +R68 +R42 +R80 +L87 +L318 +L61 +L18 +L45 +R25 +L71 +L5 +R47 +R75 +R89 +R74 +L29 +L701 +L19 +R20 +L16 +L17 +R19 +L86 +R44 +L77 +R130 +L78 +L40 +R66 +L45 +L18 +R42 +L24 +L5 +L27 +R631 +L99 +L8 +R72 +L99 +L99 +R34 +L49 +L21 +L30 +R48 +R524 +R28 +R309 +R62 +L71 +R850 +R50 +R376 +L17 +L49 +L10 +L1 +R6 +R77 +L82 +L30 +R183 +R44 +R3 +L403 +L97 +L29 +R29 +L17 +R6 +L61 +R74 +L2 +L388 +R639 +L85 +L66 +R104 +R74 +R22 +L64 +L83 +R332 +L176 +R66 +R30 +L685 +R80 +R47 +L55 +R80 +L358 +L9 +L74 +L772 +R45 +R5 +L77 +L74 +L58 +L30 +L70 +L347 +L66 +R168 +L55 +L59 +L41 +R58 +L58 +R54 +R46 +L13 +R99 +L42 +R602 +R8 +R646 +L15 +R15 +R64 +L79 +R57 +R151 +R7 +R40 +L40 +R829 +L51 +L32 +L59 +L51 +L355 +R19 +R38 +R77 +L15 +L6 +R313 +R93 +L44 +L56 +L55 +L45 +L59 +R13 +R46 +R19 +L89 +L71 +R770 +R23 +L513 +R61 +L4 +L489 +L7 +L74 +R9 +R65 +R905 +L12 +L588 +L5 +R7 +L7 +L12 +L295 +L86 +R93 +L12 +L88 +L14 +L809 +L15 +R88 +R17 +R88 +L40 +L15 +L478 +R78 +L86 +L14 +R52 +R73 +L69 +L630 +R89 +L801 +L814 +R969 +R69 +L83 +R82 +L53 +L49 +R329 +R41 +L81 +L20 +R96 +R16 +L16 +L482 +R21 +R14 +L53 +L885 +R96 +L670 +L53 +R417 +R95 +R23 +L28 +R5 +R72 +R52 +R76 +L389 +L911 +L78 +L322 +R16 +R93 +R594 +L36 +R433 +R76 +R5 +R377 +L80 +R95 +R29 +L78 +L124 +R69 +L22 +R553 +R15 +R85 +R70 +L70 +L779 +L21 +L46 +L536 +L918 +R67 +L33 +L681 +R60 +R57 +L70 +R9 +R91 +L72 +R96 +R11 +L906 +R71 +L51 +R95 +L44 +R473 +R927 +R47 +L27 +L20 +R18 +L18 +R371 +L838 +R41 +L74 +R78 +L73 +R95 +R20 +L14 +L30 +L76 +R36 +R669 +R326 +L52 +L36 +R15 +R26 +R916 +R49 +R43 +L646 +R954 +L85 +L15 +L763 +R58 +L97 +R65 +L53 +R88 +L98 +R89 +R711 +L16 +L474 +R90 +L56 +L82 +R38 +R321 +R79 +R439 +R75 +L12 +L2 +R17 +R83 +L90 +L10 +L44 +R108 +L51 +L9 +R96 +L88 +L46 +L66 +R15 +L75 +L940 +R483 +R96 +R49 +R72 +L28 +R27 +R82 +R19 +L135 +L83 +L82 +L63 +R187 +L79 +R57 +L902 +L81 +L19 +L74 +R74 +R678 +R22 +L4 +L656 +L40 +R6 +L6 +L24 +L76 +L76 +R76 +R73 +L73 +L938 +R38 +L53 +L46 +R99 +L471 +L29 +L47 +L53 +R90 +R10 +L66 +R459 +R54 +R31 +R420 +R7 +L4 +R699 +R703 +R97 +L30 +L7 +R537 +L112 +R12 +L516 +L753 +L6 +L61 +R206 +R47 +L73 +L44 +L50 +R414 +L20 +R71 +L447 +R542 +R28 +L38 +L41 +R91 +R11 +L59 +R49 +R73 +R25 +L58 +L81 +R790 +R55 +R80 +L666 +R618 +R46 +L35 +L24 +R86 +L460 +R38 +L38 +L69 +L66 +R35 +L576 +R759 +L89 +L40 +L28 +R21 +L20 +L44 +R17 +R97 +L54 +R57 +R97 +R249 +R73 +R81 +R83 +R17 +R81 +L81 +R12 +L632 +L59 +R51 +R85 +R40 +R387 +R816 +L48 +R548 +L93 +R88 +L75 +L78 +L42 +R88 +R12 +L532 +L68 +R99 +L38 +R6 +R76 +L43 +L23 +R284 +R77 +L38 +R94 +R6 +L265 +R24 +R36 +L33 +L1 +R199 +R68 +L28 +R55 +R45 +L10 +L94 +R9 +L609 +L13 +L43 +L140 +R57 +R43 +L29 +L171 +L34 +L19 +R78 +L42 +L9 +L74 +L37 +R117 +R46 +L26 +R262 +R61 +R77 +L35 +L65 +L92 +L8 +R88 +L77 +L11 +L65 +L35 +L39 +R39 +L4 +R33 +L83 +L39 +R19 +L32 +L655 +R748 +L196 +R9 +R82 +L131 +R49 +R12 +R88 +R15 +L2 +R41 +L54 +R48 +L18 +R34 +R525 +L89 +R93 +R50 +L43 +L30 +L47 +R677 +R91 +R9 +L5 +L895 +R29 +L29 +R81 +R31 +R88 +L11 +R60 +R51 +L17 +R82 +L65 +R34 +R26 +L9 +L51 +R20 +R37 +L22 +R965 +L14 +L29 +R2 +L3 +L156 +R15 +L15 +R85 +L99 +R36 +R22 +L5 +R14 +L682 +R729 +R12 +R3 +R85 +R125 +L31 +R73 +R78 +R53 +L50 +L48 +R3 +R23 +L51 +R13 +L388 +R33 +R73 +R94 +L95 +R99 +R73 +R862 +L5 +R240 +L70 +R496 +R84 +R66 +R21 +R29 +R39 +L39 +R693 +L35 +R42 +R46 +L47 +R83 +R492 +L91 +R52 +L86 +R87 +L936 +R97 +L49 +R52 +R53 +R55 +L56 +L3 +L49 +R23 +L23 +R64 +L29 +R88 +R20 +R5 +R352 +L69 +L31 +L94 +R78 +L97 +R13 +R91 +R5 +L84 +L851 +R50 +R37 +R621 +R31 +L62 +L92 +R54 +L488 +L570 +R58 +L52 +R27 +R88 +L62 +R52 +L53 +L31 +L55 +R27 +R59 +R927 +L127 +R93 +L36 +R43 +R438 +R62 +R95 +R72 +L63 +R44 +R69 +R672 +R11 +R12 +L31 +L93 +R12 +R91 +L50 +L50 +R209 +R49 +R981 +L30 +R59 +R58 +L3 +L514 +R4 +L804 +R39 +R61 +L72 +R95 +L19 +L57 +L447 +R35 +L35 +R26 +L51 +R64 +L39 +R106 +R44 +L139 +R59 +R88 +R56 +L14 +L32 +L49 +L69 +R50 +R66 +L28 +R43 +R18 +L899 +R379 +L79 +R19 +L19 +R984 +L84 +R508 +R92 +R93 +R85 +L95 +L55 +R33 +R39 +R73 +R37 +R5 +L59 +R586 +R469 +R89 +L79 +L68 +R95 +R22 +L470 +R45 +R86 +L2 +L56 +L73 +L17 +L83 +L30 +L70 +R56 +R344 +L67 +L11 +R95 +L54 +R796 +L59 +L14 +L86 +R14 +R486 +R22 +R34 +R48 +R735 +L39 +L91 +L9 +L24 +L28 +L96 +L918 +L34 +L60 +R33 +R27 +R40 +L40 +L34 +R391 +R26 +L99 +L95 +R11 +L64 +L21 +R10 +L25 +L113 +L87 +L75 +R946 +L95 +L76 +L32 +R6 +R61 +R6 +L91 +L50 +R971 +L71 +R8 +L27 +L60 +R79 +R75 +L675 +L59 +R58 +R62 +R68 +R71 +L758 +L342 +R637 +L37 +L69 +R397 +R32 +R40 +L77 +R48 +R62 +R34 +L67 +R569 +L406 +L34 +L58 +R29 +L39 +L355 +L91 +R27 +R99 +L56 +L58 +L47 +R63 +R57 +R93 +R37 +L61 +L69 +R92 +R8 +R26 +R55 +L33 +R10 +R642 +L13 +R11 +L398 +L86 +R86 +R98 +L62 +R164 +L49 +L358 +R7 +L8 +L392 +R222 +R39 +R39 +L94 +L96 +L11 +L46 +L89 +R71 +R51 +R14 +L79 +R94 +R17 +R68 +L29 +L13 +R17 +L27 +R67 +L75 +R48 +R1 +L12 +L4 +R38 +R201 +L38 +R96 +R30 +L98 +L594 +R92 +L81 +R790 +R90 +R879 +L9 +L58 +R95 +R494 +L85 +L15 +R14 +R86 +R53 +R47 +L17 +R13 +L72 +L24 +L30 +L469 +L1 +L71 +R54 +R17 +L435 +L725 +L40 +R69 +L69 +L84 +R72 +R96 +L60 +L12 +L12 +L37 +L14 +L69 +L388 +L92 +L457 +R551 +R906 +R13 +L69 +L95 +L362 +R13 +R339 +L23 +L316 +L38 +L362 +R46 +R165 +L33 +L78 +L73 +L88 +R932 +R72 +L3 +R92 +R29 +L85 +R25 +L1 +L81 +R81 +R10 +R90 +L69 +L30 +L301 +R48 +R49 +L228 +L59 +L30 +R20 +L47 +R41 +R6 +R45 +L345 +R23 +R75 +R2 +R679 +R21 +L59 +R8 +R19 +R33 +R96 +R3 +L10 +R10 +L5 +R20 +R64 +R41 +R9 +L29 +L49 +R49 +L58 +L6 +L36 +R14 +L245 +L69 +R46 +L46 +R16 +L16 +R58 +L17 +L838 +R97 +L7 +L88 +R95 +R76 +L76 +L5 +L35 +L60 +R765 +L84 +R182 +L82 +R28 +R76 +L3 +L9 +L73 +L94 +L84 +L42 +L78 +R98 +L831 +L69 +L17 +R878 +R77 +L38 +R476 +R49 +L29 +R4 +L13 +R73 +L91 +L269 +L663 +R91 +L30 +L89 +R58 +L71 +L596 +R211 +R76 +R13 +R93 +R913 +L158 +L7 +R59 +R54 +R30 +R7 +L22 +L210 +L5 +R36 +L90 +L412 +L55 +L69 +R36 +L75 +L67 +R483 +L72 +R31 +R56 +R44 +R88 +L78 +R28 +R62 +R395 +R66 +L983 +L22 +R44 +L46 +R73 +L63 +R55 +L19 +L15 +L99 +R64 +R56 +R94 +L5 +R5 +L32 +L968 +L786 +L14 +R38 +R762 +R98 +R84 +L38 +R79 +R74 +R2 +L84 +R35 +R278 +L41 +L781 +L99 +L84 +R67 +L90 +L86 +L914 +L361 +R61 +L77 +L72 +L99 +L52 +R186 +R45 +L10 +R486 +L307 +R79 +R821 +L23 +R23 +R660 +L60 +R77 +R623 +L71 +L53 +L65 +L11 +L11 +L89 +R84 +L383 +R718 +L94 +R41 +L46 +R11 +R84 +R85 +L88 +R88 +R35 +R65 +L14 +L86 +L34 +L303 +L63 +L27 +R78 +L46 +R63 +R24 +L99 +R96 +L89 +R10 +L83 +R15 +R23 +R35 +R51 +R65 +R451 +R26 +L549 +R70 +L766 +L48 +L58 +R58 +R284 +L984 +L83 +L22 +R81 +L476 +L14 +L86 +R27 +R473 +L242 +L850 +R23 +L49 +R45 +R9 +L336 +R88 +R71 +L259 +L96 +L42 +R71 +R67 +R28 +L428 +L526 +L74 +R11 +L111 +L52 +R55 +L78 +R275 +L39 +L61 +R94 +R46 +R110 +R375 +L25 +R88 +R12 +L89 +L35 +R70 +R54 +R33 +R53 +L93 +L93 +R35 +L35 +R36 +R64 +R31 +R78 +R72 +L81 +R14 +R28 +L382 +R931 +R77 +R970 +R6 +R29 +R18 +R9 +L21 +R21 +L5 +L59 +R164 +L15 +L23 +L10 +R20 +R28 +R22 +R973 +L13 +L82 +L91 +L68 +R3 +L840 +R719 +R19 +R58 +R26 +L59 +R97 +L88 +R77 +L287 +R34 +R24 +L34 +L42 +L87 +L1 +L57 +L93 +R65 +L75 +L4 +L596 +L2 +L16 +R18 +R52 +R78 +L30 +L47 +L453 +R10 +L510 +L56 +R77 +L15 +L89 +L17 +R818 +R36 +L40 +R66 +L36 +R456 +L63 +R63 +L21 +R87 +R75 +R59 +L38 +R609 +L437 +L41 +L95 +R963 +L756 +L5 +L142 +L58 +R18 +R82 +R510 +R33 +R45 +L88 +R92 +L692 +L62 +L438 +R25 +L25 +L12 +R12 +L31 +R25 +R806 +L676 +R76 +L4 +L696 +R575 +R72 +R11 +L58 +L82 +R7 +R75 +L2 +R2 +R95 +R5 +L70 +L5 +R44 +L58 +R489 +L57 +L941 +R98 +L138 +R138 +R122 +L40 +L82 +L37 +L33 +R76 +L6 +L36 +R836 +R62 +R938 +L62 +R62 +L58 +L142 +R263 +L63 +R25 +R75 +L18 +R18 +R1 +L1 +L4 +L33 +R37 +R730 +L324 +R356 +R38 +R532 +L29 +L62 +R59 +L657 +L16 +L79 +R51 +L99 +R23 +L423 +R4 +R75 +R54 +L78 +R45 +R762 +L62 +R363 +R237 +R12 +L12 +R25 +R51 +L29 +L16 +L39 +R84 +R29 +R88 +R7 +R802 +L53 +R77 +L74 +R34 +R14 +R78 +R86 +R74 +R6 +L44 +L663 +L7 +L51 +L73 +R78 +L71 +R280 +R34 +L40 +L87 +L36 +L643 +R31 +R25 +R147 +R176 +R12 +R88 +L9 +R96 +R313 +R87 +R13 +R41 +L41 +R26 +R59 +L37 +L837 +R89 +L77 +L73 +L59 +R209 +L437 +R19 +L682 +R12 +L97 +L15 +R67 +L67 +L586 +R86 +L76 +R73 +L197 +R286 +R414 +R264 +L578 +R69 +R45 +L37 +R56 +R975 +L31 +R337 +R61 +R39 +L46 +L50 +L504 +R62 +L96 +L10 +L88 +L316 +L52 +L80 +L59 +L8 +R69 +R78 +L24 +R24 +L56 +R56 +L44 +R99 +R50 +R67 +L222 +R27 +L195 +L69 +R887 +L66 +L706 +R72 +R355 +R17 +R27 +R1 +L37 +L763 +L44 +R94 +L547 +R497 +R83 +L19 +R36 +R335 +R80 +L72 +R3 +L632 +L39 +R86 +R63 +R37 +L61 +L7 +L93 +R76 +R70 +L68 +R23 +R24 +R121 +R54 +R94 +L94 +R959 +R41 +L388 +R25 +L19 +R863 +R159 +R40 +L80 +L821 +R10 +L89 +L474 +L87 +R82 +R75 +L53 +L43 +L19 +L89 +L95 +L97 +R946 +R49 +R5 +L75 +R374 +R1 +R30 +L30 +R15 +L15 +R11 +L811 +L84 +L74 +R41 +L83 +L20 +L80 +R668 +R63 +L28 +R97 +L73 +R73 +R43 +L56 +R51 +R57 +R12 +R6 +R51 +R36 +R63 +L37 +L94 +L32 +R22 +L22 +R46 +L63 +R78 +R79 +R60 +R96 +R633 +L342 +R20 +L48 +R5 +R752 +R84 +L10 +L90 +R87 +R357 +R67 +R47 +L358 +L17 +R9 +L92 +R19 +R59 +L40 +R462 +L88 +L97 +L41 +L972 +R198 +L89 +R73 +R16 +L36 +R36 +R796 +R29 +L425 +R1 +R599 +R23 +R92 +R85 +L68 +R68 +R560 +L34 +L39 +L89 +L29 +R89 +L58 +L31 +L34 +R46 +R63 +R56 +L5 +R77 +L11 +R26 +R73 +L58 +R90 +L995 +L636 +L585 +R39 +L15 +R31 +L53 +R22 +R65 +R246 +R76 +R60 +L41 +R94 +R397 +L97 +R36 +L86 +R35 +R11 +L30 +R52 +L46 +L72 +R80 +L5 +L620 +R53 +R692 +R16 +L82 +L66 +R39 +R955 +R70 +R5 +L5 +L49 +R1 +L12 +R269 +R7 +L948 +L527 +R78 +R49 +L434 +L66 +L58 +L61 +R38 +R81 +R817 +R42 +L15 +R40 +L153 +L157 +R24 +R33 +R18 +R14 +R35 +R66 +R41 +L5 +R20 +L756 +R268 +L91 +L214 +L29 +R792 +L12 +R80 +R29 +R48 +L59 +R547 +R77 +L28 +R831 +L97 +L6 +R10 +R90 +R69 +L69 +R26 +L26 +R78 +R241 +L19 +R65 +R57 +R96 +R90 +R9 +R227 +R36 +L73 +L7 +L76 +L6 +L78 +R60 +L399 +R599 +R631 +L31 +R75 +L125 +L25 +L25 +R26 +L961 +R36 +R99 +R287 +R43 +R70 +R63 +L663 +L59 +L975 +R18 +R16 +L78 +R78 +R14 +L472 +R458 +R86 +L74 +L77 +R265 +L77 +R82 +L5 +R79 +R21 +R31 +R17 +R38 +R579 +L90 +R25 +L346 +L94 +L60 +L72 +L787 +R24 +L596 +R871 +L34 +R730 +R764 +R80 +L732 +L548 +L59 +R17 +R42 +R3 +L87 +R584 +L71 +R71 +L29 +R29 +L71 +R20 +R51 +L1 +R43 +R38 +L396 +L53 +R13 +R907 +L28 +L23 +R17 +R95 +R50 +L50 +R88 +R95 +L33 +R62 +R34 +L58 +L40 +R470 +L930 +L3 +L97 +L20 +L28 +L45 +L87 +R34 +L210 +L244 +R86 +L430 +R44 +L9 +R70 +L61 +R615 +R68 +R21 +R296 +R85 +R78 +L63 +R25 +R61 +R11 +L97 +L79 +L70 +L51 +L34 +L35 +R89 +L20 +R83 +R83 +R34 +L27 +R90 +R52 +R74 +L30 +R611 +L470 +L474 +L26 +R81 +L5 +L76 +R57 +R43 +L51 +R51 +L315 +R91 +L11 +R35 +L12 +R57 +L59 +R210 +L296 +R970 +L87 +R73 +L56 +L37 +R27 +L90 +L24 +R724 +R94 +R903 +L81 +L9 +L83 +R76 +L289 +L44 +L35 +L84 +R48 +R304 +L853 +R68 +R85 +R67 +R62 +R59 +L45 +L24 +L99 +R80 +L50 +L333 +L17 +L20 +L880 +R23 +R53 +L91 +R46 +R150 +L93 +L40 +L126 +L982 +R60 +R87 +L87 +R73 +L73 +L42 +L58 +R23 +R77 +L35 +L276 +R14 +R70 +L73 +L80 +R68 +R205 +L47 +R112 +L58 +L20 +R93 +R67 +L436 +L707 +L28 +R80 +L146 +L66 +L57 +L52 +L84 +R10 +R546 +R76 +L276 +R14 +L49 +R7 +L68 +R96 +R51 +L29 +R78 +R83 +L40 +R17 +L29 +R30 +L2 +R91 +R78 +R22 +L429 +L61 +L64 +R295 +R886 +R81 +R8 +R57 +R77 +L50 +L50 +L143 +R43 +R75 +R92 +R33 +R691 +L498 +L93 +L77 +R77 +L26 +L10 +R1 +R435 +L39 +R39 +L55 +L842 +R75 +R15 +L45 +R3 +R696 +L847 +L96 +L6 +R2 +R85 +L926 +R26 +R15 +L641 +L59 +R97 +R71 +R71 +R69 +L8 +L141 +L559 +R64 +R409 +L96 +R85 +L62 +L644 +L99 +L57 +L567 +R67 +L38 +L95 +L77 +L22 +R32 +L50 +L71 +R895 +L89 +L85 +L28 +R28 +R3 +R73 +R7 +L83 +L50 +L450 +L14 +R35 +R64 +R46 +L656 +R4 +L37 +L41 +R447 +R69 +L17 +L50 +L43 +L86 +R787 +L77 +L31 +R758 +R161 +R863 +R31 +L96 +L17 +L6 +R6 +L50 +R35 +R28 +L9 +R39 +R63 +L99 +R97 +L77 +L927 +L10 +R26 +R84 +L83 +L794 +L38 +L85 +L86 +L14 +R319 +L77 +L9 +L89 +L944 +L49 +R62 +R389 +L16 +L80 +L93 +R87 +R454 +R81 +L78 +L257 +L23 +L77 +R9 +R79 +R28 +L16 +L79 +L53 +R32 +L55 +L488 +L57 +L25 +L30 +R12 +L22 +L35 +R90 +L90 +L145 +R27 +R594 +L76 +R85 +R15 +L85 +L48 +R33 +L94 +L39 +L67 +R52 +R48 +L31 +L41 +L28 +L32 +L722 +L48 +R802 +R77 +R43 +R614 +R70 +L78 +L87 +R61 +R78 +L78 +R52 +L41 +R940 +L635 +L16 +R787 +R24 +R66 +R811 +L428 +L54 +R94 +R37 +L95 +L62 +R86 +L66 +R407 +L2 +L4 +R42 +L243 +R790 +L90 +L9 +R9 +L58 +R77 +R67 +R52 +R62 +L85 +L86 +L78 +L914 +R36 +L80 +R53 +L946 +L26 +R26 +R59 +L90 +L47 +R35 +L29 +R72 +L599 +R99 +L52 +L48 +L726 +L32 +L386 +L79 +L77 +R61 +L49 +L68 +L64 +L56 +R38 +R58 +R79 +R92 +L49 +L42 +R23 +R91 +L814 +R24 +L25 +R19 +L65 +R44 +R67 +R36 +R846 +L146 +R81 +L97 +R16 +L18 +L82 +R10 +L10 +L55 +L18 +R22 +L380 +L627 +R58 +L923 +L77 +R94 +L94 +L7 +R97 +R98 +R12 +R70 +L90 +L80 +R42 +L37 +L5 +R450 +L57 +R562 +L55 +R66 +R73 +R22 +R84 +R55 +L43 +R43 +R80 +L1 +R94 +R37 +R90 +R42 +L42 +R61 +R71 +L50 +R18 +R48 +R77 +L62 +R37 +R49 +R50 +R51 +L42 +R92 +R73 +R27 +L57 +L89 +R57 +R89 +L83 +R93 +R90 +L3 +L97 +L32 +R32 +L3 +L40 +R36 +L89 +R91 +L8 +R13 +L45 +L48 +L11 +L15 +L46 +L17 +L47 +R40 +R89 +R49 +L88 +L12 +R20 +L31 +L50 +R2 +L10 +R13 +R36 +L49 +R39 +L20 +L9 +R41 +R31 +R36 +R48 +R46 +R4 +R45 +L22 +R13 +R34 +R11 +R11 +R39 +L5 +L17 +R41 +R41 +R38 +L42 +R11 +L32 +L31 +R9 +L7 +R43 +L23 +R5 +L15 +R30 +R11 +R31 +R29 +R25 +L33 +R31 +R30 +R30 +L21 +L11 \ No newline at end of file diff --git a/2025/inputs/day02.txt b/2025/inputs/day02.txt new file mode 100644 index 0000000..c2d817f --- /dev/null +++ b/2025/inputs/day02.txt @@ -0,0 +1 @@ +52500467-52574194,655624494-655688785,551225-576932,8418349387-8418411293,678-1464,33-79,74691-118637,8787869169-8787890635,9898977468-9899009083,548472423-548598890,337245835-337375280,482823-543075,926266-991539,1642682920-1642753675,3834997-3940764,1519-2653,39697698-39890329,3-21,3251796-3429874,3467-9298,26220798-26290827,80-124,200638-280634,666386-710754,21329-64315,250-528,9202893-9264498,819775-903385,292490-356024,22-32,2663033-2791382,133-239,56514707-56704320,432810-458773,4949427889-4949576808 \ No newline at end of file diff --git a/2025/pyproject.toml b/2025/pyproject.toml new file mode 100644 index 0000000..9d42038 --- /dev/null +++ b/2025/pyproject.toml @@ -0,0 +1,10 @@ +[project] +name = "aoc2025" +version = "0.1.0" +requires-python = ">=3.11" +dependencies = [ + "numpy", +] + +[tool.uv] +dev-dependencies = [] diff --git a/README.md b/README.md new file mode 100644 index 0000000..4e2668f --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +# Advent of Code + +My solutions to [Advent of Code](https://adventofcode.com/) puzzles. + +## Years + +- [2023](./2023) +- [2024](./2024) +- [2025](./2025)