From 5dbf43717591d5234fc599bd83372ea516162a97 Mon Sep 17 00:00:00 2001 From: plasmaofthedawn Date: Thu, 5 Dec 2024 15:22:04 +0800 Subject: [PATCH] initial commit --- .gitignore | 1 + build/.gitignore | 2 + readme.md | 23 + resources/2023/day1.txt | 1000 +++++++++++++++++++ resources/2023/day10.txt | 140 +++ resources/2023/day10sample.txt | 9 + resources/2023/day11.txt | 140 +++ resources/2023/day11sample.txt | 10 + resources/2023/day12.txt | 1000 +++++++++++++++++++ resources/2023/day12sample.txt | 6 + resources/2023/day13.txt | 1350 ++++++++++++++++++++++++++ resources/2023/day14.txt | 100 ++ resources/2023/day14sample.txt | 10 + resources/2023/day15.txt | 1 + resources/2023/day15sample.txt | 1 + resources/2023/day16.txt | 110 +++ resources/2023/day16sample.txt | 10 + resources/2023/day2.txt | 100 ++ resources/2023/day3.txt | 140 +++ resources/2023/day4.txt | 194 ++++ resources/2023/day4sample.txt | 6 + resources/2023/day5.txt | 210 ++++ resources/2023/day5sample.txt | 33 + resources/2023/day6.txt | 2 + resources/2023/day7.txt | 1000 +++++++++++++++++++ resources/2023/day7sample.txt | 5 + resources/2023/day8.txt | 768 +++++++++++++++ resources/2023/day8dory.txt | 15 + resources/2023/day8lucy.txt | 732 ++++++++++++++ resources/2023/day8sample.txt | 8 + resources/2023/day8sample2.txt | 20 + resources/2023/day9.txt | 200 ++++ resources/2023/day9sample.txt | 3 + resources/2024/day1.txt | 1000 +++++++++++++++++++ resources/2024/day2.txt | 1000 +++++++++++++++++++ resources/2024/day3.txt | 6 + resources/2024/day4.txt | 140 +++ resources/2024/day5.txt | 1369 +++++++++++++++++++++++++++ run.py | 175 ++++ src/pascal/2023/day1/part1.pas | 53 ++ src/pascal/2023/day1/part2.pas | 75 ++ src/pascal/2023/day10/part1.pas | 136 +++ src/pascal/2023/day10/part2.pas | 276 ++++++ src/pascal/2023/day11/part1.pas | 113 +++ src/pascal/2023/day11/part2.pas | 113 +++ src/pascal/2023/day12/part1.pas | 205 ++++ src/pascal/2023/day12/part2.pas | 250 +++++ src/pascal/2023/day13/part1.pas | 142 +++ src/pascal/2023/day13/part2.pas | 149 +++ src/pascal/2023/day14/part1.pas | 61 ++ src/pascal/2023/day14/part2.pas | 290 ++++++ src/pascal/2023/day15/part1.pas | 85 ++ src/pascal/2023/day15/part2.pas | 194 ++++ src/pascal/2023/day16/part1.pas | 146 +++ src/pascal/2023/day16/part2.pas | 219 +++++ src/pascal/2023/day17/part1.pas | 14 + src/pascal/2023/day17/queue.pas | 23 + src/pascal/2023/day2/part1.pas | 141 +++ src/pascal/2023/day2/part2.pas | 130 +++ src/pascal/2023/day3/part1.pas | 238 +++++ src/pascal/2023/day3/part2.pas | 224 +++++ src/pascal/2023/day4/part1.pas | 141 +++ src/pascal/2023/day4/part2.pas | 154 +++ src/pascal/2023/day5/part1.pas | 163 ++++ src/pascal/2023/day5/part2.pas | 272 ++++++ src/pascal/2023/day6/part1.pas | 35 + src/pascal/2023/day6/part2.pas | 32 + src/pascal/2023/day7/part1.pas | 188 ++++ src/pascal/2023/day7/part2.pas | 199 ++++ src/pascal/2023/day8/part1.pas | 82 ++ src/pascal/2023/day8/part2.pas | 184 ++++ src/pascal/2023/day9/bigint.pas | 514 ++++++++++ src/pascal/2023/day9/fraction.pas | 131 +++ src/pascal/2023/day9/part1.pas | 120 +++ src/pascal/2023/day9/part2.pas | 120 +++ src/pascal/2023/day9/polynomial.pas | 170 ++++ src/pladcl/2023/day1/part2.pdl | 52 + src/pladcl/2024/day1/part1.pdl | 144 +++ src/pladcl/2024/day1/part2.pdl | 80 ++ src/pladcl/2024/day2/part1.pdl | 153 +++ src/pladcl/2024/day2/part2.pdl | 207 ++++ src/pladcl/2024/day3/part1.pdl | 100 ++ src/pladcl/2024/day3/part2.pdl | 127 +++ src/pladcl/2024/day4/part1.pdl | 128 +++ src/pladcl/2024/day4/part2.pdl | 85 ++ src/pladcl/2024/day5/part1.pdl | 172 ++++ src/pladcl/2024/day5/part2.pdl | 205 ++++ src/python/2023/day1/part1.py | 5 + src/python/2023/day1/part2.py | 14 + src/python/2023/day2/part1.py | 14 + src/python/2023/day2/part2.py | 12 + src/python/2023/day3/part1.py | 21 + src/python/2023/day3/part2.py | 28 + src/python/2023/day4/part1.py | 11 + src/python/2023/day4/part2.py | 34 + src/python/2023/day5/part1.py | 53 ++ src/python/2023/day7/part1.py | 19 + src/z80/2023/day13/input.txt | 1350 ++++++++++++++++++++++++++ src/z80/2023/day13/part1.z80 | 342 +++++++ utilities/dc/preprocess.py | 18 + utilities/pascal/readme.md | 1 + utilities/pladcl/readme.md | 1 + utilities/python/readme.md | 4 + utilities/z80/preamble | Bin 0 -> 3 bytes utilities/z80/readme.md | 6 + utilities/z80/z80sim | Bin 0 -> 195976 bytes 106 files changed, 20207 insertions(+) create mode 100644 .gitignore create mode 100644 build/.gitignore create mode 100644 readme.md create mode 100644 resources/2023/day1.txt create mode 100644 resources/2023/day10.txt create mode 100644 resources/2023/day10sample.txt create mode 100644 resources/2023/day11.txt create mode 100644 resources/2023/day11sample.txt create mode 100644 resources/2023/day12.txt create mode 100644 resources/2023/day12sample.txt create mode 100644 resources/2023/day13.txt create mode 100644 resources/2023/day14.txt create mode 100644 resources/2023/day14sample.txt create mode 100644 resources/2023/day15.txt create mode 100644 resources/2023/day15sample.txt create mode 100644 resources/2023/day16.txt create mode 100644 resources/2023/day16sample.txt create mode 100644 resources/2023/day2.txt create mode 100644 resources/2023/day3.txt create mode 100644 resources/2023/day4.txt create mode 100644 resources/2023/day4sample.txt create mode 100644 resources/2023/day5.txt create mode 100644 resources/2023/day5sample.txt create mode 100644 resources/2023/day6.txt create mode 100644 resources/2023/day7.txt create mode 100644 resources/2023/day7sample.txt create mode 100644 resources/2023/day8.txt create mode 100644 resources/2023/day8dory.txt create mode 100644 resources/2023/day8lucy.txt create mode 100644 resources/2023/day8sample.txt create mode 100644 resources/2023/day8sample2.txt create mode 100644 resources/2023/day9.txt create mode 100644 resources/2023/day9sample.txt create mode 100644 resources/2024/day1.txt create mode 100644 resources/2024/day2.txt create mode 100644 resources/2024/day3.txt create mode 100644 resources/2024/day4.txt create mode 100644 resources/2024/day5.txt create mode 100644 run.py create mode 100644 src/pascal/2023/day1/part1.pas create mode 100644 src/pascal/2023/day1/part2.pas create mode 100644 src/pascal/2023/day10/part1.pas create mode 100644 src/pascal/2023/day10/part2.pas create mode 100644 src/pascal/2023/day11/part1.pas create mode 100644 src/pascal/2023/day11/part2.pas create mode 100644 src/pascal/2023/day12/part1.pas create mode 100644 src/pascal/2023/day12/part2.pas create mode 100644 src/pascal/2023/day13/part1.pas create mode 100644 src/pascal/2023/day13/part2.pas create mode 100644 src/pascal/2023/day14/part1.pas create mode 100644 src/pascal/2023/day14/part2.pas create mode 100644 src/pascal/2023/day15/part1.pas create mode 100644 src/pascal/2023/day15/part2.pas create mode 100644 src/pascal/2023/day16/part1.pas create mode 100644 src/pascal/2023/day16/part2.pas create mode 100644 src/pascal/2023/day17/part1.pas create mode 100644 src/pascal/2023/day17/queue.pas create mode 100644 src/pascal/2023/day2/part1.pas create mode 100644 src/pascal/2023/day2/part2.pas create mode 100644 src/pascal/2023/day3/part1.pas create mode 100644 src/pascal/2023/day3/part2.pas create mode 100644 src/pascal/2023/day4/part1.pas create mode 100644 src/pascal/2023/day4/part2.pas create mode 100644 src/pascal/2023/day5/part1.pas create mode 100644 src/pascal/2023/day5/part2.pas create mode 100644 src/pascal/2023/day6/part1.pas create mode 100644 src/pascal/2023/day6/part2.pas create mode 100644 src/pascal/2023/day7/part1.pas create mode 100644 src/pascal/2023/day7/part2.pas create mode 100644 src/pascal/2023/day8/part1.pas create mode 100644 src/pascal/2023/day8/part2.pas create mode 100644 src/pascal/2023/day9/bigint.pas create mode 100644 src/pascal/2023/day9/fraction.pas create mode 100644 src/pascal/2023/day9/part1.pas create mode 100644 src/pascal/2023/day9/part2.pas create mode 100644 src/pascal/2023/day9/polynomial.pas create mode 100644 src/pladcl/2023/day1/part2.pdl create mode 100644 src/pladcl/2024/day1/part1.pdl create mode 100644 src/pladcl/2024/day1/part2.pdl create mode 100644 src/pladcl/2024/day2/part1.pdl create mode 100644 src/pladcl/2024/day2/part2.pdl create mode 100644 src/pladcl/2024/day3/part1.pdl create mode 100644 src/pladcl/2024/day3/part2.pdl create mode 100644 src/pladcl/2024/day4/part1.pdl create mode 100644 src/pladcl/2024/day4/part2.pdl create mode 100644 src/pladcl/2024/day5/part1.pdl create mode 100644 src/pladcl/2024/day5/part2.pdl create mode 100644 src/python/2023/day1/part1.py create mode 100644 src/python/2023/day1/part2.py create mode 100644 src/python/2023/day2/part1.py create mode 100644 src/python/2023/day2/part2.py create mode 100644 src/python/2023/day3/part1.py create mode 100644 src/python/2023/day3/part2.py create mode 100644 src/python/2023/day4/part1.py create mode 100644 src/python/2023/day4/part2.py create mode 100644 src/python/2023/day5/part1.py create mode 100644 src/python/2023/day7/part1.py create mode 100644 src/z80/2023/day13/input.txt create mode 100644 src/z80/2023/day13/part1.z80 create mode 100644 utilities/dc/preprocess.py create mode 100644 utilities/pascal/readme.md create mode 100644 utilities/pladcl/readme.md create mode 100644 utilities/python/readme.md create mode 100644 utilities/z80/preamble create mode 100644 utilities/z80/readme.md create mode 100755 utilities/z80/z80sim diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9c595a6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +temp diff --git a/build/.gitignore b/build/.gitignore new file mode 100644 index 0000000..d6b7ef3 --- /dev/null +++ b/build/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..6fd2b1d --- /dev/null +++ b/readme.md @@ -0,0 +1,23 @@ +# advent of code + +i decided to throw all of my advent of code into one giant monolithic repository + +information for each languages i've done are in `utilities`, in the readme file + +source is in `src` and resources are in `resources` + +## how to run? + +there is a very useful run.py in the root dir + +run it like this: +``` +python3 run.py pascal2023day1part1 +``` +and it will find the answer to day 1 part 1 2023 written in pascal + +you can shorten day and part to just d and p + +--- + +thanks and have fun. diff --git a/resources/2023/day1.txt b/resources/2023/day1.txt new file mode 100644 index 0000000..541babf --- /dev/null +++ b/resources/2023/day1.txt @@ -0,0 +1,1000 @@ +fouronevhnrz44 +eightg1 +4ninejfpd1jmmnnzjdtk5sjfttvgtdqspvmnhfbm +78seven8 +6pcrrqgbzcspbd +7sevenseven +1threeeight66 +one1sevensskhdreight +rninethree6 +eight45fourfgfive1 +xdlnbfzxgfmhd4t +7tf +8oneldkrfcssbfeight +five5ninebvvfv +sixrhxkzcgfhltrchq3three91 +lnxms8 +threekv33eightninethree +fourxrsxhclj99twosevennine7htxdr +5hdhtdxgktztjdjrhkmlblsevenseven1four8 +25xmvshkbmtkmvqpfhgq8fivefqctjm6two +nine533two +sixmbkjzpcxvfive2 +seven3fivevhkpjvfqsfivemfdvlkhhmmvtztjf +3eight5threefour +fplrjjznseventwocrv9 +mxqvdb5onesix84fpkzf +17five6mvxgkkmz2two2mf +lrqnqfncvvvrrpkfour92xsxfztwonehsb +dphngmgfhhhcjxmbmqdk3nine54 +34xdbhnbhbmljxc55oneeight +cpgdcctwothreevlqmk1qpdthree +977ckpkmx5 +7cx81 +vrtgzhhrsevennzgjqhsqdxcjtm2gsj +dtkgj89bz5threenine +256mctgqnjbpr +smmthmrnj6threevrndhnrqq4qpnxz +vfrcvbgpdfjbzhchqmtjgxrmddhmggmqrgs7gxfjffivefour +twoeight8two3 +threedpfour5eightthreebc3 +csdfivefhgkjfcsvsvqsrbtplhjnine7pqhpvhjqone +seven3375sevenqgjndftrsh9 +4six1npbnvfdl27hqvdrxztq +twopmmblrnhmq6zp1 +34jvrtkfdcmnmblg269six5 +fouroneeight1lpvssjskkjvhpmcb +kjb6 +8rsix4 +hcprhbhzgjklpql92pntdmxskg +3766zthm7lts +eight9sixqnkqbfrbrstbxxsixeight +sjncbhbcrmnmsmf4sixkhscclmrjfjgqgrdtpjqpgdsg3 +zrxtgzscx5lgfcsbqkjnst1 +nineonedzhsqlscgl2xpk +9eightljkpkkq +blhstnzdfttwocfjhgsix41hrx6 +5dzsix5 +vhlkone6five79 +nkkm65tfnxhtmzrfpfive +7hcnzjn4 +ngckn5ppcsvjsbstwo +5qld +zbgghnineninezkphpf6 +8nine4sevenjlhlzlbztxbcrpc +3bcdmqxgb +8xvhfr3foureightwocj +nine68zvlfs +8one8xldlrninenine81seven +7dtvdvgnnqt6 +htxkfzhxhfmc7631lklzppbtrbfive +seven89lrxddqtsvvt18 +dnvcsqcmp7fourkrjhndsghjr +ztkqqqdctdeightonefivezdctxbfg7two8 +lptlbtmmkdthreetfcttkknf53gtmvkcgmj9zvsvmsbstznmd +hbxr1ninefvjkkxkhbrtwo6 +dbmxvpsvp7jdnvsdnlv +seventhree1 +seven1oneseven +seventhreejcdvcgfthzlvl8eighttwo1 +2fqkkgsvpjv9ninesix +xfmkdtxk2two +6fourfive +hpghf2cfgrmb34 +714 +nineonemrzxsmtwo28 +llgnrpcdxt4eightninedl9 +pdvhcvpmceightpfjpgvbfnrhh9 +gvzzrvhmj464 +592eightmvkdnjqthreedtcldng9 +77nineonethreerqnrgczsn4hhdnpbtkxthree +four78zrqfourtwo +5chnktntwoninezqzfhthreegpmkvrsbfs +mpgvbnzldvbhchthreeseven4cvone +nmfbdpeightfour9fiveqnnmbfsheightsix +onexrjdhtmsdkssrgghlfsx5fourtwofive +5seven3zfdnqxqqdgqcphhjctjhddfggrfstqrb7 +hcpcvfllseven8 +qhpmcthree1sixdjkg +32mgqbmsn6five4c1 +seven78 +four8three +9seven5five6 +five67 +twopqsjvpfxdone81gsztrlxrhx5 +9bctqg +jqkhxlnvfhninepzmvfmm5 +fglgdrnlnqthreeeightfoursevenseven368 +nineeightjvzdqnpnzf86qpffrfsp6 +34kckxkrq +sixppr854 +oneeight6 +7onerhqgbzheightpvxjnsfdnmfive +68seven3 +56ninedgzqmlvjp22 +six69nine7threethree +6oneightskl +5six9four5twoone +fivefourfourhvgfqrqst99 +2qvvnrbvjhs8dstfpfnineldkpnkskz7 +41jrhj9nfeightonecqrdg +7onefour8 +rxtdz5gbxbvdxbbpghfvljdbknqsqgtmmgrhf +79kftqmdnbj +1cf4 +threekdrpvtsdtrdfzxtvqh3 +zxcnsfkvfivezhcknlhcqfour9159 +twodjdbsfive7two +47bnvbkseven4one7 +nleightwo7 +twofive5gptl3nine6twopngsq +eightqn32seveneightqfrfmsfgqhfourvrgdkfnxn +sixfivefivepnxb1jqzx4lk5 +three97onebssix2 +fivebvkhcmt3one6twonegf +xzrv997pfhxsblfive8 +5nptkzbsixxgpmrkxponegnnqfqtgvl4 +7mvxkfkjkxninesevenxjtrjxbj +jfloneightfivetwo7flmf +qpncksix1fourthreesixtwo7fcjjdx +17nineninesixhpbh +four88ngtbtfcqfr6tjqbqhrktf +vgtvfsftvljjkxnsevenltszqrgm6cgxjlqsgcqonelcdjv +6tznfmdzxkt +nineoneninefive2oneightdp +kmjjzvblthreethreefour1dhrsk2pfjx +fourfive6six2 +rmqzgfivenineeightnine6qqnxclq +fourninefive3kgeightonerfxsr +four7qjpkrfxsvt31seventhree +vqgqgk69twoseven +qfxvmhk9 +six1b69 +vcbmbfjrdpnfour9 +twoclpjtndvxj8fpxblseven +28xrggnqqttk544 +39hgczgvjhvs31fivesix +qstz85sevennine +ddc5lqftnmhldv4dxfvhrxcnltr61 +ninedhhmpzntqlninef7 +63fourhznh +three39foureight +4zlfzjfrqsixjzb +2sfiveeight +fourfivefive46 +fglfbbseven7445three5mfgrmkfgdc +8sg +128three3seven +five4threehrggrjgjpninetwo5eight +3hjnmvhtfxpzmdt7224txvnpnjsjf6 +beightwobhz86fdhsthreeqjxccxhjvk45r +lgd2sixf7 +6ninefour +hmhfeightsevenvlgdrm3five6kkjblfqbjsnxtcxrpg +jxvh5jjxvfdeightwon +1qfqdqxvtsztkkjxqz +1onenineppgphdtt +fourrppqprfmlpxbvdhpltfive1qfzr +xhqkzhchcmfnrpstgntwobrntnm4 +nplmsixmx5six +dtvrlxzdb4clddlfivefour4one +67cnqshcbgsix54two8 +7s +fourfourhbv28six91 +seven6twospmcsixcvmzfj9nine1 +1five1bphjprtm2twoxfslkqh9four +eight7bfzdbfccfl7 +8eightl +klfpjslgdmgbxlftszdltn1 +eightseven5threeseven +onenjvvqsfhgfhmtv6foureight51 +qttmv8zxdh25hshpn4 +7875 +3ljptgbzsix1sgqrqlgml6sevenfktjtgtv +tdtwonethreeeightfivethreeqmdmc9 +rkx1 +eightseven26ftngc +tjxxsdsnxg696xhthree +2gdbxmxqjxnninefivenzhpmx3zqh +91kq5sixspxqqvpjxrp +mkztv5knjkzrgcz +3ninefpdbptdnine3qpzc +fourtwodg86 +nineeight1sixfourseven +dvlgone1foursndcghxgxzrtsztceight8 +6bskrcjthree +fourninebgcqkdlrx79 +4sevenxfoneh +gmvptkcgx69vqxmckppmlnptsrndfrhtc +9959ngrjdgltllpmrtbrgrdpnjlgl6three +2c +3qncfdmhdcmleight1 +3eightvfstts +sd7175nlpq9xhfour +foursevenfour477four +snsixthree7bmlrvdtmx +nhsninesevenjjhgthzhfour66seven +52onepcltqtlnk +fivedvndklt1twoxplzqtgf +1twohpd8xxtwojmcblxxtdk +nnctpnrhjtqvcpnbncpfsixseven9rrbxblhcsr +95ninemvhbqhpkqksixsevenone +5seventwothree +threeonetwonine2 +cqbrtdnjzgx38twoneshm +4fivenine1 +czsfivenkkqbqbbpc1 +sjmeighttwo32one771 +5mtmkhkhd7nineeightrq4six +one7vknzhj9ninesix +jcsqnxhp1pmfpvkdmcgzm +zjm5two2 +4onejhdtnhqtlcggbxpmhtfiveone +nr6hvcspxjgvmlbdtgs326two +fivevsrfcv5fnkpftvrbnine +kbtwonesixbbrtjvcbblzh4 +2fourthree +eightntgeightfivesix8 +twoninefive42 +bcjxfqlqvfslqgq52 +tmrthree8twoxthreers +9fivenineeight9xdnnqkfbnkg +onesclfxsljp2 +5one34 +18nlbghthpmhntqpxnfivebfstnkcrpvxmrlrhcq +fourthreesix43three2fhn +nine5zbqpcxffpmmzxp +dbjgphmmvf7eight +6tks +ldnkcj6572two5sevenf +6jlbdqjrx86pxxnhneight +191pbjnlqh7vkgvrhtrkxqfgxczq +qpxpcnmmmone3zkm2nine5gttbdpggf +vnbfthmm1hckvdcqqv1sixxpldbmnxmmgrbl +eight5ftlsixlmrf +6gtqkvvmvvq5seven6mkxvxpfthreenine +jbskqm5gfntjjqtz +2eight72 +nineplkthreesxpeightxzkfvg4 +xzcqqnq5seven2vtsldzpfnine +six9t1rmbnzrkdh1 +75kcdztv7 +two4gbffour +seven8rlqhshzsixmtmpvfzjpeight5sixvh +7nrrcqpdqhfourthree +21fivenine2kjxmlmnhz6 +3stsfthreejgzxhbseven7threebfhlml +dtdeightwo4jxrfivebpzf +qhrr2five5oneightr +pp2pbjgmgffctbtseven +737kbsxrtpcgslrmcnd4 +qpxrkdnineqzkkhzjfqqv7twocghmkrh47 +gfptsfour4ldrjlvzghq +9ninezvxqzhlgzckb8fztrsevenvlqgdm +7562sjpbvpeighttwo +qsmnktmlpznxz25gpgjqsm +7two5tctnfxgqvd2four +rls41threezlpkvtbhvk4sixnine +six8dpd +msljvkd6fourbtzfjphskfxqpjkzmzgkxvqn6hddzxj +mfspzjjcfour49csfjgjkdmktns +b3tllpmmqkktclkntlbgkkg9five +rqnbftghx35 +rcgrb26five +sevenvkhzbljfour9czkpdltxlbqbdgcpz +two7fivehrqeight +mgmvtjl1zffzbt3two +trxmmtdrvh1scjhcsevenonejmzhsbttgfseven +one8sixtwo58 +nrs24 +threerrrrtjhngptrpsrq8sevensixtwoonecntmmmxtjf +mzgmrh5qcml +4lfxxdgnnjzeightninesone +phvmnnvzseveneighttwosixplbrb5 +sixnineqqgbmlxdrvsrfhkrff5 +6sdfldthgvctwosevenvvnbgqxjrn +7112xslv +sevenfoureightfivefivelkhnxb98 +nine6pljkszdp6 +two4xlhfhrz5kbpstsfive +bbgdsix5 +sevenlcbsdlhftwozsnx1two5 +one2jjmlqsnxx1b +sevensixsix5sevenzqhjzlkjgnvsxfkfvxzhq +lone19four1 +1fivesixpv +eightfour1 +xsbgprjfthreefoursevenrqzbcbfnbhtwo2two +ldtwoseven47dcrppbfbv +1fivexgtwosixone18three +nine93oneseven +5qdneight61xpg +rdzckkb5five7ggmbkzjshx +37lxlgmveight8 +scqvdhm9b +seven9six +pvthreesixfourgctbsix8eightseven +83oneonej +5four83cfmnthreeone +fivefiveeight1 +9tnbqpthbn5kvgmsmfmfsevenqdrksixmbmgm +onecrs76 +vgdqvmt23onesix +dlvmvtj6eight2dxjrhdlfghfhxcsxz6tbkz +414sixdbzhmxthree +sevenfivesevencffvbdhtk5qmplrjzxnjnbnt6 +qgqjxchmxfourknine447three +4tfour +fivercfvsvlfglbxrtvxznhr8five +sevensixonesix7399 +two17 +zcmdlqzhps5twotwojkltrxb7three +xllqtjpxsixsevenfivefour29 +ninetpzpr51 +6751three6 +rcfpnskfivethreelbtgpltxsevenfourbtcs8eightwokb +eight7rfr2 +six5onenine29 +zjbj238 +rgprs5fiveldvmgqktnn +meightwossfvkncf5sevenfivesqpgrtnnj +onez4eightfour62tmrjmprthree +foursevenjtwoc3threesixfj +qmmzmzlxmthreezvzxv6zgcztv +73mbm +nine251k1 +sixhtfhzcbtq7sevenonesnkpfvsnnnine +seven44vp4jxbrvkzcmlnjfiveoneightvzx +3twoseven5 +one8mfpgflgqkb2six7dtgftrplb +lrgnb4ninetwo5vjsmmb9 +6sixq2three +999eightvkpcpv4 +947fourtxdmhv +9msczjqjggsk3six4 +bone1 +5fivevvlljvmsdgqjnrhfourkstccckr +7hpblpnmxqlninethreesixpvpnine +nineeightdsrqfdnghgkeightone8mpkvfdhz +4sevencrjtpdq +mbvgsfoneltqkfnbpftxhtv7two +onegbvcctwo8onesevenone2six +vt36onetlmtqbv +nvvxx51 +threefnvcvbnzvs4 +7rxcjjdeight81587 +mdmjsg3seventhreesn +dtxsdmsvjcjx819jhhpzzf9 +9jcxsninetsl2 +6vcllfssthkxgdgh1ghjscsrvnhrpmjllh +6kkhpcjhmseighteightppvdkffdcpchttzone +878 +sixdkkjchkjqtllfpn31rpgxspktkgxjgcf +2eightsixzs3kx9 +sixthreetwo9 +35vtgrpcqcnvfive +4ninegqqlc49fourthree4two +czd4eight +tfcmfdxhhqlroneninethree43 +8tbx +1xqpdxznzhsixseveneight2 +6hg9clj +vfnthreevzt88 +seven4317pkxd13 +stvltfvs7eightcmj +nbrxfmsshronesevenrrnp8seven4 +7jvtgqvm36fivegccbpkp +6threeeightfive8tnlninekb +eight1sixtp +17ninezjhchkvq +tfxvhhkltlnffournlmlsqfclqlrsk31 +two889threezthree1two +five9one48twothree +eightseven8dqjsixlrsrscgzjpfour4 +988nine4fk3 +76dfkqfbqzffplx +9zmgrr9 +jhsbj4twohxrgdr +kgcfgninetwoctqzfbhhvffive2fzlk +8six25 +six35oneseven7 +2cvxrnine33four27zk +4xctr9threemrckmkmjgtpxzfqdzg +fivelrs3ncmgdxgqhnfqrlzlnbvrqp +3zgblb +rztshfoursixfour226four +2hfth +5d94fiveninezfvprvgtnxfive +21four5zcb6szsjgsseight +2fivefpdkzxxgchfourp25lsnqjrmxmq +gxlbzlfzsixtwo8snhpdtgdgthkrvzsxkd3 +five4n2 +gscjzkgkeightqlljzx12fiveonebqzmlh +xhsrzj1 +klxkdzxvvrljbnrhfive7four7 +3sxmbgvxkmkpfqxccvj8eight2hl +2bcdbsllgcmftxftmzrhnfive9dgkqpqkloneskztwonesgh +eightsix7nine7eight69 +five6lsgslhtzzv +fivesix47 +3kxfbcjz6vmhzvkgpjbfqq34seven +threevlmlfm58threebkfdzd5fourkpgddjlqsz +sevenzdeightdtxrxzckfktrfpm7 +qjkrfltlsdrrcm6 +795six3hmlkdnine3 +foursixxjnqsljktnnbtwoeight2mskdbkbtk4 +fivetwothreeeight9sixqhqzm +fiveqjdksix14jlzcvck +16sevensixvzjnh +nkpshpkptggnsxp272three +zrv86 +35lgqsdfive6 +x3npthreethreercmnlphkchmrmcg9seven +5sixninefiveninenkxrvmk +jfjqrvc3 +bbqxjhds4 +hdkqkq5twodbbrpnbmmj +4twosixcfdcf515two7 +mgzljdxqkpzbhfh62threenine74mcvrf +4ninesevenvnblskhgxmhvkhpmxg +fourvktpjlpr5sevencfvthree +9six9vtrkdfjkbb4five7slq1 +dhroneight9xthreenjqk +eighttwo1twopxzxghjs9 +six35ctcjrmfclone +d1sixmmctvr8 +qsgcbzdtworzgzbqtrd7pttltxjsgptwomfmrzns +sevenseven6twocqhvmvgxn9vmlxpfourjvqsnmlbd +7twopc2four +three1nineeightgrnzbpqsvbkpbqzvmqsnm +91fdf985tdjvtwo9 +svlfivetwomjhzfourone7 +bqpssscxckkljxxtwo8dpcbpqgq +gjhdqvgcfive3five +bpqdnpbf97tgpkkmdg +1lksrsrlqkmzmbfgpcqq +kfftvhrlqpstwoone6fiverklbhqqgdpvmnine +xbtfhfivenine9lpklrnrrbnthreensvgrvdzpfpvzznq1 +xkfjtzdqmhnine96sdgfveightttbhfkthree +fourbz2six5 +rggoneighttwo19vfdjvjbr86zkqmfclp +3fourx4klhkhglvjszj8 +glg2fournine5sixxbjseven +3zdpsone +htxgljmx262five5 +3ftshpgpnnhgspltjrvb3cgnghgzpvzlnxvzcjone +threebbnrxczqninetrone7eightseven8 +g2seven +threeddtgc8 +3fivepcfgpvjzsj471 +28zfour7seven +clxslzrrkbbmxbkzfnreightone6twodlztb8g +9eight1 +2gvvdgnvnptwohhztfggrndzhplqgx +qspcbvlv48 +1eight1sevenrlhdnhs +fivetpnnlnp317seven +n4onetwoninexnvstftnchzfxzrqts +2lthreeseven +two3twoseveneightffournbrhmseven +seven6fsxnfqmlg75bznfkjbch81eight +4dgszfourggjmjjjrr5xmddgsgp +b5283sbqdn36qcrxnphkg +9lmklvnvczeight +cgm2vsrmjtzmbh +7lhqhfm5sevenlg +69cmcnbqseven6bnztjrpfvx +eight84nine8 +92xcmffvvbr +fivefivetwotwoglzqftlfpnine2 +gtffdsrzmmnine6fourtwo +cjnxbkvxq7onexjjhds +onenine9lgkp4bxztcseven +bthree4 +bqq4dbjbkftfx2cxdrdgjsixxqlcgztnv +twovtxqhsgx72jtgfqzfqnine4 +87gjbghccqrsqxbflkhk2fivelmkmjzmfzxbcmjtb +seven7six83vdxxrfbfkfg +sevendnjssc7threecrccqlsf5xtgmqk +sjphck271threekvldbgnvtcxlcdkf +sevennpfbbsb3kgpdm +ngmhtfnkjl5fourfivegnpb +xthdbtwofcgdrrjmfive1five +89hgld6sevensevenfour6 +36kgtmxxx1fivenineseven +eightdklr6 +23zkrplrpmlpclqjkrsrxcbjone9ffjrqvsix +5njvthreeftxjninefnlcq +1qb +three5258kpcrl +szggtxbvql443 +3threemvbzslgqdninesevenxzgbfkcg64 +6fivefmhtdcbpx +five4fivesix +9ninebrdczqjpnine +q33ninesix6threepbqjnjdb +onelvhdtljltmjgdsnine1eight7 +one2seventwo +4jnfchm5jtqgbmnctrsix +5six3 +eight9hklfhjnine2onerl6 +2nzncz9fourdcqmmcfgbgsqchvnrdnrcthree +2337 +tvqqfkxcg81eightfivedxmb +mxkcbqkptqbgqvgjxbrbnine3dtzhkmeightsixdxdhbpxd +two9szthjhjmcfseven4 +rkcsnrl2btjgvbmlnine1jdjczcskjg622 +six75three9 +5threethreetwo8 +1eightngz +seven3sixn2 +three7pdfjtzfv5threesxpgrbkmx2khxcsbdblh +onezzrzpbvsmflzrlfmv4h46five5 +6jdv +smseven3eightfivegzlkm3 +nine7eight5 +sixthreeone54four +7mrxpdc6xvkhcmtwo4 +3crrcmxzqzfchtnvnh +nhxtwoseven84 +9sixvltbsix +6ctsnvvgm9sixpjhmtskzggtgsevenseven +ninehfqcvgkgqf167one1sixeightwocf +dtsg38sixtwonephq +rpfbnzn2vhjxeightqdfbqmpgpdqn +cncdqcbgzt8 +xbhqsrfp6357ftq7 +1rnnz277 +8threeonejvkfldcrnxjflltr9 +l8sevenseven8qmm5plczqnkrhvkppb +one7qjgnslmrdnbsone451xffltxrvdk +hmcmtzcl59 +8qqffcfhj59 +rzlkxvgckrfvnone2rjtwo +two9ninesevennine37 +2x5 +4cjkghzhtfrdhhcrjvt2 +cpbhsgbzt8nzcjqnine5cntrngcqj +9three4sixeightcxmvmgglf +31dptlfdphx7three +fiveonethreesixppgpbzr8jlrpzhr +731bdfdvtpqb3pcbrsxvtxbtgphzdbsixfive +1gxmppthreetwo1xrslpjqq +2three3four4 +pbdlpv56eight52 +qmspclflmrckcbbqxnthreeone7dczkjhxnvjtkx +78dslfsggrkp +vntwonesixfourvsmmmgpghm3 +three981flhdlvkseventwo +fqv9twopvk +pthpkvdqcn1 +qtz763six8eightzxbcp +67vtscljxslhfpt8 +2mqfhbpn +1jtdcgrlrpdmjbmlptgdzjfgqb +1twoeight6znzgxf8one +9gngqbsprhmhpsgzps +gjqsfhfivenine4pfhxthtjthgsm38 +five1twofiveninetwofive2jrtzvtf +ninethreetbmcb2nine +96fztmrseveneightbhfpqjbsixvhjfvzzjdc +8threenineonejhhcmnnrzsnbzcstzqtfsthree +9onesixdttqqjvfour8 +sixtcfdhjlddncmskrfoursix72 +868fivevsstbpxtwo +four2onesix +four4ktnggkpfvtwozqqpsckb7 +eightfour4threeninesixnbtzsevenjxpsn +sixfcmnbdflf7four7 +mqvjfdhhbqkpkdx5sevenhrhkphqrsix +cb3bngnjgmjng +6jfive +roneightseven27fivetwofourfourbzshqvxdc +ltwone4zpvhninenm1eightktmkbpvlkkhzhvfc +84dslslds +bphdhtwo2ckktccnrqjptwo +six27glzs +threedxsdjsgmlvrtnmzjbvt71kdfiverpddfrczjhs +ddqlb4mtpfthreerkztrmxvbhhnjqmmdxdmlffcrhoneightfcg +qr1 +56threenine6hgvtwotwofnjbppqppb +vb2fourninethree4knvzpjcj +threetlsevenfourgcjmzprone5three +5fourrrqhbrbq7three41 +five8qpxdsdpxeightphjvbmtp +9one522 +f3pklscq +4sjfiveht3xknmkndsgfjvl1zqdt +three4vjjg691 +99grcttgddb +7pgh8sixsm5five +one185kjbftmplhqdkfvrh +4kzrchdkv2tgbrkghhnine6 +sccnhhmmfournvbbvrlpfsevenfivefive8 +frrrdkzvfg7blgqj7threecqhvvgfd +fivehsfkmbvxddkfrrngfivefive4four6 +9onetwozcgntxrdzeight4zpnqkxsfpcggtrjjk4 +5jbmn4nbzbmmkbvxstchl +fivenine4vvtfhrhbdeight4294 +onefour749oneghm +one97czzjrrddjsb1nine +nine4sixsix +4eightthree3three +45rxpndjsmq6fourqpmk +seven93 +5173five7kvgqpttwonemh +ninefive2n1eight +452zdvjfczspmcknblsmzznvrlhkmn +47onexntj2sixsixthree +nine9threesixfsmnfour51six +pgtfttdkjmz47 +5threeone9gr2vjjcrbslcp +jsfour7fnmqgsxlnine2gsmmkgvj5gbvx +bktwonngqchlqghpnmlzxnthkpjgcjsr98eight +tczsjfcxfgjzbxeightnine5twoone +48 +99flzfrrjdp69zxjdphrbbsixthreetpzn +five82fourxczgknkgk +six7fourbeight +oneeight4kxsdrpsix169dh +mnine9 +npxvqkbpdtddhlggthreempqqblzfmmvc1mknf +56v9two24zdscdf +tmcbxhvhptvtwosdhltwo4mvjphvjjrsglrxbjrthree +threefive3skzsspkfqp61 +three5three315xgjgphdr +8jvqvpspkqgbl +1vpkglvlxs2sixgc6eight3 +hzshxqgxzttwovkfive3fgmctvvdfsbjhdt +prsqrjcrrj9nxgq2 +dfsfxtdj19lqlblbmb1 +ltlmvf81xsztgzpljcxx8 +lrqxphqhthreetwolqjsixtwo81 +nstpljlpt1sixnineone91 +one4xcrhhdhsvveightfive +rfmdkpmbrhrnzqtqnrvdv4two5 +ndf8mccqlzqrjjcpzzpbjrmclpkvkkltvgfsfour +two8three11eightwom +five5xpzcmtxnqj +7238fouronerxjvqtmhtljcnine +zdfmfkfbkb2seven +3fbkzxmz +21one699eightcqfs1 +68vpgggr +97s9eight7 +pkxvtvgtrdsqkgclnkxhjr3threelr +954lcthpqcscz +twothreevshxfjvnq6 +rsnkplhfive3pmpkknnvbf6bvxqhbjhc +hhxhhpnrsevensztgxnqhmzcsnsxgblc7754 +grjdsxzhjldjckhbxbrqlbbjhntjjv79 +five7sevenfive +ghljgxzbfourcvqqnnine1rrmftfr +koneightbfxgjjzkkgsqzhhdctg4 +cgtxldhfourtwoseven9zlhgrchhvfhrgmqdgnine +51twothree6x +sevenrfseven1sqmhzrg +bpnmzncsix3one6gzpzfsrfbp36 +stjgqone46seven +gzrnkk7ninefour +fivefgnfkn4tzjxtjlrfive1 +bdpgnthrf83nffzpeightmj +twotwovzbvbrsgseventhree15 +7ninexqjggfvqndsdcg2 +three8fivehpfxncpxv4three +twofive6rctmlhrxxlthreerrrvstvvqx +rgfdddkmvkfvjspmzzp6hxprqlvseven +threexhqqhone3six67l +eightseven56krtbthree +seven99 +6j1czlmxsmqgzvrcjjscnineseven +ffnrkvchddftmhklsbxfourxmqnrnlrvvsevenone93 +jlnzkqfvnsix8four74eightone +56eight1sqthzbsfpsevenhdlqkkqjqnqtbseven +dfsxgdsfnrktlhllrxqp5onevmfklvgxqhmlhgqhd8 +cvtdzcsfive6rhggdz1tfzkffglck593 +ninet715two1 +gknjznhzvjrmqtkdbb5 +xnrvvntwo22 +9nlpcldct8nine5eightkjzmqskpnb +eightsix7ninetwopjslsgvbseven1 +p2dcg49one +xcdthreessvvzts67bkqchqgqcf +31ncbk97 +kxftjfivegmkcfqbvsl8threeqnrnrsixbdqzl +91fourpqfghjncnine8bfxqxdjckfckdzgsl +2vhrdjpcdlg +mrcjfivetwo6threenine +2ljldxrdg94four +gnoneghkgtt256 +mxplnslnrsxpzlgx3nineonefive +63mzsvmsix +6fourninejpsfnineseven +fourninefive3threethreecmbseven +761zzctnddfour2one +dzonesixseven1two +fiver31oneeighteightwov +3kpbcxsthreeone5 +nineonektx48drsgpktpns255 +qfqtwone7nine374 +xnsevenm9 +seven8fourdptllvrggqzcnqfourtrbslxxgrrgj +onesix1sixngvmpbjctrkztfour1one +sjmxkkvddt89jlgfvhnlhlzzhdvp +jbk6 +six4hkfbxrbg1ff7six +3six6fourthree6two +5sevensixonefour26 +pgnzkprhj1rxsqftblftjgngthqdgmbdfmcpxxtsj8seven +17nine2kcnqv +ckzfgltmnqnkgzkxdfmncp8nine8 +ccfourgfpdfrgmvdbvdvpd3 +9bgqggggrbggmdrjkfivesvknmpthree +82sqghgstwoeightt +nk1slsckcn87cfsbggnsfnps67 +1onethreefxdcqfourtpzqtwosix +pfivek4 +99vnxnscjpeight4dthlk5eightwovl +rmtwonehkt6lczt8vfxmkzkxsb2five +one89bchlvvhtjz3zbspjtmkqkfourpznpfeight +foursqmchjpccone7ninenine2 +1dvsgvone236six +six63three9 +bvvgtrmmxs5scdzvcpseven7gdnxvczneight5oneightzbr +cv18cvdgxmrjsgnztgjrb4threefive9 +ninesixsevennseventhree73 +44dxhfgjt2gntv95 +rbbhmmqbrc9twofour +4bqfivefiverdp658four +hpsslx88four +one8hmjrstmmeighttwodrmpm7five9 +4ninen +9seven9fd442 +3vqdtnhqg +hldgmmnfmzeighteightseven48 +8msmbtzlvsf1ph4lkqddcbhcnp +jnkxqmghbpjslmgsbvlhtrr1njgrx2twozfk5 +fxchjbvgl8mdhtckn8seven +rllvfrffhf13sevenc98 +vgbprsjllsrhkltdrcknmfk1rpeightjpkxvjsrm +six81hgfzghnn8fivenseven +ninesrqjnt9onetwoeight63j +pbrrb9fqjhhfhfh9twokhhdsghvjkvkpj +1nineztppgztbdxvrgqvs46 +jbqrdsqtfninefxtg1nzmdcqvg +41ninefiveninefiveone96 +mmsfsjeightthreeqgbfbnvgnv5four4threepggz +6threehqq5four +mpthqgsix86two +5onesevenfive61 +8ninetwoeightj31 +7fivekxzhlxdsevenzn +sevenshxtsixzdfjvpcsc5jvjhgzbssbrqtwonemx +phls1 +148nxbhkjr +2l8threeqfpddrjxrzlqldtqjseventwo +k7one +92sixtwotwoglmnxdnxz +9six4xdh +9five9nine +k21xc +sixonegsbffgtsevenzjbrone4chq +eightfive67fiveseven3four9 +8lxzjjjshhgpvkmzcjjljr1fiveltt1 +nine24eightts5xnfgtlpng5rkq +lhtwone1six8156zttxfdn5 +69sevenmbkjdjbl +hnm8fivetwo +6threezc +lhmtbt7ltb6 +six1eight4crjfmmxonenine +fhrvhfkp4xjstfour +kxeightwoseventlrvhfrkhrhfive34twos +sfvdlttlrfourthreevzksseven736 +7crlzrzone8 +fjsfpfivejxvqnq16threesixqxdmjz6 +fkrjfjkgbjnine63fxfkfvphbjngnfqbhb2seventlbbr +596 +dgfrd288six +783nine +two8fivefpkjllbnqgqlkqms7mmhbsrnhsxnbmjv +seven79one9 +fourmrxqtmg21lnztkhx +3one728sixfive +fourconemgdcch8three +bfsfktfbvqfiveonecljcbqfnine2five +5eight2sevenzxpsk +6twotrvkhqrsppcxhjvjlkhcjrqpqvqxrmxqt +77kxkrpzr +grlrh36sevenone49 +9fiveeight8 +five4jbspqscf +4zzzjxghvcj +6xhrgnhxzx16xrknine +84nqhnxcdldthreeseventwodnbpszp +twoseven3xzpxpgjvbgldlqsgf +ncsfckp5cgv4jrbkf +9eightsixtcdkzlbl +sjfxx4 +onebshtqkhslhfvhgqtvsnhqfhone4 +fgggsixtwo4pl5 +nvrr2twohknrgcxtpltwosgfbnlszeight +five1bzfdfsrz +4xvtwo2 +five2eighth4 +2jlnlmbqccrgkmjqninethreethreenine4 +gtxxdnxqzlfive5seven +fivegjkqh46eight +33z +48sixscgcghlqjheight +vkfzkkxxnj17fivedt +onejlhdglpkjsixtwo24 +4bssmdxpone1bnxjtwo +pbsixsfxddk3fivefive43eight +fivemnmqbzonetdgvmsone48 +dbjeightwo9nine9 +eight123kkptmzpqjj1 +15krrcpgqshrhxrxpgone8kbkvgjlghc +45eight323hvnbtbqqtwoeight +veightwo2dsqjg +three77q6 +1hshtr1vsbhfctfpdl1threem +nineninethreevvgbclnkcmzhctgjtwoseven4 +seven3foursix4four +fhvm96bbxrmtcgcthree4rthree7 +65crr +7ljvcqtceightbnkpbxqgfvfzxmfmctdjctgcc +llj659nine5rl +two8fivep3ddmpdhngm8cf +hljxhkvbk4five5k +threeninefive9 +jncnpkxjvst2eightrjltjc +4psqtnkxrc +eightqtscplvmkbrlnine449nbnxtkz7 +sixnvkbxlxninevhtdvf77zrnjzxfbdlsix1 +eight2mznnrmhnmclxdcdzjsfourtxvgmdzvk +fkghbffpnmqblcrfivethreethree195 +pxgpcrmpone1one +5pfkktxpfjgsixp5lbhrvv373 +six8seven2fseven6 +eight9crdxxxgpbprtdxpfsgglkst1 +8zbmntvnpfoureightxz7four +3599lx5 +seven9six4fdqr3vgq8 +fiveone2twosevenfive +twotwo35sixczdx +two62964mdhbqhrfkf +phtrfmmkzonedcsnqdvrghvvf36thqdxfrh +dxnqsdhfivefour2385threeone +7onetwo +pfzrvpphj7phnzqmkbbbfvstwosevensix +69foursixonefive2 +jszkfs9hkcsnxtzfs3 +gqb1gzbglssfxqjvffivexlphdd7 +2one777 +qcczbcm4sevenseven +4threevxhtx +tdxxf8 +jlxc5fivesixeight +sbszlkpjgfivevtsjscqdpv5eight56 +bbpxxtwo798 +fiveztdspgfive97zfmrvnxeighttwosix +51threetwovrbv5 +fourfhxzgvbgdceightqnqrvmb7 +11ngqhghdsevensthhs9 +sevensevenrqmpsf4hnpqxmgbhskllksnkfourfour7 +vheightwo5twothreehbzcrs +2fournpvcpksffj1 +mxmldpfsevenpfcvhff9twonineeight +9pcqfrtkrtwo +hxxzppmlfive6cktznkfgmnctjfjpxvgdfszk7ptwo +vjjhjlqsvknineggvjdnnpltzrrqz7 +9xdjlnqc +seven1lmdffjjqgxone +fiveseven9 +5931zmck +twofourvzrdjmhbnl9onedrtcnl +4trmsevenhbsone +87pzvbcrdvzg3vfszszfds13 +5three38gccjdm6six +xcszzrlpltbxs48mcs +ksjzvcgptnq3bfhrfx +twoninethreekhvndq8jfkrfpzsr71six +nine8zmnsdzxqhf4nine6nine +bsdvvggfrjvbvqrtjzbkzmcp64fourthree +nceighteightggrtjsblxdhpxsix7 +ninebv8 +136tjpsfdgnine +9q +seven1two +mtmzmplcnrfive3rtmhcxcxpsixeight2eight2 +qclnh4 +5d +tmvbmvh176jngdjlhszlfcbzv +two77jzfncqnm +onexdcrstcqlsixnmtxndzksfsvrxccmjj45 +threeone58rzpfivenine +118zgl48 +tfhdfive1gzz59bkztx +r3three4fourgzlgljdrmnmnjntssbpvkpmfdsjlbl +24hz +four8sixone6 +nineqfggh3svpvlfzpfxoneeight6twohzb +941 +onefivejnbgncqfzcsixdqd8rxjd2 +9fivesixfivefivesix647 +noneight25fhqrvv +eightninephmksl9dvhvcbvdldthree +threegr8 +6fzqndfour5nine +4bl2zhcnpqvxthreemkjfqmdctsqzbkllfgvsmtt +9three13 +hvbftpsbprhzx5 +one7threer57 +psdkpvjkzrs3sixfive +ngsqbpfbt34 +gbdh7threexnszmtwo +64cmmt9sevenh8qdgmcpplgsj +fivervlsbzjsfiveqbmlrvlzqn8twoeight1vxzkjf +bznrgbrmnzvhp1twosix +97gldxj +fsjbjcklxp9nine2 +hpgm7three +ljxcrlfive9bf +four894zmzmllzgkv +fivetmbkmmrjg9seven1tsix1 +88sixgprtzhfzsncm4 +dbdqkgtdxdjxhk3lsqvsmmtonexstlrplstvqvvmthree +sixfbvmqxbhbgfbl3 +jkdshphdg1 +sevenrkrvtwofivenine4fourcmjmmdvzvh +553 +cqthreeone2ppfflh3fiveseven +5fivekxfzpzjsd42sevenzgfourtwo +55fivekrtckjphnlplbcbxbzf +1pgsfgdf755 +5dncccmkpqtwocmmlltvbg +two23eight9lnjk +1148pdtcl1eight5oneights +4ltrvvtxfhcp8eight4dpfhmqeight +44xtvnlrcpb +9knzcfpkv2hqntgqkfgtsix1eight8 +rlgmxxmpsk9 +1one9 +1six9fsvbrrgxqpsevensbnzshmb9 +ftgbfqrzslqrcmmeightnjjrrkvhntcv1djmbqztrkvlqfkshoneightggd +one5twofqqgcdvzkllqgxhjpmkhsjpthree +sevenxtmq34two9gnvrvxfjmgq +nineeight6mkvbfour6four +6dcrpx8sixseven2bbszpncx3 +6keighteightfive6six13 +sixfive69sevenschkmdrvs +dzdgsmgcmkthxddd1921two7 +fivenine9eighttworlrccrjzseven3 +3onefoursix +6jzqksxpk +qfjhv1 +sevennssgfpzt2bcxldkphfour1sixnine5 +sx1zhzzpzonevrllpblsfnxzknmpconefktdt +mdvqxbgjhzprrhvqhdt6kfq +sclszppxlpzvzpscvqc791twochlgnsf4 +krtjqmseven6tbllzgjcghsix1 +114 +75kp +rbrftcblxcknine4eight +ffmsgbqf33jcjktprgmczzkd6 +v9zjhcvjjkr716 +three49oneightf +ninesix2twobvdrbsvjrmvhsdhncsqhcfour +5thmkvcrfsix87hjhgbrxxfgseven +five8fourone24fqjknjq +xfmeight8 +7onenine +fivesixfive2six9hn +7six441 +1gjkphqtwo +fourhzgxqtxggfpprrmtfqsdhc2fdxnjdgx64five +threeninejdzzrbpmfhjcqdsix8two2bb +7877pzrbtcsddmrffzdsmqlqkjsix +5four3eight +15nine1 diff --git a/resources/2023/day10.txt b/resources/2023/day10.txt new file mode 100644 index 0000000..65799c9 --- /dev/null +++ b/resources/2023/day10.txt @@ -0,0 +1,140 @@ +F|--L7J.L7|7|-LF7-7--7F7--7F7J--F7J.7F|J7.F7|.-FJF|J.F7F--LFF.7.F7JFL-JFJ7F|.FL77-F7-J.F7-F7L-FF-F-L7F-|7.FL7-7F|7F7.F-F|-77FJ7FF-J777.|FFFL +FJJ7FJ.F.-7-|77|JFJJL|7|F7-FJ7JLL|||L-L7-FJJ|7.|J-.J..LJ.--F|7F-FJ7|LJJF7L7J.|-7.FL|.L--7-L|JFL-F|7L|7-|F7F|7.LJ.F7.|L7L-J|-|-LFF-LLJ|LL7|7J +F|.FL|.LJ-L.||FL-|-FJ|JJ7-7|.J.F7--F-|-|FJ-|-|7.|.7|F7.|-L-LJFL--77.F-|J|F-7F--JLJ7|..LLJ.LLJL7JLJ7-F-F7|FJL-77.FJJFL-|F|7F-F7F7JF-77||JLJLJ +||FJ|LF-7F|F|LJFFL-|F|7|JF-J7LJF7.|L-J.F|J7||FJ.LJL-|J.|.F-7F7J.F-|7F-J7L7-77L||L7F7FF7-|JLF-.7-F|-7LLJ7F-.LFJ77L|.|.|L|.L--|JFF7F7L|L|||.LF +L-L-|..J-J|7.|J-||LFF--7-J.|7|.FJ-L7.LFJ|LF7.||.|.F---FF77|F||7-7J|7|LF-L.|FJLF|L||LJFL.|LF-L|L-JFFJ.FLJ-JFJ|L---|-7-F-|7LF-J-JF-JF-.||LJ.|. +J..||FJJFLL--JF7|J.LF7.|JLFJLL7||.JJ7F--J-|L-|FLLF77|-F|L77F||7-|.|FF7J|JF7J|FJ7-FL7.|.FJFFJ7|7J-LF7-F77LF|L7J7LF77L-J.L--7JJ.FL7JF--7-L|7L7 +L|--FFJ7F|JJJF-|J.F7.FF7-F77LFF-F-L7F7777L|.L.F77|L7F-7L7|7FJL7F77LF||77F-LF7-FL77-LF77.|7.L|LFF-FJ|F7JJFF.FL-J.LJ|7JFFFLF...FJ.JL77--JFF|.J +F7-F-.|-77JF-F|||7.LF-J-.F|777.FJF.FJ|7-J-J7..F7FJFJL7|FJL7|F7LJL7F-JL7F7..7|FF---7L|L7F7-F-|-F7FL7|||7-J|FF|.J-F-JFJFFJL--77JLFJFJ77.-7.-.L +J--F7.7.||F||.7-7||.L7JF-FJL-JFF-|7L7L7.L|JF-F|LJFJ.F||L-7|LJ|F--JL7F-J||F7.7-L--7L-JFJ||F7FFFJL7FJLJ|7JL-7-F7.-FJFL7F--7.FL-.F|F|||LJF|7LF| +|JLL77.FLJJLL-JLLL77|LFL7F7LLLJ..||.|FJ7-F7LF|L-7|F7FJ|F7|L7-|L7F7FJL7FJ|||F7F--7L--7L7|LJL7FJF-JL-7FJ777L||||7|F-7|L7JLF7FFLLF-7LFJ|LJL|L-- +-7F-.7-F||.FFJ7..L77J.F7F7..LLJF77LFJL77|LJ7-F7FJ|||L7|||L7|FJFJ||L7FJL7|||||L-7|F7.|FJL7F-JL7|-F7F|L-7F7F7FJL-7|FJJLF.LL7-LF-F-7L--7F|.LJ.J +LF-7|JFJ|J-F|7FF77L||--|L|7..|.FLJFL7FJJFF.F7||L7LJL7|||L7||L7L7|L7|L--JLJ||L7||||L7|L-7|L--7|L7|L7|F-J||||L7F-J||7.F|7-FL.LJ-|7J|LJL777..-7 +||.J---|JJF7-L-|7--F-7F|.|JL.|7J|L7FJL-7-JFJLJL-JF7FJ|LJFJ|L7|FJL7||F---7FJL7L7|||FJ|F-J|F--J|FJL7|||F7|||L7||F7|L77--|.--7F|-|J-L.7-LJ7F--| +LLFJF77FJ.-JJ..L|JL.L77-LJ.LJL|FL.FL-7FJLFJF---7FJLJFJF-JJL7||L7J|||L--7LJ||L7|||||FJL--JL7F7||F7||||||||L7||||||FJ-F7|F|L|77LLJ-|FF-LJL|J7| +F-|F-7-J.-|J|.|.|..F-||7L-FJ|FF|7F---JL-7L-JF--JL7F7|FJF---JLJFJFJLJF--JF-7F7|||||LJF-7F--J|||||||||LJ||L7|||||||L---77F|JF-7-FJ.FJ.7.J|LJF. +7FJ7F|..-.|F77|F|7.L-FF-7.|-|F--7L----7FJF-7L-7F7LJ||||L-----7L7L7F-JF7FL7|||||||L7FJ.LJF-7||||||||L-7|L7||||||LJF7F-JF77.||77|JFLJ.L.LFJ7LF +|77|-F-7L7.|.LF-J-.F-7J.F777FL-7|F7|F7|L7L7L7LLJL-7||L7F-7LF7L7L7|L--JL7||||LJ||L7|L-7F7|FJ|||LJ|||F-JL7|||LJLJF-JLJF7||F7-LFFJF|J-F|-7||JFL +|-L.F|.L7F-J7JJLJL-|.|-F|L7F77FJ|||FJ|L7L7L7|F7F-7||L7||FJFJL7|FJ|F---7L7||L-7|L7LJF-J||||F|||F7LJ|L--7|||L7F7FJFF7-||||||F--7--LJF|--LF--LJ +L7|-FJ--77JFL--.7-L|-7-F|FJF-7L7|||L7L7|FJFJLJ|L7|||FJLJL7L-7||L-JL--7|FJ|L7FJ|L|F7|F-J||L-J|LJ|F-JF7FJ|||FJ|LJF7||FJLJ||||F-J..LF|.|L7JF|F. +|FF-LJJFJ|7J.LLF7JL|-|FJ|L7L7L7|||L7L7||L7L-7FJFJLJ|L7F--JF-J||F-----JLJFL7|L7|FJ|LJL-7||F--JF7||F7||L7LJLJFJF-JLJLJF-7LJLJL7F-7FL|F7-7LF-|7 +7LL7|.777LJFL7|||7F7--J.L7L-JFJ||L7L-J|L7|JFJL7L--7L7||.F7L-7|||F7FF--7F--J|FJ|L7L-7F7|LJ|F7L|||||LJ|FJF-7FJL|F---7FJFJF7F-7|JFFL-7-|J|FJ7F7 +-7LFFJL|7J7J|-F|L-JL7|.FLL--7L-J|FJF--J|||FJF-JF7JL7LJ|FJ|F-JLJ||L-JF-JL--7|L7|F|F-J|||F7LJL7|||LJF-JL-JFJL7FJL7F7LJ|L7||L7LJF-F.|J.L7LJ||.| +LF-7J.FLJ7J-FJLL7F--J7FF7JF7L--7|L7|7F7FJ|L7|F7|L7LL7FJ|FJL-7F7LJF7FJ|F7.FJL-J|FJL77||LJL-7FJ|||F-JF7F77L-7||F7||L7F7JLJL-JJ.---77.-|-|FL-L7 +FLJ|JFJJ||7.L7F-JL-7LF-JL-J|F7|||-|L7|||FJFJ|||L7L7FJL-J|F7-||L-7|LJF7|L7L---7LJF-JFJL7F7J|L7||||F7||||F7FJLJ|LJ|FJ|L-7F7F7777|L|7J|JLJFJ..F +77JL.J7FLFLLJLL---7L7L7F--7|||FJ|FJFJ||||JL7LJL7|FJL-7F7|||FJL-7|L7F|||FJF--7L-7|F7|F-J||FJFJ|||||||LJLJ|L-7FJF7||L|F-J|LJL-7-F|.|-J7F---F-| +L7|7LJL7|F.L7|L-F-JFJ7||F-JLJLJFJL7L-J||L7|L--7||L7F7LJ|LJ||F-7|L-JFJLJL7L7FJF-J||LJ|F7||L7|-||||||L---7L7FJL7||||FJ|F7|F---JLF.LJJJ|FL|7|J| +-77JF-JLL7-JL7|.L-7L-7LJL-----7|F7L--7||FJF---JLJFJ|L7-L7FJ|L7||F7FJF-7FJFJL7L-7LJF7||||L7||FJ|||||-F7FJFJL7FJ|||||FJ|||L--7|..L|7---7LL-F.7 +FF|.-77-F-7FL|7-F-JF7L77-F7-F7||||F7FJLJL7|F--7F7L7L7|F7|L-JFJLJ||L-JFJ|FJF7L7FJF7|LJ||L7||LJFJ|LJ|FJLJFJ7FJL-JLJLJL-JLJF-7L-7..|LJ|FL-J-|7L +FJJ-L|-F|J7L.F--JF7|L7L7FJL-JLJLJ|||L--7FJLJF7||L-JJ|||||F-7L-7FJL--7L7|L-JL7||FJLJF-JL-JLJF-JLL-7|L--7L--JF------7F----J|L--J7-L.77FL.|7|-7 +FJ7|FLJ||.LJ-L---JLJFJFJ|F7F7F--7LJ|FF-JL-7FJLJ|FF7FJ||LJL7|F-JL7F--JFJ|F7F7|LJL-7|L-----7FJF7F7FJ|F7FJF7F7L-7F--7LJF----7F7F7F77.7-F.FF7J-J +J7-F7-F|7.||F|J|F--7L7L7LJLJLJF7L-7L7L--7FJL--7L7||L7|L-7FJLJFF7||7F7L7||||||F--7L7F-7F-7|L7|||LJFJ||L7|LJL-7LJF-JF-JF---J||||||F77-J7F7||7. +|J-LJF|JL-L-JLLLL-7|7L7|-F7FSFJL7FJFJF7FJL---7L7LJ|FJ|F7|L7F-7|||L7|L7|||||LJ|F7L-JL7||FJ|FJ||L-7L7|L7|L7F7FJF7|F7L-7L7F7F|||LJ||L77JJFL-7FJ +L-7|.|..|LJ|L-||FFJL--J|FJ||LJF7|L7|7|LJF----J|L7FJL7||||FJ|FJ|||FJL7||||||F-J||F7F7||||FJ|F||F7L7|L7||FJ||L-J|LJL--JFJ||FJLJF7LJFJ77FL|J|J. +L-F--J7F|-J|7.-F-JF7F-7|L7|L--J||FJL7L-7|F7F7F-7||F7||||||FJ|FJ||L7FJ||||||L7FJ||||LJ||||FJFJ|||FJ|FJ||L7|L--7|F7F---J-|LJF7FJL--JL777F-JL-J +LLF-L7FJLL7JF7LL7FJLJFJL-JL--7FJLJF7|F7|||||||FJ||||||||||L7|L7|L7|L7||||||FJ|FJ||L-7|||||L|FJ||L7|L7||FJ|F--JLJ|L77F--JF7||L7F7F7F7F-7LF|7| +F7.L7L7J.77-||F7LJF7FJF7F7F7FJL--7|||||||||||||FJ||||LJ|||FJL7||FJ|FJ||||LJL7||FJ|F7|||LJ|FJL7|L7||FJ|||FJL-7F7.L7L-JF-7|LJL-J|||||LJFJ7LL7J +|77.J7L-7|FJ|||L--JLJFJLJLJ||FF7LLJ|||||||||LJ||FJ||L-7|||L-7||LJ||L7||||F-7|||L7||||LJF-J|F7||FLJ||FJ|||F--J|L-7L---JJLJJF-7L|||||F-JJL-J|7 +L7---LJ-J-F-J|L-----7|F---7|L-JL---JLJLJLJ|L-7||L7|L7FJ|||F7|LJF--JFJLJLJL7LJ|L7||||L-7|F7||LJL-7FJ|L7|LJL--7|F-JF-7F77F-7L7L-JLJLJL7.|L7J-| +.7JJ7||LLLL-7L7LF7F7LJL--7LJF7F-7F-------7|F7||L7||FJ|FJ|||||F7L--7L---7F-JF7L7||LJL7FJ||||L7F-7|L-JJLJF--7FJ||F-JFJ|L7|FJFJF7F7F-7FJF--77J| +FJ.FJ7L7.L|-L7L7|||L7F7F7L7FJ||7LJJF-7F-7|LJLJL7|||L7|L-J|||||L---JF---JL-7||FJLJF--JL7||||FJ|.|L7F---7L-7LJL||L-7L-JFJ|L-JFJ||||FJL-JF-J-F. +|.FLLL.FFFJ.|L7|||L7LJLJL7||JLJF---JJ|L7|L---7FJ||L7|L7F-J|LJL--7F7L-----7|||L--7L7F-7|LJ||L7L7|FJ|F-7L--JJF7||F7|F--JF|F7FJ.LJLJL7F--J7..LL +F.7F|L7L7|F7F7||||FJF-7F7LJ|F--JF---7|FJ|F7F-JL7||FJL7|L-7L7F---J||F---7FJ|||F7FJFJ|FJL7FJ|FJFJ||LLJFJF---7|||||LJL----J||L--7F7F-JL-7F7J7-| +L-L-7L--JFJLJLJLJLJFJ|LJL-7|L---JF--JLJJLJLJF7JLJ|L-7LJF7|FJ|F7F7|||F-7LJFJ|||||7L7|L7FJ|FJ|FJFJ|F--JFJF--J|||LJF7F-----JL---J||L7F7FJ||LF-J +LFF7FJ||-L-----7F7FJF-7F7FJ|F--7JL---------7||F--JF7|F-JLJ||||||LJ|LJFJ|FJFJ|||L-7|L7|L7LJFJ|||FJL---JLL---JLJF-J|L--------7F-JL7|||L-J|-J7| +-J|FLJF7LLJF---J||L7L7LJLJFJL-7L7F7F----7F7LJ|L7F7|||L7F-7L7LJ||F-JF7L7FJFJFLJL7FJL7|L7L-7L7L7||7|F---7F-----7L-7|F--------J|F7FJ||L7F7||FL- +LJL-J7.L.FFJF---JL-JFL----JF-7L7|||L---7LJL-7|FJ|LJ||L|L7L7L-7||L7FJ|FJ|FJF77F7|L7FJL7L7FJFJFJ|L7FJF-7||F---7|F-J|L------7F7||LJJLJFLJLJ-77L +|F|J.|.|7FJFJ-F---7FF---7F7L7L-J|||F---JF7F7LJL7L-7||FJFJ7L7FJLJLLJFJ|-||L||FJLJFJL7FJFJL7L7L7|FJL7|FJ|LJF--JLJF7L7F7F7F7LJLJL--7F7F--7J-77J +||7-|LFFLL-JF-JF-7L-JF-7LJ||L--7LJ|L----JLJL--7|F7|LJL7L7F-JL-----7L7L7|L-J|L-7FJF-JL7|F7|FJFJ||F7LJL7L-7|F---7||7LJLJLJL7F7F---J||L7FJJ--J. +FL|FLF|7FLF7L--JFJF--JJL-7|F7F7L-7L-----------JLJ||F--JFJL--7F-7F-JLL7||F--JF7||LL-7FJLJLJL7L7||||F--JF7LJ|F--J|L7F7JF7F7LJLJF7F7|L7|L7|-77. +7-LJ-JJF7||L---7L-JF-----JLJ|||F-JF-------7F7F--7LJL--7L7F--JL7|L---7|||L--7|LJL--7|L7F-7F7L-JLJ||L---JL--JL--7|FJ|L-JLJL---7||||L7LJFJ77L77 +F7-L-7.|L7L---7L7F-JF7F7F7F7LJLJF7|F------J|||F-JF7F-7|FJL-7F7||F-7FJ||L7F7|L-7F7FJ|FJL7LJL---7FJ|F7F7F7F----7LJL7L7F-------J||||7|F-JF7|FJ| +F7||L--L7L--7L|FJL--JLJLJLJL-7F7|LJL-7F7-F7|LJL-7||L7LJL-7.|||||L7|L7||FJ|LJF-J||L7||F-JF----7||FJ|LJ|||L---7L---JFJL-7F7F7F7|LJL-JL-7|L77L| +|L|FF..LL--7L-JL7F7.F-----7F-J|||F---J|L7|LJF7F7LJL7L7F-7L7LJ|||FJL7|||L7|F-JF7||FJLJL-7L7F-7|LJL7L-7||L----JF-7|FJF--J|||LJ||F--7F-7LJFJJ.. +F-FJ|-|JLJJL---7LJL-JF7F-7|L--JLJL--7FJFJ|F-JLJL---JFLJLL7L-7||||F7LJ|L7||L7FJLJ||LF77FJFJL7LJF-7|7FJLJF-7F7FJFJFJFJF7L|||F-J||F7LJFJF-JJ-77 +|.LL--J7F7F--77L-7F--JLJFJL----7F---J|FJFJL----------7-F7|F-JLJ|LJL-7|FJ||FJ|F--JL7|L7L-JF7L--JFJL-JF--JJLJLJFJLL7|FJL-JLJL77|LJL-7L-JF7|F77 +|7.F|7-JJFL-7|F-7LJF-77FJF----7|L---7||FJF-7F7F--7F--JFJLJL-7F-JF-7FJ|L7||L-JL--7FJL7L77FJL-7F7L--7FJF-------J|F7|LJF-7F--7L-JF--7L---J|J-J| +J7FL--.|-F--J||FJF7|FJFJFJF--7||LF7FJ||L7L7|||L-7|L-7-|F7F--J|F7|FJL7L7|LJJJF7F-J|F7L7L7L--7|||FF7LJFJF7F------JLJF7|FJL-7L-7FJF7L----7|J--7 +|7LLL7LJ-L--7LJL-JLJL7L7L7L-7|||FJLJFJL7|FJLJL7FJL-7L7|||L--7||LJ|F7L7|L-77-|LJF7||L7L7L---JLJL-JL-7L-JLJF7F7F--7FJ||L7F7L7FJL-JL----7LJF7-- +.F-|LL.|F--7L7F7F7F-7L-JFJF7|LJLJF-7L7FJ||F7F7LJF77L7|LJL7F-JLJFFJ||FJL--J-FJF7|LJL7L-JF7F--7F--7F7L-----JLJ|L-7||.||LLJ|FJ|F7F-7F---J|L|-F7 +||7FJ|-FL-7L7LJ||LJFJF-7|FJLJF-7FJ.L-JL-JLJLJ|F7|L-7LJF7-|L7FFLFJFJ|L-7JJJ7L7||L7JJL7F7|LJF7|||FJ|L7F7F7F-7JL7FJ|L7LJF7JLJJ||||L|L-7F-7LJ7JF +F7-|JLF-7FL7||FJ|F-JFJFJ|L-7FJFJ|F--7F--7F---J|LJF-JF7|L7L-JF7J|FJ-L7FJJL||LLJL-JJL|LJLJ|FJLJL7L7|FJ|||LJFJF7LJ-L7L7FJ|F7F7|||L7|F7LJFJ7|.FJ +FJ||.|L7|F7|L7L-J|F7L7L-JF7LJ7L-JL-7|L-7|L----JF7L-7|||FJ7F-J|FJ|J|FJ|J--7LFJ.|JL-FF7F7F7L7F7FJJLJL7|LJF-JFJ|LF7-L-JL7||LJ|||L7|||L-7|F--F-| +.FJ|FJ||LJLJFJF7.LJL-JF--JL--------JL--JL------JL-7LJ||L--JF7|L-J-FJFJ-7JLF|7F77J7FJLJ||L7LJLJF7-F7LJF7L-7L7L-JL7-F7FJLJF7|LJJLJ||F7LJF|.L7F +F--7J.FJF7F7L-JL77F7F7L--7F7F------7F-----------7FL-7LJF7F7|LJ-LJ.L-J|-7.FFJJ.L-.FL--7||FJLF-7||FJL--JL--JFJF7F7L7|||F--JLJF7F-7|LJL---7.LF- +J..|.L|FJLJL--7FJFJLJ||F7LJLJF-----J|F-------7F7L7F7L-7|||||J|..|.|L.7J|-J|7L7J.L|F7J|LJL--JFJ||L7F-------JFJLJL7LJ|||F-7LFJLJFJL7F----J7-FJ +F77F7.LJ.FF---JL7L-7FJFJ|F--7L--7F--JL---7F77LJL7LJL7FJ|LJLJ7L7FF-7FJ|.LJ-|-JL7.|FJL-JF--7F7L7|L7LJ-F7F-7F-JF7F7L--J|||FJFJF7FJF7LJF7JJJL7J7 +F|-|.-|77FJF-7F7L--JL7|FJL-7|F7JLJF---7F7LJL---7L7F-JL7L----7-L|7.-7.-7L|||J||F7LL7F--JF7LJL7||FJF7FJLJFJL--J||L-7F-JLJL-JFJLJFJL--J||7||JF- +77LLJ-F-7L7|7LJL7F7F7LJL7JFJLJ|F7.L7F7LJL------J.LJF-7|F7F7FJJ.F-7L|FJJ.-7J.L-JFLFJ|F--J|F--JLJL-JLJF-7|.F7F7LJF7LJF7F7F7FJF--JF7F-7L7--J.F| +F7.F|FL7|-LJF7F7LJLJL--7L7L--7|||F7LJL7F------7F---JFJ||||LJ|7F7-F-|J|F7---7.L--JL-JL--7|L----------JFJL-JLJL--J|F-JLJLJLJ7|F--JLJ-L-JJ|LFLJ +|L7-F7FJL7F7|LJL-7F7F7F|FJF--JLJLJL---JL-7F7F7LJF7F7L7||LJF7F7JJFJ7L7--JJJF|J7L7FF-----J|F----7FF7F7FJF7F7F----7|L-------7FJL----77JL7F-7JJ. +L7L7||L7FJ||L-7F7LJLJL-JL7|F---7F------7J||||L--JLJL-JLJ7FJLJ|J.|-JJL7JF.FJ-.7JF-L-----7LJF7F7L-JLJLJFJLJLJF7F7|L7F7F----J|F-----JF7-L7JLLL| +LL7LJL-JL-J|F7LJL-------7|LJF7LLJF-----JFJ|LJF--7F7F7F7F7|F--J.F|7|FFJ|L7J|J7LLL7F-----JF-JLJ|F7F-7F7|F----JLJ|L7|||L-7F--JL------J|-F77L-.| +.LL7F-7F7F7LJL-----7JF7FJ|F-JL7F7L--7F7J|FJF-JF-J|||LJ||||L---7F7J7|JLF7J.L7|7-|L|F----7|.F7FJ|||-LJLJL------7|FJ|||F7LJF7F7F------J.FLL-|-| +|FFJ||||LJL7F---7F7L-JLJFJL--7|||F--J|L7||-|F-JF7|LJF-J||L7F--J|L7-JJ.F7--F77L-7JLJF---J|FJLJFJ||F-7F7F7JF7F7|LJFJ|LJ|F-J|||L7F7F---7J7.77.J +|-L7L7LJF--J|F--J|L----7|F7F7||||L-7-|FJ|L-JL-7|LJF-JF-J|FJL--7|FJ7|J-|L7F||7.LF---JF-7FJL7F7|FJ|L7LJLJL-JLJLJF7L-JF7||F-J|L7LJLJF--J--7LL|J +JLLL-JJ|L-7FJL---JF----JLJ|||||||F7L-JL-JF7F--J|F-JF7L-7||F---J|L7-J.FL7|FJ|J7JL--7FJFJ|F7LJLJL7|LL--7F--7F7F7||F7-||LJ|F7L7L7F-7L---7FF7-|| +LFJJ.|F77FJ|F-----JF--7F-7LJLJLJLJL---7F7|LJF7J||F-J|LFJLJL-7F7|FJJL--FJLJFJLJFF7|LJ.L-J||F----J|F7F7LJF-J|LJLJLJL-JL-7LJL-J-||FJF---J7-7FL- +FJLF7F|L-JFJ|F-----JF7LJFJF-7F-7F7F--7|||L-7|L-JLJF7L-JF---7||LJL-77|FL-7FJF7|FJ|-F7F---J|L-----J|LJL--JF7|F----7F----JF-7F-7||L7L----7J|7FJ +L-JJF-JF--J|LJF7F7F-JL-7L7|FJ|7||LJF7||||F7LJF7F-7|L7F7L--7||L7F--JJFFFFJ|-L-LL7L7||L---7L-----7LL---7F-JLJL---7|L----7L7LJFJLJJL-7F-7|FFJ.7 +FLJJL--JJF--7.||||L7F-7L-J|L7|FJ|F-JLJLJLJL7FJ|L7|L7LJ|F--JLJ||L--7F7JFJFJJ|LL-L7||L7F7|L-7F7F7L-----J|F--7F7F-JL-7F-7L-JF7L7FLF-7LJLLJJJ77F +|F--L.|F-L-7L-JLJ|FLJ|L---JFLJL-JL---7F7F7.LJJL-JL7L-7|L7F--7FJF--J||J|FJF--7J7FJ||FJ||F7.LJLJL---7F--J|F7LJLJLF7L|||L-7FJ|FJF7L7|F7L|F|LFJ| +|L77LFJL-LFJF7F-7|F--7F7FF----------7LJLJL-------7L--JL7LJF-JL7|-F7||FJL-JF-JLFL7||L7|||L7.F7F----J|LF7LJL7F---JL7LJF-7LJFLJFJL-JLJL-7F|-J.| +L-F7.J.|LLL7|||FJLJF7LJL-JF--7F7F--7|F-7F---7F---JJF7F7L--J-F7|L7|||||F7F7|.LF--J|L7||LJFJFJ|L-----JFJL---JL7F---JF7L7L-7F-7L-7F----7L77.LLJ +J|L||.-|.|.LJLJL--7|L-7F--JF-J|||F-JLJL|L--7LJF7F-7|||L-7F7|||L7LJ|||||LJLJF7L7F7L7|||F7L7L7|LF7F---JF---7F7||F7F7||FJF-J|FJF-JL---7L-JJ.L-| +FL-J||F-7.F------7|L7FJ|F--JF7|LJL----7L--7|F-J||FJ|LJF-J|L-JL7L-7||||L---7|L7LJL7|||LJL7L-JL-J|L----JFF7LJLJLJLJLJLJFJ-FJL7L7F----J|7L-7-7J +J|.L-LL-F7L---7F7LJFJ|FJ|F7FJLJF7F7F--JFF7LJL-7LJ|FJF7|F7L--7FJF7|||LJF7F-JL7L7FFJLJL--7L-----7|JF7F7F-JL------7F----J7FJF7|FJL7F---7-7|F7|J +F-JJ.||.LF7F--J||F7L7|L7||LJF--J||LJF7F7||F7F7|F-J|FJLJ||F7FJ|7|||LJF-JLJF7FJFJFJF7F---J-F----JL-JLJ|L-7F-----7||F---7FJFJ|||F-J|F--JJ7F|FJ. +JJ--L-F--J|L---J||L7|L7|LJF7L--7|L--JLJLJLJ||||L--J|F7FJ|||L7|FJ||F-JF-7FJ|L7L7L7|LJF-7F7L7F--7F---7||FJ|F---7|LJ|F--J|FJ-LJ|L--JL7F-7-F-7.| +F|J.L-L7F7L-----JL7LJFLJ.FJL-7FJL----------J|LJF7F7LJLJFJ|L7|||FJ||F-JFJL7|FJFJFJL7JL7|||LLJF7LJLF-JL7L-JL--7LJF7||F77|L7F7FJF--7FJ|FJFL7L77 +---.FJJLJL7F-7F---JJF-7F7L7F7LJF-7F7F7F7F7F-JF-JLJ|F7F-J.L7|||||||||F-JF-J|L7|FJF-JF7|LJL-7FJL---JF7FJF-----JLFJLJLJL-JFJ|||FJF7||L|L7F7|FJ| +FL|--77LJJ||FJ|-F7F7L7LJ||LJL-7L7LJLJLJ||LJF7|FF77LJLJF7F7||||||FJLJL-7|F7|F||L7L-7|LJF7F7|L-7F---J|||L----7F7|F--7F7F7L-JLJL-J|LJFJFJ|LJL-7 +|LL77||L|LLJL-JFJLJL-JF7|F7F--JFJF-----J|F-JLJFJL7-F7FJ||LJLJ||LJF-7F-JLJ||FJL-JF-JL-7|LJLJF7LJF7F-J|F77F-7LJLJL-7LJ|||F7F-----JF7|FJ7|F7F7| +|JF-L-J.LJFF---JF-----J|LJ|L---J-L------J|FF7.|F7|FJ||FJL---7LJF7||LJ-F7FJ|L---7|F7F7||F77FJ|F7||L-7LJL7L7|F7F7F-JF7LJ||||F-----JLJ|7FJ|LJLJ +F-7|L|FL.FFJF-7FJF--7F7L-7L-7|F7FF7F-7F-7L-JL7|||||FJ||F7|F7L7FJLJF--7||L7L7F-7|LJLJ||LJL7L7LJLJL7|L--7L-JLJLJ|L--JL-7|||LJF7F-----JFJFJJ7.J +J|LL.77..F|FJFJL7L-7LJL-7L-7|FJL-JLJ|LJFJF7F-J||LJ|L7|||L7||FJ|F77L-7LJL7L7|L7||F7F-JL7F-JFJF7F-7|F---JF-----7|F7F7F7||||F7|LJF----7L7|J-L7| +J7-JF||F7LLJJL--JF-JF7F7L--JLJF-------7|FJLJF7|L-7L7|||L7|||L7||L7F7|F--JF||FJ|||LJF--J|F7L7|||-|LJF7F7|F----JLJLJLJLJ||LJ|L77|F---JFJL77.-- +LF.7-F---7|-|-F7FJF7|LJL7F-7F-JF7F----JLJF-7|||F7|FJLJL7||||-|||FJ|LJL7F7FJLJFJ|L7FL--7LJL7LJLJFJF7|LJLJL---7F7F7F7F7|LJF7L7L-JL7F7L|F-JJF|7 +FFFJ||-|FJ.-F-JLJFJLJF7LLJ.||F-JLJF7F7-F7L7|||||LJL---7|||||FJLJ|L|F--J||L-7FJLL7L-7F-JF--JF--7L7|||FF7F7F--J|LJLJLJL7F7|L7L---7LJL-JL-7J-7J +|JL-|7JF|-F-L--7FJF--JL--7FJ|L----JLJL-JL-J||LJL7F-7F-J|||||L7F7L7|L7F7||F-J|F7FJF-JL-7L77FJF-J|LJLJFJLJLJF7FJF7F-7F-J|||FJF7F7L--7F-7FJJ.LJ +|.7-|LF7J.F.LF-J|7L-----7|L-JF------7F-----JL7F-J|FJL-7LJLJ|FJ|L-JL7LJLJ|L-7|||L7L-7F7L7L7|FJFF--7F7L-7F-7|||FJ||.LJF7||||FJLJL--7|L7|L7L-7| +F7LLFF|J.F||FL--JF-7F7F-J|F--JF----7||F---7F7|L--J||F7L7F-7LJFJF-7JL7F--JF-J||L7L7FJ|L7L7LJ|F7L-7|||F-J|FJ|LJL7LJF7FJLJLJLJF---7FJ|FJL7|.|7L +LJ7.7.|LF-7-F--7.L7||||F7|L---JF---JLJ|F--J|||F---JFJ|LLJFJF-J7|FJF7|||F7L-7||FJJ|L7L7|FJF-J|L7FJLJ|L--JL-JF7FJF7|||F---7F7L--7|L7|L77LJ7J|J +.7-FJF|JLF|JL7FJF7||||LJ||F---7L----7FJ|F7FJLJ|FF7-|FJF7FL7L7F7|L7|LJ|FJL7FJLJL-7L7L7||L7|F7L7|L--7|.F7.|F7|||F|||||L-7LLJ|F-7||FJL-J-|7|FJ7 +7JFL7.L7|L-F-JL-JLJLJ|F7|LJF-7L-----JL7LJ|L--7L7||FJL7||F7L7LJ||FJL7FJL7FJL--7F-JJL7LJ|FJ||L7||F7FJL7|L7FJLJ|L-JLJLJF-JF-7|L7LJLJJLFL-L|J.F- +||FFF--JLFJL--------7LJLJF-JFJF7F7F7F7|F-JFF7|FJ||L7FJ|||||L7FJ||F7||F7|||F7|||F77|L7FJ|FJL7|||||L7FJL7|L--7|F7F7F-7L7FJFJL-JJF7F7F7J..--FJ7 +|F--J.J-FLFJF-------JF7F7|F7L7|||LJ||||L7F-J|||FJ|FJL7||||F7|L7|||||||||L7|L7|LJL7F7||FJ|F7||||||FJL7FJ|F7FJLJ|||||L7LJFJ.F7F-JL7F7J-F7..-7L +|||J|.LF-J.FL--7F----JLJLJ|L-J|LJF7LJ||FJL7FJ||L7||LFJ|||LJ||FJ|||||||||JLJF|L-7FJ|||||J||LJLJ||||F-JL7LJ|L--7LJ|L-7|F7|F7|LJF-7LJ|J.|J7L-J7 +LL--7...|F-JFF-J|F-7F-----JF-7|LFJL--J||F7|L7||FJ|L7L7|LJF7LJL7|||LJ||LJF---JF7|L7|LJ|L7|L---7||||L-7FJF-JF--JF7|F-J|||LJLJF-JFL--J..|LJL7LL +FL|-|--|JLF77L--J|FJL--7F7FJFJL7|F7F-7|LJLJ-|||L7|FJFJL--JL--7LJ|L7FJL7FJF7F7|LJ|||F-JFJ|F7F7||||L-7|L7|F7L---J||L-7||L7F--JJF---7|FF7.L7J.| +LF-FJJ-||L-JF7F7FJL----J|||LL7FJLJLJ||L7F---J||FJ|L7L7F7F-7F7|F-JFJL--JL-J|||L--7|||F7L7||||LJ|||F-J|FJLJ|F7F7FJ|F-JLJFJL----JF--JF-JL77|... +L--|L-.F7-|.|LJLJF7F--7FJ|L7JLJF7F7F-JFJL---7|||.L-JFJ||L7LJLJL7FJJF------J||F7FJLJ|||FJ||||F-J|||JFJL--7|||||L7|L---7|F7F7F-7L---JF7FJ-F--F +.L-|7L7|F-J-L---7|LJF-JL7L7|F--JLJLJF7L7F---J||L7JF-JFJL7L7F--7|L-7L7F---7FJLJ||F-7|||L7|||||F7||L7L7F7FJ||||L7|L7F-7|LJ||LJ-L7F---JLJ||||FJ +7-F--77FF-L-LF--JL-7L---JJLJL7F7F--7||FJ|F7F7|L7|FJF7L7J|FJL7FJ|F7|FJL7F-JL-7|||L7LJ||FJLJ|||||||FJJ||LJFJ|||F|L7|L7|L7FJL7F77|L77||JFJ---L7 +FFLJ.LL|J7JFFL7F7F7|F---7F7F7LJ||F-J||L7||LJ||L|||FJ|FJFJL--J||LJLJL7FJL7F-7L7LJ-L--J|L--7|||||||L7FJL-7L-J|L7|FJL7||FJ|F7LJL7|FJ--7-|JLJ7-| +LJ7-7JFLL-7LFFJ||||||F-7LJLJL--J|L7FJ|FJ||F-JL7||||FJL7|F7F-7|F-7F--J|F-JL7|FJF------JF7FJLJLJLJ|FJ|F-7L--7L7|||F7||LJFJ||F7FJLJ-L-JJL--LJ7| +FF7JL-F||-7.|L7||||||L7L-----7F7L7||FJL7LJL-7FJLJ||L7FJLJ|L7|||FJL7F7|L-7FJLJFJF---7F-J|L-7|F---JL7|L7L7F7|FJ||LJ||L-7L7|LJ|L-7F7F7.L-7.|FF7 +LLJ|L7.L7-F-7JLJ||LJL-JJF7F-7LJ|FJ|||F-JF7F-JL--7||FJL--7L7||LJL-7||||F-J|7F7L-JF7FJL-7L-7L7|F--7FJL-J7LJLJ|FJL7FJ|F7|FJ|F-JF7|||-L.FJF7J-L7 +LJ-|-J7.LL|FJF7.LJF-7F7FJ|L7L--JL7||||F-J|L-7F-7|LJ|F7F7L7LJ|F7F7|||LJL-7L-JL7F-JLJF7FJ7FJFJLJF-JL--7F7F-7FJL7FJL7LJLJ|FJL7FJ|LJL7|L.FF7.FFJ +..FJ..L7LFJL-J|-F7|FJ||L7L-JF-7F-J||LJL-7|FFJL7|L-7||LJL7|-FJ||||||L7F7FJF7F-JL--7FJ|L-7L7L--7L7F7F-J||L7|L7FJ|F7L---7||F-JL7|F7FJ7.F-L|.F-. +F-JF-7FJ-L-7F7L-JLJ|FJL-JF-7|FJL-7LJF-7L|L-JF7|L7FJ|L-7-||FJFJ||LJL7|||L7||L-7F7FJL7|F7L7|F7FJLLJ||LFJL7|L7LJ7||L7F7FJLJL-7FJLJLJF|-F7LJFFJ| +.L77JF7JFLFJ|L7F--7|L7F--JLLJL7F-JFFJFJFJF-7||L7|L7|F7|FJ||FJFJ|LF7|LJL7|||F7|||L-7|LJ|FJLJ||JF--JL7|F-J|FJF-7LJF|||L7JF--JL77.L7LL-|JLFLL-F +F.|J|LLFJ-L-JJ||F-JL-J|7F-----JL--7L7|FJFJL|||FJ|FJ|||||FJ||FJFJFJLJF--J|||||LJ|F-JL-7LJF7JLJFJF7F7LJL--JL-JFJFF7||L7|FJF7F7L-7F7.|||F-J.FL| +L.F7FJF|J7J-||LJL7F7F7|FJF-7F7F7F-JFJLJFJLFJ|||LLJJ|||||L7LJL7L7L7F7L-7FJ||||F7||F-7FJF7||F77|FJ|||F-7F-7F-7L-7|LJL7||L7|LJL7FJ7LF7-|7L7---F +|-77.7LJLJ7.LJ.|LLJ|||||FJ.LJ||||F7L--7L-7|FJ|L---7|||||FJJF-JFJFJ|L7FJL7|LJ||||LJFJL-JLJLJ|FJ|FJ||L7LJFJL7L--JL-7FJ||FJL-7LLJJ-...LJ7.JF|F7 +L-LJ-J-J.||F-.JJ|JLLJLJLJF7F-J||||L---JF7|||J|F7F-JLJLJ|L-7L7FJFJFJFJL-7|L-7|||L7|L-7F7F7F-J|FJ|FJL7L-7L-7L----7FJL7LJ|F--J-JJ.|FJJ.J-F.7L7J +L7F||.LFF|||-||FF7.F-----JLJF7|LJ|F7F7FJ|||L7LJ|L--7F-7L7FJFJ|-L-JFJF7FJ|F-J||L7L7F-J|LJ|L-7||7LJF7|F-J7FJF7F--JL7FJ|L|L-7L-|F-J77.FL7.-JFJJ +|.FL7.L-LJL-.L|FL-FL-7F-7F--J||7FJ|||||FJ|L7L-7|F--J|FJLLJ|L7|F---JFJ|||||F-JL7L7|L-7L-7L7FJLJF--JLJL--7|FJ|L--7-LJ-77L--J.L7J-FJ7-JL|--7-J| +F7-LJ-F|.|-J|J.|J|F--J|7||F7FJL7L7||||||FJFJF7||L---JL--77L7||L--7FJFJL7||L7F7L7||-FJF7L7|L7|LL7F-7F7F-J|L7L7F-JF|L--|LJ.J77L7FF-7F--JJ7||L- +L|LLJ-F|7F-FJ.|J--L7F7|FJLJ|L7FJFJ|LJ|||L7|FJ|||F--7F7F7|J|L||F--JL7L7FJLJFJ|L7|||FJFJ|FJ|FJ7J7LJ-LJ|L-7L7L7|L7-|7--|J7-77F77.-LFJ|.L7.|L77| +.7-L.FJL-JF|.|L|J.LLJ||L7F-JFJ|7L7L-7LJ|FJ|L7||||F7LJLJLJ-FJLJL7F7FJFJ|-|FJFJFJ|||L7L7LJ7|L7JL-.|7.|L7FJFL7||FJ|L-7FL-F7F-.7J|LL|7JJ7L||.L|7 +||7|.|F7JF7-7JLJJ7LLLLJ-||JLL7|F-JF7||FJL7L7||||LJL7LF77|7|FF--J|||FL7L-7L-J-L7|LJFJFJ|LFJFJLF7-L7.-JLJ|LJLJLJJJFJ-LJ-|F7|-F7|F|LFJ.L7L-L.|L +F-JLLL.FFF-7|777-LF-7-LJLJJ.LLJL-7||L7L7FJFJ|||L7F7L-JL7.LJLL7F-J||7J|F7L7-||LLJF-JFJ|FLL-JJ.LJ|7L7F77LL..|F||JJ7LJJ|L-L7J7.FL-J-L.7L-7JJ7F| +|.J..LL7L|J-L||FJFL--.|.|-L-F7F--J||FJ-||-L7||L7LJL7F-7|FFFLFJ|7.LJLFJ|L-J-L-L7|L7FJLLF.|JLLF7-LL7JL-7J|7FLJ7JJ7|JL-J.L||J7-7|L|7L----J77FF| +L-J7-|LF-J-L-7J-F7F7JFJ-FFJ|F-JF7FJ||7LLJF-J|L7L7FL|L7LJ77FJL7|J-7|7L-JJ|.|L77L-.LJJ7.LLJ.FL|77||J.|FL7|F7.|JJ7|.FL7LF--JJL7|FJL-.L|-7L-7L|J +||LL.7|.7F7.7.|.|LJJFJ|--FJLL-7||L7||--LJL-7L7L7|J-|FJ7L.7.|FJ||7L-7.|JLF-7L7-JJ-||-FL7-J.7|.|FL|.FJLLJL-JFL-FFLL..|JLJLL-|-F|7|.|-LF.-.JFL. +F77LF|JF|-LJJF-7LF7.|-|-LJ7F|JLJ|FJLJJJ|7.FJFJ-||LFLJ|L.|..FL7|7J.||LJF7LLFJL||F77|F-J|F-J-7-|-7JF77JLJ-LFF.L7JFL7.FF7|L|L7|.J-L-77.LF7-7L-| +-JF7||7F7-7|.F7LJL7-F7|.F7F|J|LL|L7J|.FL--|FJ.|LJ.F-LF7F7---FJ|J|.F|JFLJ-7|JJL7-|L7JJF7J.|LJ.L|7FJ.|F7L|L||J.L-L7-L.F|7-L.L--J7L7L77J.L-JL7J +L-JL-|---.J-7|7|.F7-JF----FJL-7-|FJ|LFFF--LJ|F-|-7|J|LL||FJLL-J-FF-|JFL7L|JL7.L--JL|JF|L|-F.---|J|FJF|7L7L|FFF.LFF.F-7|||7JFF|-J7FLFJ7.F|FLJ +|-J.LLJFJ-JL|.J-7LJ-7.LFJ7L|-FJ-||.|||LJ|.L7|JLJL-F-F7LL|-7-LLL..|-J.L.|F|F--777LLF--||F|F7J7.|JL7-L7.-7L7LJ7|-FF|-7-7JFJ7---77|-7.L-FJFF7J| +77LL-J.-JJ-F--L-J-LF-F--7-.--|--LJ-FL-JJL7.7-JJ.FLJ-7-JLLL--7-|-|LLL7.--J.JJ-LF7-LLJ-L|J-LJ.LL7.LFJ.L|L-J--LL|7-7LJ-J|-7-J.|JL|JJ.7-L|JLJL.L \ No newline at end of file diff --git a/resources/2023/day10sample.txt b/resources/2023/day10sample.txt new file mode 100644 index 0000000..6933a28 --- /dev/null +++ b/resources/2023/day10sample.txt @@ -0,0 +1,9 @@ +........... +.S-------7. +.|F-----7|. +.||.....||. +.||.....||. +.|L-7.F-J|. +.|..|.|..|. +.L--J.L--J. +........... \ No newline at end of file diff --git a/resources/2023/day11.txt b/resources/2023/day11.txt new file mode 100644 index 0000000..21b77be --- /dev/null +++ b/resources/2023/day11.txt @@ -0,0 +1,140 @@ +.....#...............#......................................................................#.............................#..........#...... +........................................#............................#......#............................................................... +..............................#..............#....................................#..............................................#.......... +..............#........................................................................#.................................................... +..#...........................................................................................#............................................. +..................#.....................................#.....#......................................#.........#.......#.................... +...........#......................................#.....................#...........#................................................#...... +.............................#............................................................#.....................................#........... +.....#..................#.................#.........................#......................................#................................ +....................................#.................#........................#..........................................................#. +................#..............................#....................................................#....................................... +..............................................................#.........................#.......................#.....................#..... +............#...............#......................#.....................#..............................#................................... +......................................#...............................................................................#..................... +.........................................................#.................................................................................. +..............................................#............................................................................................. +..#.................#.....................................................................#.....#..........#..............#......#.......... +..............................................................................#............................................................. +..........................................#.........................#..............................................#........................ +.....#........#.............#...........................#...........................................#....................................... +..................................#...............#.............#.................#..........................#.....................#........ +.......................................................................#.................................................................... +...............................................................................................................................#.........#.. +#.......................................#....................................................#.........................#.................... +........#...............#....................................#...........................................#.................................. +...............................#............................................................................................................ +.........................................................#.................................................................................. +..#..........................................#........................................#.............#............................#.......... +......................#............................#.................#........#............................................................. +.........#.......#...........................................................................#.....................#.........#.........#.... +................................#............................................................................#.............................. +.........................................................................................#.................................................. +.#.........................................#.........#..........#.......................................................#................... +....................#.................#...............................................................#..................................... +............................................................................#............................................................... +........................#.........................................................................................#.................#....... +.............#.......................................................#......................................................#............... +.......#.................................#.....#..............................................................#............................. +#...............................#...............................................................#.....................#..................... +.....................................#...................#.......................#.....#.......................................#............ +..........................#.................#......#...................................................................................#.... +..............#............................................................................................................................. +...#..........................................................................#............................................#................ +.............................................................................................#.....................#......................#. +.......................................#..........................................................................................#......... +.......................................................................................................#.................................... +.....#.........#.................#.................#............#.........................#.................#............................... +............................#.....................................................#......................................................... +...........................................#................................................................................................ +....................................#.......................#.........................#............................#.....#.................. +............................................................................................................................................ +.....................#..................#................................#......#.....................................................#..... +.......................................................#.........#...............................#.....#.................................... +............#.................................................................................................................#............. +..............................................#..............#.......#.................................................#.................... +................................................................................................................#........................... +.........#.............................................................................#............#....................................... +.............................#...........................................#.....#............................................................ +.....#..........#.....#...........#.............#.....#.............................................................................#....... +...........................................#............................................................#.....#............................. +......................................#.........................#.........................#.....................................#........... +............................................................................................................................................ +.......#.....#.....#........................................#.................................#............................................. +.........................................#................................................................#.....#......#.................... +........................#.......#..................#.................................#.......................................#.......#...... +..............................................#............................................................................................. +...............................................................................#............................................................ +......................................................#..........#.......................................................................... +...#......#.................#.............#.............................#..........................#...............................#........ +.............................................................#........................#..........................#.........#................ +......................................#....................................................#.............................................#.. +............................................................................................................................................ +...............#......#.......................#.....#.......................................................#............................... +.#......#.......................#.........................#.......#....................................#.................................... +...............................................................................................#........................#......#.......#.... +............#...............#............#....................#........#..........#......................................................... +...............................................................................................................#............................ +..........................................................................................................#.................#............... +......................#........#.........................................................................................................#.. +....................................................................................#.....#.....#....................#...................... +.#.........#...............#........................................#...............................................................#....... +..................#......................................................#..........................#....................................... +.................................#.............#................................................................#.......#................... +........................#......................................................#..............#................................#............ +.....#..........................................................#.....#.................#..................................................# +.....................................#......#.........#...............................................#..................................... +............................................................................................................................................ +............................................................................................................................................ +.................................#..........................................#................#...................#..............#........... +.......#....................#............#.............................................#...................................#................ +..#................#........................................#.......#..............................#........................................ +........................#...........................................................................................................#....... +...........#..........................................#.........................#......................#.................................... +...........................................#................................................................................................ +......#...............................................................................#.........#........................................... +............................#.....................#................#........................................#...........#................... +..................#.........................................#............................................................................... +........................#...............#................................#.......#..............................#............#.............. +............#......................#.................#..................................................#..................................# +..#................................................................................................#........................................ +.........................................................................................................................#.................. +..................................................................#................................................#................#....... +.......#.....................................#.............................................................................................. +.................#...............#......#.....................#............................................................................. +....................................................................................#..................................#.................... +..............................................................................................#............#................................ +....#......................#................................................................................................................ +......................................................#.................................#..........................#.............#.......... +..........#.................................................................................................................#............... +.................................#..........#..................................#............................................................ +.......................................................................................................................................#.... +.......................................#..................................................................#......#.......................... +.............................#.........................................................#.......#............................................ +.........#....................................#............#.................................................................#.............. +...#...............................................................................#.................#...................................... +..................................................................................................................................#......... +....................#.............#...................................................................................#....................# +....................................................#...........#...........#............................................................... +.........................................................................................................#.................................. +..........#...............................#............................#.................................................................... +.............................................................#....................#.............................#..............#............ +.#...............#..........................................................................#..........................................#.... +............................#............................................................................................................... +............#......................................#............#..................................................................#........ +.......#...............................................................................................................#.................... +..................................#.......#..........................#........#...............#..........#....................#............. +....................#....................................#............................#..........................#.......................#.. +..............................................................#............................................................................. +..#............................#............................................................................#............................... +..............#.....................#...............................................................................................#....... +..........................#........................................#....................................#...........#....................... +..........................................#.................................#.................#............................................. +................................................#...........#..........#.....................................................#.............. +.........#.................................................................................................................................. +...................................................................................#............................#.......#................... +....#.............................#.............................#.......................................................................#... +.........................................#.........................................................#........................................ +....................#...........................................................................................................#........... +..............#........................................#..................................#...................#......................#...... +.........#.................#........................................#...........#........................................#.................. \ No newline at end of file diff --git a/resources/2023/day11sample.txt b/resources/2023/day11sample.txt new file mode 100644 index 0000000..a0bda53 --- /dev/null +++ b/resources/2023/day11sample.txt @@ -0,0 +1,10 @@ +...#...... +.......#.. +#......... +.......... +......#... +.#........ +.........# +.......... +.......#.. +#...#..... \ No newline at end of file diff --git a/resources/2023/day12.txt b/resources/2023/day12.txt new file mode 100644 index 0000000..55caa72 --- /dev/null +++ b/resources/2023/day12.txt @@ -0,0 +1,1000 @@ +.????#?.??? 1,3,3 +?#??#?##??.??? 7,1,1 +.???.??.?? 1,1,1 +##?.#????.???? 2,2,1,1 +??.#???..???.#? 1,2,1,1,1 +????.??.???#??#??? 1,1,1,1,2,2 +?#?#.??.??. 4,2 +????##?##?????? 1,6,1,2 +??.????..??????##?? 1,3,6 +#????#?.?##?##? 1,3,6 +?.???.?????? 1,1,1,1 +.??.?#???####?#.#? 1,1,8,2 +##??#???###?#??? 2,1,7,1 +#..?????????##? 1,2,2,2 +?????#???#???#????.? 1,2,3,1,3,1 +?#??##???????#?? 7,6 +.???????.?? 2,1,1 +?#??????.?#?? 7,4 +.##?????#?.????? 9,1 +.#?.?????.?# 1,1,2,1 +??#??#???.#. 5,1 +??????.##?###?# 1,2,6,1 +????##?#????#?????? 8,7,1 +????#????#??? 1,9 +???????#?????#.? 9,1 +.?????#????##.?? 4,3 +????.??????.?? 1,2 +??#.?.????##???#???. 3,1,11 +#??#???.#??.?????# 7,3,1,1,1 +??#?#.##????.?? 4,2,1,1 +?#?.????#????????. 3,5,1,1 +?#??????#?. 2,3 +#??#?#???? 1,5,1 +?.???#..????# 2,1,4 +.###???#??..????? 9,2 +?.????.?????#?????# 1,1,2,1,8 +.???#??????? 1,2,1,2 +?#????.??.? 2,2 +#??#??#?#?.??#???? 9,3,1,1 +#?#??#?....##? 4,2,2 +?????#???#?.??#?#??? 8,2,1,1 +??#??###???##????#.. 7,4,1 +??.????.##??????? 1,1,1,3,4 +#??#.??.##?#???? 2,1,1,6,1 +???..????. 1,1,2 +#?.??.#?##?.???.?? 2,1,4,3,1 +??????????#?#? 4,1,2,1 +??.???????#??.?#?.? 8,3 +?.##?.??.?. 2,2,1 +????##..?#??#???..? 4,7 +???#??.#?##???#?#? 1,1,4,1,2 +?.???#????.?.????? 6,1,1,1 +??...???##?? 1,1,4 +#?.#????#?????#?.??? 1,9,2,1 +???????.???.??. 3,1 +?.?#???.??????#??#?? 5,10 +?.??#??????.? 1,5,1 +???..??????? 1,1 +.#??.???#????? 1,1,6 +??.??.???###????#??? 1,2,8,1,1 +??.?..??????? 1,1,7 +?.??#??#?..#??# 1,1,5,1,1 +?????.#?#??#?...#? 1,1,7,1 +?#?#??#???#?#?#. 11,3 +.?#??#??.##?#?. 5,4 +?#.???????? 2,1,3 +???#???###?#??#????? 11,4 +??#?????.?#?# 4,2,4 +??.#.#.?????##??.# 2,1,1,8,1 +#??.???#.?????#?# 3,1,2,7 +.??#??#??#??.#?.? 7,2 +##????.??????. 5,1,1,1 +..?#..???##???????# 2,11 +?#?#?#??#??#????#??? 5,1,4,1,1 +?#?????#?????? 1,1,6 +??#??.?#????#???#? 1,3,1,2,1,4 +??.#?.????#?. 1,2,5 +??..?????.?. 1,2 +?????#?#..? 1,3,1 +?##?.?.???? 2,1,1 +.?##?#..#. 4,1 +.????#???. 4,2 +???????.##? 1,1,2 +.?????#?#?? 1,6 +??????????.?#. 2,1,2 +.??#?.???????..??.? 3,1,4,1,1 +?.?##????#??????.??? 1,3,7,1 +.?#???.#????? 3,1,2,1 +?.#?.??#????.?#..? 1,1,3,1,2,1 +??#???#??##???.# 1,1,5,1,1 +??.?.#????#?#.?##??# 1,1,6,5 +????#?..??#?????.?? 2,1,3,2,2 +.??#??????...##. 2,3,1,2 +?#??.?????#.??#. 2,1,5,1 +.??#?#????#...????? 10,1 +.#?##???.???#??.. 5,1 +#?.#??.?#??#??#??? 2,1,1,2,1,5 +?.#??????? 2,1 +???#?.??.?.#??? 1,1,1,1,3 +#?#?#.??#.#? 5,2,2 +#????.#?#???# 3,1,3,1 +#.?.?.????????? 1,1,2,4 +??#???????????.? 3,1,7,1 +???##.#????#?#??. 5,1,4 +??????.????. 3,3 +#?#??.???????? 1,3,2,1 +?.???..?..# 2,1,1 +???#??????#?? 6,1,3 +#?????.#????## 1,2,7 +????????????#?#??? 3,2,5 +#??.?.?????#? 1,1,1,2 +?.##??????#????.#??? 1,12,1,2 +?????.????#???? 1,1,1,3,1 +?#?...#?.??##??#? 2,1,6 +.???.#.#?#..?? 2,1,3,1 +.????#.?.????? 5,3 +.????.???? 1,3 +.?#???????#?#.??? 4,6,1 +????##.???.? 6,2 +???#???.?##??? 7,3 +???#?.????.????##### 3,1,1,2,6 +.????????.??? 4,1,1 +?#??.???.??. 4,1,1,1 +?#.#??.?#????#?????? 2,2,2,2,3,2 +?.#???.???? 4,1 +##????..??##??#????? 2,1,11 +???###?????##.?#?? 12,3 +???#????.?????? 7,1,2 +???.???#????????? 1,6,3,1 +???.??.???#??#..?? 1,1,1,3,1,1 +..#.??.??#. 1,1,2 +.????????????????? 3,4,4 +????.??...??#. 1,1,1,1 +??????#???#??????#?? 1,1,8,2,2 +??#???##????? 2,4,2 +#.????#??????? 1,1,6 +.?#?#?.????????#? 1,2,8 +.???.????. 2,2 +?????##?##????..#??? 11,2,3 +.?#????#????.? 1,1,5,1 +.???#???#?##?# 3,6 +#??????#???#??? 8,2,1 +?#????.???? 5,2 +???.?##?????..##??? 2,6,1,5 +#???.#??#???#??? 3,2,1,2,1 +???.?##???. 2,3 +##???.???#.??? 4,1,2,1 +?.#?#??###????????#? 1,1,9,2,2 +?????##?#???. 1,1,8 +?#????????.?????? 8,2,1 +?.#.#?..#??? 1,1,2,1 +???.??####..??? 1,6,1 +???.#?#????##?#. 3,1,2,4 +???????##???#??#???? 1,1,3,8 +.?#???##?????????? 9,4 +?.###????#????##?? 5,9 +????##?#????? 1,3,1,2 +???.??##?#?#??.#. 3,7,1 +..?????.?. 4,1 +???.?#??#??##????. 2,1,1,2,1,1 +?#?#??#???#? 2,2,1,3 +?.#?#????#?? 1,1,4,2 +..??..????.#????? 2,1 +.#?#?#?##???.# 1,3,5,1 +?##?.??.#?.#?????. 3,1,1,2,2 +?????.?.???#??.?.??? 2,1,1,4,1,3 +????#???#?.#? 5,1,1,1 +??????.#??..?#???.## 1,2,1,1,4,2 +?????#?.???..##?#? 1,1,1,1,1,4 +???.??...??????????? 4,2 +??#?#.??#???? 1,3,1,2 +???##???#.??.?? 9,1 +????????#??#??#??# 1,11,1,1 +????????????..? 2,6,1 +?.????#??.? 1,4 +??#?#???### 3,3 +.??##?.#.? 3,1,1 +?###?#?####???????. 16,1 +??#??#?#??.#?? 2,4,2 +???##??#.?. 4,1,1 +.??#????#?##?#??? 1,2,9,1 +???.?#????.?.??#??## 3,3,2,1,6 +.???????#???. 3,1,1,1 +?.?##??.?#?##??#... 3,7 +?????..??#??.? 3,3,1 +.?...?????? 1,1,1 +?#?..#??.???????.?? 1,1,1,1,4,1 +??##.????#?.?????? 3,1,1,4 +#.???#?##??.?#????? 1,9,2,1 +.?.???#??.??####?? 6,4 +?..???.?##??#.???? 1,1,3,1,3 +?.#..?.?#?.#??? 1,1,3,2 +.?.????##.#?? 1,5,2 +#??????#?????#?.?#? 1,1,9,3 +.??#????.???#?? 1,3 +#?.??????? 2,1,1 +??.????????## 2,1,2,3 +?.???????..????????? 6,3 +??????????##???? 1,1,7 +???????.?#?.???##??? 3,3,5 +???.??.???#?##??#?.? 1,11 +#.?#?#??#.??????.? 1,4,1,3,1,1 +?#?.???????.#. 1,3,1,1 +##????.?#.#? 2,1,2,2 +?????#??#????? 7,1 +?.????#???????? 5,2,2 +.??##????? 1,7 +???#??##???.???#??? 8,1,2,1,2 +??????????#?#??#???? 1,1,1,5,2,1 +????????.?# 1,2,2 +?#??.???..#? 3,3,2 +??#?????#??#?. 4,1,5 +?.??#.#??? 1,1,3 +??????#???#????. 2,9 +??#??#??.?#??#??. 1,4,1,2,3 +###?????.??????#? 7,1,1,1 +?.??#?????#.?????# 3,3,1,3,1 +?...?????.????. 1,2,3 +##??#???.?? 3,4 +?#??#??.??#?# 3,1,1,3 +??####?.?? 5,2 +.?#??????##??#??#?? 7,10 +.?#???????.? 5,1 +??.???##????#?#?.#? 1,5,6,1 +??????#??##?##?.? 1,12 +????????????##?. 1,1,4 +??.?#?.??##. 1,2,3 +??#??????.?#? 4,2,1 +.?.??#?#??? 3,1 +?.#?????#??##???#? 1,5,2,3,2 +.#??..?#???#??? 2,8 +#..?????????? 1,9 +?#???..#??? 3,3 +?#??###?#????????.?. 11,2 +.???????.##?#?????## 2,11 +.????.???# 1,1,2 +?.??.???.?. 2,1,1 +???.###??.??# 1,3,1,1 +?.???.#??#??.??.#?? 1,3,6,1,1 +???##???#???????. 1,11,1 +??.??.?????###? 1,2,6 +?#???#?#?????? 1,3,3 +??????????#? 1,3,2 +???#????????#??.. 4,5 +???????#??.?? 5,1 +??.?##???#?????#? 2,4,1,1,1 +#.?.??#?????##? 1,3,2,4 +??????#??#??# 7,4 +?#.?#??#????#??#??? 2,2,2,2,2,1 +???#??.#???.#? 6,1,1,2 +.??????#?. 1,4 +?#?#???#??? 4,2 +?#????.#.??????.?.?. 6,1,4,1,1,1 +#???.??.#.?... 4,1,1,1 +?.??#??#?????###?? 3,10 +??.?????..?.?..?? 1,5,1,1,1 +?#?????.#? 5,2 +??#?.???.#??? 2,1 +??.?.??#????## 1,8 +?#???#.?##? 1,2,3 +?#.??#?#??#. 1,1,1,1 +?????????###?.. 3,6 +?.#??#?????????# 1,3,6 +?????.#.?? 5,1,1 +#?.?#??.#???..?? 1,3,1,1,1 +??????#?.?? 1,4,1 +?.??#?.??.???.?? 3,1,1,1 +#????##??#??.#?#?# 1,7,1,1,3 +????#????.#?#???### 1,2,3,5 +.?##??##????##?.#.? 2,3,4,1 +??#.??#???????# 3,2,3,2 +??????.??.?# 6,1,1 +??????###???#?? 1,7,2 +.?.?#???#????#.? 1,4,3,1,1 +.?#.?.?????#???????? 1,1,11 +?????#????? 4,1 +????.#?#?#????.? 3,8,1 +????????????#?.?? 1,3,1,1,2 +???#.?##?## 1,1,6 +???..?.??###??##??? 2,1,10 +..????#??? 6,1 +.???.????#? 2,2 +????.?#?#. 1,1,1 +#?##????#??.??#. 1,2,4,1 +?#.????##? 1,1,3 +????.???##. 2,4 +??#?????.????#??.? 1,4,1,3,1,1 +.???????????#??# 4,1,4,1 +.???.???????????#?? 1,1,1,2,2,1 +.#????.??? 3,1,1 +.#??#??..??.????? 6,1,1,3 +??#??#???.?#??? 1,4,2,1,2 +????##.??.?##??.? 4,1,5 +.##????????##.????. 12,4 +#????##????#???##.#? 1,1,3,1,6,1 +.??#?????##???#???? 11,4 +??????#.?#?????# 3,1,1,2,4 +##?????..?? 3,2,2 +????.??.#?.## 1,2,1,2 +..?.????.?# 1,4,1 +????.#?..#???.#. 2,2,1,1,1 +#???#..???#??#?? 1,1,6 +?.???###??? 5,1 +?.??????.? 1,5 +????#???????.??????. 2,1,4,3,1 +#?#????#??.# 1,3,2,1 +???#??.??.? 1,2,1 +####??#??#?. 5,2,1 +..?.?.??#?.# 1,1,3,1 +??.?..??#?? 1,1,5 +?????#.?.??#?.??#?## 5,3,6 +??????#????#??.????. 11,1 +???.#?#???#?##?#.. 1,1,10 +?#??#?###.?.???#. 9,2,1 +?????#?.?????? 6,4 +???##????#???##? 3,7 +?????##?##???#..??? 6,6,2 +.?##???#?????? 8,1,1 +????..??#? 1,3 +??.?###????? 4,2 +??..?#..?.? 2,1 +???????#.?##? 1,2,3 +?###??#??????? 5,7 +.????.??#.?#. 3,2,1 +????..??#???## 1,3,3 +???..?????? 1,2,1 +?.????.??.?? 3,1,1 +#???.?#.???? 1,2,2 +#?#???.??#?#.#? 4,1,2,1,1 +.##??#??#??#?. 6,5 +???##???.#???#?. 7,6 +?##?????????#? 2,6,1 +?.?????#???#????? 1,5,3 +.????#???.?#??.?## 3,1,2,1,1,2 +#?#???##????.????.?. 9,4 +?.##.??#??#???? 2,1,1,5 +??..#??##..?? 1,5,1 +????#?#??#?????# 11,2 +???#?.?.???? 1,1,1,1 +???????.????#?#???? 1,1,1,1,1,7 +.?##?.??.?? 2,1 +?##????.?#????#. 5,3,3 +??????#?##? 1,7 +???#?.???.??# 4,1,1 +?..??#..??? 3,2 +?.??##.??#.? 4,1 +?????.???#?????? 1,1 +???#??????? 6,1 +?????#?##..##?? 2,6,4 +?###?#?#.?#?#??##? 5,1,5,3 +?#?#?#?.?????#??? 6,1,5 +.????#?.?.#??????? 2,3,1,1,1,1 +?#??#.??????#.#???#. 1,1,3,1,5 +??#.???##.?? 1,1,3,1 +.##????#???????#? 2,1,1,7 +??#???#????.???.??## 1,2,2,1,1,4 +???##?#?##????? 8,2 +??#?###?????.??. 9,1 +???##?##?#???#? 8,2 +?????#?????#.? 9,1 +??.??##?#? 3,1 +?????.?##?. 2,2 +???.?????#??#?? 2,1,8 +?#?????#???#??#????. 17,1 +????.????? 2,2 +???###..#?? 5,1 +??#?????##??#??#? 3,4,4 +?#??#??.???#?#??.?.? 5,5 +??#??????..??? 6,2,2 +???#???###??? 4,4 +?.?#??.??. 4,1 +.#..?#??????? 1,3,1 +?.?.???.???. 1,1,1,2 +?##?????##?#.??..#? 11,1,1 +.??#????.?.?????#? 2,1,1,2,3 +?.??????#??#?.??? 1,2,2,1,3 +????.?#.#??.?#?#? 4,1,3,4 +??##???#??.??#.?. 4,3,1,3,1 +.??#?#???????#??#. 1,14 +??.??#????????.??? 1,10,1 +?#.??##?#????.??? 2,2,2,1,2 +?????#???.???. 2,1,2,2 +??##??#??.????????#? 1,6,7,1 +??#?##??##???.???? 2,3,3,3 +..??#?#???##??#? 4,6 +?????????. 3,3 +.???#?????????##??.# 1,6,1,6,1 +??????#?##????? 4,1,2,1,1 +?#..?#?.???#??? 1,3,2,1 +?.?.??###?? 1,1,3 +?.??#???.?#?. 4,3 +?.#.??.????. 1,1,1,2 +?????#???#?.???????? 4,2,2,4,2 +???.?.?.#??.???#???? 1,1,1,3,1,6 +?#?#????#?#..? 3,1,4 +#??????.?..??? 3,1,1,1 +??.#???##????#???? 1,1,4,3,1 +????#?#.??##? 5,3 +??.??.?????#??#?? 1,1,2,6 +??.?????###???# 1,9,1 +.??.???###?????????. 7,2 +?????.?.??## 2,1,2 +?.??.#???.?? 1,1,4,2 +#?##??#.????? 7,1,1 +?.###?.##?? 4,3 +??#????.???????#? 7,1,6 +.##.#..???.?????.?? 2,1,1,1,4,1 +??#.???#.?. 2,1 +.??????####?.?.#??.? 1,1,7,2,1 +??#?#????.?.?? 5,1,1,2 +#?.?????###? 1,8 +###????#?? 3,2 +???#???#????#.?? 7,1,1 +??#?#???.?#? 4,3 +#..??#??#??????? 1,2,4,2 +???##??????.?? 7,1 +?#?#.??????????#?. 4,7,2 +#???#???#???????. 12,1 +?#??#??????##??? 1,2,1,5 +???#???#####??..???. 3,7,1 +.????.????#?#?#??? 3,10 +?..##.???????#?? 1,2,1,5 +?.#?##..??.? 1,4,1,1 +?????##?#?#??? 1,9 +?#.??.?#?#?.#? 1,1,3,2 +.##??##?.???? 2,3,2 +???#?.???..?#??????. 4,1,2,1,1,1 +..#?##?##??#???.??? 12,2 +?????#.?.??.?.. 1,4,1,1 +?.?.?#??.?????##?? 1,2,1,1,3,1 +??#?##?#??#???## 6,1,2,2 +??????#??#.???#??.. 1,8,2,3 +?.??##??#????.#?#? 1,5,1,1,1 +?#???##???#???#????? 1,5,10 +.????#?##.??#???. 4,3 +..??#.????????????? 2,5 +..#???##?.? 1,3 +.??#???..??? 4,1 +?#?#????#????..##? 4,7,2 +.?#?##???#???.?.?#?? 12,2 +##?..##??#??.??.? 3,6,1 +?..???#?#???????#??? 1,1,4,1,2,4 +#?#??##?????#?. 1,6,2 +.?.#?#????????? 1,3,3,2 +????.??#??#???##?#? 3,13 +??##.?.???.?. 3,1,1 +?#?#????????#?.#. 2,4,2,1,1 +.#?#?.????# 4,4 +????..???# 3,1,1 +.????.????????.???? 3,1,2 +???#???#?????#?????# 1,15,1 +..#?.?????#??? 2,5,1 +#.?.?.?##.?? 1,2 +??.??#.????##?..?? 1,1,1,4,1 +????????.??? 5,3 +#?.##?.?#? 1,3,1 +?????..##? 2,2 +#???#?????.??.????? 1,3,1,1,3 +???.#???#??#?????#? 3,11,1 +??####??#.#?#?? 6,1,3 +.??#?????.?.##??#?#? 4,7 +.??.?#?.??????? 1,2,2,1 +?.????..#????. 2,4 +?????.???.?#??#?#? 2,1,1,7 +##??????#? 2,2,3 +#.??#.#.??? 1,2,1 +??..????????? 1,2,1 +???..?#.?. 2,1 +?###?????##?????.. 4,4,3 +??#??????..????? 1,1,1,1,3 +#????????#??#??#. 3,1,9 +.?#????#?#.??? 3,3 +???##????.#?? 1,6,2 +?#?#?...?.???#???? 4,1,3 +#???#?#????#??#.??# 3,1,1,5,1,1 +?#???????#????? 2,2,2,1 +????#??#??????? 12,1 +#???#??#?.#?#. 5,1,3 +.??###????##?##??. 4,8 +??????..????.??#??? 4,2 +?#??.????.??#..#???? 2,1,3,3,4 +.#???#??#?..?? 2,3,1,2 +?#????..???.#??? 3,2,1,1,1 +????#???..?? 1,3,1,1 +?#?????##?#.??.#.? 1,1,6,2,1,1 +????.?.#.? 3,1 +?#????#??#??????.?.. 12,1,1 +?.??##???#????. 1,1,10 +#????.??##???? 1,1,6 +???#?.??##?#? 1,2,1,5 +???##??#???.????? 3,2,1,1 +?#????.??##??# 3,1,7 +.??????##?#??.### 1,8,3 +#??##??#??#?? 1,10 +?##?#?#???###???.?#? 8,4,1,3 +??.????#?????? 1,9 +???#???????.???#??? 7,6 +?.??#???.????##?. 2,4 +???????#??#.??#? 1,8,2 +??#?????#??#?????. 2,1,8 +???..?#?.?.###? 1,3,1,3 +.?????#????###?..?? 4,9,2 +????#?#?#.?#????##. 6,3,3 +?.#?#???.????# 1,5,1,1 +..##?.?#?.?????? 2,2,1,1 +?###??#??.????.? 5,1,1,1,1 +.?###?#?#?##? 7,2 +?#??#??????#?###? 1,1,2,8 +.???#?.??.#..????? 4,1,1,1,1,1 +.??#?????????? 3,1,4 +.?????#..#??? 5,4 +.#.???#???#.? 1,1,1,1 +.?##??#???###?#??? 15,1 +??#.?????????.?? 1,2,4,2 +##???????#???.?? 2,9,1 +#?#.??.??#???.#.?#. 1,1,1,5,1,2 +??#?.?#?.??? 2,2,1 +?##???##.?.??#???#?? 7,3,2 +???.???##????????.?# 2,8,1,1,2 +.???.?.??. 2,1 +??.???#??#?##??? 1,1,7,1 +??#.??????? 1,1,2 +??????.?.?# 1,1,2 +??.??#?.?? 3,1 +#??.?#?????? 1,3,1 +?.??#??..???.???? 5,1,1,2 +.?#?..#?????.? 2,4 +#??#?#????.?..? 8,1 +#?##.##.????. 4,2,2,1 +.?##?????##?? 2,3,3 +#?????????#?#? 4,3,4 +?????#?###??# 1,1,6,1 +????#???#?#?#?##??#? 3,1,9 +?.????????. 2,1 +?.???..?????. 1,1,1,1 +#?.??#?.##????.?? 1,2,3,1,1 +??#???.#??.?#?#.. 3,2,4 +.???##??##???..??#. 4,3,1,1,1 +.?.#???#??????#??#?? 1,5,1,1,1,1 +?.?????.??.??#? 2,1,3 +##?##????????.. 6,1,1,1 +??????.?.#????? 3,1,1,2,2 +??#?.????? 2,3 +.????.????? 3,1,1 +..???.#..?#?. 3,1,1 +#?##????#? 5,3 +#????#?.???...#? 6,3,1 +.??.?#???#??#????? 3,9 +?.?#???#???#??. 2,7 +.??????#????#?#??## 1,1,14 +??#??.???? 3,4 +??#????##????##?? 2,9 +???#??#???...? 2,5,1 +?????..?#.??? 1,1,2,1 +????###?...##?#?. 7,5 +#????#??????.?#??#? 1,7,1,2 +???##?#?#??#?? 5,2,2 +#???..????#..#????? 4,1,1,1,1,1 +???????????#??#. 2,8 +#???#????##??????# 1,1,1,1,7,1 +???....?????.??#???? 2,4,5 +?#?.?????. 1,4 +?..##?.???#??# 1,3,1,5 +?#???????.? 4,3 +??.?.????#???? 1,1,2,4 +#?##?##??.?#?? 4,2,3 +???#????.#??#. 5,1,1,1 +??????????? 1,1,2 +???????##?#?##???# 1,5,4,1,1 +.?#?##.?????? 5,1,1,1 +.#???.?.#?# 1,2,3 +?#.?#????.?????? 1,4,2,2 +#?#.#??????#???#???? 1,1,4,1,3,2 +?????????##? 4,6 +??.??????#??.?????? 1,2,1,3,1,1 +.??.#????#???#.? 1,2,5,1 +??#.???#?.#?.#?#??#? 2,2,1,2,6 +..?.???????? 1,3,1,1 +??#???#?????.??#? 4,4,1,4 +.?####???.???? 6,1 +????????#?.??????? 1,8,1,2 +???#?????#.??.#??. 1,1,1,1,1,3 +??.???..?? 1,1,1 +??????.?#???.???? 5,3,4 +????#????????? 2,4,4 +?##??.???????#.? 5,3 +.?##?#???##?#???#??? 7,4,3,1 +?????##.??# 1,3,1 +.?#?????.???#...?? 1,2,3 +?..#.???????#.. 1,6 +???#???#?? 1,2,1 +.???.?????????#? 2,1,1,1,2 +?????#.?.?#?. 6,1 +..#?.?#?.#??? 1,2,3 +???.?#????#?###.?? 1,11 +.?#?#.#?.??.????#?. 1,1,2,2,2,1 +??#?????###???##.#? 4,5,2,1 +?.#?????#??#??.???? 1,1,9,2 +????#?.#?.?? 1,3,1,1 +#???#.???.??? 1,1,3,1 +???##.?.????? 4,4 +????##?##??#?#?#???. 3,9,2 +?..?#?#.?.?????.?..? 1,3,1,5,1,1 +.??.?..???? 2,1,3 +.?###..??#?? 4,3 +.##???????? 2,4 +?#.?#?#?#?#? 1,3,1,1 +??#??.???? 3,3 +??????#.???##?#??#?? 7,3,1,2 +??#?##?#?##?????#?#? 14,3 +??.#???..#?#??????? 2,2,1,10 +?????#?###????#.. 2,7,3 +?.?????#?#?.?? 1,5 +?????????.??#???# 8,1,1,3 +#??###???#?????? 7,2,1,2 +??#??#?#?.???? 2,4,1,2 +.??#?.??.###???#???? 2,9 +.##.?#??????#.#???# 2,4,1,2,2 +?.#???????#????#?## 1,1,8,1,2 +???????##???.?? 2,8 +??????#??.?.?????? 1,5,1,1,1,1 +#???.##??????##? 1,10 +???.?????.????.# 1,1,5,2,1 +#?????.?##?. 1,2,1,3 +???#?.#?.#??##?. 2,1,1,4 +????#.?.??????? 2,2,1,3,1 +#.????????? 1,7 +#?????#..??##?#. 1,3,4,1 +?????.###?#?.#?????? 2,1,5,3,1,1 +.?????#??????????#. 1,4,1,1,1,1 +??.??#.???#?????? 1,2,2,3,3 +???#???##??#.?#??#? 2,1,4,1,4 +??.?##?.?#??????##?. 1,3,9 +.???#??#?# 1,3 +?????????#??. 2,2,4 +??###??#??????? 8,1,1 +?#???????#..#?#??? 6,1,1,3,2 +?.??????#?#?#??.#??? 1,1,1,9,1,1 +?#???#????.?.???.#? 8,1,1,1,2 +#?###?????????# 8,1,1,1 +?#??#?.#?..??##?? 6,2,3 +#??????##.??.?# 3,3,2 +.???.??.#??? 1,3 +?.????????? 1,1 +??#?????.?#?. 1,6,2 +??#???.?...#. 3,1 +?.?###?#??. 1,5,1 +.?.???????#????#???# 1,1,10,1 +?.#?#?#?#?????.. 3,8 +.????#?.??. 1,2,1 +.#?#..??#?#..#?.# 3,1,3,2,1 +#??#???#????##????? 9,8 +?.#?##?????? 1,5,1,1 +.?#####?#.?.#???.?? 6,1,1,2,1,1 +???????.?? 4,1 +??????????.???????? 6,1,1 +?#?.???##????#???## 1,8,2 +?.???.????#??#?#??#? 1,1,1,1,9 +??#????.?#.? 4,2 +?.?.#??##?. 1,6 +.?????.#.? 1,1,1 +??#???.?#??#? 1,1,3,1 +???????.#.#??. 1,2,1,3 +?#????####??#?????? 1,1,9,1,1 +.???.?#??.??.#?? 2,4,1,1 +?.??????#? 3,4 +?????.#????..???. 2,1,3,1,1 +.?????..???. 1,2 +??#??.????? 1,2 +#?#??.?.????#?? 5,1,1,1,1 +??##?.??#?.? 4,1 +.??#???#..??? 3,1,1,1 +??.?.??#??##?#????# 1,1,7,6 +?#?#???????.??##???? 3,2,2,5 +??.??#?#.. 1,4 +.???.????#??#????# 1,2,9 +??????#.????..??? 2,1,1,3,1 +?.#.?????#? 1,2,1 +???#.#?.#???#? 3,1,6 +???????.?? 3,1,2 +??????????????#??## 1,1,6,1,2 +???###?.??#?#??.?#? 6,1,1,1,1,1 +.?????#??.?? 4,1 +??#.?#?##??.??.??? 3,7,1,1 +?.?????#?.#?.? 1,6,1,1 +????.#?##???#? 1,4,1 +??#???##??#?????? 6,6 +##??#????????????. 7,6,2 +#.?.?????##???.???? 1,3,6,1 +?##???.????.?.?? 3,1,2,1,2 +.?#??????.? 3,2 +??#??????????#?##?? 4,6 +?????.#?????????? 4,1,7,1 +??????.???#? 1,3,1,1 +#??#??#??#??#?#??? 5,1,1,4,1 +.??###???#?????..#? 13,1 +??.#?#???#?##? 1,10 +????#??#.?..? 3,1,1,1 +??#??.?????? 4,4 +????#?#??????#?.?. 4,5 +#?.????????#. 2,1,1,2 +.??##?????.?..?????? 8,5 +??????????.??#?#??.? 1,1,3,4 +?????#?##?????? 1,11 +.??#.??#?? 3,3 +?..#.??#?# 1,5 +???.????.#???.?? 3,1,1,3,2 +?#????#??????#?#. 8,1,4 +?##?.??????? 3,1,4 +????????????##?#??.. 2,6,5 +??##??.?#?#?. 5,3 +???.??.##??? 1,1,2,2 +.?#??.?#?. 2,3 +???????????? 1,4,1 +????#???#??#?#???#. 2,1,10 +?#.?#??.?..##?.#.#. 2,3,3,1,1 +??##??#??. 2,1,1 +.#????#?.?#?# 3,3,4 +?.?..?#????#????? 1,1,8,1,1 +?????.???????###???. 1,3,13 +?#?#?????. 4,1 +????##????#?.# 11,1 +..#?#?#??.??? 6,1 +#???.????#?#.?#? 1,2,6,1 +#?..?.???#?#??? 2,1,6 +.?#?#?#.???#??#.? 6,5 +?.#???????.?? 1,4,1 +??##?##???#.. 7,1 +??#?.??????# 4,1,2 +##.#????#??.# 2,7,1 +??##???????.#?. 5,2,2,2 +?.?????.??###??#???? 2,10 +??#??#?.??.??? 4,1,1,1 +?.???#????##?? 1,3,5 +?#?????.???????#.# 2,1,1,8,1 +??#?????###? 3,1,5 +?????..#??????# 4,6,1 +???..????#.?????# 3,1,1,2,1 +??#.???#???#?? 1,1,9 +??.#???#..#?..? 1,5,1,1 +?..??????.? 1,2,1 +?????.?????#??? 2,1,3,1,1 +.??????????.??.. 5,3,2 +#????????..#???????# 1,5,9 +??.#????#?? 1,2,1 +?????.???#????#??.?. 1,11 +??##??#??.?.??#.?.?. 8,3 +???.??????????##? 2,1,6,3 +?##??#??.??#? 3,1,1,1 +?#?#???#????#?? 3,3,4 +#??.?????#.?.??. 1,1,2,1,2 +?????????????#??.## 10,1,1,2 +?????.???? 3,4 +..#???#?#? 1,5 +????.##???#?? 1,3,1,1 +?.#?.????. 1,1 +.???.???#?.? 1,1,2,1 +?????#?.#???.# 5,2,1 +????#.?.???#?#???#?# 2,2,2,1,7 +?#.??#.?#??#?????. 2,2,2,3,1 +??#???##.?? 7,1 +.??????#??#.?.? 1,1,1,2,1 +??????????? 2,4 +..???.#.????? 1,1,1,1 +?##???#?????#?#.? 4,8,1 +??.?????????#??. 3,7 +.??##??#???#.?????# 7,1,1,2 +#??????#?.#. 1,2,1,1 +#??????????#? 6,1,2 +..??#??.??#?#????? 4,3 +??##?.?.?## 2,2 +???.?#???#?? 1,2,3 +?#????.?..?#??.#??? 5,2,2 +?#?.???#?????.. 2,7 +??#?.??.???????#??. 2,10 +#?#???#????#???.? 3,3,2,1,1 +.??.#??????? 1,8 +.?..???#???#???#### 1,1,12 +#????#??##? 2,3,3 +#??.???#???# 1,1,7 +???#??###?#????#?#? 1,1,4,8 +??..??.?????#.?? 1,1,6,2 +?????????????.???? 3,2,1,3,1 +?###??#?????? 10,1 +.?.?.?#??? 1,3 +??#?..?????.#??#??? 2,1,1,1,4,1 +#.?.?#?.?? 1,1,1 +??#??????. 1,1,3 +.#???..?.??? 3,1 +??????????#??#?.?? 2,4,3,3,1 +#?##.?????????#???.? 4,6 +??#???.##???##? 1,1,1,7 +##?#?.??.????????# 2,1,1,1,4,1 +?#??..#?.???.#?? 1,1,1,2,2 +???..???..??#???? 2,1,5,1 +???#?????#. 1,2,4 +?.???#.?#. 4,2 +????#????#?????? 6,6 +#?#?##???.#..?.##.?? 9,1,1,2,2 +..?###.??#?????. 4,4 +.?#????#.#?## 3,2,4 +??.???.#??#?#???? 1,3,6,1,1 +?..?#????.?#.??? 1,6,1,3 +?????#.??##????.#? 1,1,1,4,3,2 +????#???#??? 2,5 +.#??#.???.? 4,1 +??#??.?????????? 1,1,1,4 +???##??.?????????.?? 6,2,2,2,1 +??.????#?# 1,1,4 +?#?#..????#??#?. 3,4,2 +?#?.???????##????? 2,13 +.??.?.?.#?.? 1,1,1,1 +?##?????.???#?.? 4,2 +???#???.??#????# 6,7 +????..??.?? 3,2,2 +???.????.#?.? 1,4,1,1 +?.??#.#???#????#?.? 1,1,6,3,1 +#.#???#??.????.. 1,7,1,1 +.?#?.?.??##?.#??? 3,1,5,1,1 +.????.#.?????#?????? 1,2,1,4,5,1 +#?????#?????????? 1,9,1,1 +??.?#???????? 3,5 +?#???##??.#. 2,3,1 +????????#?#??????.?? 12,1,1,2 +#?#?##????.??.??? 1,8,1,2 +.??#.??#??.? 3,2 +????#??#?.? 2,2 +??#..#????.#???#?? 2,5,1,4 +???##?#?????.? 6,4 +#.#.??.????#???. 1,1,2,5,1 +???#??#??..????#.??? 6,4 +??#?.#.#??????#.##?? 3,1,4,3,4 +.?..???#????# 1,7 +?????.?#.??? 5,2 +????##..?#?.?#? 6,2,2 +?#??????#?. 3,1,1 +?.??##?.#?????#?#??? 3,12 +?.?????????????#?? 1,1,10 +?????.#????#.#?? 1,1,6,1,1 +##??.?#??.?. 4,4 +??????#??#??#???.# 2,1,7,1 +??#?????.? 2,1 +#??..?#??#???????#?? 1,1,2,10 +???#????#???#?. 1,11 +?.???##?.#???#.??? 1,1,4,3,1,1 +##.?????#?? 2,2,2 +???.#???#?.??##??? 2,1,2,6 +??????.?#??.??# 1,2,4,1,1 +.?#????.?#? 4,2 +??.??#???? 2,6 +??????????..??.. 6,2,1 +?#.?????##? 1,7 +#?????????? 1,6,1 +?.???.???????#? 1,9 +??#???.?.?. 1,1 +??#??????????? 1,6,1 +.???#??#??????? 5,2 +??#??????##????.?? 13,1 +?#?.#?????##??#? 2,1,1,6 +?.#???.??? 2,2 +.???#??#?#??#?#?? 1,7,4 +##???#?????.#???? 2,8,1,2 +??##.????..? 4,1,1,1 +#????#?##?#??? 1,11 +????.?#.??????#?.?? 2,2,5,2,1 +?.??#????? 1,4 +#?.#????????.?? 1,3,1,2,1 +##???#??.?..???.?? 8,1,2,2 +?????#?##? 2,5 +????.???#???.?#.?. 3,1,4,2,1 +..#?.##???????##?? 1,6,1,3 +??.?#????#??#. 3,5 +..?#?????#?.##??##?# 4,1,1,8 +??..??#????? 2,2,2 +?????..????.? 3,1,1 +????##...??#??.?.## 5,5,2 +#??#.?????????. 4,7 +?????.????? 1,2,4 +?#???#.???# 2,2,4 +??????????.. 1,3 +.??.???#????. 1,2,3 +.??#?.?.?? 1,1,1 +?????.????#??.##???. 1,2,1,4,3,1 +?#?????????.?????? 9,4 +.???#?..?#???.. 3,4 +??.?#?????#???# 2,1,2,1,1 +?.???.#???# 1,5 +???????#.?.? 4,1,1,1 +?????#???? 2,3 +????????#?.? 1,1,2 +??.??#??#?# 1,6,1 +.#?#??#???????##?.. 1,6,6 +#???..????? 1,2,1 +?##??##..??#??### 2,3,2,3 +#??#??.?.??? 1,3,1,2 +??##??...# 2,1,1 +#??????#???#???##.?? 4,1,1,2,4,1 +?.??#..??# 1,3,3 +?..?#???????? 1,2,1,2 +???.?.???? 3,3 +?###?.#.?.??..#???. 5,1,2,1,1 +???#??#?#??#?.???? 12,1 +??#????#????..#??#? 10,1,5 +??????##?.? 1,1,2 +??#.#..??? 3,1,2 +#????###??#??##??#? 1,1,5,1,2,2 +?????.#??#???#?. 1,8 +.??#???#??????????? 7,5 +??..?#?#?#????.??.? 9,2 +.?.????##??#?#???# 1,12,1 +#?????.????#??# 2,1,1,3,1 +??##???#?#??? 4,1,2 +????.?#??? 1,2,1 +???..#.?##?.?#????? 1,1,3,7 +?..?#?.??##????##.# 1,3,1,4,2,1 +????????.####? 5,1,5 +#?#??????##?. 7,2 +.???#????#??????. 1,11 +?#?.??#?##??????? 2,5,4 +???#??.#??###??.??? 6,8,2 +.??#????#?#?????? 8,3 +??##????###?##. 4,7 +???.?#???????#??.. 2,1,3,4 +?.??##??.??. 5,1 +?..#??..????#?#. 2,5,1 +?????#??##???#?? 1,11,1 +?##?##???? 2,6 +???##??????###??.??. 7,3,2 +????#??##?#?#. 4,4,1 +?????????#??? 1,1,4 +??##?.?#??? 5,2,1 +.??..???#? 1,3 +?#????????#???.. 4,1,2,1 +.#??#?..#???????#??. 1,1,5,3 +??#?#.???### 2,1,1,3 +.???#.????? 4,1 +????????????? 1,1,3,3 +?????#?.???#???? 1,2,1,1,6 +#??????.????#?? 5,2,3 +??????##???#?.??#?? 9,2 +??#.#??.??. 1,1,2 +???#?.?.?. 1,2,1 +##???.?### 4,4 +#.?#?#??????. 1,4,1 +??#?.???#.??.? 2,3,1 +??#?##??????..?#??. 11,2 +???##??###.???.???? 10,1,1,1 +?#???#?.?.#?#?#?#??? 2,2,1,7,1 +????????#.####??#?? 1,2,1,1,9 +.###..??.? 3,1,1 +??.?##?.?????# 2,4,2 +?.?????#?????#?#?.?. 7,5 +????..?..#??? 1,1,2,1 +???#????####??.?# 2,9,1 +?????????. 4,2 +?##?..?.?? 3,2 +..???.?#????#?. 2,7 +.?#.??#??..?#.#?#.? 2,5,2,3 +#?##????.??..?? 4,2,1,1 +???###.?#??.??## 3,2,4 +?##?#.#???# 5,2,1 +???.??##??#.???#? 1,1,5,4 +???..?#?#???# 1,2,2,2 +?.?#????#???? 1,2,4,1 +?#?.#?.?.#?? 1,2,1,1 +??????..??????? 4,3 +?##.??????.?#.???#?? 3,1,3,1,1,3 +?#??#??.??????? 1,4,5 +?????##???.?????.??? 3,3,1,5,2 +.?.?.??????? 1,2,1,2 +??..?#??.???????? 3,3 +.?.?.?.#?#.??#???? 1,1,1,3,4,2 +?#?.#???..???# 2,1,2,4 +??#????###????# 2,7,1 +?#???#????#???#??. 1,1,12 +?#??.?.#???##??#?#. 3,11 +???.????##?. 1,5 +.?..?.???? 1,1,2 +??#??####??????#?? 7,6 +??#..????????.? 1,6 +?????#???????#?. 3,7 +???#??????##?. 1,5 +.?????.???#? 1,1,4 +??##???.?? 5,1 +????.#???? 1,1,2 +.??????#.#????? 2,3,2,1 +?#?.?#??##?? 3,6 +#?#??#??.##??????. 4,2,2,5 +?????.?#?#?.?#.. 3,5,1 +??.?#???#??#?#??.??? 1,2,4,3,2 +?#??#???.?#?? 1,3,3 +??#??????? 3,2,1 +??????.??.?.?.??? 3,1,1 +?????????????#??? 10,1,1,1 +.?#???##???#.? 3,7 +???#.???#?? 1,1,4 +??#???.??.????. 6,2,1 +?????#??.??..#??#.?? 2,4 +??.??#??##.?.?# 2,3,2,1,2 +???#?#??.?##??? 6,5 \ No newline at end of file diff --git a/resources/2023/day12sample.txt b/resources/2023/day12sample.txt new file mode 100644 index 0000000..c5bec3a --- /dev/null +++ b/resources/2023/day12sample.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/resources/2023/day13.txt b/resources/2023/day13.txt new file mode 100644 index 0000000..7db1c8f --- /dev/null +++ b/resources/2023/day13.txt @@ -0,0 +1,1350 @@ +.###...## +##..#.... +##..#..#. +......### +#..##..## +######.#. +.#.###..# +#####.#.# +##..#..## +##..#..## +#####.#.# +.#.###..# +######.#. +#..##..## +......### +##..#..#. +##..#.... + +.#....#..#... +#..##..##.... +...##...#.##. +...##...###.# +.##..##.#.#.# +.##..##.#.### +...##...###.# + +....#.##..##. +....##......# +.##.##......# +#..####.##.## +####....##... +#..##..#..#.. +.##.####..### +#..###..##..# +####..#.##.#. +....###....## +.....#..##..# +.....##...### +....#.#....#. + +.######..##..## +.#.##.#.####.## +.#.##.#.####..# +.######..##..## +.#....#.#..#.## +########...#... +..####......... +..#..#..##.###. +#.#..#.#..####. + +..#.#.##.##.# +##.#.#.#..##. +....##..##.#. +..#..###...#. +#.###..#....# +..###..#.#.## +#..#.####..## +....#.######. +#.##.....#.#. +..##.######## +..##.##.##### +###.##.####.. +###.##.####.. +..##.##.##### +..##.######## + +#.####### +....##### +..##..... +.#.###### +.#..#.... +#........ +..#...##. +#.###.... +###.##..# +.######## +#.##.#..# +.#.###..# +..###.... +..###.... +...###..# + +#.##.######.##.## +###...####...#### +....##.##.##..... +#..#.#....#.#..## +.....##..##...... +#.#.###..###.#.## +.##.#.####.#.#... +.#..#......#..#.. +.####.####.####.. +###...####...#### +#.##........##.## +.#....#..#....#.. +..###.####.###... + +.##.#.....#.. +......#...### +.##..#..#.... +.##.##..#.... +.......#...## +.##..#.##...# +.....####..## +#..#.#..##### +####.#.#.#### +.##.#.##..#.. +.##.#####.#.. +#..#.##..##.. +####.###..#.. + +##.#...#..# +##.#...#..# +###....#..# +####.####.# +.###..#.##. +###...##.## +#...###.#.. +#...###.#.. +###...##.## +.###..#.##. +####.####.# +###....#..# +##.##..#..# + +.#.##..#..###.### +#..#..##.######## +..##..#.#...##### +.#...#..##....##. +#.####......##.## +#.#...##.#.###... +#.#...##.#.###... + +.#..###..###..# +.#..#.####.#..# +#.##.##..##.##. +..##.#.##.#.##. +##..##....##..# +#.##...##...##. +..##..#..#..##. +#.##..####..##. +#....##..##.... +.############## +###.###..###.## +#####.#..#.#### +#######..###### +.#..#.####.#..# +#....#.##.#.... + +....#..########.. +...#....######... +.......#.####.#.. +####.##.#.##.#.## +.##.##..#....#..# +..#.####..##..### +...#..#..#..#..#. + +##..##..######. +##..##..##..##. +#.#.##.#.#..#.# +###....######## +##.......####.. +.##....##....## +.#.#..#.#....#. +####..######### +###.##.###..### +.########....## +..######..##..# + +###.............. +.######.####.#### +.#..##.######.##. +##.....#.##.#.... +..#####.#..#.#### +#.#....######.... +##..##.######.##. +###.##..#..#..##. +...############## +.#....#.#..#.#... +#.#.............. + +#.##.#...##...# +#############.# +#.##.#.#....#.# +..##..##....##. +..##..########. +#.##.#..#..#..# +.#..#.###..###. +.####.#......#. +#.##.#.##..##.# +........#..#... +.####..######.. +........#..#... +........####... +.####.##....##. +..##..##....##. + +#.##....##.#. +#....##....#. +###......###. +###......###. +#....##....#. +#.##....##.#. +#.#......#.## +.#..####....# +.#...##...#.# +.##......##.# +...######...# +###.####.###. +...######...# +##.##..##.### +.####..####.. + +..###..#..#...# +..###..#..#...# +#.##..##..#.#.# +..#..#....##..# +##..##.##.##### +....####.#....# +##..#..#.##...# +.#...#####..##. +.#...#####..##. +##..#..#.##.#.# +....####.#....# + +...##.#..## +..#.##.#### +..#.###.... +######.##.. +...#.#..#.. +...#.....#. +##..#...### + +#....##..####.. +......#.##..##. +.####..#####..# +#######.##..##. +.#..#...######. +##..##..#..#..# +##..##..#..#..# +.#..#...######. +#######.##..### +.####..#####..# +......#.##..##. +#....##..####.. +#....###..#.### +#....#.##...#.. +.#..#..##..##.# +##..#######..#. +.####...#.##..# + +...#.#... +###....#. +..###.### +...##.### +###....#. +...#.#... +###....## +###..#... +##....##. +..#.#.#.. +####.##.# +..#####.. +##.##.##. +##.#.#..# +....##..# + +#...#.##. +#.#..#### +....##### +##.#..... +.##.##..# +.##.##### +.#.#..##. +#...#.... +.#.#..... +.####.##. +.####.##. +.###..... +#...#.... + +#.####.###......# +########.#.####.# +#..##..##...##... +##.##.##......... +#......##.######. +....#.....#....#. +#..##..#....##... +#.#..#.##..####.. +.##..##.#.######. +..####....#.##.#. +..#..#..##......# +#.####.###.####.# +.##..##..#..##..# + +.......#.#.#..##. +.##....#..##.#... +..#.#.#.##..#.##. +.####.#####.##... +#.#..#...####.#.# +..#..####.#.#.### +..#..####.#.#.### +#.#..#...####.#.# +.####.#####.##... +..#.#.#.##..#.##. +.##....#..##.#... +.......#.#.#..##. +######.....#.##.# +.###.###..##.#... +.###.####.##.#... + +######..#.. +##..#..#### +##.#.#.###. +..###..##.# +..#....##.. +...#..##... +....#....#. +....#....#. +...#..##... +..#....##.. +..###..##.# +##.#.#.##.. +##..#..#### + +....#.##.##.#.### +...#..#.#...#.... +..##..#.#...#.... +....#.##.##.#.### +########.##.##.#. +#.##.....##...#.. +.#..#....##.#.... +.#.#..##.#.#.##.# +#####.#...##...## +#.#######...##... +##..#.##.#.##.### +#..#......##..#.# +#..#......##..#.# +##..#.##.#.##.### +#.#######...##... +#####.#...##...## +.#.#..##.#.#.##.# + +..####..#.#.....# +##.#.#..#.#...#.. +#####.#.#.#.#..## +.###...##..##.#.. +##..#....##..#.#. +##..#....##..#.#. +.###...##..##.#.. +#####.#.#...#..## +##.#.#..#.#...#.. +..####..#.#.....# +..####..#.#.....# + +..####..####....# +##..#....#..####. +.##........##..## +.....####........ +#.##.####.##.##.# +##...####...####. +...#..##..#...... +####.#..#.####### +##....##....####. +.#....##....#..#. +.#.##.##.##.#..#. +.#####..#####..## +##.#.#....#.####. +##..######..####. +..##.#..#.##....# + +.##.##..##..# +#..#......... +#.##..##..##. +###..######## +######......# +..#..######## +..##.######## +..#.######### +..###.##..##. +.##..#..##..# +#####.##..##. +.#........... +.#.##.##..##. +#..##.##..##. +..########### +###..######## +##.#.#..##..# + +....##....##. +####.#.##.#.# +..####....### +...##.#..#.## +..##..####..# +..########### +.......##.... +#####.#..#.## +######....#.# + +....##.#.#.##.# +....#######..## +##.#..#..#....# +###....###....# +...#...#...##.. +..####....####. +...#.#.#.##..## +###......##..## +......#....##.. +##.###.####..## +..#..##...#.... +..#..#...#.##.# +##.#.#.....##.. +##.#.##...####. +...#..#.#...... +#####.####....# +##.###.##.#..#. + +#.#....#.##.. +##.#..#.##... +#.######.#... +.##.##.##.... +#........#.#. +##.####.###.. +....##.....## +##......###.. +..######...## + +...###.#.#.#. +#..#.##..#.#. +#.###..#.##.. +#.#..###..... +#.#..###..... +#.###..#.##.. +#..#.##..#.#. +...###.#.#.#. +##.##.#.###.. +....#.###...# +#.#####.#.#.. +#.#####.#.#.. +....#..##...# + +....####...#... +....#.....#.#.# +.....##...##... +..#..#..#.#..## +###..#..#.##### +##.##..##...... +##..#.#.#.#.#.. +....#.####..... +####.####.#.#.. +..###.###...### +#######....##.. +###.....####... +###..#....#.#.. + +..####. +###.#.. +.#..### +..#.#.. +####.## +#.#.#.. +#.#.... +.##.### +..#..## +..#..## +.##.### + +##.######.### +.##########.. +..#......#... +#.##.##.##.## +###......#### +.#.##..####.. +..########... +..#.#..#.#... +#..#.##.#..## + +.##.#...##. +#.##.#.##.. +#.##.#.##.. +.##.#...##. +#..#.#..### +.####.###.# +...#..###.. +####.#.#### +###.##...## +#...#..#### +##.##.....# +####.#..#.. +####.#..#.. +##.##.....# +#..##..#### + +###.#...####...#. +.###.#.#....#.#.# +#.###..##..##..## +###.#..........#. +###.#..........#. +#.###..##..##..## +.###.#.#....#.#.# +###.#...####...#. +.###...####.#...# +#..#.#..####..#.# +....##.#.##.#.##. +#.#..####..####.. +##.#.#.##..##.#.# +####..#..##..#..# +..####..#..#..### +#.###..#.##.#..## +##.##..##..##..## + +..##..... +###...##. +#..#.#### +..##..##. +#.#.#.##. +#.#.#.##. +..###.##. +#..#.#### +###...##. +..##..... +.##...##. + +..##.##.###..#. +..##.##.###..#. +#.##.###.#.##.# +..###...#.##.#. +.##....##..##.. +.###.######.... +...####..###.## +#####.##.###.## +###..#.###..... +###.#..#.##.#.. +..#..#....#.##. +###.#.##.##.... +##.##....##..## +##.##....###.## +###.#.##.##.... +..#..#....#.##. +###.#..#.##.#.. + +##.#..#...# +..###...#.. +....#.##### +..#.###.##. +#######..## +###...#..#. +....###..## +..#.###..## +###...#..#. + +...#.##..##.# +...#.##..##.# +#..#..#..##.# +..#.#.####.#. +..#.########. +.#.#........# +.###..####..# + +#..#.#####.##.. +........#...### +#####.##.#.#### +#####...##..... +....#.#..###### +..#.####..###.. +.##.#..##.###.. + +#...####. +#.##.##.# +#..###### +...#.##.# +...#.##.# +#..###### +#.##.##.# +#...####. +#.#.#..#. +..#.#..#. +#..#.#### +.#....... +..###..## +.#.##..## +.##.#..#. + +....####..# +##..####### +##..##.#### +....####..# +...##.##..# +.#...###### +.####.#.##. +#......#..# +.##...##### +.#..##..... +#......#..# + +#.#.#....###.#..# +#...###..#..##### +.#.#..####.##.##. +#.#......#...#### +..###.#.##..##..# +..#.#....#.###### +#..#.####..###### +.##.#..#.###..... +###....#.#....##. +.##.#.###...##### +.##.#####...##### +###....#.#....##. +.##.#..#.###..... +#..#.####..###### +..#.#....#.###### + +#..#...#### +.##.###.#.. +##.###....# +.....##..## +.....##..## +##.###....# +.##.###.#.. +#..#...#### +##..#.###.. +.......##.. +..##.####.. +..##.####.# +.......##.. + +##...#..#...### +###..####..#### +.###..##..###.. +##.########.### +#..#..##..##.## +###..#..#..#### +##.#.#..#.#.### +.#..#.##.#..#.. +.#.##....##.#.. +#..#......#..## +....#....#..... + +.##..#####. +.....##.#.. +###.###.#.. +####...#### +..#...##.## +#...####.## +.#...#.#### +##....#.... +.#.#.###### +....#..#.## +....#..#.## +.#.#.###### +##....#.... + +#.#.#.##..... +#......#####. +.###..#..#.## +.###..#..#.## +#......#####. +#.#.#.##..... +###..##..#.#. +###..##..#.#. +#.#.#.##..... +#......####.. +.###..#..#.## + +.#....... +#.####### +..##.#### +.....#..# +#..##.##. +..#...... +#..##.... +#.#.##..# +.###.#### +.###.#### +#.#.##..# +#..##.... +#.#...... +#..##.##. +.....#..# +..##.#### +#.####### + +..##.#....#.# +....###..###. +...#...##...# +..##.#.##.#.# +####...##...# +####.#....#.# +####.#....#.# +..###......## +..###....#.## +##....#..#... +##..########. +.....######.. +######.##.### + +..#.######. +..#..#####. +#...#..#.## +#.#.#..##.# +##..##..#.. +.#..###.### +.####.#.#.# +...#.####.# +.#..#####.# +.#..#####.# +...#.####.# +.####.#.#.# +.#..###.### +##..##..#.. +#.#.#..##.# +#...#..#.## +..#..#####. + +##.#.#### +.##.#.#.. +.##.#.#.. +##.#.#### +###.###.. +#.#..#.## +#...##... +##.#...## +...##.### +##..#.#.. +..##..#.. +..#...... +#.#.#.#.# + +..#.####.#. +###.####.## +....####... +..#.#..#.#. +##..#..#..# +###.####..# +##..#..#..# +..#......#. +..#.#..#.#. +....#..#... +....#..#... +##.#.##.#.# +....####... + +#...##..# +...#....# +..#.###.# +#....#... +..##.#### +.#.#####. +.###.#... +.###.#... +.#.#####. +.###.#### +#....#... +..#.###.# +...#....# +#...##..# +#.#.##.## +###.#..## +###.#..## + +###.##.#..##..# +.........#..#.. +#.#..#####..### +....#.##.####.# +....#.##.####.# +..#..#####..### +.........#..#.. +###.##.#..##..# +##..#.####..### +.#.##.##......# +.##....#.####.# +.#.###...####.. +###............ +.###...#.#..#.# +#..#..#.##..##. + +...####.##.## +.##..##....## +##...#......# +#...#..#..#.. +#####.##..##. +###..#..##..# +#..#.##.##.## +#...##.#..#.# +##.#..##..##. +.##..#.####.# +..#..#.####.# + +#.#..#.##...#.### +###..#######.#.## +.##..##..#..##..# +.#....#..#...#### +.#....#..#...#### +.##..##..#..##..# +###..#######.#.## +#.#..#.##...#.### +.#....#.#####...# +.#....#.#....#... +#..##..##...#.... +..#..#....#....## +..####..#.##.#..# +.#.##.##...#####. +##.##.###.#.#.... + +..#...### +.#.#.#### +.#.#.#### +.##...### +..#....## +..###.... +##....### +#..###... +..#.##### + +..####### +###.##..# +###...#.. +######..# +..####..# +..#.#.... +...###..# +##..##..# +..##.#..# +..#.#.... +###...... +##.###### +....#.##. + +###.##.#####..##. +.#.####.#.#...##. +.##....##.#..#..# +.###..###.#.#.... +.########..#..##. +####..####..##### +..#.##.#......##. +###.##.####..#### +##########...#### +#.#....#.##..#### +.#..#...#.#..#### + +....#.##.#... +####......### +##.#..##..#.# +####.####.### +####.####.### +##..........# +..#.#.##.#.#. +...######.#.. +##.##....##.# + +..#.....# +..#.....# +....##.#. +##.#####. +..#..#... +..#...##. +#.#.....# + +###..##..####..#. +##..#..#..##..... +.##.#..#.##..#### +..##....##..##### +#.#..##..#.###### +#.#......#.###..# +##..#..#..####### +..##.##.##..#.##. +####.##.#####.... + +..##..###.# +..#..#...#. +..###.##..# +..#.#.####. +.#..##..#.. +...#.#.##.# +####......# +####......# +...#.#.##.# +.#..##..#.# +..#.#.####. +..###.##..# +..#..#...#. +..##..###.# +#....#..#.# +#....#..#.# +..##..###.# + +#...####### +#.#.####### +#....#.#### +#....#.#### +#.#.####### +#...####### +#.##.##.### +#...#...##. +##.##..##.# +###.####.## +....##.#... + +#..#### +..###.# +###...# +.#.###. +.##..#. +.##.#.. +.####.. +.##..#. +.#.###. +###...# +..###.# +#..#### +##...#. +##...#. +#..#### + +....##.##.#####.# +#...##.##....##.# +.###.#####..##### +...####...##...## +#.#.#.###....###. +#######...##...## +.########.##.#### +..#.######..##### +#..#..#.######.#. +##..#.##..##..##. +.#..#.##..##..##. +.#.#.###..##..### +....#...##..##... +######.#......#.# +##.#######..##### +##.#######..##### +######.#......#.# + +#######......## +...##.########. +#.##........... +#######......## +.#.#..##.##.##. +#.............# +#.#.....####... +##.###........# +##.##.#......#. +...###..#..#..# +.#.##.......... +.####..#.##.#.. +.####..#.##.#.. + +.#..#..####.####. +.#####...###.##.# +#.##.#...##...... +.####.##...##..## +..##..#.#.#.#..#. +.####.#.#...#..#. +##..##.#..#.####. +.#..#.#.....#..#. +......#....#....# + +###...# +###.#.# +#.##### +###...# +...##.# +....##. +####.#. +####.#. +....##. +...##.# +###...# +#.##### +###.#.# + +#..##....##..#.#. +#..##....##..#.#. +#.....##.....#.#. +..###.##.###..### +...##....##....#. +.#..#.##.#..#.### +....#....#....#.# +.#....##....#..#. +####.####.#####.# +###.######.###... +..#..#####.#....# +#..#.#..#.#..##.# +..#..#..#..#..##. + +##.#..# +##.#..# +#..#### +...#... +#.##### +..#..#. +..##.#. +#.##### +...#... +#..#### +##.#..# + +..##........# +##..###..##.. +#.##.##..##.# +......####... +.......##.... +.####......## +.#..#.#..#.#. + +.#..#..#.##.# +..##.....#..# +.......#...#. +#.##.###.#### +#.##.###.#### +.......#...#. +..##.....#..# +.#..#..#.##.# +########..### +.#..#.##.#### +.####..##..## +.##.#..##.##. +.####.###.##. + +#...##...###.#.## +##..####.#.#.##.# +....#..#.....##.. +.#..##..#.#.##### +###........##..## +###........##...# +.#..##..#.#.##### +....#..#.....##.. +##..####.#.#.##.# +#...##...###.#.## +...##.#.#.......# +##...#..###.###.. +##...#..###.###.. +...##.#.#.......# +#...##...###.#.## + +##.#..##.##.# +#####........ +#####........ +##.#..##.##.# +..#.#..###### +...#.....#... +...#..#..##.# +......##..#.# +..##.###.##.# +#...##.#.##.. +.....####...# +#####..##.### +..#.####.###. + +###.###.# +##.#.##.. +..####... +...#..#.# +....##.#. +###....#. +###.###.. +...#...## +..##.###. +..##.###. +...#...## +###.###.. +###..#.#. +....##.#. +...#..#.# + +..##..# +..##..# +..#...# +.....#. +##..##. +##.#.## +..#...# +#....#. +##..... + +.#......#....#... +#........#..#...# +#..####..#..#..## +..........##..... +..#.##.#..##..#.# +.#..##..#....#..# +#..#..#..####..#. +##..##..##..##..# +..#.##.#..##..#.# +.#..##..#....#..# +#..#..#..####..#. +####..##########. +.#.#..#.#....#.#. + +####.## +..##... +.#..#.. +.####.. +.#..... +..###.. +..###.. +.#..... +.####.. +.#..#.. +..##... +#.##.## +.#..### +#...#.. +...#.## + +.#.#..#.#.##### +.###..###.#.... +#..#..#..###### +..######....... +.#.####.#..#### +##..##..####### +#...##...###..# +##......##.#### +###.##.#####..# +.##....##.##### +.#.####.#.##... +#.######.###### +##..##..###.... +..##..##..#.... +..#....#...#..# + +#.##..##.#. +##########. +###.##.###. +##.#..#.### +...#..#...# +...####...# +....##....# + +.....#..##. +..###.#..## +##.#...#.#. +##.....#.#. +..###.#..## +.....#..##. +.......#.## +.###.#..... +.###.#..... + +...#.#..##..# +###.....##... +....#.#....#. +#.#....#..#.. +#.#....#..#.. +....#.#....#. +###.#...##... + +##..#.####.#..##. +##..#.####.#..##. +####.#.##.#.####. +#.##........##.#. +.##..######..##.# +####..####..#.##. +..#..........#... +##..###..###..##. +.#..#..##..#..#.. +##.##..##..##.### +.####......####.. + +..##..#.###....## +##..##..#..#..#.. +#....######....## +#....#..#........ +......##.#..##..# +#....#.###..##..# +#....#.##..#..#.. +##..#######.....# +.####..####....## +.#..#..##.######. +#.##.#.##.######. + +##.#.#.###..# +...######.#.. +..###.#.#.... +#.#.###.##.## +#######.#.#.. +###...##.#... +.#.#.###..... +###..#.##.### +#####..###### +.....#.#..### +.####..#..#.. +#.###.##..### +.##.....#..## +.#.#.####.... +.#.#.####.... +.##.....#..## +#.###.##..### + +#.#..###.####.### +#.#..###.####.### +#...###........## +.....#.########.# +.#####.#......#.# +#..#...###..###.. +.##.##..#....#..# +#.#....#.####.#.. +##...#.########.# +.#.##.#.#.##.#... +..##..###.##.###. + +.#..##.## +....##.## +....##.## +.#..##.## +...#..#.. +.#.####.# +##.#..##. +#...###.# +.####...# +....##### +#.#.#.#.# + +..#..#....... +.#.##...##### +...######..#. +...######..#. +.#.##...##### +..#..#....... +#......#.###. +##..#........ +#...##..###.# +##.##.#.#..#. +##.##.#.#..#. +#...##..###.# +##.##........ + +..####...####.# +...##.##..##... +...##.##..##... +..####...####.# +###...#...##### +.#.#.##.#.#.##. +#####..###.##.. +...#.#..#..#### +####..#.......# +.#.#.##.#.#..#. +..####.#....... +....#.##.#.#.#. +##..#..#..####. +##..#..#..####. +....#.##.#.#... + +#..##.##.## +.#......... +#.##..##..# +#..###..### +###.##..##. +#####.##.## +##..#.##.#. +##..#....#. +.#..#....#. + +##.#..#.### +.########.. +.########.. +##.#..#.##. +..#.##.#... +##......##. +##########. +##..##..##. +.##....##.# + +...##...#.##### +.######...##### +#......##...#.# +..#..#..####### +#..###.#.....## +...##.......... +...##...####..# +########....##. +##.##.##..##..# +.##..##.##....# +#.#..#.##.#..#. +.#.##.#...####. +.#.##.#...####. + +..#..##..#..#...# +#.#..##.#....#.## +##.#...###..###.. +##...#..##..##..# +#.###.##.####.##. +###...##..##..##. +######..######..# +######..######..# +###...##..##..##. +#.###.##.####.##. +##...#..##..##..# + +#.#.##...#. +#..#.##..#. +#..#...#... +#..#...#... +#..#.##..#. +#.#.##...#. +##..#.##.## +#.##.###.## +###..##...# +#.#.##..##. +#..#.#.#### +#..#.#.#### +..#.##..##. + +..#.#.#.#..#.#. +##.#.#...##...# +...#...#....#.. +..#............ +###.#..##..##.. +......#..##..#. +####.#..#..#..# +###.#..######.. +...#...##..##.. +..##.########## +##....##....##. +###..#.#....#.# +###.#..#.##.#.. +..##..##....##. +...#..#.####.#. +#.#####......## +..#..#...##...# + +#..####.... +####.###### +.......#... +....#...#.. +####....... +#..#.....## +#..#...#### +#######.... +....###.#.# +.........## +.....#.##.. +######..### +#..##..##.. +#..###.#... +#..#.#..... +#..###.##.. +#..#..#.#.. + +#...##.#.## +#...##.#.## +.###..#.#.# +##.###..#.. +..#...##..# +....##.#### +##.###.#.#. +##.###...#. +....##.#### +..#...##..# +##.###..#.. +.###..#.#.# +#...##.#.## + diff --git a/resources/2023/day14.txt b/resources/2023/day14.txt new file mode 100644 index 0000000..baf8113 --- /dev/null +++ b/resources/2023/day14.txt @@ -0,0 +1,100 @@ +#...#...O....OO.#O.O........#.OO.#.O..O.O.#.#..O#..O...#.#......#..O.....O.###O..OO.#.....O.O....... +O.#..#..O.O...O..#OO#...#.#.OO....O.#.....O.#OOO.#O.#O#O.......O......O.OO.#.#.........O..#.....#... +....O..O..O#...#O#......O...##O#.O.....#O..##..O...#O..O.O..#.O..O..#.....OO....O.O.O...O......#.O.O +##O....O....#.OOO...O.#....O#.O#OO....O....O#...O..O#O.#..O.OO...O..O..#.#O..OO.O...O..#.#OO#....... +.O.O#OO..#...#..........O#.O..##.O..OO.O...#........O##.OOOO..#.#....O..O#O.#O.##..OO..O...#..O##... +OO...O##.....#...O.#O.....#.OOO.#.##...##...##.O.....##....O..O..#..#..OO...#..........OO..#.O#...O. +.OO#..#.O.O##...O....O...O....#.O.O..#.OO........O..O..O..###..O...O#..#..#......OO.O..#O....O##.#.. +#O.O..O#...O..O.O.O...#.....O..O......O....OO.OO..O#.O#..#.O......#..O...#.O.##.#....O.OO.#...O...O# +.#.O.....O...O...O...O.#.........OO.....#................O....O..#..........##.O#.OO..O###..#....... +#O...#O..O#.......O...#..O...OO..#...O........#....O#..OO...O.O..#.OOO.....O..O.#...O.OO#.OO#.OO.O#. +......#.O...O...O.O...#...#O.O#....#.O..###..O....#.#.O.OO#....O#.....O...#.O......##......#O..#OO.. +#OO.##...#..O....#...#...OO...........OO.O.OOOO...#...#O..#...#O#.O.O......O....O..#.O..O...#O#.O.O. +#...O.OO...#.#.OO...O#O....OO....#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 +....#O.....O#...O.......O.......OO..#.....#...O##.O.......#O#....O...O..O.O.......#.....#..#.O.O.O.. +.....O.....O.O.O#O.O##.....OOO#...#O.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....#O.....OO#..O.O..####..#...O..O...OOO.#OO..#....#...OO..O.....#O..O..# +O#...##...#..#O#..#O#..O#....OO..O#O#.....OOOOOO#.#.O.O..O.OO.O........O...#.#......OO#...#..#.#...# +..OO.O..OO.OO....#........#O.#...#O....#...O.OO...O#..O......O.###....#O......#.....####...#..#.#OO. +..O.O..O#....#.O.#.#.#.O#..O.......OO.........##.O.....#OOO..O#..#OO#.....O...OO.O.O...#...OO#.O.#.. +O...#........###..##..O#.#O.O..O.#OO.OO...#....#O.O#O..OO...##....O......OO..#...#.......#...#...... +..O..#.O#...OO#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......#........OO...O....#.O........O#.OO#..........O.O..OOOOO#.#. +O..##.##...........O##.#...#.O.#.OO..O.O...OO#.#..#...O..O....#..#..#...O###......O#.#O#..O.#....O.# +#.O.O.O.###.##......#.OO...OO.O..OOO.O.OOO.....##..O#...O......O.#O..#...#...OO..O#......O....##.O.# +#...#.O.O....O..#...#........##O#O#O..##O.#......O...OO#O...OOOO#O..OO##..#......O.#O.#.O#.OO...O..# +#..#........#O.#O.#...O...O....#OO...O....#...O..#......#..O..O...##........O..#.O..#.#OO..OO.O##.O. +..#...#...OO.#.O#O.O.##..#..##..O#...O#....#..O....OO.OOO..O#.#....O.......OO.#.O#.....O.#O.O.#..... +.......O...O..O...#.O..OO...O.....O.O#..#OO#.O...O..O#O..O..#.OO.......O..O....OOOO..O.#.O#O#..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.#..OO.....#.O.#O#..##.#.O.O...OO....#.. +....#.O..O..#...#....O............O.O.#O.#.O...O....O.#.OO....O..O##...O##......O....O...OO........# +.#O...O..O.O.#O.......O###OO.O.O.O.....##O..OO...#.O..#OO..#...#...#.O.O###.....#O#..##.#O.....O.... +..#.###.#..##......#..#.#OO..O......O..#OOO.#O...#....OO.##O...O..#.#O....#OO....O.#.......#....O... +#OO...#......#..#........#.OO.##....#...OOOO..O#O..O.#..#O........#O.OO#..........OO..OO....O..#O.#. +..##.##.O....#.##O..#...###..O##.#.#......O#O..###..##......O...#.....##.#...........O.O.O....O.#... +...O.#..#......#.OO..#..O##...O..O...OO##...OO.O#....O.O.#.O.....O..#..O..#...O..#O.....O.O..O.O#.## +O......###OOO#.#.....OO...O.....O.##.....OO..........OO#O#.O.#.#O....O..#O.#..........##O...#O....O. +..#...#...OO.OO#.....OO...O.O.O.##.##O##..O.#.O#..O.O.....OOOO....#....O.O.#..##OO.O#..#O.O.#...O... +.#.OO.##....O..O...O..#.##.O#OO..#.....OO.........O.OOO.#..O....O....OOO.#.OO..O..#...O#OO.OO##.#.O. +.#.OO.O#.O.O.....#O..O.O..O......O.#O...O..O...##.O#..#.O.....O...O....OO.OOO..OO.O...OO..#.#..OOO#. +.#..O.#.O..#.OOO....#O#O#............##.#.O...O....O.OO..#.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.##O..OO..O.O.O.#O.O..##..O#.#..#O..O#O...#...OO..#.O.O....OO..O..#..O.......O.O#....O..#.O# +#.O..##......#..O#O..........##O#.#O..O#.#..#.O..##O.O.#.OO....O#..........O..#.##..#..O.#...#O.OO.. +.O..#....OO...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.#...OO#.OO#.O.OO.O##.#....OO....#........#.O.O....O.#..O#..#....#.O#..O#..O.....OO..OOOO.....O. +.O..OO#.O#OO..#O..O.#......O..O..O.#O.#..#.#.O..O.O..O.....##.OO..#O.#............O#...#......O.OO.# +O......##OO....O...O......#...O..O.#...OO#O..O.OOO..O.....O...#.##..OOO.##...O.O....O#O....##...#... +..OO..#.O.O..#O.O...O...#...O.O#.##O....##...###O..O...O.O##..........###...O...O..#...#.#.....O.... +#..OO....O..#O..OO...OO.............O.O..OOO.O.#.....O#O....#O.....#.O..O....O..O....O..O....O.#.... +OO.O##..O...#O........#O...#OOOO.O..O....O...O..O..O#.O.O..##.##..O.#O...O#...#..O...O...OO.......O. +#..O#..O...O.#......#OO.OO.O.#...O...O#...#...O..##O#....#......#.....#..#O...#.O.O..............O#. +##..OO#..........#.O..OOOOO..#...#....#.#..O#O...O....#.O.#O#OO.#......#...O........O...O#....#....O +.....O...O#....O..O..OO.O..#...O.#..#..#...O#..#O....O.#.....#O....O...##....#..#......###.O.....O#. +#...O#..O..O#..OO....#.#...#O#..#.....#..#..................OO....O......OO.........O###O#....OO.O.. +O#...O.O.O..##.....##....#....#......#...O.#...O..##...O..O...##..#....#..O..O#...##..O.O..OOO..#... +..#.......#.O..O..#O....#...#.....OOO#...O#...O#.#.#O.....O#O.#.O.#.O......O.#..O.O..O#......O.O..O# +...O.#.#..O.#..###..#...#.....O..O.....OO#..O..#.O..#....OOO...........#.......#..OO..OO#.#O....#O.. +.O.O...#....#.#O..#..OO#..#....OO....#O..O#.#..#..O.#..O.#O#..OO........#O.#...OO....OO......#.#O... +OO.O.O#..#.#.#.O.OOO...#....O..O##...O.OO#.#.....O.....#.....O....#.........O...O..........OOO.O.OOO +......O...O...###....##.O.O..OOO..O.O......O.#.......#..O..........O#..#..#O.#.##.....###.#O#O#O..#. +O..#..#O.OO.......#.OO...#OO..OO.O#O.....#.#.O..OOO.OO.##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.OO#.O.#..OO............O.O.O.#..OO#....##O.....O#.....O##O.....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..#..OOO.#..##.....OO.O.....OOO.#..O.#.##O#..O.#..#.#.#....#O#...##.... +.OO.O..###....#O....O..#.O.#.......#....O###..O.#......O#....#........O...#O..#..#.........O......## +O#......O#.....#.O....#..#.O.#O.......OO#...#..#.#O.#.O.##......#.#.#..O#O.#...O......O..OOO..OO.### +#O.#.O...O.....O....#OO##...OO..#...OO.#O.OOO.O..#O....O............#....#....#...........O.OOO#.OO. +.O.O.#OO#O.O.OO#..O..#....O.#..O...O....O.#OO#O...##.......O...O.....#.O...#...O.##O...OOO.O........ +.O#..O.......#..##..OO#.....O.#.OO#...#O.O..O......O..OO.#...#.#............O#O.OO.......O#........# +.OO#..O##...........O.OO.....#.##....O#.#.#O..O...O..#..#..O.......#......#.#...........###O##...... +...#...#.....O........OO..#.#...O.#.....#.OO.....#.O.#OO......#OO..#.....#..O##..O..#...O.O.......O# +O...O...#O..#O#O.......#..#O....#OO....#.#O.....O....O##.#...O.......#.....#........#O.O...O...O.... +..#.....OO.#.OO....O#O....O#O...O.O...#O.##....##O...#..##O#.OO#O..OOO.#.#......O.OO.O..O.O.OO.#O.#. +.......O.....##...O#.#O.#....O.....O........#...#.OO...#...OO........#OO#...#..OO..O...#....O#.#OO.O +..#..O.OO....O...#.......OO.O.##...#...O...#.O#.OO#....O...O..O###.O.###O..#....##.O.##....O..##...# +.......OOO.....OO..#..O..#O.OOO#O.....O.O#.....O....###..O#..OO..O....###O.OO...#..#.O....#.O.O..#OO +.#...#.........#.###..#...#.#...#O.#..O#O#OOOO#.#.O.....O.#....#..O......#OO....O..O.O.#.O......O..O +O.O....O....O..O......O...#.....O##....OOO.....#.OO.#..O....O..O.O#.O#.OO......#....#......OO......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.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.OO#.....OO........O......O#...O.#.. +....#.....O..#......O...##.O.O.#..#.....O.O..#.O#.#O...##....O.......#O..O.....#..#.....#.....#..... +.OO....OOO.OO....O...#.......O......#O.#O..O.O#O..............O.#......#.#.......#....#.O....#.#O.#. +OO...OO.#.O#OO#........##.O.....#..#O.#....O..O..O.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...#O....O....O#OOO.# +.OO#..#..O..........##.O.#OO#..O.O.#...#....O..O#.O..#.#.....O.O..#..OO..##O#...O.O.O#........O..... +.O............#.O...#...#....###.O#.#.#....O.....OO...#O.#.O..O##...#O.#O..OO#..#.O#.#.....O#....... +#..O#..#.OOO#O...O.O..O..#OOO....#...........O##...OOO##O....O.O...O..O#O.........O.OO.....O....O... +.#....#OO..##O..#O##O.#O....#......O.OO..........##.OO#O...#.....O.O.....O#..OO.#........O..O.O..O.. +....O.##...#.O.........O.OO....#....##O..#O.......#..O.##O#..#O..#.....O.O#O....#...O..O.OO......... +..###.O.....##.....OO.O..OO.O..#...O.....#....O.O...............O.##.#.O#O#.#...O..#.OOOOO....#.#.#. +O...O....O.#.#.O#.O#..#......O#.....OO.##....OO.....O.......O....O.O.....#...O..OO#..OO..O....#OOO.# +#.#.#.O..#.O...#....#..O....O......O..#..O.OO#O......O.......O.O.........O...O.......OO.##.......#.# +O#..........O...#O.###....#O..O.#......O....#.O.O...O...O.....O#..#.O#..O.#.O..OOO#.O...#..O.#O..... diff --git a/resources/2023/day14sample.txt b/resources/2023/day14sample.txt new file mode 100644 index 0000000..b92d1a3 --- /dev/null +++ b/resources/2023/day14sample.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/resources/2023/day15.txt b/resources/2023/day15.txt new file mode 100644 index 0000000..3ab376c --- /dev/null +++ b/resources/2023/day15.txt @@ -0,0 +1 @@ +glf-,ldzh-,fxg-,xtb-,ccpj=2,cz-,mhp-,ds=2,glf=7,rc-,sq=7,sjmf=4,rf-,hzvrcv=3,txkt=1,lhj-,gvcbl=4,hcf=9,dzs=7,crx=6,sjps-,hpk=4,hzvrcv-,sjps-,ngb=2,hqt=3,nhm=3,gvcbl=3,tm=4,dhpq=4,qv=1,fqdtfv=7,jmxdc=7,lfrc=8,tlmrs-,sdk=1,fjxq-,ql=7,qx-,nrml-,pbbd-,tpdpn=5,nbbs=1,nr=3,vzk-,vzh=8,hmbb=6,hcnzt-,ths-,lpl-,kmbv-,cs=6,dzfq=7,cfmg-,dmhhj-,dmhhj=3,rpp-,ptnp-,tn=1,rl=1,zcd=5,zgk=7,zttq-,mm-,xqmt=1,rxksjz=6,kzpdd=5,slr-,kzpdd-,kqftn=4,znrslr-,tss-,vcg-,qck-,qjvbq=1,dv-,tm=4,nbft-,nznrn=8,kzpdd=3,xfr=6,hr=2,xb=7,dff=2,rzh-,dcpxt=9,sr-,grfz-,nxn=8,pjjq-,rdt=3,vb=6,cbv-,cgt-,zzj-,pm-,thmccs=3,qbnd-,xkf-,gx-,pf=5,kn=4,gn=3,tv=1,jmxdc=4,zdt-,sc=4,bln-,xsqh=4,jvz=8,mlb-,khgngd=2,kqftn=3,bmc=5,jd=9,qz=8,hs=5,js=1,rpp=7,tm=1,mtgsh=4,tx=9,tlc=3,ngv-,nt-,vb=9,lp-,gvd-,fzk-,dzfq=1,kzsb=9,dd=1,vl=3,qcc=1,fn-,gjls-,hlqvl=7,jx=6,zrd=5,vrf=5,qbnd=8,nznrn-,nznrn=3,xlnv-,bfr=8,rpp-,hcnzt-,cklg-,nznrn-,sp=8,ml-,kbf=1,sdk-,hpk=7,qc=1,vc=5,gnd=6,vzqg-,bqg=2,hfm-,zzj=2,jvm-,gx=1,zttq-,vzqg=8,qjvbq-,jqk=8,nz=5,mf=5,ds=1,bv=6,tv-,vfv=4,kn-,qd-,gx-,sfn-,fbn-,xrvf=5,mxmm=3,gtl-,zxv=6,vxqx-,dt-,llf=2,kvpq-,qs-,kqftn=2,vzh=3,dgsn-,zxkzv=6,lj-,cf-,dcpxt-,dgczt=2,xq-,fzk=4,pptx=6,vxqx=4,tsrfd-,bs=5,gmd=4,jqk-,lfrc=9,lm-,cb=9,zzf-,hrvbb=4,ht=2,qrgn=8,zftj-,hrvbb-,nhmft=1,xm-,hc=8,ktjl-,lsp-,hcf=5,xzgxpf-,tlmrs=5,mtdc=3,pjpc=1,vzk-,jxt-,fhv=7,gjkq=9,ms-,gfz-,xlnv-,hr=7,gkqdv=7,xqmt=7,lnn=5,dk-,psr-,hng=5,cngv=1,qk-,znrslr=5,gjls=3,rnbv-,lx=1,rssnh-,vsn=4,hd=7,ql=7,nnm=5,rjm-,xg-,xtz-,nznrn-,hc=2,gkz-,xrq=5,ftcz-,ltx-,psr=9,rpp=1,ccpj-,ttk=1,xsqh-,tx=5,hrvbb-,xzp-,ltg=6,kg-,gfz-,vtgq-,mrn-,lh-,mnzq-,gnsgrm=4,fbdk=2,glf=8,hz=7,qv=9,mdb-,gx=4,dvnt-,ppx=8,tz=6,xk-,df=1,df=6,dpk=2,vsn-,ths-,lhn-,fqdtfv-,slr-,mgv-,rn=6,lm=2,hs=7,bqrtx-,jkn-,fbdk=3,gvlg=3,lj-,tss=4,lsp-,ldchkm-,bl-,zhbq=4,lhj-,nbft=9,gszhm-,bsv-,zvpf-,pb-,kxx=9,hdt-,rnbv=8,fbn-,nkzlr=3,xq=9,rmg=6,vcg=4,nhmft=3,jsq=1,fgsg=1,rnbv-,nhmft-,pjpc=3,xzgxpf-,vzh-,dp=9,ltg-,cl-,pvf-,pm-,zn-,dfk-,hdt-,fhbs-,pbbd-,lhn-,sfn=4,zdd-,csd=5,xvcp-,jmxdc=6,zzf=5,qjc-,qbnd-,pbbd=8,jvm-,kn-,fqdtfv-,xbg-,nhf-,cbv-,rh-,xkf-,jqk=8,gkz=6,cpp=9,pqkdbx=8,mtgsh-,ltk-,fsz=7,tds-,dg=8,bsv=1,kvpq=4,bln-,vh-,hrvbb-,bsj-,zdd=6,znc=9,vmb-,gxcv=4,mj=7,pb-,qlzsf-,mpr=6,kr-,zrqlt-,tbkrgb-,mtdc=6,dff=9,sc=4,brr=4,jsq=9,nlzh-,gd=5,gst-,qck-,tbt-,rlhql-,zdd-,gjls-,btj-,qzt=3,dp=9,vlmzk=8,vtgq=1,kmc=7,nnzhg-,sh-,pnj=4,vbcd=7,kn=5,lfrc=1,sjps-,lgp-,xtb-,dzp=2,hpk-,db-,lx-,lsz-,rdt=7,pcpgxx-,xtz=1,ltk-,ng=5,fqdtfv=3,zv=3,cvfdfd-,zsm=2,crx-,pq=9,fgsg=8,nhmft=2,vc=9,cxzcrz-,kzsb=5,vbcd-,fzsx-,fgsg=3,zvsqks=3,lsz=4,zkqk=7,xg-,dp=2,nz-,dcpxt=5,dgczt-,cq-,zdt-,cz-,sjmf=6,mgsvf-,vc-,llf=2,cfk-,tk-,dzfq=4,xz=7,njl=7,hg=3,bl-,jx-,xtb-,pk-,bln-,sq=3,cklg-,rn=5,fpc-,rh=2,dhv=9,gvd=5,ph-,zttq=2,zh=5,llx=9,lx=3,nnbp-,psr-,brr=2,vrj=5,ph=4,lsh-,qfm-,cb-,qt=9,zzf=8,tsrfd-,qqc=6,bf-,tss=3,ql=3,vrj=9,gmp=9,hdt=2,qtrht=2,vbcd-,hfm=3,tn=4,slbd=7,nz=3,glf-,qcc-,jxzf=3,tm-,csd=2,dv-,tlc=7,nd=6,rlhql-,sfn-,brr-,dff-,dz=5,ngv=4,ltx=5,qzt=7,tv-,mm=2,fbdk=6,rlhql=6,fxg=6,fl-,lsz=9,ddgcx-,ldchkm-,hmbb=7,fbdk=5,lj-,gd=1,gvd=9,sh=5,vxqx=5,mpn=4,vsn-,nvdddv=2,vzh=2,hkdld=6,pm-,hdsnxn-,pn=6,nd=8,szm=8,hng-,lqq=9,brftzs=2,sc-,nr-,cl-,qcc-,mpn=8,fbdk-,xbnq=1,xn-,nnm=4,tsrfd-,mrpzq=5,pqf-,rgjb-,kqftn-,vrj-,tbkrgb-,zv=3,pkd-,pnj=2,brhj=8,gb=7,jgjc-,ht-,brhj-,jm-,dz=6,pf=4,gmp-,hlg=9,dzs=9,kzsb=2,mnzq-,zgk-,cs=5,drcb=5,xbg-,fbdk-,hkdld=6,khgngd=2,flcp-,thmccs-,rf=5,mgsvf=5,pbbd=7,rnbv=5,zgk-,hscvxq-,nbbs=1,ldzh=8,fz=1,zg=1,vvz=7,mgsvf-,szm=7,cz=6,gjq-,zz=6,zz=1,mpn=7,gmp-,dmhhj-,tkvp=5,rj-,ps=8,ttq=3,gkz-,vxqx-,ztn=4,rgjb-,bf=1,grfz-,ll=8,mgsvf-,kg=9,czz-,ztxkfn-,vxqx-,ksbg-,cr=1,qfm-,hqt-,glf-,mtx-,qlzsf=2,rpp=4,vbd-,js=6,tzvjt-,ppx=2,fbn-,gkz=9,kvpq-,hxx=4,pb=8,vrj-,jsq-,nbft=2,ltx=6,bv-,qz-,brftzs=6,dd-,ldzh=8,vj-,nr-,fbn-,vzk-,gtlrv=7,rdt=4,bd-,gmd-,txkt-,hf-,mhp=4,rdt=9,rmg=3,pqf-,spmdr-,cvv=2,kzb=5,pptx-,qtrht-,dk-,pnj=4,ngv=3,hrh-,bjbn-,df-,cngv-,ktjl=4,pvf=7,qjc-,bv=6,cfmg-,cvv-,rjm=7,vlmzk-,js=1,dpk-,gmm-,vrj-,hdsnxn-,nr=5,fhfs=6,lqn-,gjkq-,kv=5,zdd-,qppr-,drcb-,xfr=5,mnzq=8,qlzsf=6,pm-,vzk=9,ldzjgf=9,kzsb=9,xvcp-,tn-,bzmz=4,lvpk-,dzp-,ph=2,fx=5,brhj=1,vtgq-,tplx-,pmz-,dmhhj-,sp-,pptx=1,tbt-,pbc-,dpk-,tlc-,vj-,nz=5,jcg-,pl=8,kxx-,dp=6,sc-,mk=6,cm=1,hlqvl-,rftr-,znrslr=6,cngv=6,lx-,qbx=1,sr-,pqkdbx-,mtdc=5,fz-,pgn-,zh-,hr-,lk-,mk=1,tvlz-,hzmf=5,tm-,sq=3,cxzcrz=7,vmb=9,vb-,qx=6,kmbv-,qlf=6,dk=8,pk-,bgb-,nkzlr-,ql-,tv-,qlzsf-,nt=6,brftzs-,rxksjz=3,cs-,gmbhzp-,lp=9,fxg=9,dlv=9,zkqk=6,tc=6,fhfs-,gmbhzp=2,ppx-,gvcbl=1,zhbq-,jq-,fhbs-,xbg-,vzqg-,nbbs-,nnm=5,tx-,vfv-,jvm-,znrslr-,hfm=7,mtx=9,psstg=1,rl-,dzfq=6,cgt-,cqb=3,qc-,kr=4,drcb=9,ps-,fjxq-,hd=3,nznrn=7,pcpgxx=2,dzs-,mhp=6,fnv=7,nnbp-,dmhhj-,fqdtfv-,hc=7,lhj-,dff-,xq=7,llf=2,tv-,mf=5,thmccs=9,vbcd-,ppx-,bl-,ltk=2,vzqg=9,fhfs=1,cvzm=5,btj-,ltg=1,xtb=7,ltg-,gqk=2,hkdld=3,zf=8,llx-,bzmz-,grfz-,xzp-,dzp=9,xn=4,vkt=5,pmz-,cjjp-,cvv-,nbft=5,bsv-,pq=6,xp-,tds-,zzf=9,gr=6,cr-,nx-,hdsnxn=7,vh-,zxkzv=2,hzvrcv=7,ftcz-,bqm-,pjpc=7,bh-,gb-,tkvp-,nhf-,xd-,xtb=9,lsp-,dx-,kzb-,ppfc-,zxv-,vkt=9,mxmm=8,mrpzq=3,nvdddv=4,pnhr=6,ps=2,zz-,vvrs-,nhmft-,brhj-,zf-,ftcz=9,lsp-,vvrs=4,pjjq=5,vxqx-,zcd-,qt=1,zzj-,kxx-,crx-,ttk-,vsn=8,ds=5,jx-,bqrtx-,mxmm=8,rh-,ds-,tc-,pjjq-,gtlrv-,kxx-,vbcd=5,xcd-,lsz=1,szcf=7,bgb-,cc-,flcp-,dl=4,gd=5,tn-,vhrgn-,cxzcrz-,hg-,qs-,psr=4,szm-,mgsvf=8,tlc-,zdd-,rqs=8,cl-,jqk=9,gxxp=6,mrn=2,qcc=5,cbv-,jqk-,fdv=8,tsrfd=1,jq-,tzvjt-,dzfq=7,tc=8,vb-,bz-,kmc=5,fq=1,gf-,psstg=7,nrml-,qbx=1,psr=1,mk=7,rc=6,mtgsh-,csd=8,ht-,fzk=5,ltx=6,pnhr=7,xkf-,fbn=7,fnv=1,ds-,jq=8,jhv-,bvx=6,xxh=6,ttq-,tlmrs=5,xfr-,mtx=2,tds-,lhj-,kg-,fhfs-,bbdm-,cfk=4,tbt=3,gx=6,dzfq=7,vj-,xrq-,kmbv=8,zh-,hrvbb-,glf=1,mgsvf=7,gmbhzp-,tc-,dt-,szm=6,rl-,qkd-,vvrs-,qkd=1,sm=9,lnn-,hlqvl=1,bjc=4,qx-,hmbb=4,cbv-,dmhhj=8,sp=6,hfhgg=9,vmb=5,cpp=7,fbn-,crtc=8,slf=1,jx-,zdt=3,kmc=1,cdf-,ggl=4,mlb-,zn=9,kjk=7,mch-,zh=5,gtlrv=9,zdd-,spmdr-,cpp-,rdt-,vlmzk-,fz=1,vvrs=3,gtlrv-,czz=9,nz=2,lbc-,kcz-,hxx=5,tss-,mpn=6,xsqh-,nz-,rj=6,vbd-,vg=5,vvrs-,llx=7,cz-,cfk-,qppr=5,js=3,xfr=9,nhf=3,vj-,pm-,llx=8,tplx-,cb-,vg=2,zzj-,bqm=4,brr-,dn=7,nlzh-,hng=8,qlzsf-,mrn-,cntnqq=8,hscvxq-,qktss=9,xb=9,hfm=3,lbc-,jmgk=9,sq-,hkdld=2,glf=9,bln-,tvlz-,vfv-,mf-,jvm-,hmz=9,hdsnxn=1,fhbs=3,mnzq-,crx=4,ml=2,rh=2,zxlf-,rmg=3,lfrc-,sbb-,kcz-,fmnsz-,xn-,gnd=1,nx-,zcd-,kzpdd=9,tlc=3,xtb-,rpp-,xq=9,sq-,zx=8,xfr-,czz=4,pzn-,zrd-,hr=9,zv=3,rj=6,nxn-,psr-,cf=5,zdt=7,qppr=5,qjvbq-,crtc=3,lhn=5,vhrgn=7,jmgk-,nhf-,ds=4,xfr=1,sjps=1,brhj=6,ldchkm-,qv-,ps-,jgjc=9,zg=4,xrvf=8,kmbv-,qppr=4,vrf=6,fq-,pnj-,rmg-,rlhql=5,qlzsf=2,gjls-,cr-,qtrht-,bq=8,rlhql-,rmg-,nxts-,hc-,xk=6,fsz=5,rbs-,nd=6,fq=2,zrqlt-,ngv=7,fgsg=7,qcc-,sr-,kqftn-,hbf-,sthdvm-,gmbhzp-,vc=7,zx-,cm=4,nxts=8,ngb=4,dn-,gmp=5,vzh=4,szcf=4,fz=3,ps-,tl=5,brr-,hzvrcv=7,sq=6,hc-,bcgzt-,dcpxt-,cngv-,rl-,ldzjgf=4,qlm=7,xkf-,ldchkm=8,vh=2,vfv-,xg-,ldchkm-,fk-,rtplq-,nbft=1,bq=6,xm-,vh=6,rbs-,ftcz-,zj-,hrxt=6,bh=3,mk-,xcdmb-,nhm-,sh-,fmnsz=6,cpp-,mpr=8,pjjq-,tz-,lqq=8,vb=1,pmz=1,mrpzq=2,pcpgxx=7,cl=2,bnkgv-,mv=7,dzs-,kzsb-,jx=1,rgjb=9,gn-,bsj=1,hcnzt-,gtlrv=6,lpl-,qs=8,khgngd=7,dl-,xk-,cl=9,gtlrv=1,lp=8,nbft=4,zz=1,ll=4,zzz=5,gjq=4,sbb-,cmjv-,jq=1,dff=9,pbbd-,zsjmss=8,ccl=9,rnbv-,cdf-,bv-,qk-,fk=7,jxt-,xcd=9,dv-,hf=3,qktss-,ggl-,xfr=1,lfrc-,gd-,jgjc-,nnbp=2,jxzf-,tl-,zvpf=9,ppfc=5,lqq-,ht=7,qcc=5,nms-,qbnd=3,khgngd=6,zxv-,rn-,gr-,gxcv=9,vb=9,bq=9,xcd-,rssnh-,cf=7,cmt=3,hq=7,gkz=3,jmgk=5,xrq=8,pb=6,rlhql=1,kmc-,vzqg=2,gkqdv-,mgsvf-,fdv=1,xcdmb=2,sthdvm-,xvcp-,dgsn=5,psstg-,lx=4,rmg=4,mpn-,xkf-,hlg=9,mv=8,qtrht-,ftcz-,nd=8,mtdc-,jd-,vg-,mch=3,pf-,rssnh=1,dvh=1,bnkgv=9,tx-,tsrfd-,bz=6,nt-,sfn=2,pv=9,gjkq=4,tds=3,lsp=8,sfn-,dlv=8,ml-,bqg=2,slf=4,crtc-,jd-,qx-,xcv-,pqkdbx=2,zzf=4,cpp-,bh-,xb=8,nhm=2,xcdmb-,lhn-,sc-,slr-,bl-,sm=3,txkt=8,tc=9,zh-,vj=1,qrgn=6,gkqdv=8,brftzs-,ttq=2,xbnq-,spmdr=8,ccpj=4,mmdx=1,xbg=1,tx=8,fm=6,lh=7,xcdmb=9,jxt=9,qcc=1,lvpk-,dff-,vl-,tl=7,pbbd-,pgn-,fdfj-,ktjl-,rssnh-,tlc-,crxtn-,fzsx-,jsq=8,gmbhzp-,rmg-,sq=7,tvlz-,rtplq=1,zsm-,mnzq-,ftcz=7,cb=9,mgsvf=4,hlj=8,xq=6,ml=3,dzp=8,nrml=5,hr=6,zkqk-,fm-,zkqk=4,mrpzq-,vxqx-,bf=1,rdt-,bqm-,hpk-,vv=1,ng=9,fqdtfv-,pcpgxx-,psstg-,ht-,gjkq-,dg-,dg=9,pb=7,qkd-,pxrcz-,zx-,rdt=4,rftr-,zzf-,dpk=9,lh=6,vrf-,mf=9,bs=4,rxksjz-,sjmf-,jgjc-,xq-,qlf=9,ths=9,mtgsh=6,dvh-,hlg=2,ttq=4,kxx-,zxv-,hj-,nvdddv-,zvpf-,qd=4,mrn-,kzbj-,khgngd=4,tzvjt=7,qkd=9,qz=1,zf=7,hrxt=7,lhn-,bqm=4,ltk-,cvzm=1,cbv=7,jhv=6,hzmf=7,bd=6,dl-,qck-,hkdld-,vfv=4,zv-,zrd=5,qx-,bgb-,znc=8,vbd-,nlzh-,dff-,gst=3,cbv-,cc-,tc-,dff=1,sjps-,xsqh-,vhrgn-,qbnd=1,zf-,hbf=5,rssnh=8,cb-,tvlz=8,hj=4,dr-,mpn=1,grfz-,jvm=4,pgn-,flcp-,ppx-,vmb=5,kjk-,jhv-,gkqdv=2,xq-,gvlg=8,brhj-,nc=9,znc-,hmbb=4,vmb-,bln-,qdz-,dv=7,lqn=2,cm-,hfm-,hdt=1,vc=9,vvz-,nc-,ddgcx-,pnj=5,gxxp-,qtrht-,zdt=1,qk=8,xg-,kzb-,psr=9,llf=6,bgb=7,qk=4,gnd=6,vb=6,dhv=9,vg=7,fhv=4,fm-,slbd-,cn=4,dzp=9,qbx-,bjbn-,nxts=6,xxh=8,hm-,dzfq-,lj-,kxx-,qtrht=2,cmt-,ng=3,lpl=6,fdfj=2,tlc-,qt-,gjls=7,dzp-,jq-,rk=3,qbnd=8,hxx-,vxqx=7,jvz-,rc=3,kv-,bjbn=6,tl-,dp-,kn-,nms=4,bsj=9,cfmg-,fhbs-,pqf-,khgngd=8,fzk=4,dcpxt-,pq=4,ktjl-,vhrgn-,fhfs-,qktss=8,fbdk=2,slr-,zxlf-,gfz=5,qqc-,fl=3,rpp-,vmb-,tz-,gvd-,kqftn-,zxkzv-,bbdm=8,cz=3,jvz-,fnv=6,zzj-,psstg=9,vtgq-,kn=4,gvlg-,gb=4,kvdzb=7,zkqk-,gjls=1,hlj-,zftj=2,crx-,xtb-,szcf-,fhv-,sjmf=6,ccpj=2,xtb-,lj-,zsm-,tkvp=6,rpp-,vmb-,dzs=7,zf=1,kjk=6,gkqdv-,zrqlt-,vkt-,vfv-,bcgzt-,cq-,gkqdv-,vfv=7,nxts-,tpdpn-,tkvp=5,kqftn-,fgsg=4,dn=3,ztn=1,nvdddv-,rf=8,ms=9,nc-,hlj=5,ggc-,mrpzq=6,ph-,dhv-,bzmz-,xm=3,xbg=3,rh-,mf-,bq=3,ks-,jd-,zf-,pl=3,tc-,zv=4,qlzsf-,nd=5,kmbv-,cn-,nrml-,bv=7,fl-,kzpdd=6,tk=3,bqg=2,lsp=1,gnd=9,xbnq=4,gkz-,xsqh=8,slf-,ths-,rj=8,nhm-,nlzh=7,ml=3,xcd=8,fbdk-,bl-,tds-,ztxkfn-,brhj-,qjvbq-,fhbs=9,zj=5,xlnv-,jmgk-,ftp=8,rl=9,mxmm=9,hqt-,nbft-,nms-,bh-,xrvf-,vrf=3,szcf-,xkf-,tlc-,qzt=7,qz=7,bsv=4,nhmft=9,gvcbl-,nxts-,pqkdbx-,khgngd=2,vcg-,hq=4,vtgq=3,pcpgxx=5,nznrn-,sq-,zv-,hkdld-,vvrs-,mkfmc-,cqf=6,rd-,sr-,sc=3,nlzh=5,vl-,vtgq=9,vvz-,zf=4,cpp-,kzb-,btmv-,ksbg=2,jgjc-,ggc-,qx-,kcz-,vkt=1,vbcd=7,vg=1,xkf=4,cm=5,njl=4,zdt-,pn-,bq=2,js=3,pvf=7,zg-,lhj=5,qbx-,pjpc-,bnkgv=5,qdn=4,rc=4,fbdk=9,gmbhzp=8,xsqh=9,fdfj=5,mdb-,xbg-,thk-,bjbn=1,qs-,nznrn=5,jm=7,dv-,nrml-,hcf=5,cgt-,cklg=7,gmd=9,vzh=3,ds=7,sm-,mch-,pvf=6,ks-,cs=1,dv-,cbv=7,vrf-,zvpf=7,tv-,psr-,dpk-,lvpk-,bnkgv=8,tbkrgb=6,dhv=4,llx-,lj=5,bmc=3,bzmz-,zxv-,cngv-,tn=4,cc-,dd=8,hq-,jkn-,gvd=3,nxts-,gkqdv-,rgjb=4,hs-,cz-,bjbn-,nbbs=1,zjrd-,zxv-,rh=6,cmjv=3,qck=5,nnzhg-,sfn=4,lqn=3,zv-,lhn=4,vlmzk-,hq-,fnv-,hxx-,bnkgv-,pnhr-,mch-,qcc=7,fhfs=9,zjrd=9,nr=3,vg=1,lx=6,qdn-,hrh-,hcf=1,vvz-,vvrs-,cfmg=3,sthdvm-,vxqx=3,jm-,rxksjz-,cb=4,dvh=7,gst-,vkt-,bfr-,fzsx=2,ztxkfn-,bqg-,scz-,hc-,hcf=3,rjm-,xtb-,lk-,cklg-,bppx=2,ccl-,jx-,vhrgn-,dhpq=8,bqrtx-,tkvp=3,ngb-,crxtn=2,cqb-,ggc-,jmgk-,tm=3,fbn-,bs-,mv-,qck-,hmz-,gb=6,zz-,sc-,bh=4,cr=5,tvlz=9,nt=7,mgsvf=8,jvm-,tss=9,ngv-,gx=9,xn-,nhm=3,dgczt=9,zj-,lk-,gn=2,vrf-,vc=2,mv=8,xp=5,llx=6,pqf=7,cs=2,dv-,zxv=8,qv-,qbnd-,mrn-,qqc-,nxn=4,jsq-,mnzq=4,pgn=4,gr-,rl=1,bl=7,ttq-,nlzh-,kjk=9,cvv-,vvz=1,xx-,xbnq=8,gtlrv-,fsg-,vdp=3,dk=2,pf-,cn-,js=1,xrvf-,cr=4,rmg=3,qdn=9,pq=8,ccl-,ks=3,tds-,qd-,xq=4,mtdc=6,qq=1,pbbd-,czz-,ldzjgf-,hc-,hcf-,df-,bl=2,kvdzb=1,gszhm=3,kzsb-,fqdtfv=5,hlj=6,xtb=7,bln=9,zvsqks-,dgczt-,zrqlt-,zhbq=3,bd-,fdv-,xbg-,pqf=1,zf-,nx=4,nbbs=1,ths-,ng-,crtc-,ltx-,sh-,ccl-,pjpc-,hfm-,df-,cmt-,xcd-,rqs-,tbkrgb=9,bh-,xn-,hc-,sm=3,zzz-,qv-,qlzsf-,sc=9,xm=3,txkt=4,xzp=9,hng-,jqk=6,qc=1,vsn=2,db-,mm-,kbf=7,dgczt=6,ml=6,dfk-,fqdtfv=7,gd-,vh-,thmccs-,vrj=5,rc-,nbft-,fhv=6,gnd=1,zzj-,hz=3,sfn=6,nnm=8,zdd-,hqt=2,dgsn=3,vsn=3,mf=4,lsp-,bszl-,rc=6,hc-,npv=6,mnzq=2,rl=2,hcf-,nms-,dzp-,dvnt-,gvd-,gszhm=5,kxx=1,rc=7,bszl=3,kmbv=9,sq=6,lhn-,zvpf-,mkfmc=5,lsz-,dfm=2,rn-,hpk=9,pqkdbx-,hmbb-,cpp=2,xg=2,vvrs=6,fzk-,kjk-,vzh-,vzk=4,hzvrcv-,znc-,rlhql-,pnj-,slbd=9,npv=4,slr=1,cvzm-,nms=2,zzz-,lvpk=1,rmg=2,pptx-,rdt-,tds-,zsm-,ht-,pn-,tlmrs-,ddgcx=2,sthdvm-,jm=4,qk-,vxqx-,qlzsf=5,qqc=7,vtgq=1,pvf-,lh=8,pl-,ht-,kzbj-,gjkq-,ttq=8,hg=7,bsv=5,hq=9,ml=5,dff=5,kr=3,ths=1,kmc-,kvdzb-,xfr-,mpr-,ztn=3,lj=7,pgn-,cngv=5,xtb-,lpl-,sm-,tbt-,ggl-,fzk-,tv=8,vrj-,ztxkfn-,slf=8,rn-,nnbp=3,bl=7,hrh-,scz-,qtrht=1,rxksjz=3,nkzlr-,ppfc=8,ccpj=6,gst-,qktss=6,sr=6,mlb=9,lqn=7,xsqh-,lqn=5,jmgk=1,qq-,cjjp-,bqg-,mmdx-,kzbj=9,qq-,nrml=6,fmnsz=3,cs=7,lk-,mk=1,zhbq-,gtlrv-,xrq=4,ggc-,lfrc=5,zz=3,zz=6,rftr-,fxg-,zftj-,zv=4,rk-,xvcp=3,nxts=2,gnd-,rftr=2,hd-,rdt-,qd=5,ftp-,rh=1,slr=8,tk-,vbcd=7,bjc=2,gjq-,pn-,ds=7,vxqx=3,rtplq-,dfk=6,fq=8,fzk-,vzh-,fl-,bf=5,zzj=9,qd-,flcp=1,cfk-,vdp-,mkfmc=5,qs=6,vb=7,xcdmb=3,crtc=2,bs=8,xfr=6,gx=2,lh-,vd=2,lgp-,bszl-,gfz-,lgp=5,rjm=8,zxlf=1,rjm=6,qt-,slbd=3,pxj=8,ql=4,gmm=9,cgt-,tplx=9,fsg=5,brhj=7,lj=4,nnzhg-,crxtn-,pm-,tlmrs-,vz=1,sh=3,brhj-,dpk=4,mrpzq-,cvv=3,llf-,cmt=4,dpk-,mj=2,pzn=8,ggl=7,qz=9,gf-,mj=8,glf=6,zjrd-,zsjmss-,rh=5,kzb-,ftcz=4,ll=6,rj-,czz=8,ftcz=9,tvlz-,llf-,mpr-,pptx=1,szcf=5,mv-,tzvjt-,sbb-,vd=4,tk=6,zf-,xbnq=3,tbkrgb=9,jkn-,btj-,ddgcx-,hz-,gvd=1,ngb-,vv=2,fnv-,cjjp-,fz-,fdfj-,hc=2,pptx-,rk=4,mlb=8,cmt-,pzn=5,vvrs-,xqmt-,ll=5,nznrn-,ql-,xrq=1,nlzh-,sthdvm=7,gvlg=2,vcg-,szm-,qd=4,cvfdfd=9,sfn=4,crx=4,dvh-,zdt=7,ldchkm=5,tplx-,tvlz=3,hkdld-,sr-,vsn=1,dcpxt-,cvv-,nt=3,hlqvl-,kmbv=3,sdk=5,px-,pxrcz-,tss-,kzbj-,vkt-,sjps=8,xn=2,cr=5,bh=7,jsq=7,tx=5,cmjv-,txkt=2,lqn-,bh=1,gmbhzp-,cklg=7,db-,lfrc=4,kg-,dd=8,nms-,fdfj=3,ztxkfn=1,tkvp=6,xtb-,dzfq-,ksbg=6,rlhql-,ms=6,szm=6,xlnv-,zxlf-,ccpj-,jxzf=8,hz=4,cxzcrz=1,hcnzt-,xkf-,mlb-,txkt=1,nd=2,vz=7,hlqvl=8,hkdld=5,nnm-,sc-,spmdr-,szcf-,crx-,kr-,xn=3,lhn-,gfz-,bvx-,js-,slr=5,px-,lsp-,pxrcz=4,zdt-,cngv-,mhp=2,fsz=9,fsz-,pm=4,vrf=8,xn-,ph-,ltg-,pnj=9,fpc-,fgsg=7,bh-,bnkgv=9,kvdzb-,fnv-,gmp-,xb-,vtgq=1,pn=3,dcpxt=5,fqdtfv-,dhv-,fxg-,dp-,dz-,slbd=4,ng=9,zvsqks=3,xn=3,cc-,qlf=2,ccpj-,tbkrgb-,sp=4,lsh=9,tvlz=9,bh=7,ktjl=5,cr=5,llx-,qbx=8,crtc-,dzs=9,cntnqq-,zkqk-,vzqg-,flcp=3,qx-,jvm-,vzk=8,gvcbl=2,xbnq=9,pm=8,vc-,ccpj=5,xxh=8,fx-,fpc=2,bl-,fz=3,jsq-,pvf-,bf-,vfv-,px-,hm-,brftzs=3,kz-,pl-,lbc-,bnkgv-,xn-,tz-,bcgzt=9,drcb=6,rk=3,sjmf-,cs=2,llf=6,mpn=1,zdd-,tc-,bgb-,bnkgv-,ldchkm-,fsz-,pqkdbx-,ltk=7,hf=1,gfz-,pjpc-,xcdmb=5,gmbhzp=1,dvh-,lfrc=4,ggc=4,lk=7,pjpc=7,qzt=7,xcv=6,bcgzt=9,nhm=9,vcg=2,bz=8,cvfdfd=4,js-,ltx-,jxzf-,fdv=5,jgjc-,nx-,sdk=5,dcpxt=8,ltg=4,cl-,pqf-,sr=7,cmjv-,qd-,mgsvf=6,zcd-,gxcv-,fbn-,psstg=8,nznrn=9,qlm=9,jmxdc-,bzmz-,ph=9,vfv=6,jmgk-,vv-,cdf-,sp=9,pmz-,dgczt-,dsf=2,pjjq=5,dt=4,thmccs-,qrgn=1,kvdzb-,npv-,ml=5,vcg-,dmhhj=4,mk-,fhv-,sfn-,hscvxq-,xq-,pv=2,rk=4,nznrn=8,vrf-,gmp-,cvv-,vmb=6,gn-,xtz=2,gmp-,qppr-,cqf=8,pf=1,lsh=7,gst=1,nlzh-,pptx-,tl=6,jcg-,nbft=3,bgb-,pbc-,vc=6,nxn=7,zzz-,bmc=2,gvlg-,nnzhg=8,fk-,zj-,dgsn=3,ztn=8,kmc-,ccpj=5,sm=6,fhbs=9,vg=6,qppr-,gjq=1,bh=3,nbft=5,qc-,qlf-,gxxp-,rbs=2,hrxt=9,gr=9,gxcv-,nx=2,zcd-,vdp-,lfrc=6,mpr=5,glf-,xqmt-,mxmm=3,hscvxq-,dzfq=2,xkf-,hdsnxn-,gf-,fm=8,zxkzv=9,kvpq-,tbt-,mmdx=6,slr-,bmc-,nr=6,qcc=9,mmdx-,mtdc-,nxts-,lsp-,fhfs=9,fhfs-,cklg-,fqdtfv-,kmbv-,vg-,zsjmss=7,sq-,zzf-,tlmrs=7,vdp=8,bgb=3,slbd=4,vrf-,mtdc=9,rnbv-,vz=3,zz=6,hlg-,mv=4,dg-,hd=7,cq-,ptnp-,bzmz-,vrf=5,czz-,nnm-,hd-,zrqlt=5,cn-,ttq-,qbx-,kvdzb=6,jsq-,qx=1,rftr=3,pqkdbx=9,sp=5,jx=4,crx=6,slf=8,dzfq-,brftzs-,ztn=3,lsh-,tlc-,tc=5,pvf-,pn-,fl=4,pf-,dzp-,xbg=7,gnd=5,xx=6,xx=8,xlnv-,nnbp=4,psstg-,nrml-,zg=8,qdn-,vxqx=2,js-,ccl-,kzb-,dcpxt-,hz=9,hfhgg=2,jcg-,kv-,pn=3,rnbv-,dv-,zjrd-,kzb=4,pqkdbx-,gmd-,khgngd=9,kcz-,jxzf-,fnv=9,btmv=8,gjq=4,qtrht-,xd-,tds-,dfk-,ds=4,qzt=9,kmc=2,bz=5,gf=1,fjxq-,nd-,mtx-,fdv-,fzsx=9,slf-,xtb=2,hscvxq=1,jxzf-,xsqh=9,mrpzq-,jm-,cpp=6,ldchkm=6,xcv=2,lnn-,mgv-,nz=9,kz-,gvcbl-,vv-,slf=1,hrxt=3,xcv-,xq-,ggl=1,bjbn=2,fq=5,tlc-,gtlrv-,ltg=4,hr=1,ltg-,xrvf=5,rpp-,pxj=8,npv=4,bz=6,dfm-,csd-,mdb-,dhpq-,bzmz-,dsv-,pnj=5,pjpc-,xn=1,rnbv=5,nhm-,xcd=4,gst-,lfrc=9,hj=5,pf=7,mmdx-,nvdddv-,nznrn=9,zh=8,bvx-,kn=7,lj-,cpp=8,pk-,hm-,nms=5,bv-,zgk=5,mxmm-,ftcz-,gr-,ll-,fk-,hscvxq=1,spmdr-,nkzlr-,ldzjgf=4,sjps=5,bszl=8,flcp=9,tl-,zz=7,hdsnxn=7,fzk=5,kqftn=3,tx-,gb-,qlm-,jmxdc-,jvm=9,ll=4,vbcd=4,ltk-,spmdr=4,rf=7,zftj-,fsz=4,lh=5,db-,tlmrs=4,hscvxq-,vz-,gvlg=7,qq-,xbnq=9,nbft-,bvx-,hzvrcv-,pbc-,hj=6,gqk=5,zz=9,dsf=7,zgk-,dk-,hr=8,tlc-,vbcd=4,xcd=1,sjps=7,cvzm=3,tv=1,rzh-,vcg-,nhf=9,qck-,tm-,fx-,lp-,dhv-,ppfc=2,hfhgg-,vxqx-,nnbp-,fq=4,qppr=6,pkd-,xcv=1,nx=7,qcc=3,hrh-,fjxq-,zttq=9,mrn-,jmxdc=6,pmz=2,zdt-,cm-,cvv-,cf=2,dsv=6,qk=5,qzt-,ldchkm=7,bv-,xg-,bnkgv-,nhmft-,mk-,qck-,rlhql=5,sp-,qz-,fn-,csd=2,pn-,dz=7,fhbs=1,fhv=1,cngv-,czz=5,sr=3,czz=6,qrgn=3,vb=8,pxj=6,zkqk=3,ccl-,vcg-,tn-,brhj=2,xrq=6,dsv=8,ztn=7,slf-,nr-,vd-,lfrc-,pb=2,cr-,bgb-,db=2,hm-,bszl=5,db=2,pbbd=7,dn-,zj-,mtgsh=8,dp=8,pm-,kqftn-,cklg-,fgsg=6,lp=3,znc=5,rk-,hbf-,qjc-,qbx-,kcz=2,rj-,lm-,lhn=5,fq-,qfm-,lj-,dhv=5,vmb-,fqdtfv=4,pjjq-,zx=9,tss-,tds-,vh-,pnj-,dk=7,qppr=1,qlzsf-,qt=5,kz=9,hng-,zcd=5,psstg-,rqs=3,lx-,ppfc=7,kn-,bqrtx=4,pnhr=5,nd-,db=1,zj-,zzj=5,sh=7,nvzvd-,drcb-,pvf=4,fzk=6,zdd=6,pk=2,nvzvd=9,mch=5,cgt=5,xfr=6,ll-,hng-,zcd=9,gtlrv-,rtplq=8,rssnh-,mk=9,nd-,sq=9,gr-,hg=7,tss=4,cmjv=8,fqdtfv=2,hq-,kmbv-,ph-,hqt=3,hdsnxn-,xvcp=7,cz=4,rdt=7,xz-,cdf-,tbkrgb-,gmbhzp=8,fsg=2,xq=6,pptx=9,bh=6,vg=6,mnzq=7,gd-,kvpq-,kxx-,nkzlr-,gst-,tm=1,mf=6,vz-,qq=4,vc=1,nrml-,ptnp-,hmz=5,cq=3,bzmz-,qfm=7,sp-,gqk-,nz-,pnj-,gr=4,glf=7,xkf-,xrvf-,rh=4,grfz=3,cb-,dfm-,vrf-,gst-,sfn=3,tx-,sh-,fm=6,dfk-,nlzh-,hfhgg=1,xlnv-,cdf=7,qck-,lpl=8,nkzlr-,vbcd-,dd=5,qktss-,fl-,hq=5,pjjq=3,bz=3,vl-,ltg=7,bd=3,hmbb-,ggl-,ht-,tvlz=7,qcc-,lm-,fpc=9,cgt-,lx-,nms-,fdv-,hqt-,xtb=6,kxx=5,ldzh=3,npv=3,lpl=6,bln-,nbbs=4,rd-,sthdvm=2,ql-,xrvf=5,bszl-,vbd-,cngv=6,nhmft=7,pm-,gszhm-,bqrtx=1,znc-,zf=3,rf-,mdb=2,cjjp=4,rmg=3,cmjv-,ltg-,bmc-,lnn=6,jq-,fz=2,rn-,zkqk-,nhmft-,zkqk=9,xb-,zj=4,lsh=4,xqmt=2,xvcp=3,tkvp=9,kzb=9,xrvf=7,tz=7,cr-,pk-,dmhhj-,llx=4,qktss=8,rj=5,dhpq=9,vfv-,ggc=9,qv-,cmjv=5,ppx-,ht=4,sthdvm=5,tds-,hj-,tl-,rdt=2,rdt-,cxzcrz-,kn-,kzpdd=2,nz-,pqf-,ps-,qxdn=5,gxcv=9,tx=6,jmgk=8,bszl=7,pxj=8,gmp-,mgsvf=7,qlm=7,ht=7,gnd=9,nhmft=8,qlf=6,jcg=2,xn-,xfr-,zf-,qdz=3,vbcd=7,lvpk-,hbf=2,ztn-,ftp=9,rssnh-,gx=5,xrq-,zh-,xk=6,kv=4,pnj-,hlj-,pbbd=7,dvh=7,bppx-,hlg=8,hmbb-,kzsb=9,jhv-,cdf=4,dsv=5,ftp-,xbg=1,gmm-,fq=9,crx=5,ggl-,nxn-,fbdk-,xk=9,lsp=6,bq=1,xk=6,qfm=9,tpdpn=6,kcz=3,vbcd-,zn-,cn-,lvpk-,hzvrcv-,fk=9,fpc-,pxj=1,fmnsz=6,zsjmss-,brhj-,mxmm-,vrj-,hdsnxn-,hdt=2,rl-,pnhr-,nznrn=2,cvv-,kvdzb=6,mch=9,dzp-,cq=2,nxn-,rnbv=3,gqk-,dt=5,xm-,ng-,vhrgn=4,kzbj-,cdf-,rftr-,pb-,lvpk-,jkn-,mhp-,cbv-,cqb-,zrqlt=1,xg-,kvpq-,tl=8,nvzvd=4,mrpzq-,dgczt-,vl=3,nnzhg-,pbbd-,tv-,js=4,vzh-,lx=3,cvzm-,dmhhj=7,bq-,pn=8,pm=3,qrgn-,rmg=5,ztn-,bjbn-,lm=7,ml=5,zgk=3,mtdc=7,kr-,fhv=6,fsg-,dk-,ddgcx-,llx-,pmz=5,cklg-,sp=5,gvd=3,bvx-,cjjp-,cbv-,vc=4,pxrcz-,zkqk=7,ms-,tsrfd=6,ttq=2,bf=1,bln-,bnkgv=6,pqf-,vvz=9,gd-,rtplq-,slr=3,rh=3,ngb=5,hdsnxn-,pm=8,kvpq-,cm=9,xq=9,psstg=7,crtc-,cklg=8,csd-,dz-,bfr-,qck-,rtplq=9,mmdx=3,fk-,nz-,cjjp-,brftzs=5,tm-,hf=7,glf=5,fqdtfv-,fzk-,mnzq=8,hlj=4,pk-,kg-,hmz-,pk-,sthdvm-,mkfmc=9,gkqdv=8,hmbb-,mm-,pzn=3,rnbv=6,cm-,mtx-,xrq=8,ptnp=2,tss-,vg=7,zdd=6,qktss-,scz-,kv=5,kvdzb=9,ths=8,xz=9,pbbd=1,ztxkfn-,zzz=9,jxzf=8,ll=1,vz=4,sjmf=9,jvm-,pjjq-,nnzhg-,xlnv-,zvsqks-,pvf-,gkz=2,tbkrgb-,hfm=7,rnbv-,hq=5,mlb=7,gf=5,qbnd-,ccl=1,njl-,gmd-,rgl-,sp=6,dsf=9,dmhhj-,qq-,dvnt-,sfn-,xtb-,rf=9,zxkzv-,dcpxt=4,kmc=8,vxqx-,hmbb-,bvx=2,ldchkm-,dcpxt=1,mm=9,hdt-,zdd=7,gjls-,cntnqq-,fm=1,ltx-,rtplq=8,ttk=7,ldzjgf=2,vrj=3,rjm-,thk=5,llx=1,dn=4,xp-,kvpq-,qjvbq-,nhm-,mgsvf=7,fbdk=5,gvlg-,jcg=9,cmjv-,sthdvm-,tk=1,ltk=2,fsz-,pnj=9,dgczt=9,sfn-,fnv=4,xrvf-,fmnsz=5,ltg=6,xp=9,ngv-,nc-,tsrfd=1,mdb=1,dk=4,jmxdc=4,cfmg=4,lhj-,ddgcx=9,tss=5,gvlg=2,zcd-,nbft-,cr=5,zdt=7,gjls=1,sq=3,nx-,kzsb=8,ccl=4,dhv=9,ks=6,zdt-,rtplq-,cfk=9,qdn-,hlqvl=2,fmnsz-,qbnd-,ng-,gkz=3,tbkrgb=1,lhj=1,gfz=9,ds=5,ppx=4,brftzs=1,cpp=2,gmp-,fhfs-,vrj=9,xp-,rgl-,xq-,tvlz=3,hg=1,qktss-,dgsn=4,fbn=3,mpn-,kbf=1,ltx-,kvpq=1,tpdpn=8,dgczt-,flcp=2,brr-,nvdddv-,tplx=2,fqdtfv-,szm=1,zdt=8,hscvxq-,sq-,qqc=1,pkd-,nznrn=9,lsz=6,lsp=1,pnhr=7,ph=2,gnd-,zxv-,rf-,szm-,tlc-,vzk-,xx=9,jd=7,fsg=4,pf=9,znrslr-,vvz=3,gf-,rbs=9,slr-,ttq=6,sm-,zz=7,bqrtx=7,gb=9,jvm-,qkd=9,lpl-,ltx=7,mhp=8,cm=4,hfhgg=7,nvzvd=3,brr=4,xtb-,qbx=2,bgb-,nhm=5,mgsvf=3,xrq-,cn=8,mrpzq=4,bcgzt=4,bcgzt-,ddgcx-,vc-,dhpq=5,mpn=6,zftj=7,nrml-,pptx=7,zf-,xbg-,dsf-,cq=2,bzmz=8,fm=1,fmnsz=6,dl=8,vbd=1,mm=4,lvpk-,hxx=7,vh-,nr-,jvz=4,glf=6,dp=9,gkqdv-,kv-,hmz-,bh-,gszhm-,cs=5,jcg-,fdv=7,fbdk-,qc=7,kqftn=5,tlmrs-,bppx=9,ptnp-,xqmt=8,dgczt=9,vzqg-,fdv-,glf=8,ktjl-,crxtn=8,qs-,dzfq=6,vfv-,jgjc-,mtdc=1,kg-,bszl-,fxg-,cntnqq=1,fbdk-,lqq=5,vbcd=8,fz=6,bsj=9,zzj=5,bf=2,gf=1,qppr-,ths=8,qdz-,nxn-,bsv-,qzt=4,qkd-,crxtn-,gkqdv-,hf=7,vz=6,czz-,jvm-,dp-,nc=8,dfm=7,xkf=6,tl=5,dg-,brr-,dt-,qfm=6,bq=5,kmbv-,lbc=5,nz=6,pv-,nhm=9,ngv-,rbs=2,xkf=1,nhf-,qq-,thmccs=6,qbnd-,fmnsz-,cb=7,slbd=2,jvm-,fzsx-,llf-,pkd-,vtgq-,mdb-,kv-,fhv-,dff=5,vdp-,nhf=1,bh-,gtlrv-,vxqx-,pbbd-,slbd=1,nd-,cr-,zxv=8,hng-,psstg=6,zzf=2,cvfdfd-,tkvp=8,ccpj-,grfz-,gmm=5,fjxq-,hg=5,lbc=1,kbf-,sjmf-,kz=3,jmgk-,bppx-,cc=2,crx=2,hf-,cvzm=9,nvzvd=4,nnbp=8,ldzh=7,vcg-,hf=1,ldzjgf=4,bh-,zzz=6,kv-,mch-,nt=2,mtgsh-,nxts=3,qx-,zjrd-,gmm=9,nc=6,vv-,lqq-,cklg=2,ng-,ddgcx=2,nbft-,ks=5,jvm=4,kr=7,bln=2,brhj-,lqn=2,mpr-,ftp-,cvzm-,fsg=3,dmhhj-,vrj-,zhbq=9,hmbb-,lsh=9,sjmf=6,jm=7,jsq=5,fsg=2,fzk=8,ttk=5,kcz=7,nvdddv=9,kbf-,kzbj=1,tplx-,cqb-,tss-,xxh=8,bsj=5,rgjb=6,lvpk=8,lqq=5,dx-,bq=3,ttk-,cmt-,ngb-,jxt-,cqf=9,cmt=9,xqmt-,lx-,bnkgv=1,xbg-,cc=7,tsrfd=7,thk=3,fdfj=5,dzp=3,qz-,cf-,rxksjz-,nvdddv=8,xk-,slbd=7,pl=6,pqf-,jxt-,zrqlt-,mrn-,hzvrcv=2,psr=5,pm=4,bszl=6,pjjq=3,npv=6,fsg-,zjrd=3,lk-,cl-,pjjq=6,bszl-,bln=9,jsq=7,gnsgrm=1,zxlf-,bgb-,gmbhzp=1,xz=3,qbnd-,jmgk=6,ttk-,bh=4,mrpzq-,pm-,cjjp=1,mpr-,qdz-,mtdc=5,llf-,rj-,nkzlr=4,rgjb-,kvdzb-,nnm-,dd=5,hrvbb=7,fzk-,llf=1,hg=8,hq=2,pf-,dl=5,kvpq=8,cqf-,bjc-,fhv=6,jq-,nxts=8,bl=9,lhn-,sh=7,qcc=1,nx-,tbkrgb-,mlb=8,szcf=6,sc=7,pnhr-,vkt-,dvh-,ds=5,bl=9,gst=7,szm=3,nnzhg-,xfr-,nbbs=1,zz=5,dzp-,rgl-,ldchkm-,qzt=4,pv=6,jcg-,brr=9,rdt-,sbb=5,xd=9,vkt=2,gjq=1,lsp-,btmv-,lgp=5,fx=6,szm-,gr=1,nz=4,kvdzb-,zttq=2,hd=9,kcz=9,ltx=5,xtb-,dgczt=1,ph=2,xq-,qlm-,kxx=8,nrml-,cntnqq=1,bsv-,cqb-,qs-,fsz-,cklg=6,fhv=7,hxx=4,fl-,vvz-,brftzs-,bzmz=2,nnbp=2,rgjb=9,gst-,lvpk=6,sthdvm=4,rmg-,hr-,vzqg-,nbbs=3,nznrn-,hcnzt-,px=1,zftj=1,sjmf-,tsrfd-,pxrcz=4,scz-,pqkdbx-,pf=2,bs-,xtb-,ppx=5,gjls=6,bz=5,xz=9,hs-,gtl-,hmz=2,sm-,vg=4,ccpj-,bgb=6,drcb=2,lj-,jxzf=1,cgt=3,dn=4,cbv=6,zvpf=1,fhv=8,cklg=7,rgjb=8,qjvbq=2,fk-,brr=2,mnzq=6,brftzs=8,btmv=1,sbb-,rbs=2,zzj-,cntnqq=6,ks-,rh=9,tz-,pjpc=6,tds=6,pcpgxx-,mtgsh-,hd-,kmc=3,bv=4,csd-,dff=2,lhj=1,gr-,pbbd-,lsh=4,ltg=1,hmz-,kn-,crxtn=3,fjxq=3,nhmft=1,tvlz-,pf-,mgv-,tss-,hscvxq-,hfm=8,hrh-,hm=6,vvrs-,bsj-,vtgq-,qxdn-,rnbv-,mk=7,cngv-,pv-,nms=6,ngv-,tc=3,lpl-,tl-,jm=8,zftj=7,xrq=9,jq-,qlzsf-,hbf=6,rn-,ths=7,zv-,dmhhj=8,vg-,dvnt-,cl-,kzpdd-,zzj-,qtrht-,gvd-,rk=7,znrslr=8,qv-,rtplq=8,xfr=5,tv-,pq=9,mtx-,kr-,bd-,nrml=5,bv=2,nms-,kvpq=8,hd-,zjrd-,nnbp=9,cqb-,nvzvd=7,ccpj-,kzsb-,qz=1,lsh=2,fsz=1,vrf-,qppr-,xsqh=8,hcf=7,jqk-,ksbg=3,xg=6,bq=8,bfr=3,tlc-,zdt-,kxx-,mrn-,tl-,vsn-,kzpdd-,pqkdbx-,cf-,qbnd-,jxt-,vtgq-,psstg=8,mtdc=9,pxrcz-,rlhql=7,tplx=9,cz=7,ng-,cgt-,fx-,pbbd-,hdt=2,nrml-,gkqdv-,hj-,qt-,xqmt=2,kvpq-,ms=3,nt-,nbft-,xfr=5,ktjl=9,lqq-,bh-,pcpgxx-,hfm-,bs=7,gvd=8,jgjc=1,gn=2,jmgk-,dhpq=6,tpdpn=7,qrgn-,cc=9,gf=2,cm=2,tm=3,zn=2,pvf=4,nc=7,rbs-,rh-,dzs=2,qt=7,gx=3,cl-,zzf=5,zxv-,mtgsh=3,xkf-,kzsb-,czz-,spmdr- \ No newline at end of file diff --git a/resources/2023/day15sample.txt b/resources/2023/day15sample.txt new file mode 100644 index 0000000..62f7ed0 --- /dev/null +++ b/resources/2023/day15sample.txt @@ -0,0 +1 @@ +rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7 \ No newline at end of file diff --git a/resources/2023/day16.txt b/resources/2023/day16.txt new file mode 100644 index 0000000..5ef6ce0 --- /dev/null +++ b/resources/2023/day16.txt @@ -0,0 +1,110 @@ +\.........|......./...|........................................................|............|-...\...-/....... +.....................\.......\........./...|...............|...\................................-...|.......\. +.......................................-....-./............/.......-.............\..|.......|......//......... +...../..../.....\.........-.........-./..-.......\./..\.............-.....\..........|-..................|.... +...........\..\...............-.............|.......-.\......\...\..........\.......-.....|..................\ +................|.........|........|............--........./\....|-.....................................-..... +........./...........\................../...................\././........./...-...-.\.-.........-............. +......|.....|............-............./...|...................-...|........./............/......./........... +......./........../..|.....-...........\|.................................................\.........|..../.... +........................|..................|.......|.................-..\...........-/.\.................\.|.. +.......|...|./....................................-...\........\.......|............................|...|..... +\..-................................\.......\........../....|.....................|........\../.........../..\ +....-|...............................\....|..............\.....................|.....\......\............../.. +.....\......-.........-.\.|..........|...............-.................|..........-............../............ +.........-...................-.............................................-.........../...................|.- +....................\..\........|-.\...............-............/....|..................../................... +.\.........-........................|..-.......|.......-...........-.-...................\/...\....|....\..... +.-........-./.....-.....\.......-..........\..-........\..-.....................................\..../...|.... +....-.........................|..\.....................................\./...............-............/....... +..........|..\....-........./..............................|........................-.......|./|........\..... +..\.........|..|..-|........\...-................|/..\......../.......-|..................||.-./.............. +.--..-.......-........./.................\....../.................-............................--.........-... +.......|.........../......./........../..\.........\...\../..\..././.......-.................................. +.........-/...............|..\|.................\...........|............../............\..................... +..........-.........\.-................|-..................../......../...|/...\..-....|-........-.......-.... +.--|.\|.......|.....-............................|.-....-...|...................|........../.................. +.....-......./..../.|...................|\..-.........../...|.............................\/../........../.... +......./........|.\......-../...........\........................./..........\.........-...\................|. +./.......................\........-......|...|............................/............\....-.....|..../...\.. +....................-..............-..-.............../..\...../.\.........\................../.....\.....-... +...................../......-....-.......|....|......../..|-...............\..\../.-.....././..........|...... +..\.....|...\............................./.../...../..../......../........................................... +./.../................................../.....-.........|.....|..........-...............................-.... +...............|..\...-................................\.........................|....\...............-.-..... +/........|.......|.....-.......-..-..-.\.................................-.\...-.......\.............-..\..... +./......|../......|................................/.........||.-....................|..\.........-....|../... +|..................................................\......|...-............................../.......-........ +....../...............-....-..................\....-../................................./.\.................-. +......-...........-...../.....-......|..........\.\...-......../......\................--..............-...... +.............\/........|...../...........-.......\...|........................................................ +...\\........\..........|...\............/........-..../....-.....................-......................../.. +.......-......../......./..........-....|....-..\.........................\.............../..........-.....-.. +.....|\/..../.........|.........../|.....\.......-........-............../..././.............|................ +.........|....|....\..-....../............/.....\/....|.............\........................|.........-...... +.\\..........................//......................\....\...........................-.|/.................... +...................|...................-.|........................................../..........\.............. +......\..|....../...........\.-.........-.......-..|../........../.............................../.......-...| +..........|................/|.....-.....\................||........./.............|.........../..-..|./....... +............../../|.......\...............-..../|..../-..|................................../......-....|..|.. +............\...............\.........................\....-.............-..|/.....--...................-...-. +.....|\......\...........................-.................-.......\...............|............|........../.. +.....\...-.............|............\........\...../.-...........|.-.................\.........|.............. +......./......\..-............|..-...\......................\..........|....../..........|........./.......\.- +..-.....|........./|............./.....................|...|.\....-.......-..........|...\.\|-........\....|.. +......................../............-...........|...................../............-.......\.........-....... +......../..............-./...................................--........................\....-.......-..//..... +........|.....-....................|...../..............-..........-......|..\................................ +.......-..//.............../.....-......................./..|........./...........-..../..|.........-......... +.-...............-...........................\.......\...........-..................-.|...\..\.....\..\.....\. +.........-../............|......|.|.........................\.......-......\...\..............-../.../-\...... +.-...........-..|.....\/........-.|...................../.|........-...........\..........\.....\/|..../...\.\ +.-..........\.\-..\....-\/................./.\.......|.........................-............./....\........./. +.............\.........|............/...........\\................./..-..........................|//.......\.. +..../-........-.........................-\...........|................./..........|.............|.\..|........ +...-..|.....\..-..\.................\-.................|...../.-..........|........|/...-.-.\................. +.-.-............................|.....\..-..........|/|.........|....\............\.....\..-...........|/...|. +......................../...............|..-............................-.........|........../.-....../....... +.........|-...................|.....................-...........|.../..............................|....-...-. +..............|....................................................|.....|.......--.....\...\.............../. +..-...............|........|..................-............|.........../.....\................................ +........................|.........|............-....-..\../..................\..|......\.........\../.../..... +.|............................./..............-....-.......--....-.../..........|.....\.........-/.....|-./... +....-..............|...-.....\.....\/.-........................................-.\.............|...../|/...... +........./..-................/........./..............-............................................-....-..... +...........-........./...................../.........-........-................./.|........................... +............................................................-.............-..-......|..........-.\............ +....\/........................-../.../.................................\............/..........|./-......-...\ +....-............../..-.\.......|......-...|...|.........../......|../...........|..-.\.................../... +...-......../....-........................|...-............-.........................|/.....|.........|......- +...|........-.......-.......|...|\.......\............-...-...................................-|........-..... +....\/..-.....-.....-..--./-..-............../................|............\.............../.......|.......... +.........-.\.......-......|........-.............|..../..............\-.....\..........-..../................. +.................-......\|.--..../../.-......-.......-........\....-...../....................../............. +...../..../....../.............-......\..........|..........\..\........-.-................................... +..............................|........./........-..................|.............-.../.................\..-.. +.....|./......-........\...\.................|....-........|..............|................................... +\...|............................-..|.............../..............|.../......-......-.........../....../..... +..../.............................-..........\.....\-..................................-........../........... +..........................\....................-...-/.|....................../................................ +\.......|.........-............\\...............-...-...................../................................... +..\...................................-................................................../.......\.|.......... +...............................-................/........\....\.......|...................-.../.....|......... +...-..-............-.||..../././..........-\\............||...............-.\.........../...\........|...\...| +....\./.|./...................\..-.-./..-.....||............../............|.......\.|...../.................. +......-.......\.\.........\......|..\...\.-|.\..............|...|......\......./...\........................-. +........./.-......../....|..............................|...|...\........//./................................. +.........................|...........\...........|.....................\........//..-.................\-/..... +.\....................\..-.-..-..........|/.\..........\././.....................|............\....|...|/..... +......./.................../...-.................\.........../.........\................|....................| +......-..\....|..................\............\........|......|....../........................................ +.........\/..............|.............\.........-............-...........\.\..\./....../.....//.............. +.........../...\.......-.../.-.............\../....\|./............/...-..\........|..|/.....\......\\........ +..|............/..............................................-./...-.|..........-......../................... +...............-..|.......\.............\..../.....................|..........\...................\.....\./\.. +.|..........\..\...|......................\...........-.......--........................-..................... +...................../................\.|..........-..|................-................................-..... +...../.........|-............|.\.|.../\.....|../........\../.................................................. +................/........\../.....................\./..../...........-............\-......../../..\.|......... +..............|.........-......|/......././.....|..../.|...........-.....................|./.-.....\...|...... +.......|..-.......\..........|................................................/..\.....-..........-........... \ No newline at end of file diff --git a/resources/2023/day16sample.txt b/resources/2023/day16sample.txt new file mode 100644 index 0000000..c78b2e7 --- /dev/null +++ b/resources/2023/day16sample.txt @@ -0,0 +1,10 @@ +.|...\.... +|.-.\..... +.....|-... +........|. +.......... +.........\ +..../.\\.. +.-.-/..|.. +.|....-|.\ +..//.|.... \ No newline at end of file diff --git a/resources/2023/day2.txt b/resources/2023/day2.txt new file mode 100644 index 0000000..ef98355 --- /dev/null +++ b/resources/2023/day2.txt @@ -0,0 +1,100 @@ +Game 1: 1 green, 2 blue; 15 blue, 12 red, 2 green; 4 red, 6 blue; 10 blue, 8 red; 3 red, 12 blue; 1 green, 12 red, 8 blue +Game 2: 5 green, 2 red, 18 blue; 18 blue, 6 red, 9 green; 6 blue, 3 green; 6 green, 1 red, 9 blue; 19 blue, 2 green, 6 red +Game 3: 16 red, 10 green; 12 red, 6 blue, 9 green; 10 green, 5 blue; 10 green, 16 red; 5 red, 8 green, 8 blue +Game 4: 9 blue, 20 green; 1 red, 3 blue, 10 green; 7 blue, 18 green; 4 blue, 20 green; 8 blue, 1 green, 1 red; 1 green +Game 5: 3 green, 8 red; 1 blue, 10 red; 6 red, 4 green; 8 red, 1 blue, 3 green; 1 blue, 4 green, 3 red; 1 green, 1 blue, 4 red +Game 6: 7 green, 15 red, 11 blue; 2 red, 12 blue; 11 red, 11 green +Game 7: 14 green, 10 blue, 4 red; 3 red, 11 green, 14 blue; 1 red, 2 green, 11 blue; 9 green, 1 red; 6 red, 6 blue, 9 green +Game 8: 1 red, 6 green, 3 blue; 4 green; 4 red, 3 green, 1 blue; 2 red, 10 green, 3 blue; 2 green, 6 red, 3 blue +Game 9: 2 green, 8 red, 3 blue; 2 green, 4 blue, 2 red; 2 green, 5 blue, 2 red +Game 10: 9 green, 1 blue; 2 blue, 12 green, 3 red; 2 red, 3 blue, 1 green; 3 blue, 8 green; 4 blue, 4 red, 1 green; 5 green, 4 blue +Game 11: 5 red, 2 blue, 2 green; 3 blue, 2 green, 8 red; 6 red, 1 green +Game 12: 8 blue, 7 green; 2 green, 2 red, 7 blue; 4 green, 1 red, 20 blue; 5 green, 13 blue, 2 red +Game 13: 1 blue, 11 green, 13 red; 6 blue, 13 red, 19 green; 5 blue, 6 green, 6 red +Game 14: 12 blue, 1 red, 15 green; 16 green; 1 red, 18 blue, 15 green; 14 blue; 12 blue, 1 red, 8 green; 4 blue, 16 green +Game 15: 6 blue, 3 green; 1 red, 1 blue, 2 green; 3 green, 4 blue, 7 red +Game 16: 17 red, 14 green, 6 blue; 5 blue, 2 red; 1 blue, 11 red, 2 green; 13 green, 12 red +Game 17: 14 green, 4 red; 1 green, 5 blue, 15 red; 5 green, 14 red, 5 blue +Game 18: 8 blue, 2 green, 1 red; 12 blue, 1 green; 1 green, 1 red, 5 blue; 1 green, 1 red, 9 blue +Game 19: 1 red, 2 blue; 2 green, 5 red; 1 blue, 2 green, 11 red; 10 red; 4 green, 11 red +Game 20: 5 red, 11 green, 5 blue; 2 red, 5 blue, 7 green; 12 blue, 5 green, 10 red; 4 blue, 15 red, 10 green; 11 green, 12 blue, 7 red; 15 red, 12 blue, 5 green +Game 21: 5 blue, 6 green, 1 red; 18 blue, 13 green; 7 blue, 3 red; 9 blue, 2 red, 14 green +Game 22: 4 blue, 2 green, 19 red; 11 green, 5 blue, 17 red; 12 red, 4 blue, 13 green; 2 blue, 11 green; 1 blue, 19 red, 10 green; 8 blue, 2 green +Game 23: 12 green, 6 red; 1 blue, 1 red, 11 green; 1 blue, 3 red, 8 green; 4 green, 8 red +Game 24: 8 blue, 1 green, 6 red; 6 blue, 9 red; 8 red, 1 green, 1 blue +Game 25: 2 red, 4 blue, 1 green; 1 blue, 4 red, 2 green; 1 green, 5 blue, 1 red; 3 red, 2 blue +Game 26: 2 green, 10 blue, 5 red; 14 blue, 6 green, 12 red; 7 green, 2 red, 1 blue; 3 blue, 5 green, 3 red; 7 blue, 1 red, 3 green; 5 red, 2 green, 6 blue +Game 27: 8 blue, 2 red; 2 green, 8 blue, 6 red; 4 green, 2 red; 2 blue, 4 green, 7 red +Game 28: 8 green; 1 red, 9 blue, 10 green; 8 green, 9 blue, 2 red +Game 29: 5 red, 3 green, 2 blue; 12 red, 6 blue, 1 green; 6 red, 12 blue; 2 green, 4 blue, 5 red +Game 30: 9 red, 1 blue, 2 green; 13 green, 12 blue, 11 red; 11 red, 5 green, 9 blue; 4 blue, 12 green, 3 red; 10 red, 8 green; 2 red, 3 blue, 12 green +Game 31: 11 green, 5 red; 1 green, 4 red; 6 green, 9 red, 2 blue +Game 32: 6 blue, 3 red; 2 red, 11 blue, 4 green; 1 green, 4 red, 12 blue; 3 blue, 2 red +Game 33: 1 green, 7 red; 15 red, 15 green, 1 blue; 15 green, 3 red; 1 blue, 13 green, 6 red; 1 blue, 13 green, 20 red +Game 34: 3 red, 5 green, 1 blue; 13 green, 5 blue, 2 red; 3 red, 3 blue, 8 green; 3 blue, 1 red, 1 green; 4 blue, 3 red; 9 green, 3 red +Game 35: 6 blue, 8 green; 6 red, 9 blue, 12 green; 4 green, 3 blue; 5 red, 3 blue +Game 36: 17 green, 1 red, 1 blue; 1 red, 7 blue, 13 green; 6 blue, 5 green; 9 blue, 6 red, 5 green +Game 37: 2 green, 16 blue, 1 red; 3 red, 5 blue, 4 green; 3 green, 5 red, 2 blue +Game 38: 10 red, 3 blue, 1 green; 2 blue, 4 red; 7 red, 1 blue; 8 blue, 5 red, 11 green; 12 green, 4 blue, 8 red +Game 39: 3 blue, 3 green, 1 red; 5 green, 9 blue; 1 green, 6 blue; 5 blue, 7 green, 1 red; 9 blue, 1 green +Game 40: 1 blue, 2 red, 2 green; 2 green, 14 blue; 2 red, 6 blue; 13 blue; 2 green, 10 blue +Game 41: 1 red, 1 blue, 1 green; 11 green, 1 red; 4 green; 5 green; 1 blue, 1 red, 10 green +Game 42: 4 blue, 3 red, 2 green; 6 red, 1 blue, 6 green; 11 red, 7 blue, 3 green; 6 blue, 7 red, 1 green; 11 red, 1 green, 6 blue; 2 blue, 4 green, 10 red +Game 43: 3 red, 5 blue; 2 green, 4 red, 3 blue; 7 red, 10 blue, 13 green +Game 44: 13 green, 5 blue, 3 red; 1 green, 5 blue, 8 red; 11 green, 4 blue, 9 red; 5 blue, 7 green, 9 red +Game 45: 12 red, 9 blue, 5 green; 9 green, 3 red; 3 green, 11 blue, 15 red +Game 46: 5 blue, 2 green, 1 red; 1 blue, 3 red, 3 green; 2 green, 7 blue +Game 47: 8 red, 8 green, 5 blue; 12 blue, 8 green, 7 red; 5 red, 1 blue, 2 green; 1 red, 4 green, 6 blue; 1 red, 3 blue; 5 green, 1 red, 3 blue +Game 48: 3 blue, 2 red, 5 green; 4 green, 5 blue; 3 blue, 13 green, 5 red +Game 49: 4 red, 9 blue, 1 green; 12 red, 8 blue; 5 red, 2 blue, 1 green; 11 red, 2 green, 9 blue; 8 red, 9 blue, 3 green +Game 50: 3 blue, 2 red; 3 blue, 7 green; 4 red, 2 blue, 8 green; 7 green, 2 blue, 4 red; 3 red, 3 green; 6 green, 4 red, 2 blue +Game 51: 9 blue, 4 red, 2 green; 5 red, 3 green, 3 blue; 5 green, 10 blue, 5 red; 8 red, 11 blue, 5 green; 1 red, 3 blue, 7 green +Game 52: 1 blue, 9 red, 6 green; 8 red, 1 blue, 4 green; 13 green, 3 blue, 6 red; 3 green, 9 red; 3 blue, 12 green, 7 red +Game 53: 1 blue, 9 green; 1 red, 2 green; 7 green, 1 red +Game 54: 3 green, 3 blue, 9 red; 6 blue, 11 green, 1 red; 6 green, 1 red, 4 blue; 4 blue, 2 red, 13 green; 3 green, 1 red; 6 blue, 3 green, 8 red +Game 55: 1 blue, 6 green; 4 red, 5 green; 8 red, 12 green; 5 red, 1 blue, 7 green; 1 blue, 11 red, 3 green +Game 56: 1 green, 11 red, 1 blue; 2 green, 8 blue, 3 red; 5 blue, 6 red, 1 green +Game 57: 5 green, 3 red, 2 blue; 10 green, 12 blue, 16 red; 7 blue, 13 red, 11 green +Game 58: 5 green, 16 blue, 5 red; 9 blue, 2 green, 5 red; 5 blue, 3 red, 9 green +Game 59: 2 blue, 2 red; 7 blue, 3 green, 4 red; 2 green, 1 blue +Game 60: 12 red, 5 green, 1 blue; 2 blue, 12 red, 4 green; 16 red, 4 green, 2 blue +Game 61: 3 green, 1 blue, 6 red; 4 green, 1 blue, 8 red; 4 red, 1 blue, 1 green; 4 green, 13 red +Game 62: 2 red, 4 blue; 2 blue, 13 green, 8 red; 4 red, 9 green, 4 blue; 8 green, 3 red, 7 blue; 3 blue, 6 red, 3 green +Game 63: 1 green, 3 blue; 6 blue, 4 red, 3 green; 3 blue, 1 green, 1 red; 2 green, 2 blue, 3 red; 1 red, 2 blue; 5 red, 6 blue +Game 64: 7 red, 10 blue, 4 green; 1 green, 18 red, 2 blue; 7 blue, 2 green; 10 red, 1 green, 7 blue; 3 green, 5 blue, 11 red +Game 65: 11 red, 2 blue; 1 green, 2 blue, 1 red; 3 blue, 2 green, 3 red; 3 blue, 3 red, 7 green +Game 66: 3 red, 7 blue, 11 green; 10 blue, 4 green, 9 red; 11 blue, 11 red, 12 green; 8 red, 7 blue, 10 green; 5 red, 14 green, 3 blue +Game 67: 5 green, 1 red; 7 green, 4 blue; 3 red, 1 green, 3 blue +Game 68: 9 blue, 11 green, 10 red; 12 blue, 3 red, 3 green; 8 red, 7 green, 9 blue +Game 69: 1 green, 7 blue, 1 red; 1 red, 9 blue; 1 green, 2 red +Game 70: 9 green, 2 blue, 1 red; 1 red, 2 blue, 16 green; 13 green, 4 blue, 13 red; 8 red, 7 green, 6 blue; 12 green, 3 blue, 3 red +Game 71: 2 green, 4 red, 6 blue; 11 green, 6 blue, 2 red; 3 green, 1 blue, 5 red; 7 blue, 6 green +Game 72: 4 blue, 1 green; 4 blue; 1 green, 3 blue; 4 blue; 1 red, 4 blue; 3 blue +Game 73: 4 red, 1 green, 7 blue; 15 green, 4 blue, 17 red; 19 green, 3 blue, 11 red; 13 green, 5 blue, 1 red; 10 blue, 13 green, 17 red +Game 74: 9 green, 2 blue, 18 red; 5 red, 8 green; 3 green, 4 blue, 3 red; 5 green, 3 blue +Game 75: 1 red, 10 blue, 1 green; 2 red, 19 blue; 4 red, 10 blue; 3 red, 7 blue, 1 green; 2 red, 3 blue +Game 76: 4 green, 9 red, 7 blue; 8 green, 7 blue; 12 green, 9 red +Game 77: 1 red, 6 blue, 2 green; 8 red, 5 green, 4 blue; 4 blue, 2 red, 3 green +Game 78: 9 blue, 1 red, 8 green; 2 green, 9 blue; 2 green, 9 blue +Game 79: 4 blue, 4 green, 1 red; 4 blue, 4 red, 4 green; 4 green, 1 blue, 6 red; 6 green; 6 red +Game 80: 13 red, 8 blue; 2 green, 14 red, 13 blue; 7 red, 9 blue; 11 red, 18 blue; 2 blue, 3 red, 1 green +Game 81: 2 green, 9 red, 12 blue; 5 green, 5 red, 13 blue; 5 blue, 5 red; 2 red, 8 blue +Game 82: 6 red, 15 green; 1 blue, 15 red, 13 green; 6 green, 1 blue, 1 red; 5 red, 6 green, 1 blue +Game 83: 1 green; 1 blue, 1 green, 10 red; 7 red, 1 blue; 1 green, 11 red; 2 blue, 1 green, 3 red +Game 84: 17 green, 8 red; 1 blue, 14 green, 2 red; 6 red, 1 blue, 6 green; 4 red, 10 green, 1 blue; 2 red, 2 blue, 1 green; 4 blue, 5 green, 3 red +Game 85: 5 blue, 3 red; 1 blue, 1 green; 6 green, 1 blue, 1 red; 4 green, 2 blue, 7 red +Game 86: 7 red, 3 blue, 4 green; 1 blue, 13 red; 3 red, 3 blue, 6 green; 1 blue, 1 green, 17 red; 8 blue, 13 red, 4 green; 6 blue, 4 green, 17 red +Game 87: 10 red, 3 green, 4 blue; 12 green, 10 red, 3 blue; 2 green, 16 red; 16 red, 3 blue, 14 green; 14 green, 11 red, 1 blue; 9 red, 4 blue, 6 green +Game 88: 7 green, 4 red, 19 blue; 1 green, 5 red, 18 blue; 19 blue, 3 green, 6 red; 9 green, 14 blue, 5 red; 3 green, 5 red +Game 89: 4 red, 2 blue, 10 green; 6 blue, 5 red; 3 green, 4 blue, 1 red; 12 green, 2 red, 2 blue; 3 blue, 3 green, 3 red +Game 90: 1 green, 19 red, 1 blue; 7 blue, 4 green, 10 red; 6 blue, 3 green, 13 red +Game 91: 1 green, 9 blue; 7 green, 4 red, 3 blue; 6 green, 2 red, 8 blue; 1 red, 1 blue; 3 red, 2 green +Game 92: 18 red, 2 green, 2 blue; 6 blue, 4 red, 6 green; 3 blue, 10 red; 8 blue, 2 green, 7 red +Game 93: 13 blue, 3 green, 15 red; 14 red, 2 green, 7 blue; 1 blue, 4 green, 13 red; 19 red, 5 green +Game 94: 6 blue; 5 green, 8 blue; 1 red, 9 blue; 1 red, 8 blue; 5 green, 6 blue; 1 red +Game 95: 9 blue, 14 green; 2 green, 1 red, 1 blue; 1 red, 3 green, 2 blue; 6 green, 1 red; 1 red, 8 blue, 14 green; 1 green, 5 blue +Game 96: 7 blue, 17 green; 19 green, 3 red, 2 blue; 6 green, 2 red, 2 blue; 3 blue, 16 green; 3 red, 20 green; 4 green, 2 blue +Game 97: 1 green, 1 red, 1 blue; 4 red, 2 blue; 7 red; 6 red; 7 red +Game 98: 2 red, 15 green; 10 green, 1 red; 1 red, 11 blue, 11 green; 13 blue, 8 green, 2 red; 1 red, 12 green, 7 blue +Game 99: 14 red, 2 blue, 1 green; 3 green, 13 red, 9 blue; 9 red, 9 blue, 2 green; 13 red, 7 green, 5 blue; 5 blue, 3 green, 11 red +Game 100: 1 blue, 1 red, 1 green; 8 blue, 1 green; 1 green, 7 blue, 1 red; 1 green, 4 blue, 1 red; 1 green, 3 blue diff --git a/resources/2023/day3.txt b/resources/2023/day3.txt new file mode 100644 index 0000000..9191bee --- /dev/null +++ b/resources/2023/day3.txt @@ -0,0 +1,140 @@ +........936..672.........846.922........359...332......582..856........................579..93......674..740.....243.156.................... +...........%.........4=...*...*........*.......*......#....................806..481.........................*.......*.........900......$564. +.............520........624.965....143..405.....960.............273...651...*....*.........554....139@.....38...*.........58..*...392....... +................$....................*.........................*.....&......634.3..../.................-......310....*313.*.........*....... +...196....544......541................775.216...+557..225/..463.......................517..........960.228........452.....593.......772..... +.....*....*...654.*........638............*...........................163....................386#......................20......169.......... +.....566..20...$...132........*969......747........*971..342............=.245*.......................277.522............*..............+.... +.............+..............................205.716...........................855.............324......................871..752.........291. +.........47..390.......128...%....528........%..........91*192.......=.....................=.#.............%..852*156......+................ +.....975..*.......=....*...322.......#............&63.............946...................462....939..520...268............#.....*....380..... +.........55..=.....871..68.............................................491.......................*.....*............674.770.333.415...*.275. +..............633...........@.....642.5........+.......739........632.....*.......992.74.615...858...998.............*..............761.*... +....446......................180./..../........83...&.....*924....&........379...*......................................................118. +...........488*240.......150......................958..........$.....&...........964...351...........+..633.........123....../603........... +...................987....../........546-...674...............466.....602.............@...........956..#............./...................... +......503=....465.................91.........*..........................................583..............128..124..........$.....217........ +..............*...32$..53....&594.........648...827....*..994.......971...................*..........304...%....*.......387..80............. +............756.......#..........................*..888...$............@....339.......+..868........*........851..............*.........128. +...905-.........312..................729...356*.697.........736.....+.......+.......748.......797....41....................272..753......... +.................*....&604............*.............%915.......*.529..889...................*.........................992.........*.....718. +...........272....487..............+...961.892..............632........*.................502.118....141................@......546.669....... +787..........*....................85............/..330...........-...374.............................*.........446...%.........*............ +....-...../...120....919&.....................339....*....*663...403........167...533.170.............698..587...*....279.......776.+....... +.575.....34.*.................668...19..759.......804..730...../.............*...........*.....789...........*....803......666.......25..... +............375...773*.............*.........................$.876...287......201........484......*.........196............................. +565...866.............23..477...455....................794.996.........*.....................887.959...146...........496....790............. +..............648...........+........325.738....156.....*.........534..941.....%536..31..../.%...........*............*.....*.......511..... +..............*.................166.....*......*.....647..........*......................262...........887..210.3..860.....161....4....*420. +......141.606...........193.111..*..........252......................935*689..................500...........*...*.................*......... +..635....*........=........*.....959.....................@834.................-.....542..547....-..........770.8...........439.............. +.................896.........93......................244..........@......247..735..*.................................497.............%...... +...............................%........................*..........200....+.......342.613.245.@............$.........#....*.......176...21.. +......51......702.37.......798....325.....&974.....834.860.....+.........................*.....533..866....864.............269.............. +..141..*......................-...&............875*.............207...882*.........................*............309.739........%......../... +.......394....144.....................................$...................835.3..........290.......489...........&.....*177.833....866$.153. +.689.................719.314/..$......673.....5*557...443......+..#649.............575....*..634*........................................... +....&...........794...*........614...*......................350.............411......*.104.......141........369...934...........997......... +.......519......*...787..............739.....628...................................784.......$..........989*........*...987.......*....#.... +.........*...309.........209.............957*........50.....@995...765.......269.@........380..624.................643.....*....836...356... +......886............234.+....................51*935..*...........*.....188.......73..............*696...14.....#........................... +............203..948...&...............................957......804.736*......388....689.219*660........*.....218....................$..40.. +..............*.....*.....475.....930..........%................................*......*..............477.624................848...687...... +....57*.50.229....636....*.................804.164....590.........-....547..80..310....675.......=.@...........................*............ +........................398......&........*..............*.....748...........*................226..200................160......853.......... +......292........................889.......867.....365...............192+..530.........................@910....=..222*.............894...... +..427....#.../...959........................................322.....................735*304....742..........195..........$..............22.. +...........465..-.........52.$......168.......418.......+.........................................$..............&......563...649*26........ +....................464..../.969....*......-..*........150......724.....83..301...............527...............858.506..................... +...935.........910....+...........116....427...347.............-........*.....=.......891.......*....847...750........@................531.. +....*.........$.........676...............................510............11.......647.*.................#.....%.683.............193...+..... +....761.169...............=...524........&......152..........*...975.994.........*....122..........858*...........%.......776...........*... +...........-..180/.850..............$.....524....-...........940.=......*......199........963..............#........836...*.....34...543.448 +482...947...................94&....541..............265..............477..890..............*....988.....343..........&...599....+........... +.......*...532..81..73..417............992/...99&...#........................*.33@.149..305.........678.....31.........@.................417 +....304.....@.....*...#../....452.842.................519.....307.949.....268................=.........*....*...........259................. +..................361............*.......346............*.+......*...........................288.......492..985.............727.683......... +....530....438..........950..........*......*........787..316...............762.724.257..889.....................844.......*......=....@125. +..............*...446...*......879..827......148......................*730.......@..........*...832...............*.......647.......48...... +....500.......994........41.......*.....#805...........*...........614...............*....940................291&.129.8............=........ +....*...#..........698..........581.................940.462.....@......443...82.784.593......../.#375..%148............*..#................. +.....39.562...784............................................805...$......@...*..*..........844.....................776....363...667........ +................%...265.......337.....438...295.....................499......341.74..................271.405.......................%.155.... +.........97..........*......@....*252.*......*....+.........270.229.................394...879*247.....*...*.....146.....................*... +........%.............226..258........996.944......793........*.../...................+..............321.578.....$..........838.....529.831. +.................%109.........................................615....822.....................501.............616....293.....&........-...... +.......%....482...........................%717.236.......562...........*...........915...580....*............*.....+..........230........... +.....303.......*128..86&......762.928.............$........*......861*.311........*....../....517..........471.544.....996.......*38...628.. +...........563............89.*......*.583...%.148.......$.987...................35..................996...........=....*...............*.... +......776.....+...........*......967...@..168...*.....772.........838*.....480..............................-........976..............530... +................649*32...84.#...................315...................37............398.656...631..........340.985*..........522............ +............................922........................./.173....894................*.........$....................177.......#.............. +......................................................423....*....*.....816.........13.................=..............................251... +..154...................878*......................568......723..329....&......928.................-71.123.378..100...................*...... +........*21..250............448.734.718.....&....*......................................599...............%....*.....700+.....*803..401..... +.779.550........*.817............./..*....118....980..589.....235......=....539...........*...281*236..........591.........927..........*... +...-.................*...............854.............*.................911.=............939........................616..*............770.50. +.............82......399.......452..................184........643..........................*871..................*....370.................. +.185.405.....*...634............*......189.838.................*...............@623......252...........315.86.....568...........157.104..... +...&......586.......*........957..........*.......841.........509.600........................896..565.....*...............+............*.... +..................633.628...........811..........*.....677.........-..580..751...183.........................540.81.......656..665..634..... +......112.............*.....=........./.322...430.........*..........+.....*...............683............$.....*........................... +830&...*..426........649..910...........*................717..359........831........=..157..%.............143......758................579... +.....373....*..................215.......666....................*.#...........459..547...+.........773.........980*.........404...126....... +205......636....................*...420.......440..........225.11.516...568....*......................*....474........620...*.....*......... +..............250......685...209.....+...........*257.................../...407.......295..498....122.............970...@.392.412........... +783..83+...........706....=.................330*............833.................*250....%..=..........%...........*............#....898..... +...........$....................................398..35........*......646....759.....#.............527..........160.....254................. +500........777...........112..428...663....957#..............524.....*..../........249..530*672............567......*......*759.....284*.... +....861....................*.*......*............*...277*832.....644.130..216.446............................*...683.955................950. +....*........826..........68.535..192.........306..................#..................762%...%....#631..500.406..........763...137.......... +..65............-...499=..................546.....&.........$........../..........177........988.......@.............336...*..*............. +.....362..................@...$..........-....610..65......64.........830..........-...........................452......+.604.542........... +........*902.633*........873..63.....781...31...*.................258.....12...681..........18*........&...&............................848. +..803............752.........................-.....672...................*.............................470..86.59.......%................... +.......@..547..........$...184.......320..........+..........471......834...=...551..108.............................176.................82. +..950.562............261...$.....754..+..............134.654*...............778..&......%..713.837.......................329........186..... +............112..72...............*..........917......*.................415............................946....=....614.....*................ +..............*.$......850.....766.....308.....*....666................*......812.....293................*.624.......%..296.....612...333... +..996......154...........................*......283.....*.555.%........................-.......552.714.563.......227..............-......... +....*.682.................=.......281.217..............84.*....908.....@...=....522..............$.*.......630......*79..............556.... +..635...*............516...402............................333........114..496..*.......324..........522..................................... +.........511....779...*............@............350.853.........................791...................................$.....821.....+....... +.................*.....486........984......332.....*..............893..730*480...................756...................776...........155.... +......161......57..590....................@....398..................*....................477.....*......602....506............996........... +.151.....*..=.......*......955.......916........#.....=..269.........423..........289......*..379...*..@.....................*.............. +...-....123..927.600...........-........*395........226./....676*755...........30..........58.....582.........671.118..43.367...943......478 +.....................725........74...............................................+...........................-......*..*................&... +........378......563*.....*999............*...................497.349...26.....$............362.........&........723....20....717...317..... +...*....................22.........../.575.552..........291......*..........600......152.../......./...169......................-.@....*977. +886.250..........$.............383.603.............36*.../....%......................*.............253........215..........139....583....... +................225............................................721...814..............829..................*.......613*544.*...=........901. +..........741.......595.........785.............%677..50................=.................252......710....91...............912.180.......... +...........*...................*....808...956..........+.....812...............*381......*.....676.../..........599....................+.... +............134.184......759..81...*.........*.782........41*......=....125.216........679...../..........@........*.................567.... +.......165.........*......@................66...*.....*.........379.....................................&..626...241........................ +.........*.........232.........387.86...........635.47.806.857.........$537...............240........617..............806..941..........531. +.......687...654.......735......*...$......................%.....357..............*884.......*571..........273.551......*.....*....576..*... +............*................648...................716.304..........*...690....663.................*38...........*....365......911....@..424 +....67*156...250..828...................&222.......#...*......16....300.+..................-....-.9....813...982..443....................... +.....................*......136..757..................65..314...*........................615.291.......&....*................972............ +................721..592...@.............................../...808.............665...176.............................200.....*.............. +..198..459+............................218........-772..............169...39..*........*........939..742......#....=......532...#..264...... +.....*...............$..........713...*............................*.....*...831....689...589*.......*.......91....75.........641...#....... +..896..167*........372...138...........462...*227..$.....801......512.........................775.673....................................... +...............47........*.......135...............725.....*...............743..........489*.............735..622.815.551...........519..... +.......=........*......636.987...*...................................827........496*........48.121................*.....*........#.....*311. +....525.......819.580.........#.369......119...............77.........*...............10*........*.%.....975.....961....888......304........ +........................96*..........................816............857......=...........376...859.522..=................................... +629...419..259...#360.......44%.........190..=969...........=...539.....-913.429......................................119.....476...707..... +...*.....*...*....................*906.*.....................84.....286...............$...=...127.200.465........324.............=.....*599. +905.....762...262.....-597.....847......311......@654...837............*....455..37..439..147....*.....*...262...*.....787..778............. +...........................25...........................=...........908....*.......*................827......%....567....-....#.427..819.... +..............................#.$....643=...............................886......243....../.....672..............................*....*..... +...........185*....107.....226..965........$.................756........................808.221...-.../574...541&...+....871...326....349... +......................*.....................841.....=...........*688........177................*....................166....*................ +.......189..744......308.......99*391..630/........463......................@...930..........543..........................519............... +..984.%........-.741.......................................522.915+.....769......*................207....976.....158*....................... +....*...............*...............&.331...787........48...........224..*......184........874.......=.....*........................537..... +.....934....*339...829....495.....682...*.............*....+..........*..794..........-430...*....&........848..367....+............*....505 +.........175..........................381............270....198......911...................52......642...............45............445...... \ No newline at end of file diff --git a/resources/2023/day4.txt b/resources/2023/day4.txt new file mode 100644 index 0000000..ca9a8e1 --- /dev/null +++ b/resources/2023/day4.txt @@ -0,0 +1,194 @@ +Card 1: 24 12 26 39 19 98 74 16 82 77 | 80 11 51 1 74 60 77 68 42 35 39 78 21 12 29 19 25 98 65 91 33 17 59 24 31 +Card 2: 33 21 96 64 9 38 65 74 16 91 | 14 51 85 1 64 29 74 18 15 38 13 96 16 88 84 21 95 49 9 27 33 63 65 91 90 +Card 3: 31 97 18 93 71 54 24 12 19 87 | 59 96 72 94 4 51 74 84 47 10 57 89 65 37 39 16 31 91 26 85 44 30 24 40 2 +Card 4: 77 20 66 48 23 32 76 9 75 89 | 31 57 89 51 8 34 9 59 39 73 4 32 18 77 94 76 29 23 41 27 66 20 40 48 75 +Card 5: 25 40 65 27 41 7 1 80 26 47 | 7 25 40 1 16 67 42 34 82 19 58 9 91 6 47 80 36 46 77 27 72 41 26 33 81 +Card 6: 92 39 18 64 7 71 48 29 3 38 | 55 29 73 31 15 75 13 71 94 48 78 23 54 7 10 86 34 82 91 85 67 14 57 64 3 +Card 7: 67 43 34 90 14 32 38 49 11 75 | 15 11 38 30 32 29 59 73 72 42 1 4 55 71 57 64 19 90 24 78 31 67 49 98 43 +Card 8: 70 64 82 4 16 6 19 13 9 29 | 21 93 37 69 24 62 60 3 90 83 8 66 20 34 55 22 6 84 99 50 33 26 65 98 86 +Card 9: 31 80 67 81 28 90 23 4 48 86 | 90 80 32 8 15 13 81 63 46 45 50 47 17 96 48 28 57 98 88 86 1 34 4 87 5 +Card 10: 40 46 22 70 59 97 32 20 4 65 | 22 25 59 88 30 82 39 91 4 72 9 42 86 65 96 93 5 84 67 40 57 20 36 8 80 +Card 11: 53 10 4 91 42 12 32 86 38 60 | 3 60 20 65 85 94 58 38 10 76 44 81 51 6 99 19 31 43 84 95 59 36 86 82 11 +Card 12: 73 87 16 92 67 13 28 82 97 86 | 60 45 83 4 90 43 54 55 93 62 7 94 65 72 32 25 23 38 88 61 87 76 35 20 18 +Card 13: 92 13 96 89 25 81 80 72 76 48 | 92 32 31 23 61 74 13 95 71 78 17 1 22 86 62 55 60 41 96 11 77 93 63 99 76 +Card 14: 8 59 91 73 10 61 65 34 29 81 | 9 32 87 78 26 16 90 49 74 61 56 11 57 93 77 62 75 46 36 59 85 3 19 34 28 +Card 15: 87 53 99 88 20 39 28 61 38 68 | 60 16 1 5 10 53 45 56 89 42 80 21 2 37 98 99 74 71 72 59 84 41 87 95 67 +Card 16: 2 19 58 83 91 76 9 63 71 77 | 37 3 59 79 72 53 70 9 43 36 97 98 6 85 90 16 55 11 56 1 8 49 52 15 22 +Card 17: 29 83 12 76 32 82 40 91 84 97 | 21 79 3 31 1 36 85 17 59 30 87 46 27 63 75 56 72 67 11 42 84 62 53 68 38 +Card 18: 39 63 75 71 70 41 49 15 82 78 | 44 74 3 24 35 41 12 47 34 54 91 45 67 57 62 60 95 8 99 19 9 79 80 4 92 +Card 19: 82 33 76 22 93 10 49 46 9 63 | 70 79 80 44 92 15 90 31 75 17 54 81 12 21 71 61 45 60 72 87 91 8 65 83 47 +Card 20: 60 22 86 1 94 25 72 51 73 57 | 28 66 60 25 16 1 54 36 94 7 73 29 57 55 61 22 51 44 39 69 86 23 72 9 71 +Card 21: 6 30 81 11 69 96 45 76 4 78 | 45 96 51 87 65 95 78 82 76 24 32 28 11 50 4 85 74 81 30 33 69 6 34 79 41 +Card 22: 91 88 99 7 98 1 34 81 36 44 | 69 98 15 50 22 7 27 56 52 97 66 88 89 5 31 34 99 11 91 36 1 33 44 81 55 +Card 23: 94 78 99 13 27 56 81 1 62 84 | 84 33 13 70 81 99 63 56 34 72 64 27 93 87 78 1 29 4 62 44 19 94 37 86 18 +Card 24: 8 81 12 30 78 84 33 39 74 20 | 39 51 4 93 62 74 67 75 8 12 28 33 30 99 84 97 95 5 14 1 20 78 81 61 60 +Card 25: 79 74 91 69 3 96 42 98 87 82 | 53 92 74 17 25 81 96 61 56 15 59 27 82 97 2 71 68 95 83 13 10 47 41 75 87 +Card 26: 20 87 17 34 69 97 36 77 96 66 | 66 10 11 96 83 17 13 57 6 73 88 72 2 39 89 48 79 33 22 19 56 14 9 85 26 +Card 27: 18 10 33 21 67 25 7 86 12 72 | 91 53 6 30 85 90 61 20 40 31 23 83 78 72 68 81 63 58 97 42 16 50 79 37 66 +Card 28: 96 36 98 66 37 8 78 41 55 7 | 77 70 42 37 74 8 96 76 63 64 93 98 78 30 66 1 9 55 7 41 90 29 4 36 22 +Card 29: 51 44 97 56 70 67 82 47 61 60 | 90 94 15 67 75 4 52 21 87 33 77 97 76 20 13 35 45 39 78 82 48 70 89 44 19 +Card 30: 57 24 50 79 36 12 45 68 41 14 | 66 90 12 44 29 79 91 73 57 69 68 24 36 56 33 14 1 83 41 45 9 40 60 20 50 +Card 31: 61 53 23 10 85 72 62 52 26 57 | 37 50 73 7 77 26 63 23 83 44 29 96 48 91 27 53 34 33 61 72 20 42 10 22 25 +Card 32: 76 41 35 73 45 66 54 3 69 12 | 8 2 42 85 28 93 58 89 76 73 84 17 3 56 12 52 68 62 66 54 69 45 41 82 35 +Card 33: 32 29 97 52 45 95 92 18 42 47 | 65 97 46 95 96 39 37 16 52 69 45 92 50 17 29 18 1 47 42 77 56 81 71 7 32 +Card 34: 26 96 10 87 15 16 84 99 75 4 | 29 53 75 48 91 8 89 30 5 22 21 87 13 36 49 16 25 94 2 41 18 69 70 68 67 +Card 35: 57 89 3 81 5 35 32 29 91 65 | 50 68 11 61 39 91 36 31 5 89 12 9 60 13 78 75 4 51 21 45 54 14 73 1 62 +Card 36: 80 46 17 70 42 1 63 87 92 98 | 37 18 64 47 46 94 35 2 10 86 91 19 1 80 4 71 5 78 81 52 31 17 92 40 68 +Card 37: 22 15 30 2 82 24 76 84 85 5 | 30 85 22 24 77 12 49 84 93 1 82 17 27 47 4 10 2 86 6 63 31 33 60 55 57 +Card 38: 63 51 26 56 99 22 32 59 7 3 | 73 11 13 5 37 18 84 35 98 42 4 55 15 58 60 78 22 41 3 89 33 74 93 56 46 +Card 39: 5 96 13 31 59 88 87 55 27 11 | 32 46 56 28 43 45 69 27 5 39 91 79 98 63 35 21 29 38 30 82 71 93 49 80 70 +Card 40: 62 47 56 14 20 91 86 5 12 33 | 88 65 66 10 17 30 51 63 15 83 3 55 27 28 64 35 7 99 76 68 39 23 48 74 41 +Card 41: 48 67 38 82 73 65 1 11 78 53 | 50 76 31 66 11 98 80 29 93 6 82 15 86 74 78 28 60 63 12 59 71 24 68 36 56 +Card 42: 91 27 55 36 14 71 45 10 42 5 | 87 44 80 24 43 84 95 99 53 76 33 23 96 20 62 51 72 49 79 78 39 94 74 61 89 +Card 43: 81 61 13 78 28 75 58 67 54 11 | 96 51 53 73 76 24 82 85 42 25 93 57 35 91 9 64 99 11 88 79 39 44 74 65 29 +Card 44: 82 69 37 22 80 81 55 35 27 19 | 12 63 85 74 39 33 95 75 93 73 44 40 2 76 14 94 42 8 17 9 6 84 34 23 4 +Card 45: 20 86 52 74 80 69 53 33 98 41 | 69 51 18 74 98 90 42 97 7 24 41 62 30 58 95 52 5 31 33 53 20 87 38 25 80 +Card 46: 67 72 36 1 54 24 86 61 85 52 | 19 22 86 64 41 88 31 72 17 1 21 85 67 29 82 54 36 61 75 56 70 53 95 52 24 +Card 47: 62 23 80 46 56 10 52 89 50 5 | 37 55 43 79 98 60 30 44 10 97 38 90 88 83 36 35 61 28 76 21 65 87 40 84 91 +Card 48: 11 26 39 71 9 51 86 65 47 13 | 54 23 60 47 26 9 71 13 85 92 39 19 79 14 73 74 45 22 36 15 65 11 63 10 33 +Card 49: 25 62 23 78 98 83 33 7 37 10 | 85 81 71 67 83 98 60 35 10 79 33 7 52 89 62 93 87 23 37 11 25 45 78 95 82 +Card 50: 98 18 87 92 43 45 67 12 46 69 | 38 74 44 31 89 9 62 53 34 43 41 96 11 4 47 8 5 42 3 95 71 28 73 97 33 +Card 51: 72 33 31 38 5 67 25 1 4 79 | 9 77 58 97 48 30 85 91 79 70 49 10 98 76 47 90 89 88 25 5 51 26 99 32 7 +Card 52: 92 18 67 66 45 23 10 83 78 57 | 70 17 97 6 9 95 37 4 69 40 93 2 11 12 61 5 30 42 74 7 87 85 20 52 75 +Card 53: 4 59 6 44 12 60 14 86 93 11 | 14 44 74 7 87 6 82 84 55 48 17 37 18 60 23 59 97 62 31 4 93 12 11 13 58 +Card 54: 2 64 63 60 87 72 33 46 88 92 | 96 5 46 94 92 7 63 93 17 13 25 60 73 55 9 98 20 49 29 57 61 64 48 52 19 +Card 55: 29 93 5 53 72 82 12 67 64 50 | 52 33 77 16 45 31 56 28 18 72 79 4 73 41 59 35 2 38 68 98 87 84 94 66 12 +Card 56: 26 18 58 78 53 22 94 23 76 93 | 4 36 64 38 26 72 21 53 68 91 17 18 24 78 33 16 5 9 79 2 98 52 99 40 76 +Card 57: 85 36 66 93 50 62 90 98 4 31 | 23 6 31 76 79 80 15 38 42 81 85 14 56 88 90 65 50 54 62 78 27 77 35 10 70 +Card 58: 80 61 53 48 94 11 87 89 72 43 | 3 55 54 77 57 95 31 7 12 52 92 59 25 23 80 14 45 85 81 94 30 24 67 53 16 +Card 59: 78 54 15 18 17 28 89 12 88 81 | 55 51 97 22 32 72 88 73 11 28 8 65 14 20 6 79 41 87 29 2 40 74 17 99 52 +Card 60: 64 74 67 76 78 43 6 14 79 96 | 82 23 87 37 51 64 89 15 1 56 86 66 10 9 8 53 2 11 24 88 76 35 54 69 68 +Card 61: 53 29 18 65 93 62 75 20 15 35 | 9 77 14 60 38 36 98 24 47 28 6 95 27 12 10 94 61 71 68 22 72 37 96 4 81 +Card 62: 43 85 70 78 16 8 3 18 26 67 | 63 86 95 90 15 13 4 31 82 74 34 76 96 14 49 94 55 80 39 84 79 68 54 81 1 +Card 63: 9 54 71 62 38 75 3 12 46 8 | 8 12 38 69 9 3 79 16 2 6 54 25 75 71 21 60 29 13 30 50 62 98 46 15 47 +Card 64: 98 90 48 49 86 78 45 60 92 81 | 84 67 21 27 37 76 99 1 74 20 23 73 58 10 60 17 57 26 29 86 11 64 31 54 66 +Card 65: 45 21 33 32 64 38 90 47 15 35 | 64 82 38 89 21 32 90 33 16 63 54 65 39 15 37 42 96 7 40 26 50 45 30 85 22 +Card 66: 95 88 40 57 32 31 89 23 68 17 | 64 94 68 4 55 58 8 6 1 17 88 89 32 95 13 78 93 45 23 40 76 31 96 15 57 +Card 67: 15 60 6 79 89 46 67 26 70 29 | 29 79 36 20 1 14 39 2 89 75 67 33 19 12 70 26 9 58 6 35 60 17 15 10 68 +Card 68: 76 32 99 77 16 6 17 46 91 42 | 81 42 82 80 91 52 70 90 26 15 45 35 22 27 84 67 16 24 32 76 54 77 75 51 31 +Card 69: 34 68 42 21 5 91 47 95 59 63 | 35 59 4 20 47 37 24 95 79 91 49 73 68 6 5 46 63 99 58 21 88 67 94 44 80 +Card 70: 69 11 94 64 21 65 31 89 55 28 | 5 64 99 53 34 4 51 88 10 68 74 81 1 23 29 58 93 94 43 32 70 76 7 77 21 +Card 71: 29 52 43 97 41 83 86 99 49 45 | 86 29 43 89 42 53 82 17 94 62 52 99 15 27 40 49 78 74 77 28 9 10 88 97 68 +Card 72: 48 11 62 26 1 89 61 3 23 6 | 11 54 93 60 43 3 24 77 48 61 32 5 79 91 21 73 62 96 87 6 89 59 26 1 15 +Card 73: 65 45 90 13 71 50 48 97 54 77 | 97 16 45 87 68 32 12 15 21 7 33 64 37 88 67 10 60 26 49 65 20 11 29 44 52 +Card 74: 83 54 74 80 4 60 8 68 35 18 | 71 81 31 11 5 60 77 90 76 58 64 32 82 21 97 2 53 9 10 85 75 18 55 86 25 +Card 75: 13 19 42 14 17 74 28 34 56 93 | 76 83 33 82 28 86 93 29 39 88 98 14 49 89 74 62 13 23 43 17 42 56 45 41 35 +Card 76: 51 79 58 45 42 65 29 96 36 13 | 82 99 23 66 29 69 92 95 64 13 40 45 76 86 74 44 81 73 10 4 30 79 68 1 12 +Card 77: 98 12 89 28 29 87 92 4 13 85 | 24 47 4 76 9 95 29 80 87 16 53 85 7 42 86 82 59 37 28 35 55 40 50 10 58 +Card 78: 98 59 89 56 30 15 51 64 4 95 | 74 92 70 91 45 94 95 58 79 88 87 63 40 54 50 77 31 30 41 17 43 82 4 44 13 +Card 79: 37 35 51 39 10 79 32 56 40 42 | 53 28 38 36 76 83 2 42 35 90 6 84 49 27 47 64 75 39 89 52 3 17 40 87 93 +Card 80: 80 42 36 87 9 50 40 96 27 16 | 6 65 3 69 85 63 30 18 8 77 11 94 53 55 5 20 66 33 32 13 49 89 19 83 70 +Card 81: 20 51 80 10 71 43 94 87 7 55 | 44 1 59 33 27 57 28 17 77 46 11 72 73 54 65 37 25 74 60 41 98 84 22 58 79 +Card 82: 13 87 41 55 28 79 7 2 22 37 | 8 20 91 72 53 65 96 54 44 42 90 79 97 31 75 67 21 93 62 81 82 3 11 58 73 +Card 83: 99 2 35 20 25 41 46 88 23 37 | 6 89 28 32 36 93 62 78 61 53 58 16 5 98 67 15 1 24 80 83 31 76 33 82 73 +Card 84: 13 5 98 70 63 92 79 10 53 84 | 32 10 41 63 92 40 85 53 88 57 13 5 70 93 96 54 29 30 44 22 98 84 79 21 78 +Card 85: 20 32 69 15 1 29 2 87 45 10 | 43 15 36 7 32 95 91 90 75 45 6 65 10 62 20 1 2 73 72 51 85 25 29 33 49 +Card 86: 74 56 19 8 4 35 78 43 75 26 | 74 30 77 56 42 14 19 1 28 18 16 99 63 72 8 90 43 15 20 4 78 23 35 75 26 +Card 87: 40 16 56 70 55 65 23 24 78 47 | 59 56 55 29 64 91 42 93 96 54 13 67 14 20 23 76 6 60 63 21 27 61 85 10 15 +Card 88: 50 48 45 15 51 65 97 22 12 39 | 59 93 75 12 30 39 5 85 32 56 29 50 80 82 21 38 96 65 14 53 62 51 15 23 54 +Card 89: 89 77 17 59 37 15 50 63 40 60 | 44 63 77 40 74 15 37 62 43 24 32 81 55 98 86 16 71 75 84 54 76 67 42 90 10 +Card 90: 63 97 57 10 38 19 42 69 73 56 | 3 89 60 13 33 24 70 97 27 56 15 21 19 83 63 42 36 68 57 38 10 73 77 17 5 +Card 91: 13 62 75 45 36 96 69 50 73 74 | 86 7 13 52 60 22 91 14 67 62 85 54 21 32 75 2 55 69 40 42 77 57 9 84 41 +Card 92: 54 97 73 17 67 58 69 27 21 7 | 38 66 59 27 69 7 71 68 83 2 58 44 11 89 10 75 70 63 61 73 94 5 41 45 17 +Card 93: 52 51 28 93 45 31 90 25 53 60 | 31 65 24 87 74 54 66 69 30 7 50 52 9 93 16 51 53 95 18 22 8 90 99 97 43 +Card 94: 73 17 53 21 91 3 85 89 36 92 | 53 57 5 44 55 90 74 20 51 77 41 81 75 31 63 23 76 18 48 82 45 40 9 37 54 +Card 95: 5 88 23 61 63 38 78 82 42 45 | 45 26 5 91 71 40 4 1 94 47 14 55 10 95 81 44 25 24 78 20 3 43 61 50 66 +Card 96: 70 85 30 35 56 69 83 47 18 33 | 6 93 99 79 52 5 69 48 57 85 4 11 9 22 43 53 87 21 33 56 39 31 83 32 67 +Card 97: 52 27 4 63 32 54 89 45 19 40 | 86 50 2 75 72 79 23 85 12 60 34 76 15 55 17 68 90 78 14 95 41 26 33 38 24 +Card 98: 89 50 13 23 47 26 27 90 92 24 | 45 74 96 24 40 46 23 17 76 15 53 25 29 27 92 58 20 12 37 35 72 10 32 47 26 +Card 99: 12 47 10 35 30 8 57 83 84 39 | 73 98 81 88 34 52 33 8 86 55 47 83 84 66 23 29 62 21 70 1 64 49 53 15 94 +Card 100: 45 99 97 10 17 5 44 54 96 88 | 95 91 34 50 61 15 81 20 99 14 69 33 48 75 16 9 29 98 41 80 53 77 89 56 72 +Card 101: 20 85 57 67 47 54 58 65 95 32 | 49 88 10 23 48 93 85 95 69 75 38 25 78 45 12 80 26 14 32 24 8 21 99 77 1 +Card 102: 52 32 10 58 7 99 74 1 59 50 | 29 97 91 78 53 11 96 25 79 43 77 72 60 66 81 55 69 93 50 48 98 54 39 87 10 +Card 103: 28 95 73 79 26 5 60 56 40 59 | 49 14 29 94 69 86 82 85 1 83 81 54 8 43 71 99 32 35 78 5 87 57 15 44 48 +Card 104: 68 70 17 29 85 16 48 21 2 34 | 14 45 36 72 99 94 62 37 74 84 97 75 31 35 83 19 1 15 91 57 61 40 79 77 5 +Card 105: 18 33 10 82 88 2 61 81 41 15 | 33 34 15 1 82 63 77 3 57 67 10 88 93 13 84 39 68 5 54 96 64 41 7 18 4 +Card 106: 67 56 16 10 80 60 62 61 64 51 | 51 10 21 64 71 80 9 98 67 4 60 45 16 85 92 27 56 91 61 43 62 68 1 77 35 +Card 107: 58 50 49 28 39 22 8 63 72 1 | 25 45 9 7 88 71 94 3 54 66 27 85 32 1 8 10 22 84 69 92 86 39 61 50 49 +Card 108: 41 38 72 4 70 66 61 87 42 83 | 69 99 89 43 50 15 5 29 68 28 86 37 66 38 27 19 95 41 62 82 2 87 33 20 42 +Card 109: 85 35 69 74 73 23 29 31 11 92 | 33 36 29 28 92 87 70 62 5 24 95 38 11 48 47 75 81 35 51 15 94 90 32 78 13 +Card 110: 86 6 55 64 15 23 66 51 77 67 | 51 44 89 73 22 29 58 17 77 48 18 53 75 91 57 60 30 63 96 93 33 79 68 86 12 +Card 111: 34 40 48 88 11 4 2 41 39 66 | 15 47 42 81 4 24 52 10 13 34 90 2 79 45 99 96 31 92 23 63 11 76 44 73 70 +Card 112: 34 74 86 79 37 30 31 51 41 13 | 75 21 14 78 1 93 60 96 56 77 65 29 34 58 22 90 79 59 8 19 42 46 33 2 4 +Card 113: 50 16 13 39 17 98 73 48 30 66 | 37 41 97 57 6 91 99 86 78 5 94 85 15 88 3 83 21 26 16 98 51 27 60 46 50 +Card 114: 36 74 72 70 13 27 42 21 8 65 | 39 27 16 94 75 5 87 66 51 68 72 67 85 19 21 91 65 10 56 86 84 40 83 36 43 +Card 115: 55 68 47 93 44 19 40 33 69 51 | 20 89 33 84 77 79 10 14 26 43 16 78 37 41 62 49 95 3 30 82 5 18 50 86 69 +Card 116: 40 7 60 18 17 94 24 12 79 59 | 91 22 74 80 35 10 20 97 25 78 24 95 18 70 26 33 8 41 71 32 77 15 72 86 61 +Card 117: 53 5 43 22 37 55 42 62 87 50 | 24 57 27 11 17 20 83 86 81 18 21 42 79 62 69 25 88 36 13 65 78 80 28 93 7 +Card 118: 49 76 39 26 97 89 9 2 79 40 | 77 99 93 86 89 3 24 47 52 13 19 6 44 25 73 71 70 34 46 28 97 61 92 35 20 +Card 119: 35 97 25 47 40 18 86 45 64 38 | 83 33 66 73 58 22 14 77 45 16 98 61 63 99 4 40 72 30 50 46 51 44 49 84 70 +Card 120: 86 99 32 14 39 90 15 6 89 76 | 56 18 35 31 5 83 68 42 47 36 33 81 69 43 46 20 97 53 94 60 23 71 26 24 52 +Card 121: 53 39 83 9 7 59 20 14 17 93 | 92 78 49 16 62 3 60 29 48 88 56 33 68 64 15 35 99 94 55 41 77 74 90 11 86 +Card 122: 39 62 24 68 36 29 38 15 96 76 | 79 99 71 75 70 43 20 21 41 82 7 17 9 57 85 8 33 30 80 26 93 63 12 5 54 +Card 123: 34 53 21 57 84 19 45 62 50 4 | 27 59 88 78 36 3 22 28 29 10 54 9 48 47 76 91 25 13 96 8 11 42 46 74 40 +Card 124: 51 30 87 45 39 11 33 94 22 65 | 11 30 18 39 2 33 90 87 37 72 51 81 67 45 78 48 14 94 56 27 65 22 20 10 76 +Card 125: 94 87 72 21 28 6 59 60 61 35 | 46 92 59 4 60 76 71 3 53 35 8 86 51 72 47 73 25 28 87 55 43 63 21 66 50 +Card 126: 77 83 56 19 75 12 58 54 64 90 | 18 53 50 77 44 57 74 64 61 65 62 5 91 85 26 1 66 71 41 68 92 69 27 9 93 +Card 127: 2 14 39 77 97 63 33 24 46 35 | 8 79 91 46 28 66 58 75 80 73 85 34 2 95 33 38 35 69 67 26 23 63 78 87 97 +Card 128: 23 78 35 17 80 32 90 34 30 63 | 42 80 4 32 37 27 8 23 40 65 17 41 43 90 34 81 35 63 83 46 30 78 72 55 82 +Card 129: 77 84 23 99 78 95 40 4 55 56 | 46 49 44 65 36 66 94 64 34 16 30 81 62 77 82 28 31 18 86 32 74 75 88 99 71 +Card 130: 50 93 25 12 24 66 38 29 46 76 | 99 27 29 84 66 7 47 34 93 4 60 24 25 46 12 9 33 86 38 69 76 48 81 85 21 +Card 131: 89 68 69 30 59 72 26 70 42 51 | 78 74 18 68 89 22 72 40 67 34 84 39 43 76 81 63 30 54 36 24 51 98 1 19 59 +Card 132: 70 73 4 37 15 86 65 7 77 85 | 79 21 5 55 81 99 25 27 94 33 40 34 20 29 68 93 98 16 90 54 71 13 78 60 74 +Card 133: 11 89 21 87 56 1 70 79 36 63 | 18 59 80 62 76 39 25 27 53 48 45 47 89 2 85 55 91 15 84 31 33 64 28 30 8 +Card 134: 69 96 77 54 67 24 46 22 81 42 | 79 73 45 14 97 39 61 74 95 58 82 43 89 2 4 36 21 78 37 51 65 47 53 99 20 +Card 135: 33 92 5 46 16 18 10 32 77 67 | 72 30 76 7 33 64 18 54 6 85 73 3 68 96 92 45 61 32 88 56 87 42 39 84 86 +Card 136: 27 53 79 82 18 4 75 63 11 39 | 66 55 93 24 58 83 33 92 61 68 26 72 80 49 8 36 22 43 63 20 84 69 21 97 88 +Card 137: 22 50 61 6 94 62 90 73 25 46 | 66 99 72 17 77 57 6 73 48 34 5 58 13 16 2 36 35 23 78 42 12 27 24 29 37 +Card 138: 18 19 59 57 23 68 61 78 91 65 | 2 4 83 10 20 85 51 73 30 1 31 9 80 27 24 92 3 42 71 67 84 54 82 45 76 +Card 139: 23 41 36 48 93 74 10 73 6 18 | 47 84 14 89 62 39 37 94 15 46 97 98 29 17 72 32 64 31 99 76 86 45 75 61 5 +Card 140: 99 71 15 31 61 53 4 62 69 77 | 58 8 86 44 59 47 91 38 30 25 42 82 11 19 49 75 9 83 20 90 1 94 12 22 52 +Card 141: 55 87 74 50 52 9 76 90 73 25 | 39 50 27 56 57 70 66 92 24 23 32 72 45 75 31 78 74 99 8 79 1 43 5 2 53 +Card 142: 28 66 34 64 49 48 91 73 81 41 | 54 78 66 59 32 43 41 85 15 64 68 56 4 46 90 67 63 45 24 16 53 74 52 75 81 +Card 143: 30 38 11 31 66 26 40 93 88 14 | 30 88 31 15 93 27 55 96 11 17 20 35 14 10 66 51 40 18 57 53 24 9 26 58 38 +Card 144: 70 6 21 59 69 99 30 43 60 58 | 60 1 11 69 70 59 66 79 58 73 54 30 33 55 21 89 14 43 99 4 52 82 6 2 96 +Card 145: 25 44 26 89 81 7 57 40 59 9 | 95 20 38 12 57 32 80 34 25 94 40 59 9 65 93 68 42 86 44 89 81 7 70 26 62 +Card 146: 90 61 87 20 26 51 33 19 64 10 | 1 84 80 86 22 50 73 69 78 70 12 34 65 54 5 83 44 98 82 57 31 3 37 59 79 +Card 147: 73 32 37 22 42 83 17 20 61 76 | 76 87 22 61 45 48 83 32 60 3 17 8 70 95 12 1 73 40 82 85 65 20 37 42 88 +Card 148: 16 40 86 29 68 67 22 42 96 9 | 34 83 95 91 40 11 74 99 25 16 15 76 52 12 75 43 92 59 17 98 88 36 4 5 28 +Card 149: 17 85 45 10 60 72 15 50 61 63 | 85 11 92 50 10 8 37 23 96 20 69 15 40 72 89 60 61 17 54 63 27 28 31 24 45 +Card 150: 64 87 43 20 97 83 69 61 95 56 | 29 76 26 52 65 84 62 11 49 92 90 77 47 46 42 50 33 37 98 2 5 9 71 22 85 +Card 151: 12 23 35 44 39 73 1 30 95 33 | 36 10 58 60 72 6 43 64 75 1 16 93 15 89 68 56 99 88 32 52 18 22 98 67 66 +Card 152: 69 85 51 1 46 21 31 19 44 49 | 45 92 8 10 80 94 32 33 88 28 16 86 23 93 6 96 25 81 3 52 64 90 76 95 59 +Card 153: 42 74 39 36 45 26 25 1 68 12 | 70 33 74 79 96 1 4 88 34 76 59 61 75 27 92 72 57 98 51 10 29 52 64 26 35 +Card 154: 85 95 68 79 28 93 46 65 38 14 | 52 18 50 9 79 2 88 43 85 31 83 74 21 38 87 73 56 63 71 15 59 72 13 64 46 +Card 155: 11 43 73 53 49 65 27 37 30 51 | 27 28 23 51 61 54 71 57 88 1 40 65 34 53 73 83 24 82 15 32 46 11 79 77 80 +Card 156: 64 26 5 45 59 81 23 43 27 44 | 11 16 77 37 62 98 10 21 71 35 28 13 74 65 89 78 45 61 96 7 12 53 51 52 44 +Card 157: 27 87 50 60 44 48 85 1 33 8 | 84 41 4 36 8 49 26 43 52 95 77 3 75 72 54 66 98 21 19 61 18 78 30 37 1 +Card 158: 31 88 37 91 12 56 65 79 95 17 | 64 32 43 1 45 8 99 94 39 16 77 18 84 70 24 51 27 93 59 25 41 73 78 34 44 +Card 159: 88 86 84 17 93 64 3 14 59 32 | 37 21 60 95 23 62 45 98 56 78 20 81 99 22 12 57 5 36 51 10 93 72 58 8 13 +Card 160: 49 37 23 63 73 64 16 70 19 32 | 75 74 21 77 37 56 30 76 66 1 51 9 97 95 38 40 29 69 67 6 47 50 45 71 87 +Card 161: 10 67 21 27 39 79 22 92 47 42 | 9 80 82 75 20 2 53 64 76 96 31 61 50 12 16 15 38 18 90 59 65 70 55 99 6 +Card 162: 89 99 28 87 4 43 30 48 46 82 | 46 51 59 81 14 40 82 5 85 48 97 28 11 7 87 64 58 38 92 30 89 99 27 36 34 +Card 163: 2 91 88 95 38 31 92 3 27 60 | 76 31 38 29 60 68 22 87 71 11 95 48 50 21 88 26 44 32 2 69 27 45 94 79 81 +Card 164: 87 91 47 40 2 71 95 99 49 74 | 34 8 65 49 45 43 51 81 9 13 80 38 33 88 82 74 28 60 91 48 1 55 42 95 56 +Card 165: 57 74 54 91 94 96 55 64 39 75 | 67 9 10 80 75 77 12 87 95 50 25 19 82 65 76 66 23 30 45 61 79 17 72 37 7 +Card 166: 16 4 73 97 28 19 17 10 57 43 | 73 97 24 57 43 58 72 10 2 34 9 63 70 64 68 28 44 16 99 61 4 78 46 83 19 +Card 167: 53 51 67 68 18 26 55 10 69 9 | 46 64 73 12 97 89 67 22 30 82 14 27 36 4 72 19 61 13 93 24 91 63 48 21 87 +Card 168: 69 32 33 90 72 88 55 80 15 27 | 10 80 14 55 64 39 97 82 24 96 74 46 73 68 65 87 43 59 16 53 84 38 79 11 47 +Card 169: 74 85 11 55 15 59 36 5 54 18 | 31 27 42 86 93 33 68 45 40 32 44 88 48 47 35 25 9 89 49 66 39 1 79 69 7 +Card 170: 9 49 3 88 4 31 13 64 38 41 | 71 38 32 13 91 61 3 48 88 63 17 19 59 75 98 36 6 49 50 44 20 2 45 67 53 +Card 171: 67 87 77 34 32 64 56 59 58 36 | 50 74 68 64 22 63 38 12 73 32 10 14 29 55 31 92 91 9 76 24 17 49 33 95 2 +Card 172: 4 80 72 36 37 99 64 16 22 31 | 8 78 95 47 18 36 55 59 23 86 70 54 60 98 13 25 80 75 74 48 16 7 81 5 11 +Card 173: 4 77 32 71 39 67 58 11 57 29 | 87 31 69 92 71 62 20 77 14 47 60 57 75 94 37 86 95 97 41 85 30 54 48 44 10 +Card 174: 21 12 8 71 74 77 31 82 1 16 | 4 89 75 19 91 51 10 71 88 78 30 80 47 96 28 65 99 35 13 48 73 29 53 49 42 +Card 175: 58 38 44 98 56 18 21 63 74 3 | 92 55 64 94 49 41 10 78 6 53 76 70 45 46 83 63 82 73 95 81 33 30 77 50 34 +Card 176: 94 39 50 86 44 81 88 55 54 9 | 16 60 84 75 52 81 4 10 37 6 56 14 22 8 90 41 45 70 12 23 89 31 28 80 87 +Card 177: 96 26 47 79 99 4 66 50 53 45 | 9 94 70 72 81 75 76 77 64 78 12 32 85 40 20 90 28 3 35 57 93 87 63 17 54 +Card 178: 33 65 93 44 97 37 12 41 83 24 | 2 1 46 10 55 82 58 57 52 64 81 76 74 99 5 89 9 14 42 27 6 19 66 3 15 +Card 179: 12 28 65 24 9 30 38 11 18 55 | 85 10 70 62 71 19 55 67 68 25 44 95 51 91 29 30 15 13 90 52 47 23 21 66 92 +Card 180: 65 7 39 97 64 3 50 27 46 4 | 12 59 88 91 43 61 36 18 58 85 26 5 23 1 62 56 8 49 66 72 9 67 90 52 95 +Card 181: 13 97 85 12 18 20 70 6 93 44 | 25 12 54 97 68 65 23 26 13 8 50 62 10 32 73 88 51 76 98 16 37 4 87 18 35 +Card 182: 65 35 63 2 34 77 15 89 16 54 | 36 2 6 62 81 58 34 99 54 48 57 15 52 16 30 65 83 53 38 10 41 77 63 35 21 +Card 183: 16 98 38 2 86 34 85 48 50 95 | 34 50 2 14 89 6 47 44 67 25 86 98 17 48 85 99 51 16 55 35 38 66 95 32 90 +Card 184: 4 1 48 73 89 69 47 81 94 59 | 20 18 50 30 87 17 99 76 74 61 9 84 40 46 51 97 65 98 56 53 3 77 11 8 34 +Card 185: 79 72 33 15 36 89 13 90 94 28 | 58 96 94 83 84 90 52 53 31 9 17 97 2 54 56 26 20 76 98 91 1 14 74 23 64 +Card 186: 36 34 86 79 32 64 15 94 72 35 | 12 94 19 11 35 78 59 91 86 47 55 36 53 21 9 45 77 18 17 72 10 79 49 34 74 +Card 187: 43 16 88 54 62 17 93 91 21 59 | 51 7 46 16 26 6 96 30 42 2 10 55 37 48 74 89 98 73 84 19 9 11 24 44 69 +Card 188: 50 59 97 84 11 57 7 94 29 92 | 19 79 94 25 18 55 24 89 65 11 53 93 83 92 27 85 48 4 68 97 46 64 40 1 74 +Card 189: 17 19 78 66 96 13 84 16 59 53 | 15 30 24 55 62 12 51 87 35 73 33 8 2 94 49 52 58 75 32 34 69 16 74 89 46 +Card 190: 61 96 6 49 37 3 26 12 99 11 | 87 95 57 43 23 53 36 25 84 69 38 67 46 92 74 16 18 27 80 19 13 54 12 39 61 +Card 191: 85 69 8 21 84 42 68 22 55 45 | 10 51 26 7 27 9 18 76 46 57 20 59 77 38 92 49 90 52 98 78 34 37 74 91 12 +Card 192: 58 46 36 50 72 87 96 63 83 5 | 69 11 88 81 52 97 43 42 26 41 47 54 78 67 51 95 18 62 13 99 30 3 34 89 53 +Card 193: 20 78 41 3 26 1 29 63 4 88 | 64 59 80 93 66 18 62 94 23 25 79 53 52 31 44 46 67 75 24 8 97 10 51 99 84 +Card 194: 40 5 28 23 65 78 63 94 60 83 | 45 54 2 74 75 11 55 8 68 41 30 51 47 33 88 58 37 36 64 1 21 72 77 25 99 \ No newline at end of file diff --git a/resources/2023/day4sample.txt b/resources/2023/day4sample.txt new file mode 100644 index 0000000..71f208a --- /dev/null +++ b/resources/2023/day4sample.txt @@ -0,0 +1,6 @@ +Card 1: 41 48 83 86 17 | 83 86 6 31 17 9 48 53 +Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 +Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 +Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 +Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11 \ No newline at end of file diff --git a/resources/2023/day5.txt b/resources/2023/day5.txt new file mode 100644 index 0000000..e61e7af --- /dev/null +++ b/resources/2023/day5.txt @@ -0,0 +1,210 @@ +seeds: 3416930225 56865175 4245248379 7142355 1808166864 294882110 863761171 233338109 4114335326 67911591 1198254212 504239157 3491380151 178996923 3965970270 15230597 2461206486 133606394 2313929258 84595688 + +seed-to-soil map: +3534435790 4123267198 50004089 +3584439879 3602712894 238659237 +2263758314 0 160870825 +2971481857 2850687195 31776688 +4173604159 3353763588 121363137 +3823099116 3003258545 350505043 +2850687195 2882463883 120794662 +1503174517 2076905328 347723811 +1850898328 195477286 412859986 +1265521310 1606247567 17062682 +3285153612 4173271287 121696009 +488201540 828927797 777319770 +453595079 160870825 34606461 +3406849621 3475126725 127586169 +1282583992 608337272 220590525 +3003258545 3841372131 281895067 +0 1623310249 453595079 + +soil-to-fertilizer map: +131427930 1185330183 180485664 +748806267 2475960003 160820884 +311913594 3858074623 436892673 +3738185633 2255483282 220476721 +909627151 2636780887 1221293736 +2848518198 1365815847 889667435 +2130920887 131427930 666553095 +2797473982 1134285967 51044216 +3958662354 797981025 336304942 + +fertilizer-to-water map: +318410581 1095359367 168721315 +1850530626 4267113166 11515024 +1868157768 2129267011 114327162 +3662276437 4191001581 22313216 +2980811924 3765310336 180818294 +3971289879 3991326516 15449292 +4217905563 2279561459 35118050 +2287003279 4213314797 47187938 +1837473204 2314679509 13057422 +1998824036 3946128630 45197886 +222462505 1264080682 95948076 +487131896 791770420 303588947 +4253023613 4068573955 41943683 +2334191217 3252696905 278223677 +3986739171 2786104784 83568826 +3495640623 3600917310 61383314 +3557023937 3662300624 15042395 +2222048360 3535962391 64954919 +2919013777 4006775808 61798147 +3660033649 4182646675 2242788 +3266573705 2327736931 229066918 +3684589653 2869673610 235425729 +3261531896 3530920582 5041809 +790720843 417781090 105163807 +895884650 0 159434487 +2044021922 2608078346 178026438 +1862045650 4184889463 6112118 +3572066332 3677343019 87967317 +1830862773 4260502735 6610431 +1338009275 159434487 258346603 +3233759255 1830862773 27772641 +1055319137 1360028758 282690138 +1982484930 4278628190 16339106 +2883046491 2243594173 35967286 +2612414894 1858635414 270631597 +4070307997 3105099339 147597566 +3161630218 4110517638 72129037 +1596355878 522944897 46363018 +0 569307915 222462505 +3920015382 2556803849 51274497 + +water-to-light map: +3185219492 1324735395 185266775 +3146586681 1249776213 38632811 +28244350 428471809 312696716 +340941066 3650819202 117391304 +458332370 963661621 286114592 +2785969088 3483794777 117695215 +1279106820 1583617352 194624401 +1473731221 3601489992 49329210 +0 2796264154 28244350 +744446962 3356330358 127464419 +2562107674 223281414 205190395 +3544929092 0 223281414 +2767298069 944990602 18671019 +2903664303 775683406 169307196 +3072971499 1510002170 73615182 +1140236238 741168525 34514881 +1242780449 1288409024 36326371 +1523060431 1778241753 949993071 +871911381 3088005501 268324857 +3370486267 2913562676 174442825 +4096117687 4180659844 114307452 +1174751119 2728234824 68029330 +4210425139 4096117687 84542157 +2473053502 2824508504 89054172 + +light-to-temperature map: +57304962 1726059676 351776583 +1567802332 965133212 510033927 +3296678005 3095070487 435408435 +2476702913 3609026358 293401880 +1363411758 0 204390574 +1017340727 204390574 346071031 +2770104793 2148583721 409359530 +994650876 1475167139 22689851 +0 550461605 20445762 +20445762 1692752937 33306739 +2144982382 2092188566 56395155 +799754929 1497856990 194895947 +53752501 961580751 3552461 +409081545 570907367 390673384 +2201377537 3902428238 275325376 +3988154754 2557943251 306812542 +3179464323 4177753614 117213682 +3732086440 3530478922 78547436 +3810633876 2864755793 177520878 +2092188566 3042276671 52793816 + +temperature-to-humidity map: +18928354 3414191527 36074961 +3774151818 3588716061 144651966 +2046448856 1384376044 7569690 +2737178317 903028814 27883660 +2981004508 930912474 349046239 +1609626976 3084565214 120015958 +2765061977 2248931514 215942531 +157942811 3887783726 359543023 +3330050747 2195105292 25002873 +2041971091 78356652 4477765 +1938796124 861459710 41569104 +1608860129 2474627144 766847 +1812604664 3795542966 74143188 +4196563819 3386335999 27024746 +1980365228 3204581172 61605863 +1136292153 82834417 94266783 +4015908448 1279958713 104417331 +2701246339 2062523244 35931978 +4223588565 3286123619 23738184 +91521115 3309861803 56668597 +1886747852 2552562071 52048272 +1729642934 0 61644451 +1791287385 1504576228 21317279 +517485834 1726582276 261020280 +2192468119 2604610343 479954871 +1413642666 1391945734 112630494 +71715516 3366530400 19805599 +3918803784 2475393991 77168080 +1546685190 3733368027 62174939 +2672422990 2220108165 28823349 +148189712 2464874045 9753099 +18097572 3413360745 830782 +0 3869686154 18097572 +3995971864 3266187035 19936584 +853426802 432206724 27759827 +2054018546 3450266488 138449573 +881186629 177101200 255105524 +778506114 1987602556 74920688 +1526273160 2098455222 20412030 +55003315 61644451 16712201 +3355053620 459966551 401493159 +4120325779 2118867252 76238040 +1230558936 1525893507 183083730 +3756546779 1708977237 17605039 + +humidity-to-location map: +166973311 827072705 21017988 +2420657564 1797988486 98294592 +3711057743 1724407580 50543704 +151140540 331672683 15832771 +2611368935 1098267426 35837870 +329110209 0 39413233 +848395356 3293184115 2008343 +850403699 1508109908 216297672 +3203490893 3278069000 15115115 +1322210923 4179894531 115072765 +3761601447 848395356 249872070 +230668724 39413233 27530262 +1437283688 2240143464 113813014 +1551096702 2957294790 77256502 +716039283 695021295 132051410 +258198986 109620920 70911223 +1314022212 2357817442 8188711 +2793895840 2474472017 281155944 +385486933 347505454 330552350 +3218606008 3561131747 206517169 +1066701371 3354107909 156810008 +4011473517 1134105296 283493779 +0 180532143 151140540 +368523442 678057804 16963491 +1223511379 1417599075 90510833 +3183517648 1988699857 19973245 +2270463718 4038012896 141881635 +1817187310 1774951284 23037202 +1963899457 2755627961 201666829 +2412345353 3295192458 8312211 +1840224512 3767648916 123674945 +187991299 66943495 42677425 +2518952156 1896283078 92416779 +1628353204 3034551292 138620276 +3075051784 2366006153 108465864 +3660454503 3303504669 50603240 +3425123177 2008673102 231470362 +3656593539 2353956478 3860964 +1766973480 3510917917 50213830 +2647206805 3891323861 146689035 +2165566286 3173171568 104897432 diff --git a/resources/2023/day5sample.txt b/resources/2023/day5sample.txt new file mode 100644 index 0000000..bd902a4 --- /dev/null +++ b/resources/2023/day5sample.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/resources/2023/day6.txt b/resources/2023/day6.txt new file mode 100644 index 0000000..148f6c2 --- /dev/null +++ b/resources/2023/day6.txt @@ -0,0 +1,2 @@ +Time: 57 72 69 92 +Distance: 291 1172 1176 2026 \ No newline at end of file diff --git a/resources/2023/day7.txt b/resources/2023/day7.txt new file mode 100644 index 0000000..56216df --- /dev/null +++ b/resources/2023/day7.txt @@ -0,0 +1,1000 @@ +K43AT 328 +AAQ2A 410 +45452 995 +T9999 645 +J7737 326 +4TT46 891 +A3AAT 565 +ATTTJ 793 +K2TJK 441 +6J66K 640 +QQQQ7 582 +K596A 203 +48544 862 +74AJQ 103 +J333J 895 +737T4 472 +26226 863 +QQQ7A 959 +6K5J6 257 +7QAT8 10 +4K9KT 894 +TTT66 720 +57874 13 +QJ64Q 536 +8444Q 497 +46K62 642 +Q4444 256 +75K96 984 +TQJ38 237 +Q7286 460 +A2255 985 +66464 661 +32J22 294 +2T22T 880 +2AJJJ 643 +555TT 637 +7T73T 519 +3786T 124 +JT2T2 735 +K4KKK 982 +A8TT4 526 +KK8TJ 334 +54A69 554 +6KK46 912 +T7JQT 766 +99399 437 +5TJ5J 842 +QQ99T 719 +3A9QK 715 +T9TT5 684 +A7A7A 394 +A9559 883 +J2662 50 +5J2A4 44 +636Q6 319 +96K93 937 +4KKJK 924 +AA4AA 555 +AJ695 755 +63T34 476 +K7K47 644 +66K69 166 +K556Q 404 +37249 748 +77JJ9 331 +JJ655 493 +QAKA2 350 +Q7QQK 243 +A6745 363 +QTJTT 538 +44QQ4 529 +666J3 115 +TQ72A 710 +Q5777 457 +4TTJ6 773 +JJ3J6 786 +AA955 911 +4JA44 198 +Q883J 517 +J9933 199 +8453J 349 +6646Q 846 +75J8J 761 +A7A7J 596 +2J993 228 +32636 137 +Q928J 778 +KKKJJ 960 +4466J 929 +775QQ 280 +7T476 749 +979KK 355 +35373 218 +K7788 392 +25K69 289 +74776 882 +A58T2 898 +2A22A 377 +TKT78 545 +K752T 253 +77779 945 +996AA 650 +QQ3A3 859 +K6J87 626 +K22K3 765 +TT37T 94 +372K3 212 +48887 525 +2676T 72 +977A3 641 +3J67K 111 +A6388 118 +3K359 993 +AA8AA 379 +J66J6 841 +2222J 1000 +T757J 117 +99J9T 772 +88846 475 +29J28 572 +77J72 900 +A8QAK 904 +T4KJK 621 +T44TJ 140 +JK9KK 593 +849TJ 828 +59794 486 +3K5QA 318 +K2J98 11 +77744 421 +2K279 231 +6Q3QT 79 +3A999 271 +3QT79 119 +T4598 840 +666T8 717 +9JJ99 811 +QQQKK 671 +QTQQT 303 +86666 605 +47AA3 482 +52525 816 +4Q2Q4 722 +77224 609 +78688 976 +7QKA9 865 +9Q99T 989 +5342A 279 +9Q35K 999 +777AQ 764 +AJ43Q 143 +QQQQ8 744 +2Q3J9 61 +KKK99 779 +KK8KK 966 +TQ839 51 +J5JA5 148 +4942T 725 +AT999 732 +62666 499 +89725 468 +3J566 953 +Q9A58 711 +9QQ5Q 413 +78J57 726 +945TA 921 +KKAT3 938 +3A433 654 +8AA82 88 +77KK7 430 +3T777 728 +QK32T 190 +6J638 708 +QTQJA 632 +KT5A9 221 +79KT8 879 +AT474 18 +77867 756 +99799 815 +A52T4 777 +3K9J4 562 +66QQ8 730 +888AJ 351 +K68KK 49 +44442 905 +Q3A52 304 +66AT9 681 +AQ44J 838 +T6TT8 739 +JA5KK 638 +82Q2J 785 +84665 411 +8K4J4 100 +6936K 664 +7J799 474 +QKQ8K 690 +929J4 860 +6747Q 780 +QKQTQ 979 +53JQ3 635 +T54Q7 43 +9876K 301 +57555 511 +A7777 933 +7533A 121 +T77TT 378 +94977 876 +44K9Q 758 +999A9 930 +99TTT 104 +J8243 375 +QQ2Q2 947 +QAQ99 789 +22A24 91 +9TJK9 733 +666J6 267 +444T3 611 +AA4JJ 194 +888A8 568 +4Q723 804 +5T565 150 +AA23A 347 +9725Q 122 +TT8T8 234 +A9445 342 +A2288 67 +99Q44 167 +3K688 600 +6QQQK 653 +T5J34 423 +3K5T4 868 +8J99A 515 +37T8K 383 +J4T85 182 +Q7644 449 +QQ4TQ 471 +56464 824 +6J85Q 798 +4Q6QQ 986 +8864K 613 +22422 415 +T22T4 695 +6J633 574 +479AK 175 +8JAQ4 397 +5J5T8 662 +A7J99 594 +85688 391 +A3TJ6 204 +J3T33 546 +Q777J 539 +6KJTJ 812 +8TT55 660 +3Q23Q 128 +J7JJ7 585 +6T6J6 837 +5288T 964 +4J34A 767 +77K37 797 +6A665 866 +49A6J 856 +Q9QQ8 261 +QJ9JQ 158 +T5363 75 +QT994 528 +A3335 184 +QAAAA 296 +22886 672 +2922J 110 +99K99 325 +23243 967 +AA545 361 +24443 324 +J258Q 239 +7685Q 731 +T7TKK 281 +QQQTJ 429 +8J828 552 +J8484 21 +3J27A 564 +2A5T9 750 +A3QT5 154 +599J5 245 +KK7A8 71 +8888K 485 +2K859 6 +98959 922 +6J669 123 +A5552 452 +QQA6K 649 +QTQQQ 81 +Q97KK 808 +82276 845 +T6Q36 788 +5TJTT 387 +77787 108 +Q39A2 287 +66Q6Q 896 +89635 197 +TT2TJ 120 +4AA2A 560 +99KK9 534 +KK3KK 479 +65698 330 +KJ63K 775 +K6676 442 +K2226 698 +KJ444 877 +42442 802 +KK8K3 220 +88555 942 +4QQ74 87 +35959 899 +A5736 64 +A8629 941 +2TA8Q 706 +87627 250 +AA6J3 676 +47442 492 +6QJ66 507 +8K3TQ 109 +Q7777 697 +AAAA3 412 +4999A 74 +996K9 498 +323KK 522 +355JA 978 +TK2A7 864 +A9JAQ 5 +5576T 713 +Q272Q 312 +877KK 89 +K6666 658 +J876Q 368 +A63K8 336 +83AAT 106 +6TQ82 373 +7JQQQ 782 +JKTT3 834 +QQ999 129 +3AK6Q 601 +J7TJ7 200 +TK999 185 +76333 907 +JAAAA 57 +5T7T5 37 +QAQ3Q 807 +2666T 406 +4TT43 501 +84484 22 +9T99T 651 +T8675 965 +9276A 848 +98J98 776 +T2299 40 +KTATA 162 +A4K5K 179 +8888J 473 +A554K 420 +999AJ 783 +9696T 367 +KK9KK 56 +TA9AT 892 +AT7T7 38 +T3T3T 530 +23A9T 634 +QA4K2 241 +88K68 362 +T4J9Q 193 +K9T72 52 +76566 92 +9JT67 3 +3Q468 768 +4285K 206 +J28K6 285 +6J86Q 159 +A4925 521 +J5525 531 +A5A55 366 +5968T 818 +44454 320 +8QK88 962 +99996 791 +4A44A 284 +97T48 146 +39T89 686 +3497K 298 +4224T 209 +AAA3K 615 +22795 628 +2QJQQ 141 +35999 73 +73337 32 +49999 403 +JJJJ3 665 +89K74 63 +Q76K2 157 +6868J 171 +J8JJ8 853 +3TJ56 869 +42TA6 682 +33633 337 +AJQ58 135 +3J388 164 +7Q6T2 909 +6TAQT 483 +33379 327 +833AA 332 +885QJ 177 +39522 908 +93JQK 15 +323K2 236 +28A5A 384 +J99JJ 558 +4Q4QQ 360 +38A95 210 +43344 746 +3J589 288 +JJ8JJ 28 +23223 436 +TAA58 149 +2227J 414 +QQQA4 356 +A6456 754 +34444 131 +83K6K 310 +37233 41 +A7797 84 +62426 333 +2A822 569 +KAAKK 358 +T2AJ6 901 +6J822 729 +8J86J 652 +A935K 247 +TTKT3 998 +8ATAT 12 +K5622 170 +8QQ8Q 30 +82288 524 +Q4T94 445 +TAAA2 506 +7A79Q 663 +AT94K 292 +J6937 659 +5343A 694 +43JT6 851 +K4334 700 +3K3K3 607 +AJ2JA 980 +AA4AJ 422 +4K444 448 +768TJ 743 +A5AJA 35 +A33AJ 971 +KA662 952 +226Q2 113 +488Q8 295 +633T3 481 +J22K2 861 +388J8 101 +3Q524 152 +96J69 466 +882T3 315 +56J8T 258 +AAJ22 418 +Q722T 306 +3Q334 969 +A9K99 455 +AT4J3 857 +5QKA9 29 +2KKK2 242 +74433 251 +96K69 843 +KJJ5K 86 +576K8 692 +27TTA 470 +66JK9 240 +4T6Q7 496 +65T99 925 +3AT53 693 +5KTK9 931 +Q4999 855 +3QQ8Q 854 +5555T 114 +55J66 884 +7777J 409 +2JKJ5 795 +75755 23 +444JJ 308 +5JKJ5 701 +72Q77 93 +28Q28 639 +2A257 438 +95KJ4 484 +QTQ39 890 +8JK8K 195 +999KQ 463 +64JQ6 648 +49444 796 +999A8 439 +9J229 277 +22Q6Q 345 +QQ2QQ 557 +AQ45K 836 +8T3KJ 918 +8KKTK 2 +J5T55 238 +K4663 794 +QQAQQ 216 +225K5 927 +32658 389 +92276 477 +63K9T 603 +58Q32 232 +8AK52 973 +KQKQK 323 +88592 656 +22223 395 +K4TT4 354 +46KK3 850 +5T53T 163 +44996 858 +3J3K3 7 +QQ2Q4 630 +9QA2K 136 +Q5KQQ 677 +JJJJJ 974 +55475 737 +6AK5Q 736 +Q4454 997 +T8282 144 +K3333 810 +92929 59 +K44KT 427 +7A774 889 +96996 902 +79QQ9 39 +A73A3 670 +44644 224 +2Q54Q 311 +56555 724 +783J7 19 +2KKKK 950 +T74K7 799 +64464 370 +J6T62 833 +885J8 459 +84J66 617 +77579 408 +2J36T 386 +KTK2K 24 +34334 249 +44489 939 +55955 915 +736QA 58 +4J548 839 +QQQ3Q 800 +57855 934 +K5KAA 270 +A6Q22 262 +2TTTT 398 +75A2Q 759 +J2529 575 +99373 16 +78355 981 +JA587 769 +AA38Q 255 +22A77 903 +89999 827 +6JT7T 913 +A59JK 872 +6QAQA 542 +98J99 712 +K4TTQ 520 +699J9 138 +39JJT 757 +A2TJ5 419 +Q8647 96 +JT779 619 +7T5TT 417 +A433A 685 +KTJKT 707 +29T73 679 +KKAKK 31 +72758 181 +TTATT 348 +65Q7T 467 +K8222 98 +QK5KK 504 +44QJQ 259 +6T475 709 +52589 33 +58898 631 +59535 741 +4J8KK 20 +TQQTT 132 +8KT6T 784 +Q33KK 291 +T9QT5 897 +3983J 127 +73A33 556 +J2452 718 +7465Q 886 +89899 935 +6TJA6 544 +79797 447 +89J77 571 +35333 518 +7478K 875 +6TQJ4 595 +636K5 747 +QJQ5A 156 +76776 165 +45588 822 +2T6A9 622 +333QQ 273 +9J888 563 +J2577 451 +6A8J3 847 +33J33 364 +J6TA8 689 +83333 916 +9473T 371 +8397A 516 +8352K 264 +38J8J 509 +93696 523 +69JJ7 464 +T6KK2 357 +734AQ 340 +QA6AA 461 +K2AKK 443 +74TA3 987 +52TJ7 961 +67992 321 +A2972 830 +9JQ9Q 625 +TTTT4 727 +TQ898 958 +2222K 610 +8346J 508 +9ATTT 540 +J4464 655 +4JAA3 189 +73669 762 +54445 983 +39QKQ 316 +6777Q 948 +ATAAA 893 +T5KTK 388 +62KKK 77 +58647 307 +5JA88 83 +9J944 183 +5J274 133 +44K4K 920 +4TTA9 54 +AA9A6 940 +KTKTK 592 +399Q2 399 +6JQQQ 573 +A2955 233 +37Q8T 274 +QTKTT 376 +9KT59 577 +KK3Q4 598 +99595 322 +3Q339 225 +65J55 201 +AQTQQ 874 +5667J 936 +TJ8Q2 829 +T6Q45 910 +KQ4AK 380 +8AQQJ 770 +28838 402 +JAAAJ 752 +A5AA5 4 +86886 34 +46494 551 +963J5 76 +773A7 814 +67794 505 +4KJ4K 559 +J8585 230 +KT3K6 618 +23QJ8 47 +QQ464 69 +96J9Q 469 +55777 714 +J2K58 227 +K24Q2 774 +888KJ 352 +Q3TQQ 647 +K3JA4 365 +J4TKQ 548 +88J4J 78 +9J44J 489 +22525 297 +QQ9QQ 42 +2222A 82 +5A4A4 988 +K6479 36 +A2AAA 597 +6J664 699 +85555 70 +77Q7Q 222 +AA5AA 541 +QQQQJ 612 +555J5 512 +44AA3 763 +65635 45 +JKKK5 871 +T3733 949 +JQK7Q 226 +Q4QQQ 126 +47AAA 214 +7T345 673 +73862 465 +5555A 994 +AA54K 787 +KK7K7 951 +Q5585 579 +84444 314 +7333K 283 +A37JK 68 +9QA36 53 +9T78T 172 +9J567 809 +KQQ6K 26 +J7882 444 +J5TKT 490 +QQQ97 992 +TTKTT 208 +6T666 211 +72977 266 +73AT9 532 +Q5KJ2 723 +AK4AA 852 +8QJQJ 820 +73383 426 +6K4A8 260 +88222 514 +832QQ 275 +77KQ7 491 +68J88 721 +46484 153 +55552 282 +8T3Q8 627 +7KQKQ 944 +T9Q84 390 +22775 771 +TKT72 604 +74QQQ 217 +5Q44Q 196 +J2TK3 881 +J88J8 305 +72777 268 +K3KKJ 400 +222TJ 329 +J3437 527 +27QAK 696 +K7676 272 +2A22K 578 +537J2 955 +777T7 926 +5K36A 646 +T2Q95 570 +27727 65 +T885T 688 +25442 602 +Q6Q7Q 543 +875K8 586 +78K3K 107 +KTKTQ 450 +555JJ 620 +TQAJJ 792 +6977Q 813 +65696 943 +J3563 956 +5KKKK 977 +88A6A 887 +AA22A 335 +Q8AQQ 405 +4JATK 702 +A6888 567 +J765T 487 +2Q4A6 478 +JK979 510 +44T27 278 +35323 751 +A7AAA 431 +8QT82 826 +QTJ86 928 +3J773 691 +K58J8 970 +88442 160 +A3AA9 633 +6AJ55 142 +QKKQ9 178 +93TJ7 805 +389A2 97 +4373A 95 +7Q784 359 +7KJ77 393 +74J4K 14 +94TTT 968 +3QA3K 248 +66944 48 +QQKQQ 823 +AA5A7 446 +5JT22 745 +T694K 738 +Q956Q 705 +34333 675 +8T88T 17 +2T3TJ 576 +5A578 186 +4848Q 549 +T322T 566 +77775 112 +QJ599 85 +AQKQA 229 +78Q77 678 +3K9K7 831 +55524 338 +A333A 932 +JJ222 191 +JJKJQ 313 +69669 500 +33322 513 +T7TTT 781 +A44JJ 580 +2QJ8J 276 +KA7A6 803 +346KT 401 +853Q7 906 +AA6A6 666 +3QA43 9 +28J25 244 +8686A 134 +KA88A 62 +K9888 535 +4T7KA 219 +KKK6K 996 +9T994 435 +K8KQK 174 +QQAA4 246 +5K5JK 588 +QJ875 957 +46358 919 +3A393 954 +7JKK7 972 +2QKK2 716 +TKJ9K 151 +66646 703 +5KJT2 369 +7KJK8 372 +A8A8A 169 +AAA9A 187 +TT55T 878 +44654 587 +Q6QQQ 90 +7AAJA 923 +6TTTJ 674 +66676 339 +88894 870 +Q2K48 533 +TTTT9 130 +763J3 343 +88333 817 +AQ785 704 +QQ5QA 385 +737T9 116 +95595 801 +J84AK 590 +79796 102 +J3TJ4 683 +26299 503 +8T888 867 +53AAJ 608 +2A56J 46 +8955A 381 +J5A55 844 +QJ9J9 636 +44J44 669 +A7JTA 550 +7TT24 317 +57A55 396 +J3JK3 55 +3TT33 888 +84JJ6 583 +3362T 547 +49494 176 +88858 173 +6KKJ6 614 +QK662 623 +Q4223 302 +397J5 147 +J5A9T 454 +9TT2T 145 +98T85 599 +86JQ2 433 +KQ977 806 +7T6T5 1 +72QQQ 873 +KTJKK 66 +77578 161 +TQ8T8 60 +AA25A 963 +T2AA4 382 +6T52J 346 +KK55A 494 +A4A4A 680 +55454 125 +49QQQ 657 +K6J9Q 290 +77J7J 155 +5AAJ5 687 +KQJ68 606 +88898 667 +29J27 616 +TJTTT 946 +46828 269 +2T28T 188 +787K7 293 +55223 254 +T6QT6 581 +TTA6A 825 +252AA 252 +JKQKK 205 +88585 819 +TT8TT 914 +K87T5 425 +KQKKK 416 +K9K74 263 +89627 624 +94889 537 +K96AQ 502 +Q77JA 991 +66367 849 +92922 760 +KAT4K 480 +ATTAA 553 +J4447 432 +63T5T 440 +282J2 192 +JKKKK 753 +6A74K 25 +46747 407 +TT3J9 299 +5KKK9 80 +6TA22 353 +T5795 265 +24TK9 202 +5Q555 207 +T5A45 341 +2K24J 742 +AJA9A 8 +45555 456 +88699 668 +66Q86 344 +AAA85 99 +7736T 591 +A6Q6Q 223 +A252J 589 +TTTKK 309 +77AAK 458 +68A9K 629 +6TK66 300 +2J242 885 +TAA68 488 +2Q72J 734 +936KA 213 +59JA4 180 +AA999 105 +843J9 990 +T4T44 215 +4ATAA 561 +J5333 821 +77774 424 +9AA6J 27 +JTJTT 790 +443KK 975 +TT8T9 286 +74Q89 832 +58QTA 453 +39393 917 +88234 740 +Q62AJ 374 +999Q9 235 +8Q828 428 +QJQJQ 462 +2K7TJ 139 +AJ239 835 +29499 434 +97J77 495 +99J99 584 +464J5 168 \ No newline at end of file diff --git a/resources/2023/day7sample.txt b/resources/2023/day7sample.txt new file mode 100644 index 0000000..bf2815e --- /dev/null +++ b/resources/2023/day7sample.txt @@ -0,0 +1,5 @@ +32T3K 765 +T55J5 684 +KK677 28 +KTJJT 220 +QQQJA 483 \ No newline at end of file diff --git a/resources/2023/day8.txt b/resources/2023/day8.txt new file mode 100644 index 0000000..98a2cf8 --- /dev/null +++ b/resources/2023/day8.txt @@ -0,0 +1,768 @@ +LRRRLRRLRRLRLRRLRRRLLRRLLRRLRRRLRLRRLLRRLRRLRLRRRLRRRLRLRLRLRRRLRRLRRRLRLRRLLLRLRLLRLRRRLRLRRRLRRRLLLRRLRLRRLRRRLLRRLRRLRRLRRRLRRLRRLRRLRLRRLRLRLRLRLRLRRRLRRLRLLLRRRLRLRRRLRRRLLRRLRRRLRRLRRRLRRRLRLRRRLRRLRLLRRLLRLRRLRLRLLRRLLRRLLRRLRRLRRRLRLRRLRLRRRLRRRLLRLRRLLLLRRRLLRLLLRRLRRRLRRRLRRRLRLRRRLRRRLRRRLRLRRRR + +FJT = (XDJ, LQV) +VLP = (BJP, TTH) +NVD = (KTC, TGT) +VCC = (SRV, GMR) +PNM = (SFQ, XMX) +DPD = (HHJ, MGG) +GQA = (BGC, BHR) +VQH = (RCV, VJC) +VHR = (GLQ, GJF) +SQC = (CDT, HKV) +GSV = (PKP, RMP) +JLZ = (KMM, QCG) +THG = (PTL, SXP) +FTC = (VFH, TPL) +JTT = (VQC, QVC) +KQC = (RCR, TRT) +RGP = (DPG, MFQ) +TDP = (XJV, QCR) +PCC = (LRD, XXR) +MRQ = (PPS, KHB) +TTX = (VSJ, XPN) +JNR = (DFB, NSV) +KJK = (PCR, LMT) +JLB = (GXB, HND) +BJN = (KNX, NXQ) +VDV = (XNB, DTB) +TXB = (DXL, PCN) +MJS = (NQK, PDV) +RPV = (BNF, QNS) +CLM = (KLR, QCT) +SXP = (JMV, MGN) +HQG = (LNV, RTX) +RQJ = (HQG, TSJ) +LGD = (PNM, RHG) +XPN = (LGC, CTR) +JJB = (CDH, TXV) +HVZ = (QRH, VHK) +LSV = (FRK, LXV) +RFH = (KMJ, DKH) +FFV = (DJK, MCR) +BMN = (HLV, NMQ) +RBC = (FVH, CXN) +PVK = (HKJ, LGD) +BHK = (MLL, JCP) +VJF = (DCM, SGJ) +XVB = (QBS, MNF) +NRT = (GLL, GLL) +NXL = (CRV, PQB) +TVC = (RKR, PVD) +LDX = (TKH, BHK) +JPG = (DMK, HHQ) +PHV = (JJS, CKP) +NVQ = (RRC, SHR) +KJH = (JKQ, CCR) +LHV = (MVL, LNK) +BBK = (NMH, SQL) +NXP = (PCH, CNJ) +STL = (LMR, HRB) +CFK = (NGC, KFK) +FGC = (VJM, JPG) +SFQ = (CXR, LCT) +KDN = (JPS, QBJ) +PCR = (DSB, TLL) +JKQ = (MRR, JFS) +FNS = (XNB, DTB) +BBP = (LTR, VLP) +MGN = (RKL, RMN) +HCM = (XPC, PHB) +RNJ = (QVC, VQC) +HVT = (FTN, JJQ) +NGP = (JSJ, TKR) +XBL = (BTH, JXS) +AAA = (GFB, FBF) +HXN = (SMM, RVJ) +CMF = (FJT, QMT) +XLR = (HBL, RXC) +NNK = (RCR, TRT) +HNM = (HKN, KBP) +CNN = (JCX, PXH) +VSF = (QFN, HTG) +MQM = (SSQ, QTS) +NBM = (TPD, CVS) +LJB = (SMK, KJK) +VTD = (NGG, NGG) +BCH = (FXM, BPK) +VJM = (DMK, HHQ) +TVX = (HJP, XSP) +TFD = (TSD, TSD) +XDR = (XPS, RDX) +XPD = (VBR, JLN) +TSJ = (RTX, LNV) +NQK = (FVP, NXF) +DCC = (QJL, QFQ) +HKB = (XBH, RXS) +MCR = (RTL, LSC) +GFB = (PND, KRM) +CVM = (JSH, CMP) +QXK = (VTD, XTD) +QFG = (TVX, TCJ) +GQH = (JLB, SFN) +NPB = (PRQ, MLJ) +LRD = (VDV, FNS) +QBJ = (FTV, QNM) +TBB = (FKD, LKP) +HBL = (VMF, DQJ) +HVC = (PQR, BXX) +TQC = (LNK, MVL) +KFQ = (PBK, KPD) +TRH = (SQD, CHT) +TMT = (RSP, SLD) +JBM = (XJV, QCR) +BXX = (NDN, SHC) +JFM = (GVJ, HLH) +PPP = (HGX, JJT) +DXG = (NPK, SBC) +KDQ = (QKD, XRD) +CDH = (XGJ, RGP) +XMX = (CXR, LCT) +PQN = (CKP, JJS) +VDX = (FRP, KJZ) +FRK = (SBT, HCQ) +TDG = (QTM, SVX) +JSD = (HHN, TJM) +JJS = (TTX, MSV) +ZZZ = (FBF, GFB) +XSP = (JXG, CCD) +GXX = (RQX, NGP) +VTG = (QHF, PPP) +BGC = (RQR, PPG) +MQV = (BDT, RMH) +DKH = (PDS, FGF) +XCA = (VHR, HCS) +GTC = (JSM, PTT) +JVV = (LFG, MQV) +TPP = (RBJ, ZZZ) +SRV = (TFV, LBT) +RPC = (FSM, FQF) +CDD = (SQX, QKV) +QHQ = (PVD, RKR) +QCR = (FXJ, LLB) +VDJ = (NMD, BVB) +VLF = (XHR, JRG) +PDS = (NPB, QHS) +TVM = (DQH, XPD) +SJF = (DXL, PCN) +TPD = (VLG, FGC) +SNM = (MHV, FSN) +SGJ = (CDV, BCH) +TPL = (NRT, FNP) +NBF = (DQH, XPD) +GGP = (QND, CHR) +LMR = (KFM, LMM) +HHQ = (KHG, VCF) +XVN = (TGH, FQM) +QTS = (DRH, XDN) +JPM = (JHQ, FGM) +LSB = (HKB, SPH) +NMQ = (BPF, VCP) +QKC = (SKL, RMD) +SXB = (LFG, MQV) +MRM = (SFR, NRD) +GSG = (LFR, TST) +MRR = (CFK, FXG) +RFS = (DDK, LML) +PTL = (MGN, JMV) +NXF = (PPK, MLT) +KSN = (MCK, HGN) +SFR = (NSN, DDP) +RHB = (KDQ, HQD) +SBM = (LGD, HKJ) +BCN = (BJH, DQC) +KTJ = (QBQ, PPC) +NMD = (RHB, GCD) +DFB = (PNP, HVJ) +GHG = (TGH, FQM) +LGC = (RQQ, KFQ) +NTS = (KJK, SMK) +BFM = (JLB, SFN) +HHK = (NFR, XDR) +PCN = (KKC, TQG) +XJV = (LLB, FXJ) +PPC = (NNK, KQC) +DTB = (RFH, FKB) +QNM = (RQJ, RXM) +HGN = (FJJ, HKQ) +PHJ = (HRH, LCF) +CMR = (VQK, TBM) +SXL = (TVV, TCP) +HPT = (XLR, HGK) +XVX = (PPP, QHF) +XRC = (PCC, SFT) +QXB = (HRR, SHN) +JMV = (RKL, RMN) +RTN = (MRN, STL) +JDD = (LDQ, QPB) +JTB = (HHJ, MGG) +MLM = (TVM, NBF) +BJP = (XTT, XTT) +HQN = (TXT, NJF) +XGV = (KHB, PPS) +XDB = (BHQ, XXC) +QVC = (GNB, CSV) +SFT = (LRD, XXR) +MXB = (MCR, DJK) +NQV = (CVM, PBV) +JQM = (TCP, TVV) +LFG = (BDT, RMH) +SMK = (LMT, PCR) +BXJ = (QMR, TVP) +LDD = (RQX, NGP) +RDX = (DFD, DSX) +KNQ = (BNF, QNS) +JLN = (MBF, XLS) +QFM = (CDD, GCT) +RND = (RTR, QPQ) +FLC = (BJN, NBR) +RRC = (CPK, DDC) +RVD = (DCC, NSC) +KQF = (TDG, HPN) +MPN = (MDC, FDF) +HKQ = (XDM, VCC) +PPK = (BTF, NQV) +QHS = (PRQ, MLJ) +HGK = (RXC, HBL) +DNX = (GMG, TBB) +HVJ = (HCD, DXG) +NHX = (RCF, RQF) +KHB = (PQN, PHV) +LNV = (VJF, BKH) +QMT = (XDJ, LQV) +VJK = (TXB, SJF) +PJH = (HLH, GVJ) +QNS = (MPN, BDP) +TVP = (RLR, MQN) +GBR = (HGG, TJG) +BRM = (LXV, FRK) +JFS = (FXG, CFK) +TKR = (TFD, CDS) +NBR = (KNX, NXQ) +KMJ = (PDS, FGF) +LKK = (NBR, BJN) +KPD = (MBK, TTT) +FVH = (FLL, XPM) +DSF = (JNP, HCM) +FCD = (HTC, XSK) +RNP = (MHH, HQS) +XBB = (SQB, SNM) +SDS = (GNX, BBP) +KBP = (XXT, KXJ) +FDF = (GSV, KGV) +CKP = (MSV, TTX) +MST = (QND, CHR) +RMH = (KNP, SQC) +JJQ = (MFN, VKS) +BXF = (RQT, JGF) +TCP = (JBV, QKC) +LTR = (BJP, BJP) +MNT = (XLR, HGK) +NXX = (NMF, MRM) +KFF = (TDG, HPN) +NCC = (THG, MVT) +KGV = (PKP, RMP) +HVH = (NJG, BND) +RKL = (STN, GTF) +CTH = (TST, LFR) +FQF = (NNC, XBB) +LFR = (GTM, FCD) +SLD = (HNM, MQQ) +TTJ = (FFR, FFR) +DQJ = (MNJ, LSB) +RQF = (XRC, FNX) +XHR = (GGJ, KTJ) +HJP = (CCD, JXG) +CTC = (QVL, KSN) +GQM = (TJM, HHN) +TGT = (MCP, MDH) +PBK = (MBK, TTT) +JGF = (MQX, BXJ) +FLL = (NVD, FKG) +TGH = (VVC, LVF) +MQN = (NKD, JNC) +SVX = (XCM, PPX) +MCP = (HVH, SVN) +FSN = (NXL, SGG) +TQG = (GXX, LDD) +HBA = (QCG, KMM) +DMK = (VCF, KHG) +QKD = (FXF, QFG) +MDH = (SVN, HVH) +QTM = (XCM, PPX) +PMP = (HGG, TJG) +JXS = (TSM, LDX) +LDQ = (NXT, DDV) +KNX = (BPX, RND) +KNP = (HKV, CDT) +XCM = (MPQ, HKC) +KMM = (VXM, XSH) +FFR = (QBS, QBS) +PLN = (GRH, QXB) +JFF = (QTS, SSQ) +FVK = (NBM, JCB) +TQN = (DKD, HHV) +HGX = (MSR, GVB) +CSD = (HHK, BFQ) +CNJ = (SLH, NXX) +THD = (XXC, BHQ) +TNL = (XGH, XKN) +MHH = (GGP, MST) +KQD = (DNK, QGR) +TSD = (VHK, QRH) +DSB = (BGV, NFK) +CPN = (TPG, LPH) +KBV = (LPH, TPG) +DTS = (PQR, BXX) +PPX = (MPQ, HKC) +LLP = (LVH, CJH) +PLL = (SJF, TXB) +CVS = (VLG, FGC) +HHJ = (CSD, DQV) +QFQ = (BTT, VBP) +FVP = (PPK, MLT) +TFV = (QBV, GQG) +NPK = (KNQ, RPV) +DVQ = (RNV, FPF) +DSX = (DGJ, RQB) +PBV = (CMP, JSH) +SQX = (JBN, RPD) +VJC = (SBD, HRK) +RLR = (NKD, JNC) +FTN = (MFN, VKS) +TRB = (RRC, SHR) +LVH = (XDB, THD) +NXB = (CMR, VDB) +JSM = (HQJ, GTD) +HHH = (XXF, JJB) +RPD = (JDD, RPL) +XSF = (QXB, GRH) +XPM = (FKG, NVD) +BNR = (CCT, NXD) +HKN = (KXJ, XXT) +KCP = (FFR, XVB) +PHB = (QFM, PPD) +DLC = (PMP, GBR) +GMG = (FKD, LKP) +DQC = (HQP, MLM) +SMM = (SXL, JQM) +SBP = (JRG, XHR) +GCR = (FPF, RNV) +FNX = (PCC, SFT) +PQB = (NKM, CMF) +TJM = (NXB, NPP) +PPS = (PQN, PHV) +BDP = (FDF, MDC) +CXN = (XPM, FLL) +VDB = (TBM, VQK) +SBD = (TDP, JBM) +NXQ = (RND, BPX) +DRH = (HXN, SKC) +VBG = (BCS, GSN) +LSJ = (GNX, BBP) +VCP = (KMQ, RMC) +MVL = (VMG, SCG) +JCB = (TPD, CVS) +MGG = (DQV, CSD) +RXS = (JTT, RNJ) +BTF = (PBV, CVM) +DFD = (DGJ, RQB) +GGJ = (PPC, QBQ) +BPK = (VBT, KQD) +DKD = (CNN, HSD) +SQD = (PHJ, CSL) +PQG = (JFM, PJH) +RMN = (STN, GTF) +RCV = (HRK, SBD) +MBK = (GKQ, MJS) +CXR = (SDS, LSJ) +XSK = (PLV, TQN) +FBR = (BFM, GQH) +GCD = (KDQ, HQD) +PMF = (FGM, JHQ) +XLP = (RFT, BMN) +NSC = (QFQ, QJL) +SHR = (CPK, DDC) +DXL = (TQG, KKC) +TTH = (XTT, TKZ) +CGS = (KSN, QVL) +QHF = (HGX, JJT) +NFR = (XPS, RDX) +CHR = (BBK, FLR) +RPL = (LDQ, QPB) +GTD = (MRJ, KJH) +PNP = (HCD, DXG) +GCT = (QKV, SQX) +SGG = (CRV, PQB) +HNN = (BVB, NMD) +HLK = (CLM, DDL) +GSN = (VDJ, HNN) +KFB = (JRQ, DSF) +XXR = (FNS, VDV) +FJJ = (XDM, VCC) +TCJ = (HJP, XSP) +DJK = (RTL, LSC) +NJF = (FKL, BNB) +BGV = (JSD, GQM) +JSH = (VTG, XVX) +JBV = (RMD, SKL) +RNV = (KBV, CPN) +FKB = (KMJ, DKH) +CDT = (HVC, DTS) +TQT = (TPR, VSF) +FNG = (LKK, FLC) +RBJ = (GFB, FBF) +RTR = (KFB, VHB) +BKH = (SGJ, DCM) +JRG = (GGJ, KTJ) +GTF = (TVC, QHQ) +JXG = (KQF, KFF) +MBF = (GXS, NQR) +GNB = (FLF, MTB) +KFK = (FMH, DLS) +LBT = (GQG, QBV) +CGT = (VSF, TPR) +GVA = (CTG, VQH) +FNP = (GLL, TPP) +RQT = (BXJ, MQX) +CDV = (BPK, FXM) +JCX = (QVX, LKM) +XSH = (SXB, JVV) +HKV = (DTS, HVC) +MRN = (HRB, LMR) +SBX = (CHT, SQD) +FRP = (CTG, VQH) +HHN = (NPP, NXB) +NGG = (SJL, SJL) +BJB = (KRL, JNR) +GNX = (LTR, LTR) +RCR = (KBH, NCC) +NDN = (MQM, JFF) +VXT = (JGF, RQT) +PPG = (BBG, THJ) +CDS = (TSD, HVZ) +VSJ = (LGC, CTR) +NSN = (DNF, TMT) +VRJ = (GBR, PMP) +CDQ = (VLF, SBP) +XDN = (HXN, SKC) +LCF = (FTM, CDQ) +HCQ = (DCF, RTN) +BPF = (KMQ, KMQ) +NNC = (SQB, SNM) +LQV = (SHQ, FTC) +VFH = (NRT, NRT) +VHK = (TMN, FNG) +LPH = (BMT, NHX) +PPD = (GCT, CDD) +BXH = (VTD, XTD) +LMT = (TLL, DSB) +TSM = (TKH, BHK) +KMQ = (NCS, NCS) +FTV = (RXM, RQJ) +XGJ = (MFQ, DPG) +RXM = (TSJ, HQG) +QBV = (SSH, QTB) +TBM = (HHR, FVK) +CCR = (MRR, JFS) +SKL = (GHG, XVN) +HRK = (JBM, TDP) +MFQ = (PQG, PDF) +DNK = (QJX, BGP) +BDL = (GMG, TBB) +MQQ = (HKN, KBP) +RQR = (THJ, BBG) +KFM = (GKN, DFN) +XKN = (HTL, PVS) +PDF = (JFM, PJH) +TTT = (GKQ, MJS) +RHG = (SFQ, XMX) +XTD = (NGG, NRM) +LXV = (SBT, HCQ) +HCD = (NPK, SBC) +TFT = (RFT, BMN) +DDK = (MCS, DFR) +DFR = (SBX, TRH) +BND = (GHM, BDJ) +SFN = (GXB, HND) +HQD = (QKD, XRD) +RMC = (NCS, LLZ) +RQQ = (PBK, KPD) +LKP = (PVK, SBM) +PQR = (SHC, NDN) +DGJ = (TKT, XXV) +CHF = (QCG, KMM) +SCG = (BDL, DNX) +TJG = (HHH, KJG) +PDV = (FVP, NXF) +HGG = (KJG, HHH) +VHB = (JRQ, DSF) +KBH = (THG, MVT) +PVD = (BRM, LSV) +MNJ = (HKB, SPH) +CJH = (THD, XDB) +DCF = (STL, MRN) +XLS = (GXS, NQR) +SBC = (RPV, KNQ) +BTH = (LDX, TSM) +CPV = (JXS, BTH) +DGR = (XLP, TFT) +NFK = (GQM, JSD) +VBP = (THN, BDB) +RTL = (HQN, XQT) +SJL = (FRP, FRP) +XPC = (QFM, PPD) +FXM = (VBT, KQD) +MCK = (FJJ, HKQ) +KRM = (DPD, JTB) +BNF = (MPN, BDP) +SQB = (MHV, FSN) +QKV = (JBN, RPD) +QBQ = (KQC, NNK) +FPF = (CPN, KBV) +SPH = (XBH, RXS) +PLV = (HHV, DKD) +DQV = (BFQ, HHK) +NJQ = (LHV, TQC) +PXH = (LKM, QVX) +TMN = (FLC, LKK) +LVF = (FBR, GTB) +BCS = (VDJ, HNN) +HHR = (JCB, NBM) +HHD = (NXD, CCT) +FGF = (QHS, NPB) +LSC = (XQT, HQN) +HQJ = (MRJ, KJH) +CHT = (PHJ, CSL) +HLH = (DGR, LTS) +NRD = (DDP, NSN) +JBN = (JDD, RPL) +TRT = (KBH, NCC) +HHV = (HSD, CNN) +DDL = (QCT, KLR) +CSV = (MTB, FLF) +SLH = (NMF, MRM) +THJ = (VLR, RNP) +CTG = (VJC, RCV) +MLL = (HVT, TDH) +HLV = (BPF, BPF) +XJS = (DQC, BJH) +RMD = (GHG, XVN) +BGP = (GCR, DVQ) +RCF = (FNX, XRC) +GHM = (XBL, CPV) +DLS = (HPT, MNT) +BDB = (BJB, QHM) +SVN = (BND, NJG) +NSV = (HVJ, PNP) +VQC = (GNB, CSV) +BHR = (PPG, RQR) +CCD = (KFF, KQF) +SBB = (TBJ, HLK) +VVC = (FBR, GTB) +SHQ = (VFH, TPL) +VMF = (MNJ, LSB) +MSV = (XPN, VSJ) +TDH = (JJQ, FTN) +RXC = (DQJ, VMF) +RSP = (MQQ, HNM) +SSH = (GLF, RVD) +LTS = (TFT, XLP) +HTC = (PLV, TQN) +GLF = (NSC, DCC) +BTT = (THN, BDB) +DFN = (RPC, CPJ) +NKM = (QMT, FJT) +RMP = (LLP, GHD) +PRQ = (DLC, VRJ) +TBJ = (CLM, DDL) +CPJ = (FSM, FQF) +LHD = (GSN, BCS) +GLL = (RBJ, RBJ) +TXT = (FKL, BNB) +NCS = (VHR, HCS) +GLQ = (JFN, TNL) +BMT = (RCF, RQF) +JRQ = (HCM, JNP) +FXJ = (VXT, BXF) +GMR = (LBT, TFV) +NMH = (XJS, BCN) +RQX = (JSJ, JSJ) +VXM = (JVV, SXB) +PCH = (SLH, NXX) +TXV = (XGJ, RGP) +XNB = (FKB, RFH) +JPS = (FTV, QNM) +JSJ = (TFD, TFD) +LLZ = (HCS, VHR) +HPN = (QTM, SVX) +DPG = (PQG, PDF) +NKD = (CTC, CGS) +TKZ = (BHR, BGC) +HRB = (KFM, LMM) +TLL = (NFK, BGV) +MPQ = (KDN, DSR) +BVB = (RHB, GCD) +JFN = (XKN, XGH) +QTB = (RVD, GLF) +BFQ = (NFR, XDR) +LCT = (SDS, LSJ) +SQL = (BCN, XJS) +LML = (MCS, DFR) +NMF = (SFR, NRD) +CPK = (BXH, QXK) +JHQ = (RFS, BQS) +QRH = (FNG, TMN) +MLT = (NQV, BTF) +BJH = (HQP, MLM) +XHC = (TBJ, HLK) +VQK = (FVK, HHR) +NXD = (LJB, NTS) +FSM = (NNC, XBB) +KHG = (GTC, RPG) +RTX = (BKH, VJF) +HSD = (PXH, JCX) +PND = (JTB, DPD) +CRV = (NKM, CMF) +FMH = (HPT, MNT) +BPX = (QPQ, RTR) +THN = (BJB, QHM) +XBH = (JTT, RNJ) +GVJ = (LTS, DGR) +KRL = (DFB, NSV) +XPS = (DFD, DSX) +TST = (GTM, FCD) +GKQ = (PDV, NQK) +HKC = (KDN, DSR) +DQH = (VBR, JLN) +GJF = (JFN, TNL) +QBS = (CHF, CHF) +HTL = (NXP, LGP) +MCS = (TRH, SBX) +RKR = (BRM, LSV) +VBR = (MBF, XLS) +FKD = (SBM, PVK) +FXF = (TVX, TCJ) +FBF = (KRM, PND) +QJL = (BTT, VBP) +QJX = (GCR, DVQ) +NGC = (FMH, DLS) +TPG = (BMT, NHX) +GTM = (HTC, XSK) +CTR = (KFQ, RQQ) +NQR = (HHD, BNR) +XGH = (PVS, HTL) +LKM = (VJK, PLL) +SHN = (JPM, PMF) +LMM = (DFN, GKN) +DDV = (SBB, XHC) +GQG = (QTB, SSH) +DDP = (DNF, TMT) +CSL = (HRH, LCF) +LLB = (VXT, BXF) +NPP = (VDB, CMR) +HKJ = (RHG, PNM) +QVL = (HGN, MCK) +TVV = (JBV, QKC) +MVT = (SXP, PTL) +VBT = (DNK, QGR) +XRD = (QFG, FXF) +GTB = (BFM, GQH) +JNP = (XPC, PHB) +KTC = (MDH, MCP) +QVX = (PLL, VJK) +QFN = (TRB, NVQ) +VLR = (HQS, MHH) +BDT = (SQC, KNP) +JCP = (TDH, HVT) +KKC = (GXX, LDD) +BDJ = (CPV, XBL) +GRH = (SHN, HRR) +GXB = (RBC, BTC) +MNF = (CHF, JLZ) +FGM = (RFS, BQS) +RVJ = (SXL, JQM) +FXG = (NGC, KFK) +HND = (RBC, BTC) +NXT = (XHC, SBB) +FKG = (KTC, TGT) +MQX = (QMR, TVP) +JJT = (GVB, MSR) +MHV = (SGG, NXL) +KJG = (JJB, XXF) +SBT = (DCF, RTN) +TPR = (QFN, HTG) +BNB = (XGV, MRQ) +XXT = (VBG, LHD) +PKP = (LLP, GHD) +HCS = (GLQ, GJF) +TKT = (XSF, PLN) +HRR = (PMF, JPM) +BHQ = (CGT, TQT) +FKL = (XGV, MRQ) +HRH = (FTM, CDQ) +QPB = (NXT, DDV) +XDJ = (SHQ, FTC) +PTT = (GTD, HQJ) +MDC = (KGV, GSV) +KXJ = (VBG, LHD) +FLF = (NJQ, MFB) +FTM = (VLF, SBP) +QCT = (FFV, MXB) +HTG = (TRB, NVQ) +TKH = (JCP, MLL) +XXC = (CGT, TQT) +MFN = (TTJ, KCP) +HQS = (MST, GGP) +GKN = (CPJ, RPC) +RQB = (XXV, TKT) +VKS = (TTJ, KCP) +QMR = (RLR, MQN) +XTT = (BGC, BHR) +MRJ = (JKQ, CCR) +SKC = (SMM, RVJ) +PVS = (LGP, NXP) +GXS = (BNR, HHD) +GVB = (GSG, CTH) +FQM = (LVF, VVC) +CMP = (XVX, VTG) +NVA = (VHK, QRH) +CCT = (NTS, LJB) +KJZ = (VQH, CTG) +STN = (TVC, QHQ) +HQP = (TVM, NBF) +DDC = (BXH, QXK) +QGR = (QJX, BGP) +GHD = (CJH, LVH) +MTB = (MFB, NJQ) +SSQ = (DRH, XDN) +QND = (FLR, BBK) +LGP = (CNJ, PCH) +RPG = (JSM, PTT) +XXF = (CDH, TXV) +XDM = (SRV, GMR) +VLG = (JPG, VJM) +NJG = (BDJ, GHM) +VCF = (GTC, RPG) +DSR = (QBJ, JPS) +DNF = (SLD, RSP) +MSR = (GSG, CTH) +BBG = (VLR, RNP) +XXV = (PLN, XSF) +MLJ = (VRJ, DLC) +MFB = (LHV, TQC) +QPQ = (KFB, VHB) +DCM = (CDV, BCH) +NRM = (SJL, VDX) +JNC = (CTC, CGS) +XQT = (TXT, NJF) +FLR = (NMH, SQL) +BQS = (DDK, LML) +BTC = (FVH, CXN) +QHM = (KRL, JNR) +RFT = (HLV, NMQ) +KLR = (FFV, MXB) +SHC = (MQM, JFF) +LNK = (VMG, SCG) +QCG = (VXM, XSH) +VMG = (DNX, BDL) \ No newline at end of file diff --git a/resources/2023/day8dory.txt b/resources/2023/day8dory.txt new file mode 100644 index 0000000..fce7d9e --- /dev/null +++ b/resources/2023/day8dory.txt @@ -0,0 +1,15 @@ +LR + +mmA = (mmb, xxx) +mmb = (xxx, mmZ) +mmZ = (mmb, xxx) +nnA = (nnb, xxx) +nnb = (nnc, nnc) +nnc = (nnZ, nnZ) +nnZ = (nnb, nnb) +ooA = (ooZ, oob) +oob = (ood, ooc) +ooc = (ooA, oox) +ood = (ooZ, ood) +ooZ = (oob, ooZ) +xxx = (xxx, xxx) diff --git a/resources/2023/day8lucy.txt b/resources/2023/day8lucy.txt new file mode 100644 index 0000000..0214b99 --- /dev/null +++ b/resources/2023/day8lucy.txt @@ -0,0 +1,732 @@ +LLLLLLLRRRLRRRLRLRLRLRRLLRRRLRLLRRRLLRRLRRLRRLRLRRLRLRRRLRRLRLRRRLRRLRRLRLRRLLRLLRLRRRLRRLRLLLLRRLLLLRLRLRLRRRLRLRLLLRLRRRLRRRLRRRLRLRRLRRRLRLLLRLLRRLRRRLRRLRRLRRLRLRRRLRLRLRLLRRRLRRRLRRLRRRLLLRRLRRLRRRLRLRRRLRRRLRLRRLRRRLRLRRLRLRRLRRRLRLRRLRLLRRRLLRLRRLRRRLLLRLRRLRRRR + +DGK = (KVQ, XHR) +KTC = (TVB, MTH) +CGR = (VVK, BKP) +LCG = (FQC, KHX) +PSZ = (FSF, QSM) +FBJ = (FHP, SPX) +KJD = (NRQ, VDH) +NCM = (JPJ, KNG) +TXH = (HNK, VHQ) +NND = (TRC, DFM) +JQN = (CNX, XLD) +RHB = (CDG, GBT) +JBN = (PXV, GVN) +DFC = (JRN, TXH) +TXG = (CHT, VBL) +XXQ = (JDC, JGV) +SVF = (FVD, LHQ) +FVK = (LCG, RNB) +XKT = (MPF, XJJ) +MHB = (JSJ, VQM) +FVC = (HXF, VVN) +JJR = (VNS, SLM) +RMT = (GDS, XHP) +CHT = (PXS, VLF) +SFJ = (XGC, LPM) +BJL = (XDN, VXN) +PQK = (NHS, DVB) +PDB = (JPQ, TVJ) +RGL = (DNN, NCN) +KRN = (SBL, PHL) +MTF = (PJL, KQR) +BTL = (CCF, LDP) +NLV = (CPM, HVL) +GCQ = (QMF, JVH) +KVH = (VKD, PQG) +RLB = (GSS, JVP) +QRB = (TNL, DKN) +JFV = (RDR, NSB) +BFC = (LGH, XLX) +HGQ = (SLM, VNS) +FQC = (VFQ, BXC) +DDS = (XHR, KVQ) +VQV = (SFT, BFQ) +XFD = (HVV, FLH) +TVP = (XQF, KSS) +GBH = (NPX, LDB) +KHL = (MGS, MMD) +NPX = (BJL, SFF) +VMG = (DHX, GVC) +RTJ = (XRF, BPK) +TLM = (NCG, QBB) +LXS = (TVB, MTH) +XNM = (QFL, KQK) +KQR = (QRD, JBN) +JQD = (DNN, NCN) +QCF = (MXL, MXL) +QMH = (NKG, SDJ) +NKK = (MCB, RLB) +MPJ = (BTL, JTF) +TLS = (VPJ, LMD) +XJB = (LML, TKZ) +HGF = (HBF, QHB) +KNJ = (QKM, XLR) +XCF = (QCJ, HTN) +HFS = (NKC, JFV) +QLS = (QBB, NCG) +QFL = (NXQ, QBN) +MTH = (FLN, LQR) +VND = (KMM, MQH) +NQQ = (VVH, NDL) +BTV = (QSM, FSF) +SLT = (NRQ, VDH) +NKG = (TBV, XCV) +SLM = (LBN, HPK) +CMQ = (KKS, VBH) +JTF = (LDP, CCF) +VFC = (GKH, KPS) +KCC = (JVM, MTF) +KFP = (MVX, NMX) +NQF = (QSK, KCC) +GGC = (VBV, TJR) +QQS = (NKK, NQC) +LXK = (FXC, QBC) +DVQ = (TFF, LKB) +PBL = (BGQ, FHQ) +KHV = (BVJ, XSD) +LDB = (SFF, BJL) +RJG = (LJB, CJM) +RCX = (QTB, PPL) +FLH = (HSX, KVX) +XTV = (HST, VCC) +GDC = (CMH, NCT) +RDP = (FKR, GHJ) +NXM = (PVV, KRX) +SCQ = (MFN, GRB) +MRT = (XGT, VLK) +DHJ = (XHP, GDS) +XFL = (TJK, QMH) +XQF = (CCQ, RPH) +CLV = (CKD, CCD) +CMT = (NCD, XDM) +NCT = (SXG, CLF) +JSS = (GMJ, LJC) +TLQ = (CRC, DXQ) +DMJ = (HHB, DRV) +JBH = (FVC, HDX) +QXK = (QSB, JBH) +DQN = (QMD, GDN) +SDH = (PRH, BCX) +QSB = (HDX, FVC) +MTP = (VVG, SPN) +CTM = (MFG, GGJ) +HND = (MNV, TXG) +MJS = (DMJ, QQG) +JNL = (LKB, TFF) +QLL = (FKM, HNH) +PNM = (PQR, NRL) +VSF = (LPM, XGC) +QBC = (QQS, MVF) +BFM = (FBP, BQJ) +KNG = (RTJ, CXN) +VFQ = (HFS, LBS) +LKB = (QVB, TXF) +KQD = (CDJ, CDJ) +ZZZ = (DHJ, RMT) +XKX = (HVP, NJF) +GSL = (QMS, DHM) +PNT = (CDJ, GJZ) +KBN = (CMQ, JBG) +DNX = (SFM, GFJ) +NMX = (XRR, LKL) +VPJ = (PSK, GQL) +XQD = (QCF, QCF) +HRM = (RHB, XXJ) +LCL = (MRT, FMB) +DRG = (RNB, LCG) +BKP = (QLL, MMQ) +FSF = (SLR, XGV) +KHX = (BXC, VFQ) +SXG = (NHL, KGK) +MJD = (TDH, RFP) +NRL = (CSG, MPT) +FBP = (QGC, GXH) +HDT = (LHQ, FVD) +BMP = (RMG, JXM) +NCN = (SLT, KJD) +NXQ = (JPP, QQL) +NGV = (HNJ, VVQ) +NPN = (MXL, NJK) +FVD = (XBQ, NKF) +GQM = (QCG, GGC) +QBP = (XML, HND) +VQT = (BTL, JTF) +HKP = (CMH, NCT) +JHP = (NDL, VVH) +FRL = (SHD, FNH) +FLN = (NVL, HGF) +MXH = (QSD, KKR) +BGL = (XCX, RFC) +RSQ = (MKH, TLS) +VML = (RJM, CXK) +XHP = (MJS, DNP) +GRV = (XRN, TVQ) +GKH = (BCF, VSD) +SPH = (MVX, NMX) +TLD = (LFR, GFQ) +LML = (QKS, NND) +PKT = (VXC, CMF) +LLQ = (THT, GRV) +CKD = (SPB, QDV) +KRM = (JQV, JNG) +RNS = (HJJ, MLV) +FKR = (FKK, BHN) +XNH = (SCQ, KLF) +GDN = (LBL, FHT) +CRB = (NHQ, QRB) +JKQ = (DPT, KBN) +NJF = (RJG, NGF) +NRT = (NSK, CSL) +LJR = (VTT, HCQ) +HLK = (DFC, DPV) +PQR = (MPT, CSG) +DNF = (NJF, HVP) +MPV = (HJD, XSF) +TBV = (XTJ, SVH) +LKX = (XFJ, HBM) +KTP = (CGR, RVR) +HVL = (BJH, QXK) +GJD = (XJJ, MPF) +HLC = (VVQ, HNJ) +JTX = (NCD, XDM) +CSG = (MFF, RKT) +PCH = (PGJ, GQM) +SFF = (VXN, XDN) +TCF = (KNG, JPJ) +LDP = (XFD, SBS) +XCR = (GJD, XKT) +QBM = (GFB, LRH) +CLP = (RJM, CXK) +MTT = (HST, VCC) +TQL = (BPM, GGT) +LFR = (HNF, RDP) +JHN = (CMT, JTX) +XCX = (CHG, CHG) +XGT = (HLK, QJF) +TQS = (TKL, MNF) +KFL = (HGQ, JJR) +LHQ = (XBQ, NKF) +CCQ = (DBP, HHC) +TKL = (VDN, PBP) +LBX = (BXM, SDH) +XLX = (NGJ, LHJ) +GVN = (BPG, TNK) +CCX = (HCQ, VTT) +KQK = (QBN, NXQ) +NQC = (MCB, RLB) +MPF = (DFT, SBG) +BNH = (MLV, HJJ) +CJM = (LBH, TNM) +CND = (VKB, PGQ) +HXM = (GMJ, LJC) +TKZ = (NND, QKS) +RKT = (LNQ, KFL) +GXH = (RQP, LBX) +TFF = (QVB, TXF) +LNK = (FDC, MXH) +KPK = (BNH, RNS) +QQG = (HHB, DRV) +MFP = (PQK, NBF) +VVK = (QLL, MMQ) +GFB = (RHN, LCN) +PPD = (QCJ, HTN) +FXV = (BPM, GGT) +KSS = (CCQ, RPH) +KCM = (LTB, PCH) +RHN = (FXV, TQL) +LFV = (DDJ, NQF) +JKG = (BGQ, FHQ) +MBS = (RQJ, LDQ) +HHC = (NGV, HLC) +CCD = (QDV, SPB) +RFM = (FTB, HSB) +QCG = (VBV, TJR) +GRH = (LXK, LGQ) +CDJ = (QQJ, BFC) +THT = (TVQ, XRN) +QRD = (PXV, GVN) +VHQ = (SXV, GJL) +MLV = (VRM, MCP) +XRR = (CLV, PBJ) +NMS = (DGK, DDS) +JPS = (JKT, KHL) +DJJ = (QMS, DHM) +MFG = (TLQ, VQD) +GPQ = (SHL, BNR) +QVB = (GDC, HKP) +LNN = (CMF, VXC) +VBQ = (LNN, PKT) +MMS = (SVV, HRM) +BGJ = (HXM, JSS) +QCK = (JSJ, VQM) +PKB = (XNH, JQH) +BCF = (TQR, TLL) +JRN = (VHQ, HNK) +SHL = (DMK, JBX) +LRG = (NSK, CSL) +NJV = (FJH, TXC) +GHQ = (FSB, HFX) +LHN = (TLS, MKH) +HBF = (BMP, GLM) +DTP = (DVQ, JNL) +FXR = (FTB, HSB) +PDS = (XLD, CNX) +SXV = (CPC, JNF) +QMF = (GGF, JDP) +JVP = (GPC, DNX) +RMG = (HRF, PKB) +LRH = (LCN, RHN) +HVP = (RJG, NGF) +TRC = (VKX, RQL) +PJL = (QRD, JBN) +HNK = (GJL, SXV) +CHM = (NBF, PQK) +PGH = (KMM, MQH) +SDN = (MFP, CHM) +DMK = (VRP, NNX) +MRR = (NGK, SMQ) +QDV = (NDM, JPT) +PGJ = (QCG, GGC) +BVJ = (NLV, HBR) +PGQ = (BGK, GBH) +LKL = (CLV, PBJ) +FDC = (KKR, QSD) +JDP = (PDB, PTX) +NJJ = (HSJ, GRH) +TVJ = (HDT, SVF) +NJK = (RBV, ZZZ) +HHN = (DPP, TLD) +QMS = (BLS, TQS) +QVR = (CVB, BNJ) +FFQ = (RMJ, HGZ) +LGQ = (QBC, FXC) +JPP = (RSG, KTG) +DPV = (TXH, JRN) +HBR = (CPM, HVL) +NSK = (JQN, PDS) +SBS = (HVV, FLH) +BFQ = (VBQ, JPB) +LBN = (LXJ, CCR) +RBD = (KRM, PNX) +NQX = (LML, LML) +XSA = (QKS, NND) +NDB = (HFX, FSB) +QMD = (LBL, FHT) +XTJ = (JDT, JDT) +GLH = (SHL, BNR) +FXC = (MVF, QQS) +HSX = (NFN, LVG) +JNF = (JJH, FNR) +CXK = (SPC, TVP) +GGF = (PDB, PTX) +XBQ = (QNX, JCQ) +LJC = (SFJ, VSF) +MMD = (XLK, CND) +HFG = (JKT, KHL) +NHQ = (TNL, DKN) +JVM = (KQR, PJL) +CGH = (RTC, VFC) +HNF = (GHJ, FKR) +TMF = (NMS, GJH) +NGJ = (NXM, BDB) +MRM = (JKQ, MPS) +QTC = (JSS, HXM) +TNM = (JFF, QXR) +DHK = (LJR, CCX) +XSB = (MRR, CXC) +XRN = (XDP, QBP) +XCV = (XTJ, SVH) +VVA = (QSM, FSF) +NKC = (RDR, NSB) +MXL = (RBV, RBV) +PTX = (TVJ, JPQ) +VRL = (NQX, XJB) +RQK = (MPS, JKQ) +PBJ = (CKD, CCD) +VRP = (DQN, QLC) +KLF = (MFN, GRB) +XXJ = (GBT, CDG) +HST = (QHV, MMS) +SFT = (JPB, VBQ) +NRR = (LCL, MQR) +CSL = (JQN, PDS) +LHJ = (BDB, NXM) +TXK = (DHK, KLC) +CDK = (XCX, XCX) +FHT = (NGQ, JHN) +QQJ = (LGH, XLX) +BQJ = (GXH, QGC) +TTA = (QKM, XLR) +TVB = (FLN, LQR) +PPL = (FRL, NCX) +SPS = (XFJ, HBM) +SVH = (JDT, VRL) +QBB = (PXG, MTP) +JSJ = (VVB, NRR) +KKS = (RGL, JQD) +JDT = (NQX, NQX) +GKQ = (LLT, JRH) +VVH = (BPT, KRN) +JCQ = (CRB, PBS) +QXR = (BTV, PSZ) +VQR = (RCX, KKP) +QSM = (SLR, XGV) +JKD = (JDC, JGV) +XLD = (LFS, QVR) +TJK = (NKG, SDJ) +PVV = (HDK, VQV) +BDB = (PVV, KRX) +MPS = (KBN, DPT) +FHP = (PPD, XCF) +HTN = (KCM, PXC) +GHJ = (BHN, FKK) +JCC = (LQM, KVH) +LQR = (HGF, NVL) +LGM = (DDJ, NQF) +NJN = (QCF, NPN) +PRH = (DFF, DFF) +XDM = (FBJ, PJM) +HFN = (KRS, XSB) +GLM = (JXM, RMG) +RQP = (BXM, SDH) +BPG = (QJT, KTP) +JPB = (LNN, PKT) +DKN = (CJD, BGR) +CDG = (GSL, DJJ) +XDN = (CGM, VMG) +NQP = (SKT, JCC) +DNP = (QQG, DMJ) +NNX = (DQN, QLC) +FTB = (JFL, VJJ) +FHQ = (SMJ, XFK) +GGT = (KPK, LNT) +NGF = (LJB, CJM) +QFX = (KCN, TMF) +NKF = (JCQ, QNX) +DBP = (NGV, HLC) +RBV = (RMT, DHJ) +NML = (MBV, VCG) +KXJ = (MXH, FDC) +GFQ = (RDP, HNF) +SHD = (CMG, CTM) +GTX = (LNK, KXJ) +HXF = (KTC, LXS) +CMM = (NQP, SBR) +SDJ = (TBV, XCV) +CHG = (RMJ, RMJ) +DPT = (CMQ, JBG) +BGR = (RLM, NML) +THM = (XQD, NJN) +HJJ = (MCP, VRM) +NRQ = (JHR, GCQ) +KKR = (HSN, NJJ) +KVX = (LVG, NFN) +LTT = (TLD, DPP) +NVL = (QHB, HBF) +CXN = (XRF, BPK) +KLC = (CCX, LJR) +JDC = (DNF, XKX) +MGS = (XLK, CND) +RLM = (VCG, MBV) +VDN = (NMQ, TPR) +HSB = (JFL, VJJ) +HDS = (KLC, DHK) +XSD = (NLV, HBR) +HJD = (NJQ, PBQ) +CGM = (DHX, GVC) +LDQ = (PBL, JKG) +RDR = (XHQ, MGQ) +GPC = (GFJ, SFM) +NQT = (KRS, XSB) +TDH = (RBD, XLP) +QJF = (DFC, DPV) +VNS = (HPK, LBN) +QSD = (NJJ, HSN) +JHR = (QMF, JVH) +SMQ = (FXR, RFM) +CMG = (MFG, GGJ) +NKQ = (VFC, RTC) +VXC = (LHN, RSQ) +DHX = (LCT, XNM) +TCX = (NQT, HFN) +DRV = (TFN, QBM) +JPT = (GQX, XCR) +HRF = (JQH, XNH) +MCS = (BGJ, QTC) +PQG = (NCM, TCF) +XHR = (PJK, VPN) +MLX = (PGH, VND) +MKH = (VPJ, LMD) +TJR = (VQT, MPJ) +VLF = (GLG, QFX) +JNG = (KLR, MPV) +HDK = (BFQ, SFT) +HFX = (MLX, SPL) +BXC = (HFS, LBS) +CCT = (GTX, HPT) +VLK = (HLK, QJF) +NCD = (PJM, FBJ) +VGT = (JNL, DVQ) +LMD = (PSK, GQL) +KRX = (HDK, VQV) +QNX = (CRB, PBS) +NJQ = (GHQ, NDB) +TNV = (FBP, BQJ) +GNR = (XQD, NJN) +KKP = (QTB, PPL) +DBX = (KCQ, CPS) +VRM = (TLM, QLS) +LVG = (BRP, NJV) +NHL = (SPS, LKX) +MNV = (VBL, CHT) +PJK = (HHN, LTT) +VBH = (JQD, RGL) +GRB = (NKQ, CGH) +SKT = (KVH, LQM) +TPR = (RXR, KHV) +VVB = (LCL, MQR) +VKX = (MRM, RQK) +LTB = (PGJ, GQM) +QCJ = (KCM, PXC) +BGQ = (SMJ, SMJ) +RCV = (NQQ, JHP) +DHM = (TQS, BLS) +KRS = (CXC, MRR) +JFL = (BLT, PNM) +TXC = (NRT, LRG) +MVX = (LKL, XRR) +QSK = (JVM, MTF) +BGK = (LDB, NPX) +GJZ = (BFC, QQJ) +PXC = (LTB, PCH) +HMQ = (BGJ, QTC) +RXR = (BVJ, XSD) +BXM = (PRH, BCX) +FJH = (LRG, NRT) +GJH = (DGK, DDS) +BPT = (SBL, PHL) +RQL = (RQK, MRM) +SJB = (RQJ, LDQ) +NFN = (NJV, BRP) +MND = (NQQ, JHP) +NMQ = (KHV, RXR) +XGV = (TXK, HDS) +SPC = (KSS, XQF) +RMJ = (SMR, QRS) +CNX = (LFS, QVR) +KLR = (HJD, XSF) +XLP = (KRM, PNX) +LPM = (CMM, PHF) +FNR = (CCT, VTP) +NGQ = (CMT, JTX) +CCR = (BFM, TNV) +LCN = (FXV, TQL) +HVV = (HSX, KVX) +FSB = (MLX, SPL) +GGJ = (TLQ, VQD) +NHS = (DRG, FVK) +RQJ = (PBL, JKG) +VCC = (MMS, QHV) +HDX = (VVN, HXF) +VQM = (NRR, VVB) +TFN = (GFB, LRH) +QRS = (VQR, MDS) +HBM = (VTQ, SDN) +CCF = (SBS, XFD) +VCG = (HMQ, MCS) +NBF = (DVB, NHS) +DVB = (FVK, DRG) +PGB = (TDH, RFP) +XRF = (KFP, SPH) +KMM = (PDJ, GQN) +KTG = (GGQ, HNR) +BJH = (JBH, QSB) +JJH = (CCT, VTP) +LBH = (JFF, JFF) +GLG = (TMF, KCN) +TQR = (THM, GNR) +MQH = (GQN, PDJ) +MQR = (FMB, MRT) +FNH = (CTM, CMG) +SMR = (VQR, MDS) +GDS = (DNP, MJS) +LCT = (KQK, QFL) +VKB = (GBH, BGK) +VTQ = (CHM, MFP) +TNK = (QJT, KTP) +HNJ = (VVS, GCX) +JKT = (MMD, MGS) +PBP = (TPR, NMQ) +CPS = (KNJ, RFZ) +RNB = (KHX, FQC) +CMF = (LHN, RSQ) +HPK = (CCR, LXJ) +MFN = (NKQ, CGH) +HHB = (QBM, TFN) +DDJ = (QSK, KCC) +DFM = (RQL, VKX) +FKM = (GKQ, VJG) +HSJ = (LGQ, LXK) +HPT = (KXJ, LNK) +BNR = (JBX, DMK) +GJL = (CPC, JNF) +DFF = (KCQ, KCQ) +MCB = (GSS, JVP) +CPC = (JJH, FNR) +XLR = (MJK, DSM) +SBG = (JDG, XFL) +XSF = (NJQ, PBQ) +NGK = (RFM, FXR) +HSN = (GRH, HSJ) +LQM = (PQG, VKD) +VXN = (VMG, CGM) +PSK = (VGT, DTP) +JQH = (KLF, SCQ) +RJM = (SPC, TVP) +VSD = (TLL, TQR) +KCN = (GJH, NMS) +QHB = (GLM, BMP) +FMB = (VLK, XGT) +GBT = (DJJ, GSL) +LGH = (NGJ, LHJ) +SLR = (HDS, TXK) +VVQ = (GCX, VVS) +MDS = (RCX, KKP) +KVQ = (VPN, PJK) +CLF = (NHL, KGK) +XFK = (KQD, PNT) +CJD = (NML, RLM) +MCP = (TLM, QLS) +SPL = (PGH, VND) +GSS = (GPC, DNX) +RPH = (DBP, HHC) +HNR = (XXQ, JKD) +VBV = (VQT, MPJ) +PHF = (NQP, SBR) +BRP = (FJH, TXC) +AAA = (RMT, DHJ) +PBQ = (GHQ, NDB) +PXG = (VVG, SPN) +PNX = (JQV, JNG) +XHQ = (SJB, MBS) +VBL = (VLF, PXS) +VVG = (MTT, XTV) +PXS = (GLG, QFX) +MMQ = (FKM, HNH) +PHG = (HFN, NQT) +MFF = (KFL, LNQ) +PJM = (FHP, SPX) +SMJ = (KQD, KQD) +XGC = (CMM, PHF) +PDJ = (QCK, MHB) +SPN = (MTT, XTV) +BPK = (KFP, SPH) +MVF = (NQC, NKK) +LJB = (LBH, LBH) +GQN = (QCK, MHB) +NCG = (MTP, PXG) +GQL = (VGT, DTP) +NCX = (FNH, SHD) +HGZ = (QRS, SMR) +GMJ = (VSF, SFJ) +RFP = (XLP, RBD) +TXF = (GDC, HKP) +NBA = (SMR, QRS) +QTB = (FRL, NCX) +QLC = (GDN, QMD) +QHV = (SVV, HRM) +XTM = (GRV, THT) +VPN = (HHN, LTT) +RFZ = (XLR, QKM) +CMH = (SXG, CLF) +GFJ = (TCX, PHG) +VTT = (LGM, LFV) +RTC = (GKH, KPS) +XFJ = (VTQ, SDN) +GCX = (PGB, MJD) +MJK = (CLP, VML) +QQL = (RSG, KTG) +NSB = (XHQ, MGQ) +HCQ = (LGM, LFV) +GQX = (GJD, XKT) +RVR = (VVK, BKP) +JBG = (KKS, VBH) +JFF = (BTV, BTV) +BPM = (LNT, KPK) +LNQ = (JJR, HGQ) +FKK = (GLH, GPQ) +SBL = (CDK, BGL) +LNT = (BNH, RNS) +JRH = (JPS, HFG) +VVS = (MJD, PGB) +DPP = (LFR, GFQ) +MNF = (PBP, VDN) +QKM = (DSM, MJK) +JPJ = (CXN, RTJ) +QGC = (RQP, LBX) +CVB = (MND, RCV) +RFC = (CHG, FFQ) +KPS = (BCF, VSD) +XML = (MNV, TXG) +JVH = (JDP, GGF) +CRC = (XTM, LLQ) +VJG = (JRH, LLT) +SPB = (JPT, NDM) +JGV = (XKX, DNF) +GGQ = (XXQ, JKD) +XLK = (PGQ, VKB) +JBX = (NNX, VRP) +RSG = (HNR, GGQ) +GVC = (LCT, XNM) +XDP = (XML, HND) +CXC = (SMQ, NGK) +PXV = (TNK, BPG) +NDM = (XCR, GQX) +CPM = (BJH, QXK) +KGK = (LKX, SPS) +BLT = (NRL, PQR) +BHN = (GLH, GPQ) +BLS = (TKL, MNF) +PHL = (CDK, BGL) +BCX = (DFF, DBX) +HNH = (GKQ, VJG) +VKD = (NCM, TCF) +DSM = (VML, CLP) +DNN = (SLT, KJD) +SBR = (SKT, JCC) +TNL = (BGR, CJD) +DFT = (XFL, JDG) +MPT = (RKT, MFF) +TVQ = (XDP, QBP) +LLT = (JPS, HFG) +DXQ = (XTM, LLQ) +SFM = (PHG, TCX) +BNJ = (MND, RCV) +PBS = (NHQ, QRB) +JXM = (HRF, PKB) +VTP = (HPT, GTX) +SVV = (XXJ, RHB) +MHA = (QQJ, BFC) +MBV = (HMQ, MCS) +VJJ = (BLT, PNM) +QJT = (RVR, CGR) +VVN = (LXS, KTC) +QKS = (TRC, DFM) +MGQ = (MBS, SJB) +NDL = (BPT, KRN) +JPQ = (SVF, HDT) +VDH = (JHR, GCQ) +KCQ = (KNJ, KNJ) +XJJ = (DFT, SBG) +JQV = (MPV, KLR) +VQD = (DXQ, CRC) +JDG = (TJK, QMH) +SPX = (XCF, PPD) +LXJ = (TNV, BFM) +LBL = (NGQ, JHN) +QBN = (QQL, JPP) +LFS = (CVB, BNJ) +LBS = (JFV, NKC) +TLL = (THM, GNR) \ No newline at end of file diff --git a/resources/2023/day8sample.txt b/resources/2023/day8sample.txt new file mode 100644 index 0000000..d007857 --- /dev/null +++ b/resources/2023/day8sample.txt @@ -0,0 +1,8 @@ +LLLR + +AAA = (AAA, BBB) +BBB = (BBB, CCC) +CCC = (CCC, ZZZ) +ZZZ = (AAA, AFM) + + diff --git a/resources/2023/day8sample2.txt b/resources/2023/day8sample2.txt new file mode 100644 index 0000000..54f7de4 --- /dev/null +++ b/resources/2023/day8sample2.txt @@ -0,0 +1,20 @@ +LR + +11A = (11B, XXX) +11B = (XXX, 11Z) +11Z = (11B, XXX) +22A = (22B, XXX) +22B = (22C, 22C) +22C = (22Z, 22Z) +22Z = (22B, 22B) +XXX = (XXX, XXX) +33A = (33Z, XXX) +33Z = (XXX, 33A) +44A = (44B, XXX) +44B = (XXX, 44C) +44C = (44Z, XXX) +44Z = (XXX, 44C) +55A = (55B, XXX) +55B = (XXX, 55Z) +55Z = (55C, XXX) +55C = (XXX, 55Z) \ No newline at end of file diff --git a/resources/2023/day9.txt b/resources/2023/day9.txt new file mode 100644 index 0000000..95559b0 --- /dev/null +++ b/resources/2023/day9.txt @@ -0,0 +1,200 @@ +28 38 58 115 255 558 1167 2343 4564 8699 16328 30378 56447 105549 199601 381868 735876 1418100 2712150 5115341 9472583 +24 34 56 103 191 343 593 990 1602 2520 3862 5777 8449 12101 16999 23456 31836 42558 56100 73003 93875 +12 30 66 118 187 291 486 901 1807 3760 7885 16402 33536 67001 130303 246169 451478 804146 1392500 2347766 3860393 +11 7 -1 -10 4 101 392 1052 2337 4631 8595 15584 28661 54781 109041 222274 453659 910327 1775963 3349730 6094694 +13 26 56 110 200 360 677 1347 2785 5847 12267 25493 52275 105732 211455 420013 833076 1658291 3323777 6713131 13636877 +24 36 50 68 92 124 166 220 288 372 474 596 740 908 1102 1324 1576 1860 2178 2532 2924 +4 10 18 35 81 207 523 1232 2664 5299 9766 16819 27345 42607 65306 103013 177906 352348 792280 1916515 4732055 +2 4 15 46 115 246 479 915 1841 4022 9326 21995 51143 115539 252570 534754 1099830 2205374 4328183 8346246 15873877 +6 16 41 104 240 508 1016 1959 3670 6684 11815 20246 33632 54216 84958 129677 193206 281560 402117 563812 777344 +10 24 59 127 240 410 649 969 1382 1900 2535 3299 4204 5262 6485 7885 9474 11264 13267 15495 17960 +1 3 19 65 161 334 621 1072 1753 2749 4167 6139 8825 12416 17137 23250 31057 40903 53179 68325 86833 +1 3 14 46 118 256 493 869 1431 2233 3336 4808 6724 9166 12223 15991 20573 26079 32626 40338 49346 +5 20 54 111 200 339 551 863 1338 2203 4189 9270 22068 52271 118490 254073 515553 994838 1837662 3275301 5689494 +11 19 37 74 152 315 630 1176 2019 3189 4728 6991 11599 23863 58350 151043 385257 945993 2232085 5082986 11226568 +-6 -5 -1 6 16 29 45 64 86 111 139 170 204 241 281 324 370 419 471 526 584 +19 44 79 123 175 234 299 369 443 520 599 679 759 838 915 989 1059 1124 1183 1235 1279 +20 26 41 76 144 261 459 824 1572 3189 6707 14297 30581 65483 140200 299218 633600 1324592 2722729 5487182 10824554 +2 13 49 134 316 686 1400 2714 5060 9211 16601 29879 53781 96407 171038 298877 513930 873445 1482345 2550372 4520094 +7 22 55 116 218 381 645 1090 1862 3209 5540 9533 16335 27918 47680 81409 138761 235440 396309 659706 1083288 +23 34 43 54 73 105 151 202 234 223 220 555 2284 8074 23894 62315 149406 340397 757350 1681105 3771572 +-2 9 31 72 157 346 769 1701 3724 8065 17266 36441 75513 153008 302220 580858 1085650 1973817 3493849 6028622 10154597 +17 35 83 175 326 554 878 1305 1800 2233 2292 1349 -1702 -8485 -20570 -37084 -47977 -18173 145725 659887 1980386 +6 19 49 119 273 598 1257 2530 4856 8858 15310 24963 38082 53479 66865 68818 44405 -18660 -94790 -14282 809438 +17 21 22 20 15 7 -4 -18 -35 -55 -78 -104 -133 -165 -200 -238 -279 -323 -370 -420 -473 +8 23 59 139 312 672 1383 2710 5056 9005 15371 25253 40096 61758 92583 135480 194008 272467 375995 510671 683624 +9 16 34 63 103 154 216 289 373 468 574 691 819 958 1108 1269 1441 1624 1818 2023 2239 +8 19 59 140 275 481 794 1315 2308 4381 8817 18206 37692 77458 157694 318613 640892 1287715 2591041 5226414 10560561 +8 21 37 57 82 107 117 88 -4 -163 -339 -377 54 1555 5117 12270 25264 47285 82709 137397 219034 +22 34 44 52 58 62 64 64 62 58 52 44 34 22 8 -8 -26 -46 -68 -92 -118 +28 57 114 220 416 779 1446 2651 4785 8494 14832 25483 43057 71450 116238 185052 287858 437047 647230 934638 1316054 +16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 +28 39 48 62 97 180 347 630 1022 1413 1518 905 -557 -1064 7553 50137 189888 570667 1494764 3559032 7883557 +5 0 3 30 106 262 542 1035 1947 3728 7269 14184 27192 50614 91000 157901 264801 430224 679031 1043922 1567158 +4 21 55 119 239 461 864 1591 2913 5356 9967 18894 36631 72557 145803 294037 588486 1158435 2229571 4181885 7634411 +8 11 15 33 81 182 384 805 1728 3777 8206 17321 35023 67400 123199 213865 352632 551879 817609 1139457 1474069 +6 15 30 69 162 358 754 1560 3223 6658 13679 27799 55705 109973 214073 411584 783020 1476065 2758724 5110417 9373988 +18 26 37 54 84 138 231 382 614 954 1433 2086 2952 4074 5499 7278 9466 12122 15309 19094 23548 +3 -2 -7 -12 -17 -22 -27 -32 -37 -42 -47 -52 -57 -62 -67 -72 -77 -82 -87 -92 -97 +16 32 61 121 242 466 847 1451 2356 3652 5441 7837 10966 14966 19987 26191 33752 42856 53701 66497 81466 +13 35 79 160 302 554 1015 1865 3399 6061 10475 17470 28096 43628 65555 95551 135425 187047 252247 332684 429682 +13 6 -9 -20 11 156 538 1364 2981 5967 11279 20495 36207 62647 106658 179157 297277 487420 789503 1262734 1993315 +14 11 18 51 141 348 790 1714 3660 7803 16602 34939 71995 144184 279550 524126 950858 1671811 2854498 4743307 7687145 +2 7 22 56 123 242 437 737 1176 1793 2632 3742 5177 6996 9263 12047 15422 19467 24266 29908 36487 +19 34 68 128 220 349 519 733 993 1300 1654 2054 2498 2983 3505 4059 4639 5238 5848 6460 7064 +21 48 85 132 195 292 468 836 1684 3739 8772 20876 48964 111327 243473 510946 1029407 1994954 3728471 6738732 11810049 +11 27 55 108 210 394 696 1143 1733 2405 2997 3190 2436 -132 -5810 -16455 -34641 -63841 -108637 -174960 -270362 +12 12 12 25 90 292 791 1869 4012 8064 15537 29266 54829 103647 199701 393835 793523 1623291 3344337 6885726 14081159 +5 13 31 72 164 358 736 1410 2499 4070 6039 8076 9700 11088 15835 38309 120943 371965 1044017 2693426 6497234 +-1 -4 4 46 162 411 867 1607 2698 4206 6273 9338 14615 24985 46510 90835 178809 345728 648682 1176574 2063472 +8 16 23 40 92 216 455 847 1408 2108 2839 3374 3316 2036 -1401 -8323 -20552 -40520 -71401 -117260 -183220 +27 54 93 143 215 340 581 1059 2009 3892 7603 14833 28665 54510 101519 184641 327535 566586 956321 1576571 2541779 +18 25 37 63 114 201 333 515 746 1017 1309 1591 1818 1929 1845 1467 674 -679 -2763 -5777 -9950 +11 23 58 131 266 508 956 1834 3618 7240 14408 28142 53779 101035 188408 352630 668776 1292502 2547568 5104551 10339633 +20 30 55 112 230 464 919 1792 3444 6514 12092 22012 39486 70717 129039 244932 488666 1018738 2181538 4711697 10130222 +8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148 +8 17 18 5 -32 -110 -256 -510 -928 -1585 -2578 -4029 -6088 -8936 -12788 -17896 -24552 -33091 -43894 -57391 -74064 +0 6 28 73 155 304 573 1043 1826 3066 4938 7645 11413 16484 23107 31527 41972 54638 69672 87153 107071 +8 14 26 39 49 61 112 320 974 2687 6657 15139 32341 66134 131237 254984 487637 921079 1723959 3210704 5981290 +-3 6 32 88 209 468 1005 2092 4276 8669 17497 35106 69812 137381 267702 517614 995199 1904592 3626038 6854228 12829699 +16 14 18 32 52 64 53 40 180 979 3722 11247 29252 68383 147421 297965 571096 1046604 1845466 3146378 5207268 +0 19 60 146 330 708 1432 2721 4864 8205 13096 19800 28322 38142 47820 54439 52848 34663 -13020 -109250 -281238 +19 37 70 119 185 269 372 495 639 805 994 1207 1445 1709 2000 2319 2667 3045 3454 3895 4369 +8 18 30 51 92 174 350 764 1787 4310 10347 24225 54843 119816 252855 516572 1024178 1975442 3715028 6825207 12270294 +9 31 64 108 163 229 306 394 493 603 724 856 999 1153 1318 1494 1681 1879 2088 2308 2539 +27 36 46 65 110 223 504 1178 2725 6116 13214 27417 54640 104755 193632 345950 598975 1007532 1650430 2638633 4125506 +-3 -9 -19 -25 -9 63 252 660 1449 2882 5441 10155 19412 38768 80661 171586 365345 766697 1572457 3141343 6110353 +9 13 16 19 30 81 256 730 1819 4041 8188 15409 27304 46029 74412 116080 175597 258613 372024 524143 724882 +8 17 26 35 44 53 62 71 80 89 98 107 116 125 134 143 152 161 170 179 188 +13 29 69 150 300 564 1014 1770 3055 5340 9688 18482 36824 75023 152753 305660 595433 1124631 2057879 3651414 6293380 +19 39 64 101 169 299 534 929 1551 2479 3804 5629 8069 11251 15314 20409 26699 34359 43576 54549 67489 +26 48 79 119 168 226 293 369 454 548 651 763 884 1014 1153 1301 1458 1624 1799 1983 2176 +16 28 45 62 80 120 240 563 1330 3003 6482 13603 28310 59352 126262 272164 590489 1279633 2753130 5858989 12311553 +16 27 38 49 60 71 82 93 104 115 126 137 148 159 170 181 192 203 214 225 236 +16 26 52 107 212 412 806 1601 3204 6384 12578 24502 47411 91748 178785 352718 706597 1437520 2962583 6158201 12843931 +15 23 44 100 234 527 1138 2396 4995 10379 21457 43857 88008 172421 328611 608145 1092295 1904695 3227218 5318970 8537806 +19 35 67 125 219 359 555 817 1155 1579 2099 2725 3467 4335 5339 6489 7795 9267 10915 12749 14779 +14 9 -2 -25 -60 -96 -107 -38 250 1146 3714 10678 28555 72047 172745 395881 871826 1854119 3824278 7677249 15042442 +0 14 48 119 263 559 1175 2446 5004 10002 19512 37235 69743 128583 233715 418934 740144 1287614 2203656 3707527 6129775 +-6 -13 -11 9 54 127 233 409 798 1797 4331 10342 23629 51210 105348 206191 384454 682459 1149765 1826027 2697892 +14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 +9 15 23 41 93 228 528 1127 2265 4422 8622 17094 34685 71869 151157 320706 682873 1452897 3076233 6455943 13379245 +26 38 54 85 154 309 648 1354 2736 5284 9786 17637 31605 57512 107535 206117 399770 772302 1467138 2718337 4891512 +7 2 -4 -11 -19 -28 -38 -49 -61 -74 -88 -103 -119 -136 -154 -173 -193 -214 -236 -259 -283 +17 40 72 120 202 355 665 1340 2867 6327 14000 30508 64985 135242 275772 552897 1092529 2128842 4085140 7700052 14210216 +-3 -4 -7 -12 -19 -28 -39 -52 -67 -84 -103 -124 -147 -172 -199 -228 -259 -292 -327 -364 -403 +9 21 38 62 99 161 268 450 749 1221 1938 2990 4487 6561 9368 13090 17937 24149 31998 41790 53867 +2 9 39 99 204 393 760 1519 3132 6545 13600 27720 54996 105835 197349 356668 625334 1064865 1763453 2843561 4469892 +20 33 49 75 125 228 457 1004 2337 5480 12453 26893 54846 105671 192927 335020 555266 880875 1340177 1957191 2742379 +18 21 16 6 5 57 270 860 2190 4774 9202 15936 24945 35235 44593 50493 54394 73951 171296 510662 1464845 +10 11 18 38 71 100 71 -142 -790 -2316 -5409 -10945 -19511 -29701 -33227 -2480 138638 579164 1757487 4641596 11293649 +25 33 43 67 138 323 742 1611 3346 6797 13731 27756 55976 111792 219447 421300 789851 1449309 2618271 4700169 8479106 +27 42 62 88 120 169 286 615 1492 3635 8492 18826 39628 79522 153115 285551 522357 951296 1749478 3279940 6279276 +-1 11 47 125 280 574 1106 2022 3525 5885 9449 14651 22022 32200 45940 64124 87771 118047 156275 203945 262724 +13 21 51 115 225 393 631 951 1365 1885 2523 3291 4201 5265 6495 7903 9501 11301 13315 15555 18033 +20 35 53 83 140 245 425 713 1148 1775 2645 3815 5348 7313 9785 12845 16580 21083 26453 32795 40220 +10 26 63 132 248 429 694 1074 1663 2751 5098 10427 22235 47044 96239 188667 354200 638496 1109225 1864062 3040786 +6 -1 -9 -15 -17 -13 13 141 635 2188 6391 16606 39556 88146 186315 377108 735668 1389501 2549183 4553679 7935653 +9 15 43 117 265 514 885 1388 2017 2745 3519 4255 4833 5092 4825 3774 1625 -1997 -7533 -15495 -26471 +7 22 41 65 106 207 489 1245 3117 7431 16845 36609 76972 157632 315649 618971 1188707 2234572 4109585 7392185 13006510 +10 9 5 -1 3 51 224 700 1840 4321 9327 18809 35825 64971 112914 189038 306214 481705 738217 1105107 1619759 +12 16 30 69 148 282 486 775 1164 1668 2302 3081 4020 5134 6438 7947 9676 11640 13854 16333 19092 +1 0 10 42 98 172 270 462 979 2368 5718 12970 27324 53756 99658 175614 296325 481696 758098 1159818 1730710 +8 19 38 73 142 283 562 1079 1973 3430 5708 9217 14739 23954 40566 72513 136014 262573 510546 983505 1858428 +9 24 57 114 205 359 643 1184 2197 4026 7209 12582 21441 35785 58667 94684 150641 236428 366153 559578 843909 +8 14 22 32 44 58 74 92 112 134 158 184 212 242 274 308 344 382 422 464 508 +24 34 44 54 64 74 84 94 104 114 124 134 144 154 164 174 184 194 204 214 224 +16 30 63 126 233 405 686 1187 2184 4316 8979 19130 40965 87415 185254 389023 807192 1649322 3307839 6494862 12463897 +-7 -7 1 32 121 335 787 1666 3321 6479 12739 25563 52073 106047 212569 414805 783321 1428197 2513885 4276266 7040633 +-2 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 +13 27 38 41 36 48 177 688 2156 5707 13455 29337 60698 121182 235783 449463 842011 1554867 2842648 5177133 9461476 +15 42 93 182 326 549 884 1374 2086 3178 5119 9300 19562 45721 111199 268798 632393 1439844 3177921 6832092 14389654 +7 28 73 151 265 408 559 679 707 556 109 -785 -2315 -4712 -8253 -13265 -20129 -29284 -41231 -56537 -75839 +8 5 13 42 97 177 284 446 766 1532 3473 8340 20149 47680 109278 241921 518597 1082840 2220086 4508651 9140126 +17 27 40 71 149 317 632 1165 2001 3239 4992 7387 10565 14681 19904 26417 34417 44115 55736 69519 85717 +24 37 47 65 117 257 594 1347 2963 6367 13474 28217 58615 120994 248715 510261 1046343 2144574 4386122 8926186 18016274 +11 16 36 80 158 277 445 706 1254 2711 6703 16929 40991 93338 199774 404089 777493 1431666 2536382 4342822 7213860 +0 -2 8 48 141 321 657 1303 2580 5096 9915 18799 34571 61685 107144 181982 303624 499562 812938 1310810 2096097 +4 15 39 91 211 473 995 1967 3741 7078 13740 27774 58093 123376 261026 543285 1106377 2204300 4310572 8314176 15899538 +-7 6 36 87 163 272 446 788 1568 3411 7651 16966 36460 75419 150039 287505 531891 952452 1654990 2797097 4608209 +13 29 56 95 152 244 405 692 1191 2023 3350 5381 8378 12662 18619 26706 37457 51489 69508 92315 120812 +15 27 59 125 237 417 722 1283 2361 4428 8300 15415 28528 53504 103742 210470 445527 969865 2133765 4678765 10135083 +20 31 57 122 274 596 1223 2377 4439 8101 14695 26909 50338 96812 191434 387177 794467 1639641 3377468 6902112 13932807 +10 37 91 200 416 820 1528 2716 4696 8091 14175 25464 46666 86122 157896 284700 501870 862641 1445003 2360456 3765020 +6 24 54 95 153 251 440 812 1516 2778 4926 8421 13895 22197 34448 52106 77042 111628 158838 222363 306741 +9 24 49 84 125 162 193 281 693 2172 6405 16762 39393 84782 169869 320863 576881 994560 1653801 2664816 4176661 +3 10 23 57 149 386 945 2142 4499 8866 16685 30566 55492 101260 187366 352765 675303 1309938 2562335 5026719 9836291 +15 29 55 109 226 481 1024 2134 4299 8344 15672 28779 52397 95981 178896 340733 660899 1294259 2533505 4914517 9388784 +14 33 78 166 331 644 1248 2423 4711 9165 17861 34963 68917 136884 273538 548338 1099300 2198986 4383250 8701159 17195603 +7 5 5 7 11 17 25 35 47 61 77 95 115 137 161 187 215 245 277 311 347 +0 2 9 21 38 60 87 119 156 198 245 297 354 416 483 555 632 714 801 893 990 +8 11 29 79 200 478 1087 2365 4957 10076 19965 38689 73433 136495 248086 439830 758518 1269449 2059289 3241351 4974534 +9 26 71 154 282 459 686 961 1279 1632 2009 2396 2776 3129 3432 3659 3781 3766 3579 3182 2534 +-8 -9 -1 23 70 147 261 419 628 895 1227 1631 2114 2683 3345 4107 4976 5959 7063 8295 9662 +14 38 88 183 349 621 1047 1694 2656 4064 6098 9001 13095 18799 26649 37320 51650 70666 95612 127979 169537 +1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 +10 17 33 71 156 319 593 1016 1655 2681 4550 8393 16823 35591 76964 166498 356232 749489 1545759 3118955 6149158 +-2 5 20 55 147 378 896 1945 3924 7507 13868 25067 44665 78648 136752 234293 394618 652305 1057252 1679807 2617103 +-2 -3 -3 12 76 250 640 1443 3044 6202 12405 24581 48599 96524 193673 393656 809674 1677915 3482413 7194006 14714566 +-5 -2 2 11 40 131 388 1045 2594 6015 13162 27362 54272 103007 187497 327953 552225 896728 1406510 2133961 3135644 +-1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 +6 23 51 90 140 201 273 356 450 555 671 798 936 1085 1245 1416 1598 1791 1995 2210 2436 +22 44 78 135 237 421 758 1410 2772 5783 12540 27421 59046 123639 250801 493519 945638 1772306 3262446 5917591 10599023 +24 37 60 106 197 375 727 1435 2867 5730 11311 21837 40990 74618 131688 225532 375442 608675 962934 1489396 2256363 +12 20 49 112 222 392 635 964 1392 1932 2597 3400 4354 5472 6767 8252 9940 11844 13977 16352 18982 +2 7 24 61 126 227 372 569 826 1151 1552 2037 2614 3291 4076 4977 6002 7159 8456 9901 11502 +12 11 22 60 158 379 821 1618 2953 5122 8728 15159 27666 53731 110255 234858 510014 1112985 2415218 5172306 10872818 +17 24 49 120 294 677 1456 2952 5715 10719 19792 36560 68444 130715 254454 501802 994701 1968430 3870295 7539464 14530122 +25 40 65 122 253 535 1117 2293 4630 9184 17861 34010 63355 115342 204806 353380 588983 939636 1414390 1959381 2372399 +25 52 90 138 195 260 332 410 493 580 670 762 855 948 1040 1130 1217 1300 1378 1450 1515 +0 2 24 87 221 468 885 1547 2550 4014 6086 8943 12795 17888 24507 32979 43676 57018 73476 93575 117897 +19 32 61 117 214 369 603 947 1457 2242 3509 5629 9228 15307 25395 41739 67535 107204 166717 253973 379234 +23 32 38 44 60 103 197 373 669 1130 1808 2762 4058 5769 7975 10763 14227 18468 23594 29720 36968 +4 11 19 35 76 180 439 1069 2539 5797 12662 26510 53500 104832 201057 380617 717363 1357502 2598934 5062820 10063437 +10 19 23 14 -24 -121 -314 -610 -897 -761 888 6598 22021 59353 144459 331532 733040 1580211 3343069 6963206 14293206 +3 17 48 105 201 354 600 1028 1847 3495 6800 13203 25053 45984 81384 138966 229451 367373 572016 868493 1288977 +-4 -3 10 49 132 289 583 1147 2252 4449 8873 17855 36050 72341 142802 274973 513588 927669 1618516 2727541 4442064 +19 39 74 133 236 422 765 1415 2696 5313 10758 22099 45557 93732 192181 392487 797276 1606233 3197558 6267150 12058959 +-7 -10 -13 -16 -19 -22 -25 -28 -31 -34 -37 -40 -43 -46 -49 -52 -55 -58 -61 -64 -67 +21 44 74 122 221 432 849 1603 2865 4848 7808 12044 17897 25748 36015 49149 65629 85956 110646 140222 175205 +18 26 39 66 116 198 321 494 726 1026 1403 1866 2424 3086 3861 4758 5786 6954 8271 9746 11388 +21 40 78 164 356 766 1605 3259 6420 12322 23187 43106 79841 148586 279840 535679 1042583 2055644 4079972 8092520 15934162 +20 37 62 95 136 185 242 307 380 461 550 647 752 865 986 1115 1252 1397 1550 1711 1880 +0 2 15 48 121 283 642 1407 2942 5832 10961 19602 33519 55081 87388 134409 201132 293726 419715 588164 809877 +8 13 15 13 15 42 131 338 755 1592 3455 8105 20256 51423 127543 303162 686530 1482119 3060047 6065853 11589253 +12 30 59 93 125 157 214 361 722 1498 2987 5640 10262 18599 34737 67942 137708 281702 566759 1101727 2048287 +-3 10 49 127 264 492 863 1464 2440 4028 6633 11078 19417 37246 79490 183510 436575 1030078 2361565 5219525 11107638 +16 33 54 90 174 378 846 1849 3867 7702 14625 26559 46299 77769 126315 199032 305122 456279 667096 955488 1343124 +19 43 88 176 343 647 1194 2198 4111 7897 15598 31482 64323 131829 269087 544536 1090317 2160903 4249054 8320480 16296305 +22 41 67 112 212 447 969 2039 4084 7808 14445 26357 48398 90840 175255 345646 688410 1366499 2675535 5132758 9613680 +12 25 47 89 162 277 445 677 984 1377 1867 2465 3182 4029 5017 6157 7460 8937 10599 12457 14522 +5 0 -7 -1 49 197 534 1225 2596 5304 10634 21018 41034 79540 154415 302881 602927 1215420 2462671 4968277 9895903 +-9 -14 -15 1 65 237 627 1430 2974 5775 10594 18507 31038 50464 80459 127293 201992 324897 538038 942790 1811370 +2 4 0 -10 -11 41 233 709 1684 3458 6430 11112 18143 28303 42527 61919 87766 121552 164972 219946 288633 +7 26 67 150 317 656 1342 2714 5434 10819 21508 42739 84695 166680 324376 622208 1174037 2177180 3967333 7105608 12513901 +12 22 38 64 119 247 532 1123 2276 4424 8309 15295 28210 53572 107038 225653 493336 1090494 2385292 5093646 10548309 +14 12 10 19 59 159 357 700 1244 2054 3204 4777 6865 9569 12999 17274 22522 28880 36494 45519 56119 +2 14 43 115 280 632 1341 2710 5286 10076 18959 35465 66244 123814 231609 433008 806986 1494370 2740499 4962479 8852304 +16 36 82 165 307 556 1007 1841 3405 6374 12066 23034 44170 84820 163047 314653 612780 1210538 2432293 4964944 10250289 +10 8 10 20 58 188 557 1451 3382 7223 14402 27147 48738 83665 137509 216252 324578 462546 619794 766166 837338 +9 22 46 85 154 288 571 1200 2601 5616 11777 23672 45407 83249 146871 252546 431725 752582 1369644 2629419 5280540 +16 20 35 87 210 449 878 1653 3133 6129 12402 25663 53593 111897 232285 477770 971150 1946550 3840269 7447123 14183748 +22 44 94 197 405 821 1643 3250 6376 12465 24392 47913 94545 187207 371116 734593 1448530 2841203 5540681 10747619 20760527 +4 15 42 101 226 487 1024 2115 4318 8768 17778 36006 72647 145461 288069 563007 1084756 2059673 3853830 7105719 12909204 +15 23 48 115 271 611 1319 2724 5371 10107 18182 31365 52075 83527 129893 196478 289911 418351 591708 821879 1122999 +7 6 17 48 107 202 341 532 783 1102 1497 1976 2547 3218 3997 4892 5911 7062 8353 9792 11387 +-4 3 25 70 153 309 619 1270 2682 5750 12268 25628 51937 101824 193553 358902 655155 1190487 2177891 4048307 7684230 +-2 4 19 40 65 112 264 766 2210 5847 14057 30979 63235 120551 215877 364424 581237 878545 1269600 1800115 2661524 +18 30 45 58 64 58 35 -10 -82 -186 -327 -510 -740 -1022 -1361 -1762 -2230 -2770 -3387 -4086 -4872 +8 20 59 143 292 523 844 1247 1700 2138 2453 2483 2000 697 -1826 -6077 -12688 -22432 -36241 -55225 -80692 +11 12 8 -7 -28 -26 65 361 1041 2360 4662 8393 14114 22514 34423 50825 72871 101892 139412 187161 247088 +6 6 19 54 113 189 264 307 272 96 -303 -1028 -2205 -3985 -6546 -10095 -14870 -21142 -29217 -39438 -52187 +26 40 63 112 222 455 906 1708 3036 5116 8278 13187 21602 38439 76677 167925 383519 874229 1941697 4162964 8603981 +12 19 31 58 110 209 412 843 1741 3551 7128 14215 28539 58216 120779 253209 531098 1103839 2256973 4519124 8840092 +14 28 47 71 102 153 266 539 1162 2462 4957 9419 16946 29043 47712 75551 115862 172768 251339 357727 499310 +19 22 38 89 208 457 958 1941 3833 7447 14380 27796 53861 104226 200137 378978 704206 1279303 2264473 3888958 6437241 +20 38 83 177 353 665 1204 2120 3650 6152 10145 16355 25767 39683 59786 88210 127616 181274 253151 348005 471485 +18 33 52 75 103 147 258 596 1573 4137 10313 24197 53757 114135 233848 466630 914030 1767831 3387708 6439669 12137157 +16 32 61 98 136 164 171 173 281 836 2678 7743 20501 51456 125378 299753 704238 1621680 3648963 8007452 17127734 +0 9 25 62 141 293 566 1037 1844 3286 6097 12096 25583 56164 124287 271914 582905 1221701 2506400 5046590 10003946 +-4 12 56 141 280 486 772 1151 1636 2240 2976 3857 4896 6106 7500 9091 10892 12916 15176 17685 20456 \ No newline at end of file diff --git a/resources/2023/day9sample.txt b/resources/2023/day9sample.txt new file mode 100644 index 0000000..70c5595 --- /dev/null +++ b/resources/2023/day9sample.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/resources/2024/day1.txt b/resources/2024/day1.txt new file mode 100644 index 0000000..7e73392 --- /dev/null +++ b/resources/2024/day1.txt @@ -0,0 +1,1000 @@ +12823 12823 +74540 88907 +37687 50218 +83750 57255 +43380 59171 +25542 37895 +82191 69869 +93287 63605 +20054 26570 +21769 12823 +77367 67099 +16570 82288 +26289 87436 +80405 62160 +38985 84570 +33507 70651 +78135 12823 +29782 72675 +52972 60020 +37251 13360 +86302 11091 +55698 99302 +11884 23170 +14203 42793 +86556 92216 +92768 98887 +23528 57963 +76772 28514 +96066 46571 +29967 49394 +45832 53891 +71411 57963 +82438 48120 +40512 35506 +19236 46571 +48739 79955 +40697 15914 +32715 27573 +23920 36285 +86163 69869 +71324 39817 +94448 27540 +70651 73871 +60362 15914 +63567 12823 +43893 46571 +92105 21816 +98994 67099 +53618 84742 +24942 39565 +29346 67184 +32212 19642 +54509 82050 +23312 64628 +63771 21691 +38440 26724 +21816 95925 +71068 65860 +14609 55618 +72011 48120 +76020 84229 +48211 33989 +96092 33989 +36555 23920 +22030 48211 +36465 99481 +88296 67099 +36187 77758 +83500 67485 +65799 74354 +46450 23920 +86793 29963 +50695 44098 +65118 14670 +32787 44098 +21102 97142 +92131 29662 +43798 67099 +93295 66944 +56130 15566 +24670 87249 +90131 74584 +41483 16531 +23843 73292 +74526 29963 +55839 14212 +94207 49334 +61338 73170 +31666 39565 +66759 97543 +29722 74520 +22134 35306 +19270 23920 +27053 44098 +45607 42425 +86346 89135 +34136 69485 +39445 70651 +68166 98707 +56499 36545 +12580 48211 +64981 44098 +90943 39974 +80049 39565 +77875 48990 +54424 57426 +81207 68150 +34414 98023 +79187 52901 +79346 23869 +21513 46571 +15053 40401 +71310 38780 +93889 68025 +12261 69729 +57278 25004 +72612 92105 +34775 29963 +38466 70408 +66141 71462 +33759 28157 +23508 80622 +22658 68025 +46137 51837 +74240 68025 +46323 88730 +29267 44098 +61682 13360 +16246 33989 +64833 21816 +73449 92615 +62582 20616 +29963 15914 +37974 60020 +17782 45096 +82282 23920 +15291 60020 +83471 92371 +51148 75901 +28497 23861 +93661 22470 +52360 44098 +19563 39565 +49131 59613 +82638 21691 +71749 21634 +73375 39565 +22422 98262 +96517 42860 +16499 70651 +99194 74365 +81566 21816 +91031 69001 +39388 67099 +13545 23920 +11979 51219 +61595 13636 +34228 61662 +55043 69869 +95357 70397 +37082 57426 +37273 44706 +42656 51161 +92506 98779 +41866 89323 +35492 10452 +42148 57426 +59819 34819 +78615 13427 +48003 85632 +48120 46571 +23470 48211 +92290 97410 +78534 29963 +72064 39565 +69219 57426 +92793 69278 +57426 43882 +39836 79670 +39861 33989 +32392 49744 +55837 87513 +87360 76393 +62336 20641 +10582 85481 +72887 51687 +57048 29021 +63586 29963 +34767 41921 +66407 21691 +45550 62286 +17625 48345 +10410 33482 +64946 61098 +87598 64264 +16102 60485 +14876 37318 +23095 24531 +86353 85448 +73654 15914 +22354 23329 +41772 62251 +69998 79585 +44106 15400 +28581 31886 +34682 11345 +43448 50338 +26948 29963 +82482 68276 +54701 12823 +18922 51687 +64395 29985 +43509 99202 +19177 74365 +71169 39565 +50214 46571 +32348 14042 +71943 23920 +47564 48211 +84539 53239 +28303 40447 +80955 10137 +82358 71499 +17552 12823 +60419 86898 +56250 77850 +71200 67409 +43301 15914 +23512 49536 +13712 84205 +98354 98887 +63702 22888 +75354 46571 +24304 68025 +99181 20195 +41856 23920 +48236 23920 +30623 69869 +24467 48962 +40537 48211 +91888 61088 +70968 23920 +23744 46571 +56536 13360 +94739 23339 +65273 32896 +49147 23040 +55705 98887 +15517 26570 +82815 99647 +63974 33989 +98269 72091 +65774 62028 +86130 88830 +47706 52189 +88818 96935 +99823 12836 +58198 44429 +71859 74365 +18878 21691 +29955 91508 +72262 44098 +79061 90293 +71591 46571 +69367 57426 +26570 30757 +78497 83175 +61128 46571 +66101 99459 +10443 59613 +29154 39565 +68366 46799 +94940 78937 +21614 91666 +47019 34953 +29836 51687 +97089 14752 +31180 77674 +18692 33989 +34377 15914 +16206 67099 +19568 46858 +82230 98833 +36957 15914 +11625 21816 +89751 14670 +88264 44098 +73202 21816 +21389 91653 +94699 63019 +30321 29963 +22159 28581 +76341 85552 +20287 48211 +75921 83341 +88878 60020 +78703 92672 +34581 68025 +31498 67099 +37178 46571 +50526 34670 +15667 12823 +48472 61917 +68025 19843 +18152 84990 +92997 57426 +45194 17337 +35792 90923 +43913 58323 +72309 68025 +77240 87169 +89083 59613 +82310 62531 +12555 10424 +98925 10257 +74420 52083 +24589 85673 +34708 61492 +85722 38721 +62893 51687 +21691 74365 +73322 12823 +11492 54857 +12490 18361 +13166 48211 +88705 39565 +67301 82886 +72198 67099 +24874 28002 +76487 67099 +62948 31200 +59865 63220 +53676 26314 +92741 67099 +20860 13360 +88028 59613 +45201 85967 +23667 32896 +10581 26570 +77520 34819 +84566 59613 +51687 29963 +19781 68938 +97491 97700 +47531 14042 +68156 96185 +73324 49536 +78968 79510 +21596 33989 +15448 80613 +31170 56186 +87856 44899 +16001 92938 +30641 13360 +20379 94681 +34736 81157 +53290 15914 +72642 16629 +59344 51437 +68199 93242 +52460 90743 +55008 36367 +17539 68234 +46571 20804 +23893 13360 +10902 14670 +71961 61714 +47252 90538 +34801 85443 +54575 44098 +88121 10292 +78637 91423 +39213 67915 +98141 78421 +57963 14042 +98480 23920 +71147 57422 +43578 51687 +31681 50491 +33700 17355 +66228 41600 +78032 74365 +88321 21816 +42531 48660 +26035 94016 +60429 15939 +91612 17451 +58120 23920 +89407 75901 +51440 74365 +74970 28186 +27277 57157 +27465 34087 +46755 14042 +61113 99926 +48174 29963 +92842 92627 +37889 35772 +46193 31448 +17838 13360 +41317 92105 +91203 74595 +56700 21841 +92225 23685 +14042 29963 +28888 43645 +42409 29963 +43742 28322 +47950 56420 +60012 32357 +22784 59353 +56646 70651 +71287 33989 +67068 81828 +56344 60024 +84576 33771 +55332 86106 +39659 17918 +15449 94351 +18435 45157 +29432 53238 +15665 23920 +32310 57963 +12187 13426 +91607 19931 +56064 23200 +19785 88382 +59910 80963 +66450 98887 +82386 16004 +18764 94352 +65692 77191 +84784 20164 +62951 74365 +99050 48120 +45731 39696 +48470 21816 +39324 53921 +94800 46976 +68808 97405 +82573 14670 +47088 21691 +13951 68025 +27500 39776 +84585 38027 +69048 13360 +27780 90293 +80590 11936 +55370 75925 +23451 97204 +27191 92346 +26100 14670 +90293 12505 +50078 88870 +19137 39565 +27737 90293 +22569 29963 +48902 69869 +36815 74365 +24284 21816 +98928 87900 +70871 17597 +35712 60185 +89228 48211 +94986 39565 +76950 54205 +40752 57426 +85746 39829 +47474 57121 +83603 69971 +49261 69869 +44969 13360 +16958 74365 +59433 57963 +71578 18842 +94375 62791 +99614 13360 +89622 69869 +51129 56771 +11156 51276 +78767 33989 +63554 40385 +45860 34819 +15810 47662 +74771 47240 +35428 80330 +30052 81082 +18150 41916 +68986 93799 +34820 88196 +50201 56619 +22996 59613 +56297 67099 +99260 58078 +64688 21816 +55665 28824 +97956 37259 +47097 21691 +58688 33107 +79583 48120 +55063 45256 +31835 32896 +15371 14670 +27844 46413 +18991 40292 +44786 32306 +52280 81741 +65427 46740 +33385 43108 +50750 57509 +74193 75901 +37598 59014 +57331 39565 +27243 26144 +51656 23277 +42413 70530 +96608 18903 +36579 24670 +63733 21090 +84536 20737 +79453 35604 +30983 29016 +94593 15346 +79422 50694 +82346 70651 +53011 70651 +65714 47190 +60573 46571 +51630 13153 +38941 69869 +89753 12823 +42939 13360 +60575 88841 +82800 48120 +57035 41389 +87371 87900 +64061 65441 +69851 84299 +98809 65624 +59834 27020 +18835 51900 +33278 14048 +36041 34994 +89750 90878 +33377 57426 +71745 79525 +37615 56520 +22986 15914 +78993 32234 +98887 53280 +91495 57476 +55009 83614 +65088 13360 +61107 55377 +86850 69869 +24409 39565 +41647 20300 +30341 98013 +13360 83709 +94119 39786 +60874 69563 +94681 90293 +12294 93733 +31270 44098 +67169 48120 +69982 25424 +82546 46331 +45548 75901 +68981 59613 +56539 19459 +46787 76063 +41640 70651 +17244 69785 +76548 67707 +80347 75901 +84619 62909 +65047 21816 +32440 21816 +19858 47222 +93947 46571 +34433 25060 +59800 87922 +87150 11813 +61593 12823 +45059 45597 +50520 48120 +43404 70651 +89153 14042 +75276 63196 +73975 59613 +34721 85100 +27022 29317 +95168 46178 +10562 48211 +87285 21048 +85124 73523 +47645 74365 +40814 29963 +17256 28745 +36758 39144 +81972 51687 +42533 71291 +80579 67961 +62777 44098 +33567 73871 +55729 33616 +46613 83768 +73688 15914 +89566 48120 +77156 38783 +28195 76020 +55581 57426 +89915 73871 +20696 78053 +65015 56772 +72302 14042 +91965 94445 +23577 21814 +22461 47256 +90346 58704 +64595 45253 +56289 56251 +31184 28040 +47349 82756 +54200 15914 +12174 67099 +73040 15914 +62683 39298 +97890 93681 +21601 74323 +50505 86613 +54550 67099 +66662 44098 +40887 69869 +41179 21691 +73871 69869 +99728 97754 +86319 65104 +28466 28968 +30688 39565 +14670 83817 +30371 10006 +48181 15914 +76745 57426 +49779 96138 +89394 39565 +75451 39454 +55547 26570 +44988 57122 +84043 33579 +93713 50715 +31694 59613 +72390 50633 +71964 73871 +22241 33767 +18282 69869 +17656 76562 +38157 50300 +81358 39565 +34819 50804 +45875 78072 +94156 40549 +14920 27935 +82795 73906 +80301 92362 +30755 26231 +28592 74531 +91455 48120 +31513 49437 +44618 74365 +48624 33714 +85008 23920 +69604 23920 +10980 22705 +74651 43754 +93201 48180 +54330 68025 +33989 31277 +72222 46571 +76785 86114 +69869 13360 +31444 70651 +58717 49312 +64974 46571 +18089 93072 +22555 58689 +38811 50986 +49910 28581 +57919 96399 +18217 65989 +78980 25085 +27451 99626 +78501 41132 +19069 56502 +75640 14042 +87479 84318 +41487 13360 +70904 41282 +21143 67099 +86138 66970 +87503 50453 +22997 30279 +71054 30416 +55242 63291 +24796 26570 +30921 12193 +73901 71881 +78719 70651 +73668 21644 +40062 50325 +35543 23920 +55260 44098 +13994 62561 +86199 55342 +19950 24292 +84417 41010 +84692 23359 +72516 17950 +73062 33989 +42339 93099 +11175 12823 +72962 15914 +87900 47702 +86061 21816 +87216 19093 +23397 59613 +30171 23605 +68984 57537 +40889 25577 +72952 70651 +14335 45810 +45886 90293 +93935 90169 +26858 57426 +58806 57426 +88530 90854 +51385 70651 +82517 48120 +17888 13360 +33574 89201 +38099 13453 +35615 76655 +40717 21691 +92891 21816 +10071 55881 +24679 60020 +64001 64186 +50189 70651 +75901 28208 +19520 10579 +57337 81798 +15914 14670 +55533 24670 +74365 29963 +96604 14822 +95480 47666 +45043 21816 +64043 59798 +36479 44719 +39565 45563 +30729 21816 +19592 51687 +26575 57426 +96389 30827 +70446 86987 +18115 46908 +36896 46571 +46417 48146 +28955 66308 +95051 96077 +93673 70651 +78658 67099 +75363 86412 +59940 22584 +40027 40113 +38318 48120 +50269 57426 +25217 20768 +69573 99624 +53784 24670 +17175 53310 +70773 43530 +89981 21816 +17683 80473 +10680 43906 +88622 95505 +56828 34115 +71454 92105 +59613 76020 +93410 39537 +30592 57426 +15125 28581 +85953 67099 +79266 12823 +49278 28786 +12848 74190 +63339 48120 +50598 34834 +16139 39353 +77235 74365 +78026 44098 +47079 70651 +56200 98726 +47450 70651 +25045 24670 +91763 68025 +67107 91601 +49768 67099 +10521 88700 +16496 21816 +51163 37436 +57687 67871 +95222 46855 +43170 46745 +97168 79787 +71573 70165 +56432 15604 +25242 14670 +46595 96449 +32896 12823 +48197 29963 +75971 24670 +28619 42517 +94122 81320 +87681 92105 +60991 56609 +71377 50018 +61971 56175 +57550 16562 +57301 90293 +27464 39627 +83664 69869 +71107 26421 +61718 59613 +87707 98887 +11237 24670 +26115 77368 +20429 48211 +56169 85808 +69274 32416 +70566 39565 +47104 64253 +17710 68025 +92830 76162 +56054 73660 +16340 70651 +10392 34986 +62500 19456 +99320 19994 +56618 29963 +42612 22192 +37193 50294 +67800 77943 +57447 34819 +42054 57426 +81285 20316 +56698 14042 +60682 25485 +94833 33989 +11001 56123 +13344 38104 +26492 37666 +77913 34819 +27127 67099 +89373 14670 +84245 23275 +93176 57426 +75068 44098 +64691 37231 +74682 96693 +50985 14670 +22840 28581 +65569 39692 +49536 25963 +47009 87650 +56625 76613 +49670 59613 +98701 28404 +90721 74642 +90568 90293 +34398 38135 +40654 58061 +55254 57426 +30820 69869 +42973 53638 +79937 98595 +19796 46811 +39676 48211 +51100 68621 +49955 13124 +26946 13360 +58367 29193 +94451 48120 +86596 16163 +15417 98887 +49413 74365 +67099 13360 +68239 98887 +71586 65467 +86204 68483 +64235 94569 +63186 87472 +17587 97916 +99477 44436 +92932 87900 +79794 55739 +45968 74365 +97597 58915 +18098 97117 +22937 38639 +62634 90293 +60948 14042 +42836 64451 +22355 12823 +91739 21816 +64123 14670 +64181 60020 +33245 47506 +77922 74118 +84133 75901 +48885 53070 +70613 92283 +83117 12823 +58707 75350 +12185 92946 +60020 28566 +14029 41875 +18414 49550 +60903 26570 +87438 39565 +65638 57325 +88259 12823 +99038 86394 +68699 10243 +21850 42389 +62281 21542 +87797 12690 +63846 15367 +64314 15223 +52539 89174 +83073 48187 +26743 35622 +52779 19988 +32981 55779 +51090 34819 +39533 35299 +44432 57426 +31692 44098 +25549 51846 +92429 67099 +99835 18335 +44128 32196 +88115 21691 +39366 18923 +61773 74286 +45953 60436 +43635 88029 +18349 13511 +72541 92837 +97794 69329 +64562 29954 +44098 13984 +93431 81159 +74605 15914 +79186 96684 +47291 23920 +37794 36179 +33349 98887 +79910 57426 +67576 34819 +11875 37633 +94186 46273 +32249 59613 +31261 70651 +29272 46571 +86184 74545 +73999 30507 +72117 46571 +62639 60020 +83988 72916 +56794 73328 +15112 39680 +71467 61678 +44399 71302 +45068 21816 +51866 46571 +53229 47539 +78623 57963 +40054 14670 +41884 91788 +35923 57772 +22363 74365 +71817 46571 +40307 92314 +38911 13095 +72191 21857 +91448 59613 +60833 44098 +48061 21816 +31899 33989 diff --git a/resources/2024/day2.txt b/resources/2024/day2.txt new file mode 100644 index 0000000..118d727 --- /dev/null +++ b/resources/2024/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 diff --git a/resources/2024/day3.txt b/resources/2024/day3.txt new file mode 100644 index 0000000..313be04 --- /dev/null +++ b/resources/2024/day3.txt @@ -0,0 +1,6 @@ +<,:[*where()%mul(53,612)!^}&mul(3,518)??$~select()>??]mul(245,515),why()who()*@from()(where(242,190)mul(817,764)^select(),+who(851,301)where())from(){;mul(431,780)mul(110,982)what()what()]mul(441,829)??where()mul(269,112)>when()?who()$**#!@mul(343,569),;what()from(){(;}mul(486,404)why()]#~when()%@do()+:'why(256,886)why()who(868,710)mul(103,406)?>mul(563,652)from()$-@when())!@:from()mul(744,992)[<^~}mul(822,789)],+select(45,52)!,why()*mul(433,911) }why()<&&how()who()?]mul(877,899);':what())#{]@mul(401,705)@&mul(627,54)? )~+mul(668,930)%)}do()what()#from()$/when()[:when() mul(545,444)how()]mul(409,150)>?%?@mul(295,205))'mul(321,875)mul(915,728){?when()what(644,532)*?;<):(:mul(566,595)%'mul(499,468)/'where()}mul(721,340)]when()mul(162,291)mul(73,373)<]where()mul(100,385)][what()]mul(832,226)mul(675,546)who()how()#<^+how()'mul(119,723)what(){+,-mul(959,612)select()mul(758,905)!mul(247,521)&}$?don't()!'$ what()where(353,94)select(){mul(997,311)@from()/mul(987,583)&select(207,730)mul(299,379)select()do()what()select()when()select()]*?(?mul(841,179)!when()what()where()@:why()'>]mul(265,944)mul(968,747)what()}),(mul(541,36)~how()~select()where()when()-+when()mul(448,567)select()where()why(342,599) -when()<}mul(566,357)/$*>> mul(414,962)mul(904,116)what():/'@--}where()mul(390,663)who()~~],when()&where()[%mul(304,146))'who()>+when(){mul(526,627)!;(]@}where()where()mul(253,767)-^+]how()>,,!do():~[^when()]mul(263,450)mul(757,944)><' (],mul(934,282)@{who()+%when()mul(136,652)mul(366,573)!$//where()mul(501,845)}+~select()+]mul(532,462),~},from()mul(322,350)@~mul(64,374)&what()>[){mul(962,241),?/}-'+mul(39,522)%!$do()^}mul(447,40)mul(971,488)()mul(983,842)where()/mul(956,799);*+)^mul(233,820)mul(957,287)&>[when()why()where(855,333)<@)mul(304,558){~from(),how(){mul(555,718)]]-where() mul(881,781);^&);mul(231,766)$)mul(7,979)^why()'/,mul(352,951)mul(575,449)'mul(803/#(<^when()>mul(500,697)]~^<>[select();^when()mul(822,422)@[where()what() how()&;[(mul(756,744)how() @mul(741,854)what()(do()&how()){what()'^}-mul(664,580)<+ &+mul(788,961) -&}#!,how()who()mul(378,886)[!{,mul(53,236)what())select():~>why()~@who()mul(275,625)*from():what(80,711)why()@don't()mul(426,724)?&from()-)/^-mul(47,60)&+select()?%why()&where()mul(706,388)from()/how()mul(2,761)mul(377,995),from()*?{how()mul(198,840)why()&';[/+^~mul(72,849)mul(720,901 <(mul(998,859)mul(409,24)>?#-)why()mul(208,800)~how()+^?why()^mul(765,394) )mul(269,340)>mul:$~&select();mul(466,453)why()mul(59what()-?'where()?;who()mul(474,555)<[]]when()%-how(225,412)mul(626,574)/,{{what(832,679)where()how()mul(250,300)<#$;+mul(840,193)who(562,102),mul(390,251)(mul(6,397%~what();%who()from()#![mul(95,829)where(811,818)@mul(847,742)'~+&~@/mul(329,961)>~mul(625,917)#+what()%?>mul(314{mul(392,487)mul(770,684)]'mul(607,73)]where()/#what(378,688) :}'why(778,249)mul(732,423)from()$;@why()>mul(255,618),#+from(849,914);>mul(99,409):]mul(948,905)select()<@mul(342,35)$!@how()/)where():mul(49,617)mul(396,154)>mul(671,367)mul(68,795)~select()<:select()~/mul(900,855){ why(622,665)#when()-<@mul(629~{;~+how(){'mul(907,182)}<;+{' mul(223,519)}+>mul(776,473):where()what()^when()don't()/^ -/(/mul(894,814)mul(698,226)}~/mul(570,960),?@?what()select()}/mul(918,543)'[from()&why()where())~from()[mul(321,507)mul(616,831)why()when()/]{mul#>[!!; mul(480,401)'%%~](from()mul(643,85)who()where()mul(982,510)when():,(mul(799,43[from())$what()%where()@;)mul(420,538)how()mul(358,891)who()what()what()select()(?how()*)mul(612,717)<+(where();who()from(170,645)how()why()where(310,422)mul(789,673)mul(779,49)what()who()[from()$*'&mul(211,472)why()< mul(77,895)?&:*-;^mul(861,148)/what()[+#}when(360,356)mul(905,744):~<-how()][-where()^mul(272,757select()'mul(994,335) what(362,794)$;$mul(242,327)who()when()who();don't()$mul(808,996);don't()/}from()(what()who()mul(398,570)from()~select()[mul(420,441)+mul(452,212)who();~what()#how()what()mul(557when(699,863)mul(184,806)&')from(),:'';don't()[select()mul(139,882~^(how()&mul(931,970)>]] &do()&*)(,:;,mul(924,272)who()$$%select()?/[mul(712,215)~,mul(114,862) :select()#who()$&how():mul(617,150)]why()~(&@?mul(28,990)-)mul(221,546from()^:<&/[select()mul(5,78)mul(476,316)(<'%[mul(227,163)from()where()who()why()[ mul(229,680)>/+?how();select()&$[mul(110,33)~{)#who()]^+/mul(479%%#{#from()select()when()what()what();)//mul(229,348)how()*/mul(643,351)mul(615,362(/->(how()-when()mul(499,697)*don't()mul(992,821){from(413,389));when()who()#mul(921,742)mul(253,580)]how()how(102,372) mul-from()where()mul(104,127)what(),{what() what()[*mul(657,659)'-select()mul(612,851)how()<~-when()$select(718,662)from()(!mulselect()-/^,<&^~mul(497,827)who()-how()-$select()+*mul(943,533)@;mul(403,629)why(826,610)} +:>mul(943,942)why():-)>^why()what()how()mul(302,757'mul(22,286):/-{mul(391,954)mul(528,734)select()-where()why() mul(909,426)!/($+mul(106#&-from()^mul(592,459)'(select()]!when()@{}*mul/&'>mul(894,472)who(),-#mul(924,264)%where()-{from()!mul(956,587)-$do()&why(173,205))$&~where()#&}mul(615,17)how(){>%from()from()@where()mul(683,358),how()when()-}](;/mul(688,622)/select()}(what()mul(872,568)/why(){mul(600,562) #mul(733,946)( ?]/when()$(mul(606,986)@!when()mul(597,648)what()-who()from()?,>]!'mul)>-&@~who()/%!mul(486,264)from())mul(556,968)(who()[:$:,*mul(564,519)# %)&/from(390,158)mul(583,746)how()why()('#/mul(519,835)&(/?^#,mul(447,762){?,]]]/@mul(257,451)&<$why()(mul(670,126){#:mul(555,660)}+%$:(select()mul(723,37)why()who()}where()}how()%)>don't()#where()how()]%what() select()mul(726,542)how()mul:how()/~}) mul(753,350)mul(905,645)+ how():(when(879,434)mul(632*?'$/,<*what()mul(442,98)$&(&;mul(424,515)!mul(443,813)**),^%how()what(),mul(252,469)select()[)mul(370,416)%&::&+%mul(885,78)how()^mul(885> {&,why()$mul(52,196)+,{%select(),!##;mul(714,770)mul(607,394)when()how() -@]mul+^@mul(90,350)~@+where()mul(934,150)when(788,941)^mul(557,327)mul(86,867) :~$-how()select()who()mul(166,855) what() %]mul(928,22)%when()-how()$!what():mul(628,252)~{>,who()~where(967,401)#mul(943,366)'[*>@mul(781,986)>:when()?&don't()~ :where()who()select():what()mul(839,261) *&*where())/]when()mul(24,536)how()how()'who()why())<,~mul(254,257)^@:where()mul(945,657)!&]select()from()}'[#)mul(148,151)-#!/usr/bin/perlwhere()>%why()}!/]{;mul(549,60) +how(477,669) mul(853,888)<[/who()>}+mul(361,751)mul(837,651)-mul(8,515)(}>!!# do()&@!:^][@mul(143,286)&?^&*how()&!'mul(88,781):}who(){!*!&mul(348,435)mulfrom()?>]-}+ }@mul(33,697)do()what()why()}(#]:mul(3,176):$mul(613,679),'how(882,581)who()*mul(519,798)from()mul(865,503),+~mul(767,837)/)?^why()/mul(520,288)where(){)who()what(); )mul(274,562)$:<^*what(423,612) from()>)mul(375,282)#select()from(646,967)?(*!'$mul(991,635)mul(598,876)%^?+mul(716,646)!)&mul(699,500){^^who()when()from()what()mul(314,198)%@;mul(419,800from()]$mul(844,419)$&]mul(317,754))<;^@(mul(222,12)##:what(751,642)$[from()%;mul(205,32)when()&{>+'>why()+mul(864,418)*@select()mul(911,629)*why();)^who()mul(248,4)}mul(132,503)/when()why()%mul(441,482)-mul(818,349)(#(where();(who(22,952)mul(534,621)$'~]where()why()-mul(199,973)mul(746,506)@'select()%{mul(866,951)from()mul(381,827)[select()*}(what()mul(744,979)mul(907,379)how(347,456)who()@what()##>;@mul(114,609),}what()'mul(406,863)][who()/when()mul(900,454)<'-)->[select()!select()mul(499,399)who()mul(349,409)',-~)select()mul(234,866)'why()mul(225,989)-(-mul(626,378);,$who()mul(597,85)mul(977,267)select(){mul(111,206):(&mul(989,396)#[:)<~{who()select()mul(689,817)mul(240,827)#how(){-+-@mul(663,156)'^$from())mul(416,908)*%why(714,896)#^+mul(993,707)'when()#;who()>where()select()?mul(978,206)@how(315,762)*/>why()({mul(998,362)who()$<(mul(488,946)},when()):}?where()where()}do()[!;?~{select()mul(673,574)%[::@;why()#]+mul(455,366)$~:mul(351,347)%,~-?what(595,890)]*select()mul(186,325)where()/:why(744,171)mul(513,868)/+why(118,201)mul(691,608) %mul(469,265)why()do()[mul(80,813)*<:mul(925,31):((mul(640,344)when(758,885)where()mul(474,482)?[>{where()]!mul(66,500)why()![# -mul(549,187,how()'where()*don't()#-<>%select()?who()]mul(581,943)?]what()}?) mul(54,791)]do()+$-)mul(255,793)who()]mul(338[)how()!@mul(253,351)++who()$mul(696,214)select()&mul(899%what()~}/what()-mul(302,687)when()#&mul(842,464)}?^$when()([()mul(579,190)@mulwho()where()~mul(238,298)from()<^(+,mul(766,436)how()^)%':{mul(427,646) ?%}(?mul(995,814)#~where()'}mul(267,274)']mul(174,583[,((!what()+when()*)mul(146,807)!:where()+!mul(856,39)?;@!mul(653,577)%}^do()^mul(961,701)::mul(23,391)what()^*~-do()how()how(832,138);!}($#+mul(841,486)how()+# mul(255,21))-$who()when() -)> mul(427,236);&who(),where()+{mul(97,633) +::where(946,25)!where()do()?where()-why()mul(129,728)>^&mul(557,253)mul(535,49)who()~$>mul(342,811)([*don't(),+how(398,338)}why()<:mul(556,398)[@??:^(),how()mul(708,821):;-?where()/when()select()%?how(955,77)why()mul(428,310)how()where()'mul(759,360)(#>;where()when()mul(396,975)}{mul(131,376)(!@what()%] @mul(100,818)mul(478,394)<%$<:%($&/mul(337,545)mul(227,220)who()-'+why()select()select()don't()why():';!mul(49,915)+))[do()?[when()mul(886,984)'^ who()>when()~mul(468,20)from()(<>why(){mul(791,347)? &} +mul(389,748)/[<;when()select()*mul(370,770)::[select();what()mul(63,701)why()^mul(361,364)when(592,110)select()+: ]mul(988,308)$mul(693{from()!(how()~/mul(782,22)why()mul(355,443)}<)%how()how(){[mul(47,507,^}>)&#don't()why()mul(459,418)?who()/(how()select()when(456,391)?select()mul(451(mul(473,946))who()how()*mul(733,242)mul(575,863)why()*>&,}%!]^mul(613,249){#from()mul&]who()where()}+}}$+mul(94,794)mul(813,82)#mul(294,897)mul(995,245)!%#!^why()mul(411,763)/}what(),)mul(952,776)mul(868,728) ':~$}mul(869,784#who()don't()%@-} (mul(766,260)']who()@^&select()mul(723,930)what()what()from()-#~!mul(873,766)%:,?mul(520,521)& mul(407,520)select()$mul(547,416)~?}%^mul(677,996)mul(661,622)[~!mul(310,928)^;>-mul(740,171) /$#$*don't()select()>: &mul(306,628)*{select()$mul(705,686$/mul(803,660)mul(485,760)[select()'select(){@mul(917,878)#mul(188,324)(>}<:select()'mul(281,982)(select()},what()mul(730,931)}-#mulwhat(469,510)select()'from()where()#from()#do()/mul(869,458) +when()from()mul(912+{@mul(635,991)>}mul(158,871){[*{>'$*/ mul(686,481)mul(339,86)$>how()[when()mul(78,204)+&'mul(58,734)<{who()where()]';~mul(964,213)&select()where()@where(513,771)mul(471,186)'%$)@~({# mul(517,787){+%from()>]{,mul(762,604),~from()~+do()select()mul(827,656)$^>['-what()mul(318,236)select()'+>who(530,155)*mul(394,518)&#)select()from()!)select();:mul(805,79)why()}how()/&?mul(924,569)who()$%where()]~*&[why(621,535)mul(152,407)[why()]#mul(478,24)mul(107,697)select()'>~mul(481,432) mul(248,61)^:+don't()mul(400,374)^]{who(){mul(959,329)from(){))]mul(566,182)}what()(where()>from()&don't()select()who():+?!]]/mul(766,741)why()@ !how()who()?select();mul(470,17)/mul(374,487)%@@mul(685,185)} {<#(mul(845,259)'why(230,429)[??^select()^>/mul(791,324)$how()/?mul(478,641)+/ <{(when()mul(794,547)why()[select()!*-mul(474,709)#select()# select()}select()mul(896,775)select()-where():!mul(817,123)mul(333,359)mul(433,461)mul(722,474)@'!@$mul(49,892) #(+,mul(726,435)what()>,;mul(957,798)) #%)$ mul(541,867)-?*# do() -]who(265,168){'*>{mul(770,902)+,-who()*what()mul(21,402)mul(843,622)~#mul(604,248)how()%(why()where()[;where()+mul(342,802))from()*when())#,<#,mul(439,954)}@-&)>+what()mul(593,520)>?,what();+,select()~mul(202,526)where()+#-]? mul(654,204)>why(),(]+mul(95,133)mul(626,152)@,[+mul(811,855)when()$when(387,144)when()who()mul(781,279))+&@&mul(77,160),why()%from()do())#mul(982,99):mul(722,476)mul(757,193)from()when()select()who(){mul(569,549)]*$mul(943,277)why()@who()}{from()!when()]mul(714,885),;*do()@where()^how()mul(941,709)~@{when(215,138)how()mul(772,310)~,what()>who()!?++]mul(858,573)-what()<(from()from()mul(254,457)mul(890,367)from()why()[mul(590,183)/@who()*#-^?~mul(446,447)how()$select()mul(734,361)]~where();}when()mul(50,364):(where()-<^why()!&mul(692,682)from())&mul(949,43)mul(923,776)^/mul(987,377)!who()mul(286,329)#what()~from()^who()#/mul(13,658)why()>@(>]mul(592,423)mul(148,486)*mul(878,721)$%#how()what()mul(710,18):[#%do()where()@!(~mul(357,115)where()select()how()don't()mul(356,206)@,? how()^^what(295,729)[mul(759,861)from()*/select(334,18)&*how()@>what()mul(580,828)+;where()^;*select();what()mul(542,530)~where()[mul(549,51)'!mul(12,992)#why()don't()!;how()-(+{(mul(543,363)[what()from():mul(135,364)/select()mul(312,500)@where()[when()&$)]when(610,72)mul(215,533)~;who()}how()from()*)>~mul(522,58)@mul(402,510)!!;who()mul(867,26)-mul(25,987)?select()mul(973,76)why()&#{(/mul(148,345))^'%@when()-how()mul(233,85) diff --git a/resources/2024/day4.txt b/resources/2024/day4.txt new file mode 100644 index 0000000..4857e23 --- /dev/null +++ b/resources/2024/day4.txt @@ -0,0 +1,140 @@ +MSSMSAMXSAMASMSMSAMMMMMMMXSXSMMSAMXSSSMXMSMMSMXMXSXMMSAMXMSSSSSSMSASMSSMSAMXMSMXSXSMMMXSSMAMXXMXSXMAMSAMXXMXAXXSASAMXMMAMMSSXSXMMXSMMXSXXMXX +AAMAMXAMMAMSAAAAMAMAAAAMMAMMSAAXAAMAAAMAXAMAAAAAASAMXSXMASMAXMAAMMASMAAAMAMAMAAMSAXAAXMXAXMASXSAMASAMXSSMMSSSMASAAAXMASMMAAMMMAMSMSASMSXAMAM +MMSSXSSSSSMAMSMSMMMXXSSSMXSAMMMMAXMMAMSXSSSXMSMMXSAMXMAMXXMMMMSMMXAXMXMSMASASMSMXASMMXMSAMMAMXMASAMXSMXMXAAAAXMXASMMMMSAMMXXAMAMAASAMAXSAMXA +XXAXAXAAAMXMXXAXAMSSMMXAMAMASASAMXMXAXAAAAAMXAMSASXMASMMMMAMAXAXMMMSSXMXMXSXSAMXXAMMAXMAMMSSSXSAMMXXAMXAASMXMMXMMMMASXSAMXSSSSSSMXMAMSMSMAMX +XXMMMMMMMMMXMMMMSMAAAASAMXSXMAXMAXMSSSMMMMMMSASMMXAXASAAXXSSSXSASXMAXAMMSMMAMAMASXMXSXXAXAXAAXMASXSSSSMSMXSSXAAXAASAMXSXMMAAAAMAXSXXXAAXAAXA +SMXSXXXAAAAAXSMAMMSXMMSAMXAMMMMXAAMAMAXMXMAMSXMAMSSMASXMSMXAXAMSMAMASXMAXAXMMAMXMXASAMSSMMMMMMXXMAAAAMAXXAMXXSMSSMMXSXMAXAMMMMMMMMAXSSXMSASM +SASMMAASXSSMAAMXMAXSXMSAMAXMASXMSSMASXMAMSMXSASXMAMMAXAXSXMAMSMASXMXMMMMSXMMSSSSSSMMAXAXAASMASXSMMMMMMMMMSSMMAXAXXSMAAXAMSMMXMXXAMXMAMMMAAAX +XXAAMXMMAMMMSXMXMASAMXSASMMSASXMAXMAMMASAMMASAMXMAXMMSMXMASXMASMMXMMMMAAXMMXAXMAAAMMXMAXMMAXAMXMAXXASAMXAMAMSAMXSXAXSSMXMXASXMMSMMXMASAMMMMX +MSSXMSXMASXMMASXMMXASASXMAXMXMAMXSMXMSAMASXXMMMXMSXSMXXASAMSSXMMSAMAAMMSMMXMASMMXMMMAMXMSAMMMSMMASMMSAXAXSAMMASAMMMMXXAMSMMMAAAAAMXMASASXXXX +XAAXSXXSAMAXXAMXASXMMAXXMSMMMSMMAXMAMMAMAMXAAMMSAXAMMMSMXMSMXAMASMSSSSSXMMAMSMXMSXMSAMXAMMXMXAMXAAAASMMMMSAMXAMMSAXSAMXMAAASMMMSSMAMASMMMXMM +MAXMSAMMMSMMMSMSAMAMMMMXMASAAAXXSAMXMMSMSSSSSMMSAMXMAAAAXSAMSMMASAAAXMAXMAMMMMAMAXMMSMMAASAMMXMMSSMMMXAAAMXSAMXXSXSAMXSSSSMSMSAAXMXMAXMAXASX +AMSAMXMAMAMAXAAMXSXMAAXMMASMSSSMMXSXXSXAAAXXAAAXASASMMSSMMAMXXMASMMSMMAMSAMAAXSSMMSAAXMMMMASAMXAAAAMXSSXXXAXAMMMMMMAAAXMAMAMAMMSSMSSXMSMSASM +MSAMSMSMSASXSMXMASAMSMSAMMSAAAAAAASMMXAMMSMSSMMMXMAXAXXMAMSMMSMMXAMXMAMXSASMSSMAXAMMSSMAXSAMXAMMSSMMMXMASMMMAXSAAAMAMSMSSMSMAMMAAAAAAMAAMAMX +XAAXXASAMMSAAMXMASAMASMXMAMMMSMMMXSASASMSXAAMAMXSMAMSAMXSAAAXAXXXXMSSSSMSAMMMAMAMXSAAAXXMMAMXSSMMAMMAMXAMAMMSXSSSSSMAMAXMAMXMXSMMMMSSMMSMAMM +MMAMMMMAMAMXSMMMXSAMXSMXMAXMAMXXMXSAMAXXXMMMMSMAXAXAMASAXMSMMSSMSSXAAAXXMAMXSAMXAXMMXSMSMXSMMXAXSAMMSAMSSMSAXAMAMAAAAMSMMSMMSASXXMAMAMXAMAXM +XMMMAAAAMASXXAXSMMASAMXXSMMMAXMXSMMAMXMAASXMAXMMMMMASXMASAXXMASMAMMMSMMMSAMMXMSSSXXSSXMXMAXAXSMMSXMXMAXMAXMASMMAMSMMMSMASAMAMASXAMXSAMXAMXSM +XMASMMSSSXSAMXMXAAXMXSAXAMASMXSASASAMMMSMXAMAXAXAXXASASAMXMMMMSMAMAXAXAXSASMAAXAXAXSAXSAMXSMMMSMXMSSMSSSSMMAMASXXMXMMAXMMASAMSMMXSMSASMXSMAX +SSMSAMXAMXMXMASMMMMMXSXSMSASAAMASAMXMXAMXSMMASXMMSMASAMXAMXSAXXMASXSSMMXMMAXXMMAMXMMAMSMSXAAAAAXAAMAAAAXMAMXSAMXMXAXMMXSSMMMMMXMASXMAXAAAAXS +XAXMAMMASAAMSMXAAMAXMXMAMMXMMSMMMAMMSMASAXAAXXMAAAMMMAMXXMSMXSAMXMAAXAXAMMSXSAMSMXXXMMSAMXMXMSSSXSMMMMSMSSMMMMSASXMMASMMAXXAAMAMASAMXMMXSSMA +MSMMAMXAMXMXAMSMMMMSMSSMXSSMXMASXXMAXMAMASAMSMSMMMXAMSMAMSAMMSXSMSMMMSMAXAXAXMXAXMXMXAXAAXXXMXMXAMMSSMAASMMAAASMSAXSAAASXMSMXXAMAXMAXAMAMXAM +AAXXSAMXSASXXMAMMSXAMAAXMAAXMXAAMMMSSMXSASAXAXAMXMMMMAMSXSASAXASAAXXAXSSMAMAMXSSSMAXMSSSMMMMSAMMSMAAASMSMSMMMXSMSAMXMSMMMMAXMSMMMMXSSSMASMSM +SASXMASASASAXXASAMSSMSSMMXSMMMSMMAAMAMAMASMSSXMSSMASXMSXAMXMMMSMSMSMMMAXMXMAMXXXAMAMMMAAMSMAMAMAXMMSMMXMXAXSSMSAMMMMMMMAMSAXXASAMXMMAASAXAAS +MASXMASAMXMAMSAMXMAXMAMXSAMMSAXASMXSAMXMXMAAAASAMAAXAMMMXMMMXMMAAXXAMAMXMASASXMSMMSSMAXMMMMXSSMSSXXXAXMMXXXMAXMMMSSXAXSAMMXXSASMSAMMSMMXXSAS +MAMXMXXAXXMAMAXAMMXSSSSMMASAMSSMMAASXSXMXMMMSMMASMMSSMAASXSMAXMSMSMMMAXAMASMSAMXAAAAXXMMXSMAAAAAAXMSXMASMSAXSMMMMAXXXMSAXSAMMXMASMSMMXSSXMAS +MMMMSMSSMMXMSMMMMMMMMAMASAMAMAXXMMMMASMXAXMXMAMXMAMXXSMXMAASASMMAMAASXXSAMXASXMMMMSSMSAMAAMMSMMMSMMAMASXAXXAMXXAMXSXSAMAMMAXSAMXMXXMMAMXXMXM +XXMAAAAASXXMAXAAAAAAMAMAMXSXMSSSXSXMSMMSSMSAMXMMMSASAMXMMMMMXAAMMMMMSAAMXSMMMMSXAXMXAXAMSSXMXXXMAXXAXSXXMASMXMXASAMXSAMSXSMMXXSAAXSAMASXXMAS +XSXSMMMSXXASMSXSMSSXSAMAXMXMMMAAXSAMAAAAXMMAMSMMAXAAXMAXSSSSSSXXXAXAMXMMSXMXAAMXMMMMSMAXXXMXMMMSMXSMSXXASAMMAMASMXMAMMMMAAXXMASASMSMSASMASAM +MAMMAMSXMSAMXXAXAAAAAXMSMMAXSMMMMSAMSMMSSSMAAAMSMMXMXMXSAAAMAMXSSMSMSMASMAMSMMSASAMXAMXMMMMAAAAAMXXSAXSMMMMSAMMAAXSMMAAMMMAXMXMXMASXMAXXAMAS +AMASAMMMMSAMASAMMMMMMMXMASXMXXAAAMAMXAMAAASMSXMXXXAMMASMMSSMMMSXSAAAMXXAXAMAMXSASAXSAXXMAASXSMSSMAMAMMXXAMAMMSXMXMSASXMXSMMXXASMSMMAMXMMMSSM +XXMAXSAAASAMXAAMXXMAAXASAMASXMMMSSSMSMMMSMXMXMMMXXXXAMXXAXAXXMXAMSMSMMSMSXXASMMMMXMMAMXSSXSXXMAXMAXMXAMXMMAMMAMXMASAMXSAAASMSASMSAMXMXMAMXXX +SSSMASXSMSMMSMASXXXXAXXMASAMAXXAMXMXXXSXXXMMMAAXMAMASMMMMSMMMMMAMAXAXAXXAMXMXXAAMASXXSAMXASASASMSMSXXSMASMMMMAMMAMMMMAMMSMAAMASASAMASAMMXMXM +SAAAASAMAXXAMXAXMASMAMAMAMMSAMASMMSSMAMASMMASXMXAAAXXAAAXAAASMMMSXSSMSSMMMASMSMMSASAMMASMMMAMXMAXMAXMXMAXAAXXAMXXMAXMAMMMXMXMAMMMASXMAMSASMA +MSMMMSAMAMMSSMMSAMAAXAAMMSAMAMXMAXAAMMMXMAXAMAAXSXSAMSSMMMMMXAAASMXAAAXAXMXSAAAXMASAXSXMAMMMMSMXMXMAXAMSSMMXSAMSASXMASAMXASXMASMSAMMMAMSAMAS +AASAAMMMXMAMAMAAMSXSMSMSMMASXMSSXMSMSASASXMSSMMMMAAAXAXXSSSSSSMMSASMMMSXMASMMMMMMXSXMAXMAMXMXMAMMMSSMXXAAXAXMAMXAMASAMXAXSMXSAXXAAASXSAMXMSM +SMSMMSASXMASXMMMXXAMAAXMXSAMXMAAXXMASMSAMMSMAAMAXMSAMXSXSAAAMXAAXMASAAAAXXMASMMSMAXAAMSSMAMMAAXMAMXXXMASXMSSMSMXXSAMAMXSXMAXMASAMXXAAMMXAMAM +AXXAMMAAMSXMAXXXSSSSSXXMAMXAAXSMMXMASMMXMMAMSMMSMXMAAXAMMMMMMMXMXXAXMSMMMSAMXAASMSMSSXAAMSASXSSSSSMAXMAXAAXXAXAXXMMXXMAMMMSMMASXAMMMSMMSMSAS +MMMSMMAMXMASXMSXAAAAXXMMSSMMAMXXMXMMMMAAXXAXAAXAAAMAMMXSAMXMASMSSMSMMMASAXXAMAMSAAAXMMSXMMMAMXXAASMMSXAXMSMMXMXMXMAMSMXSAXMAXAXXSXAAXAXSXSXS +XSAMAXXXAMAMAAAMMMMMMASAMAXSSXSAMXXMAMSSMMXSAMXMXSAMXMASASXXMASAXAAXASAMSMSXMSXMMMSMSAXASMSMMMMMMMXASMXSAXMSASMSAAAAXAMMMSSMMXSMMXMSSMMMMMMS +XMAXAMXSXMXSMSMMAAAAXMMAXAMAMXMAMAASXMXAXAMMMXAXAMXSMMASAMMXXMMSMSMSXMAMXXSAAMAMSXAAMASMMAAXMXAXAXMAXAMMAMSAMXASMSMSMXXAAMAAMSAMXXSAMXAAAAAX +MMSMASXMMMAMXMASXMSSMXSSMSXMAMSAMXXAASMMMXSAASMMXXMAXMASXAMSXSAXMMASAMXMMASXMXAMXSMSMAMMMSMSSSMXMSASMSMMAMXMXMXMXXXMASMASXSMMASAMMMAMSSSSSSM +MAXSAXAXAMAMASMMSAXXAMAMAMMXSMSASXMXAMAAAASXMASMXSAMXMAXXAAXXMASASASMMMAMMMMMSSXMASAMXSXAAXAAAXSXXAXAXMSMSMXMSAXSXAMMASXMAMXSMMMSASAMXMAAAAA +MAMMXSMMSSSSMSAAXMAMMMAMAMXAMXSAMMSASMSMMMSMMASXAXSXSMSXSMSMMMAXAMAMAASAMXMAAAXSAMMXSAMXMXMMSMMAAMSMAMAAMSAMAMMSMMMXMAMMMSMMXAAAXMSAMAMMMMMS +MMSMAMMAMMMAMXMMMXAMXSASAXMASXMXMAAAXAXASXSXMASMMMMMXXAXXAXMAXXMMMMMSMSASASMSSSSXXMAMASAMSSMAAXMXAAMXXSMMXSMXMXAAXMAMASAAAXASMMMXXXMXSMXAAXX +MSAXAMAMMAXAMMMMMSASASASASMMMXSXMSMSMMSXMASAMASASAMASMMAMAMSSSMMXAAMAMXASASMAMMMSMMASXMXSAAXMXMXMSASMMMSAAXMSMSSSMXASMMMSSXMASAMMMXMAXXSXSSM +MSASXSMSSSSMSAAMASXMASAXXAAXASAMMAXXAASXSMSAMASXMAXAXAXMASXMAAXMAMMSXXMAMMMMASASMMSASAAXMMSMMSXXXMXAAAAAMMMAAAXAAASXXMXMAMAXAMXSAAMMASASMMAX +MMAMXMAXAXMASXSMASAMMMAMMXAMXAMXSAMMXMMASASAMXSASXMSMSMXAAAMMMMMXSXMMSMMMXSSMSXSAAMAMMMMMAXAAAASXMXSSMSXMSXMMXMAMXMMXSAXMSMMMSASASMXXMAMXSAM +MMAMXMXMSMMAMXXMMSXSAMXXAXMAMXXAMMSMMAMAMMSAMXSAMXAAAMXMMSXMMSAXAMAAAXAASAAAMMMSMMSMSMXAMSSMMMSMASAMXMXXAMXMSXSAMXMAASXMMAMMMSMXMAXMXXAXMMSS +ASMMXMMMMSMXXSXMASMMXMXMMXMAMSMMSAAMSSMAXXXXMAMAMMMMSMASAMAXAXMMMSSMSSSMSMSAMAAMAMAAAAMSMMAMXXAMXMMMAMAMSAMASAMXSAMMXSAMMASAAMXMXMAXMSMSAAAS +XMXSAAXXAXXAMMAMASASAMXMAASAMXMSAMXMAASXSSMAMASMMMAMMMMMASMMMSMMMAXMAMAAXMMASMSSMMMMMSMXASXMMMSSMXXMAMXMXAAAMAMAXXMAMSAXSASMMXAXXSAAXAMXMMSS +MAAMMMMMMSMXXMAMXMAMSAAMMMXASAMSAMXMMMXMAXSXSAMXAMAMMAXMMMAMAAMAMMMMASMMMXSAMAMAXXXXXMASAMXAXAXAMSXSASMSSXMASMMSXMMAMMAMMAMASASMXMSXMASXXMAM +MMMXMAAAMXMAASMMSMXMXSSSSMSXMAXSAMSSSMMXMMSXMASXMSXSMMMSMMAMSSSSXSASXSMMSAMAMMSAMSAASMMMSSXMMXSAMMASASMAMASMMMAAASMSMMXMMMMMMAMAXMXXSAMAMMMS +XXMASMSXSAMMXAXAAMXSXAXAAMSASXMSAMAAXAASXAMXMAMAAAXSMXAAASXMMMAAAXAXXMAXMAMAMXMMXXXMSAXMASAMXMSAMMAMMMMASAMAAMMMSMAXXXMAAXMXMXMXXXAAMSMMAAMA +XMMMXAAAMMMXMXMSXSAAMXMMMMSAMXXSAMMSMMSAMMSMMASMMMXMAMSSMAMSSMMMSMSMSSSMSAMASXAMSSMXSMMMAXMSMASAMMXSAASXMMSMMMMXMMXMSMASMXSAMMSMMMSSMMSASMSA +MAAMMSMMMMASMAAMAMMSMSMSXXMAMMMMSMAMASAMXMAXSASMXSMMMMAAMMAAAASAMXAAXAAAMXXAMMXMAAAAMMMMMSAAXMXMXMAXMMSMSMSAMXSMMMAMAXMXAAMASAAAAMAXAAXMXMAM +SSXMAAXSXXAASMSMAMSAXXAAXXXXAXXAAMASXMMXSMSXMASMASMMXMAMMXMSSMMASXMSMSSMSMSSSSMXMMXMSAAAMAMASMMMAMMXSAMXAAMXMMXASMMSSSMMMMSSMXSSSMASMMMXMXAM +MASMXSMSAMMXXMMMSMSMAMAMSSMSMSMSMSXSMXSAMAXXMSMMAXASMMMMSMMXAASMMMXXAMAAAAAAAAASXSAMXMXMXAMXAAASMSASMAMSMSMAXSMMMAXAMAAXXXXXAAMAMMAMAMMSSMSA +MAMMAMMMAXSASMSAXAXXXSAMXAAAAAAMASXMAAAAMAMAXXAMMSSMMAAAAAMSMMXMAMAMXMMSMSMMMMXXAXMSSSSMXSXSXSMSASXSMSMXSAMXSXAMSMMMXSAMXSMMMMMMMMMSMMAAMAAM +MASMMSASMMAAAXMASASMXSASMMSMSMSMAMAMSMXSMMXXMSSMMXMASMMSMMXAMSMSSMMSAMXMAMXMXSSMMXSAMXAAAMMMAXAMAMASAMSMXMMMMXMMAXXAXXSMMAMXMASASAMAXMMSSSMX +MASAAMXMMAMAMXMXMAMXXSMMMXMAMMAMASAMXXAMMMSAMAXXMMXAMMAMAMMAMSAAXASXMXMMXMXMAMXAMXMASXMMAXAMAMMMXMAMAXMMASAAXAMMMMMSSMAMSASMSASMSAXAXXAMMXXS +MAMXMXSAMSXSXXXAMXMXXMMXXXMAMSXSASMMMMXSAASAMAMMMMSMMMAMMMSAMMMMSMMSSXSAAMAMASMSMXSAMXXMASMMSSXMSMSSMMXSASMMMASMAMAMAMMMSASAMAMXXXMSMMXSAMMM +MMSMXXSASAAXMMSMSMMMSAASXXMXMAXMMXXAAMMMMMMXMASAAAAAAMASMAMAMXMASAMAMMMSMSASAXMAXMMASXXMAXXAXMASAAAMAAMMASAMSAMXAMASMMXXMAMMMSMSXMXMAMXXMAAX +SAAXMASXMMMMMAAAAASASXMSMXSAMSSSMAXSXMASXMSSSMSMSSSXMSASMSMSMXSXSMMASAAAXMAMXMMXMXSAMXMMSMMMMXMAMXMSMMAMXMAMMASXXSAXMMXSMMMXAMAMMXAXAXMASMSX +MSSXSMMASAAAMSSSMSMASMMXXASXSAAAMMXMMSMSAAAAAASAMXMMAMXXMXAXXAMMSASXSMMSMMAMMMSAMAMMSMMAMAAXAMMXXMAXAXSAMMAMMXMXMMMMSXAXAMXMASAMAMSSSMMMMMMM +XAXXSASAMSSMXAMXMAMXMAAAMXSSMMSMXSAMXMASMMMMMMMXMASMSMSMAMAMMASASXMAXAAAASAMAMMAMSXMAAMASXMMSSXSASXMAXXAXSMSMAMXMASAMMSSMMXSASAMMSAAMXMAAAAA +MSMMSAMXXAMXMMSAMXSXSMMXSAMASXXXAMASMMXMSASMSMSXMAMXXAAMXMAMXXMXSXMASMMSMMAMMMXAXXMSSSMAMAAXAAXSAMXXSAMMMSAAXXSASAMAMXMAAAAMMMMMXSMMMASMSMSS +AAAMXXSSMASAMXMMSMMXMSMAMASAMMXMMSXMASAAXXSAMASAMMSSMSMSXMXMSMMMXXMXXMXXMSXMASXMMXAXAMMSSSMMMSMMAMXMMXMAAMSAMXMASXSSMASXMMSSSSXXAMXXSXXXAAAX +SXSMSXMASAMMAXMMAAMAMAMASAMMAMMXXSASXSMSMMMMMAMAAAAMAAXXXXASAAXMAXXMASXSXMAMASASMMMMAMAAMXMXXAXSAMMXMAAMXXMXXXXAMXAASMSMXSAAAAAASAMMSXMSMMMS +MSMXMASXMXXXMSAXSXSASASXMXSSMXAMMSASAXMAMMAAMAMXMMMSSMSSMSXSXSAMSXMAMXMMASAMXSAASAXSAMXSXSXSSMXSASXMMMSMMXXMAMXMMAXAMXXMSMMXMMMMMASASAXMASMS +SAXMXAMXMSXSASMAMASXSASAMXMAXMXXAMMMMMSAXMXMSMSSMSXAXXAMAAAMAXAMMAMSMSASAMAMXMMMASASASXMAMMMASAXMSASAAXMMSSMSMSMASMMMSAXMASXSXMXSAMASAMMMSAM +MMMSMAXSAMAMAMXAMAMMMMMMXSSSMSMMMMAAAAMASMXXAAAAAAMMSMSXSMSMSMSXMAMMAMXMXSAMAMAXMMXMMMMMAMASAMMMMSAMMMMAAMXAAAAXAMAAAXXXSMMAMAMAMAMXMXMAMSAX +XXASXSMSAMXMMMSSMAMAAAAXMMAAAAAMSMSXSSMXMAASMSMMMMSAMAXAXAAAMAMMSXSMAMAXMSASMSSSXSAXAAXXAMXMMMMAMMXMAMSMMSMMMSMSXSSMMXSMASMASAMASXMAMAXAMSSM +MMMSAMAMAMXMXAAAMXSSXSMMXMMMSMXMMAXXMXMAMXMMAMXMXAXAMSMSMAMXMAMAXMXMAMMSASAMXAAXAXAMSXSSSSXSAASXXMXSXMAAMXMAXMAMXAMAMAAXXMSAXMSXMXSAMAXSMMXM +ASMSMMSSSMASMMSXSXAAAMMSMMSAXMMMMAMAMAXXMMXXXSAMMXSXMXAMXXMASXSMMAMMMAAMXSAXMASMSMSMXAAAAXAMMXXMASAMXXXSMASMSMMMAMSAMSXMSMMMSMXASMSAMSMMAMSS +SMAMXSXAMMASAXAASMMMXMAAAMMAMXAXMASXMMXSMMSSMMAMMMMAMMSMMMSXSXMASMSAMMXSAMXSXAAXMAMAMMMMMMMMMSMSAMASAMSXMXXMAAAXMXMMMMAMXAASAXXAXAMMMMASXMAS +MMAAXAMMMXMSMMMSMAMSMMSMSSMAMSSMMXXMASAAAAAASMXMAAAAXAAXAXAMXXMAAASMSSMMASMMMMSMMMMAMAXAMXMAXAMMASXMASMAXMXSSMMMXSMXASAMMSMSASMAMXMXAXMMSMXS +XSXSMMMAAAXMMSSMMSMAXXAXXAMXXAXAXMAMAMSSMMMAMXMSSXXSMSMSSXMMMXMMMMMAAXASASAXAXAXAMMXSMXMSSSSSMXMAMXXSAMMMMAMAAXXAXAMXMAMXXAMAMXXSAMMMSAAMMAM +MAMXAXSMSXSAAXAXAMSMMMMSAMXSMASMMSAMSXMXXXMSMXMMASXXMXXAMSMAMASMXMMMMXMMASMMSSMSASXXMAXMAMMXAXMXSSMMXXXMAMASXMMMSSSMSSSMAMAMAXMAXAMASAMXMMXS +XMASMMMAAAMMMSAMMXSXMXAAMXAAMXMMASAXMAMMMXMMASAMAMMAAMMASASXSASMAAXASMSMXMXAAAXMAMMAMXSMASMMSMSAMAASXSXSAMXMXAAXMAAAMAMMMSSMMXAMXSMXXXAAXXAA +MMMXMSMMMSMAXXAXMAMAMMMSSMSMSMSMAMXMSSMMMAAMAMMMMSSMMXSMSXSXMAMXASXXMAMXMXMMMXXMAMSXMAXXAMXAAAMMSMMMAMASMSSMSMMSMMMMMMMAAXAAMXSMAXXSMASMSMSS +MASAMSAMXAMSMSAMMMSAMASAXAAXMAXMSSMMAMAASMMMSMXAAXXXMXAASAMXMAMASMMSMAMSAMMSMSAXSAMXMXSMMMXSMSMXSAMMXMAMXAAXMXMXXMAAXXMMXSXMMSMMMSAAMAXAAAAX +SAXAXSMMSAMXAMAXMASASXSXMMMSMSMXMAXSAMMMXAAAMASMSMSAMSSMMMXXMMMMXAASMMMXSXAAASMMMAMXSAMXMAMXXXAASAMAAMXSMSMMMSMAMMSMSMMSASXMXSAAXMXMSMMXMMMM +MMXSMMXMAMMMSMSMMASXMXMASMMMAAAAXXMMASMXSXMMSAXXAASXXAAAASMSXSAXSMMSASXMMMXMMMAMSSMMXXMASMXSAMXXSAMMMSAMMXAXAAMASAMAXAXMASASMSSMSAAMAXSSSMSX +XAAXAMASXMAAAXMAMASAAXMAMAASMSSSSXXSAMXMXAXMMMMSSMMXMSSMMSAAASMXMMSXMMAAXAMMSASXAAAMAMXMAXAXMMSAMMSAAXMSASAMSMSMSAXSSSSMAMAXAXXXSMMSAASAAAMX +MMMSASASAMMSSXSAMXSMXSMSMSMXAXAAXXMMMSXMSSMAAAMXMAMAMMMXMMMMMMXSXXAMSXSMMMMXMAMMXXMMAMAMAMAMXXMASASMSMSMMMXAXMAXMXMXXAAMAXMMSMMMMAXMMMMSMMMA +MSASMMMXMXAAMXSAXXXXAMAMAXAMSMMMMSASASAMAXMSMSXAXASXSMSXMASMXMAMXMSASAXAAMMAMAMXSSXSASASMXASMMSMMASAXXSAXXSSSSSSSXSXMXMAMAMXXAAAMXSMMXXMSMXS +SMMMMMMMSMMSXMSXMSAMMSAMSMXMXAAAASAMASMMMSAMXMXSMMSMAXSASASASMAXXXMAMAMMMASMSXAAASASXXMAXMMMMASAMXMMMASMMXXAMAMXAAAMAAXAMSAMMXSSSMXMAXSAMXAX +SAMSMSAAXAAMAMXAXSAMXMXSXASXXMMXXMAMAMAAASXSASAMAMXMAMSAMXSAXSXMSAMAMAMASXSAMXMXMMMMMMMMSMSAMMSAMMASMXMAXXXMMMMMMMMASASXMXAMXAMAMAXXAMMXMMSS +SAMAASMMSMASAMSSMMXSMMMAMMMMXSSSXSAMXSMMMSASXMASMSSXMAMAMAMXMMMMMXSASXMAXXXAMXMMXAAAAXAMMAMXSAXASXAXMASXMMMXXASMAMXMMMMAMMAMMXMAMSMMMSMAXAMA +SAMMXMAMXMAMAMAXAMAXAXMAAAAXSAAMASXSMMMMAMMMMMMMXAXAXMAMMXSSMSAAAXSASXMSSSSMMXMAXXXSSSMSMMMSMMSAMMXXMMMMAAMMSMMSAXSMSASAMSSMMAMAMAXAAAMAMSSM +XAMSASAMXMASASMSXMASXMXMXSXSMMAMAMXXAAAMAMSASAAAXMSMMSSMXXMAAMSMSXMAMXAXAMXMAMXSSSMAXAAAMXXXAMMAMMMMXAAMMSAAASMMMSXASASAXXMAXSSMSXSMSSMMXMAX +SSMSASMMMXMAAXXSAMXSAAMSMXXXAASMSSXSXMSSSXSASMMXAXAMXAAMXAMMMMMXXXMAMMAMXMMMAMXAAAAMMMSMSSMMXMSAAASXSSMSAMMSMSMMMAMMMAMXMXXSMAAAAXMAXMAXXSAM +XAAMAMMSSMSMXMAMSAMXMSAAASMSXMXAXXXSAMXAXMMXMAXSMXSSMSSMMASXAXXAMMSMXMAMMAASASXMSMMXAXAAXMASAMXSMAAAAAAMMMMXASMSMMAXMAMASXAMMXMMMMXMSSMMXMAS +SMMMMMXXAAXXAMMSASAMXMXMSMAAMMMMMSAMXSMMMXMMMMMASMMXXMAMXAMXMMMXMAAMASASMSMMASMXMAXSSSSXMSAMASXXSSMMMMMMMAAMXMAAAXSXSSSMSMXSAMXMAAAXMAMSMMAM +SAMXMSXSMMMSXXSAMXXXXMXXXAXXAXAMAMMSMAMXSAASAMXAMMSMXSASXXMASAAXMSMXAMAMAMXMMMMAMSMAMMXAXMMSAMXAMMAXXXSSSMSMSMSMSXXMMASXXAMXMXMSMSXXSAMASXAS +SAMSSSMXXAXAXMXMASXMSMASMMMSSSMSXMAAMXXAMMSMAXMASXAAAMASMXAXXXSXMASMXSAMAMXMAAMAMMAXSASXMAXMMSMXMSMXSAAAMMMMMAXAXMSASAMXMMMMAAXXAMXXMASASXMM +SMMXAMMMMMXSXSAXXXAAAXMXAAXAAMXAMMSMSMMXSXMXAMXSMMMSMMXMAAMMSAXXSAMXAAXSXSSSSSSXSAXXMASXXXMAXMASAAMAMMMMMASAMSMAMASXMASMMMAASXSSSXSMSXMASAMX +SMMSXMASASMMASMSMSMSMSMSSMMMMMMSSMAAAAMAMAMMMSXAAXXMAMMMXXAAMXAAMASMMMMSMMAAMAAMXMAMMMMAMSSSMSAMAAMASAAXSAXAMAMXMXMAMSMMAAMMXXAMXAMXAXXASMMA +XAASASXMMMAMXMAAXAAXXAXAMXXMASXMAXXSSSMASAMAAMMMMMXSAMMMAMMXSMMMSXMAMAAXAXMMMMMMSSMSAMMAMMAXAMXSXXSASXSMMMSSMMMMMMMMXXASMXSAXMMMMSMMMMSAMAAA +SMMSAMAMSMXMAMXMXMAMXMASMSMSAMASMMMMMMMMXXSMXSAMMSAXASAXSMXAAXXXXAMAMMSSSMAASAAXMAXMAMSSXMAMSMMXMASAXXMASAAXAXMAAAXXMSAMAXMASAXMXMASAAMAMSMS +AAAMAMSMSAASXSAAMXSXXMAMAMMMMSMSASASASMXSASXAMAASMSSMMMXMAASMMSSMMMSXMMAMASMSSSSMMMSSMMXAMAMAAXXMXMXMXXAMMXXXMSSSSSXMMMMAMXSXXXMAXMMMXXAMAAX +SMMSAMAAXSMMASMSMAXASXAMAMXAXAASASASASAAMAMMSSMMMAXXAASXMMMXAMMMASAXAMMXMAMXXXXMMXAAMAXMMSASXSMMMAMXSSMSMSASAXAAXXXMSAMSMSMMAMMMSMAMAMSSSMSM +AAXSXSMMMAMXMXAMMXMASXXSSXXASMMMAMMMMMMMMAMAXXMAMSMXMASXAXSSXMASAMAXAMSAMXSXMXMSXMXSSSMSAAMSAMAMSMSAXAAAAASAAMMMMMXAMAXAAAAMSMAAAXAMMMAMAXAA +MSMMXMXXMXMAMMMMMAMMMMMAMAAXMMXMXMXAXXXMSMMMSAMXSAAXMSXXXMMAMSASAMASXMSASAAMMAMASMMMAMXMMSSMAMSMAAMXMMMMSMAMAXAAAAASXMMMSMXMXSMSSMXSSMXXMMMS +XXASASXMXAMMXAAMMASAAMMAMXMAAXXSAMSASMSAMAXMMAMXSASMXMAMXXMSMMAXXMASMASAMMSMXAXXSMAMAMMSMMAXXMMMXSASXSAMMMMXMSSSMSMMXASXXMSMXMMAXMMXMXMASXXM +MSAXAXAXMSMAXSSMSASMSXSSSMMSMMMSAMXMXMXASMMSMMSMSMMMXMXMAMMAAMAMXAMXMAMAMXAMSXSAMASMSMMAMMAMXXXMXAAMMSASAAXAMAMXMMMSSXMASAAMAAMMSMSASASAMAAM +MMMMSMMMAMMSMAAAMXSXMXXMAXAXAAASMMAXMSSXMXAMSAAASAAAAXMSAMSAMMAXXAMXMMSSMMMXAMMAMAMMAAXAXSMSXSMSXMAMASXMXSSXASXSXSAAAAMAMMMSSSMXAXMAMAMMMSAM +MSMAMAASMSAMMMMXMASXMAMXMMMSSMXSASXMAMMMAMSMXSMMMSMSMSAXSMXAXSASXMSAAAAAMMXMASAMXASXMSMAXSAXAXAAMXXMAXXMAMMMMMAAAMMMSMMXSSXXAAMMXXMSMSMSXMAS +AAMMSMXSXMAMXMASMMXXAAXSXMXAAMASXMAASAAAMAMXMASAXXMAAMMMMXMMMMASAAXXMMSSMMXSMMMMSMXXAMXSAMXMSMSMSSSMSXMMAXAAXMMMMMXXMAXAMMXMSMMMSMXMAMAAASMM +SMXXAAAMAXAMXXAXAAXMMXSXAMMSSMASMAAMASXSXXAMSASXSXMMMMASXAMAAMMMMXMXXMAMAXAXXAAXAMMMSMAMXAAXAAAAXXAMMASXSSSSSXXAXXMMSSMSXSXMASAAXMAMAMXMAMXA +AAASMSXMAMSAMXXMAMXAXMMMMMXAXMMXAXMXXMMMMXAXMASAAMXMMMASXXMASXSXXMAMAMAXMMMSSSSSMSAAMXAMSSXMMSMSMSMMSXMAMXMAXMSXSXMAXMXMAMXSASMSAMMSMMAXMMSX +MAMXAXMASXXASASXSMSSXMAAXAMXXSAMSXMAMMAAMMSMMXMXMASMSMASASXAMASMASASXSMSAAXXAAXXAMMMMMAMAMXAMAMAAAMASASXSAMAMMMAMAMMXSAMXMMMASXXAMAAAXMSAAMA +SSSMSMSAMAXAMASXXAAAAMSSMMSMXMMSMAXSMSMMSAAXXXAMXMXAAMXMAMMXMAMSXMAXMAAXMMSMMSMSSMSASMXMASMXMASMSMMASASAMAMMMAMXMAXSMXAXXMAXAMASXMSMXMAMMMSX +AAAAXAMXSMMSMMMMMMMSXMMMMMAAAMXAMMMXAAAXMMSMMMSMXMMSMSASAXXXMXMXXMSSMMMXSXAMAAAMAASASXAMSMMMSXMXAXMMSAMMMAMXSXSSXSAAASXMSMXMASMXMAMASMSMXMAA +MSMMMMMXMAMMAAXAAMXXAXAAASMXMSSMMSASXSSMMSAAMAAAASAXXXXMXSASXSMXXAAAXXMASXMMXSSSMMMXMASXAAAXAMSMMMSAMMMXSASMSMAXAMSMMMSXAAASAMXMMAMMSAAXSMSM +XMXXMAMXXXSXSMSSXMASMXMSMSXXSXXAAAMAAAMAXSXSMSMMXMASMSXXAAAXMASAMMSSMMMMMXXMAXXAXSXAASXSMSMSAMXAAAMASASMSASAXMAMXMASAAXSMSMMAMXASXSAMXMMMAAX +MSMSSSMMSMAAXXMASMAMAAXMMMXXXAMMMMMMMMMMMSXMMXXMAMSMAAXSMMSMMSAMXAAMMMASXSMSXXAXAMSXSAAMXAAXXMSMMMSSMMXAMMMMMMXXAMAXMMXXXMASXMSMXMMMSMXSMSMS +AAAXAXXAAMMMXAMAMMAMMMSAAAXSMMMSAXXAMAXSAMAXMAXXAMXMMMMXAAXXSAMXXMMSMSMSASASAASMSASMMMSMSMXMAASXSMMMAXMSMMAMXMMXSMXXAXSASAMXAAXSASMXAAAMAMAS +XMSMXMMSXSXMXMMMMSMSXXXMMSXMAMAMXSXMSASMAMXMMAMSSSXSAXSMMMSMMAMASMXSAAMMMMXMSMXAMAMAXAMAMXASAMXAMASXXMAXMXMSSSMAAAASMMMASXSSMMMSXMXMMMMAAMMM +SSMAAAXMXSAMXSAMASAMMSMMXXASAMXSASAXMMSXSMMAMAXXAMASMMMAAAAASXMAXXAMSMSSSXSAMXMAMASXMASAMSMSAAXMSAMXAXSXSAMXAAMAMMMAAMMAMMXAMMAMAMAXXASXMSSS +XMASXSMMXSAMMSASAMAAAMAMAMMXAXAMAMSSSSXAMAMSMMSMAMAMMASXMXSMMAMXSMXMAMAAAMXMMXMXSAMMMMSAMXAMMMMXMASXMAMAMXSMMMMXXASMMMMMSAMXMMASASASMXXAMXAS +MMAMMMASASAMAXAMASMMXSAMXSMSSMSMSMAMXAMXMAMXAAXXAMASMASAAAMMSXMAXXMMSSMMMAXSAMXAMASASAXXMMMMAAXMSMMMMMSAMXXMASXMSXSAMXMMMXMAMXASASASXMXSMMMM +AMASASXMASAMMSSSMMMMMSXSMMAAXMAAAMAMMSMMSSSSMMMSMSASMASMMMSASXSMSMXAXXXXXSMAXXMMXMMAMASXMAXMSXSXMASXSASASXASMSAMAMSAMXSAMMSASMMMMMXMMSAMXSAM +MMASASXMAMXMMAMXMAASMMXMAMMSSXMMMSASXAAXAAXXAAAXXMXSMAXAMXMAMAXAAAMSSMSAMXAXMSXSAMMSMXAAMSSMASAAMXAAMASAMMMMMSXMAASAMAMASMMMXMXAAMXXAMASXSAS +MSMMMMXMXMAXMAXXSSMSAMXMAMXAXXXAAMAMXSMMMSXSSMSAXMXXMXMSMXMSMXMMMSMMAMSAXXMXASASASAXMMSMMAAAMAMMSAMXMXMMMSAAMXASMMSAMAMXXXAMMMSSMSMSAMAMXSAM +MAAAAMAXMMAMSSMAMAMSAMASMSMSSMSMMSASAAAXAXMMXAMXMASMXXXMASAAAASMAMMSSMMMSMMSAMAMSMXSSXXAMSMMXMAAXAXXXXAAAXSMMXXXMAMMMSAAMSMXAAMAXXAMXMMXMMMM +SSSMSXSSXMXMAAAMXSASMMMSAAMMAMXAXSXMXSMMMMAASXMAMXMXXMASAMAMSMMASXMAMAASAAASAMXMAXXAXASMMXAAXXMSSMSSMSSMSMMMSSSSMMSXAAMXMAAMXSMMMMXMAMMAMAMX +XAAAAAXAMMXMXSMAMXAXXXAMMMMSAMMXMSMMAXXASXMMSASXMSMASMAMAMXXXAMAMAMXSSMSMSMSAMXSSMMAMMMAASXMMXAMAXAAXAXAMXXSAAMMAAAMXSMSMMXXAAXMAAMSXSAMSASM +XSAMMXMASXMAXXXMAMMMMMMMAMMSASXMAMAMASMMMAXXMAMMAAMXSMXMAMSSSMMXSXMAXMASMMMSAMXAAASMMXSMMXXAMXMSXMSXMMSMASXMMSMSMMSSXAASMAAMXMMSMSXXAMAXSAMA +MXMASXMMMASMMMSXSAASMXSSXMMSAXMAXSAMXSAASXMSMMMMSMSAXMSMMMAAAMSMMAAMXMASXAASMMMMMMAAAXMASXMAMXXMMMMMMXAMXASXAAAAAXAXMMAMMMSMSAXSAMMMMMSMSMSM +MAMAXMAMXXMASMSAMSSSXAMASAAMMMMSMSXSMSMMMMAAAASMAAMMSAAAAMMMMMAASASMSMASXMXMSAAXXMMXMMSAMMSAMXXSASAAMAXSAMXMSSSSSMMSMMMSASAAXMMMXMXXMAMXXAAX +XXSMMSMMSASXXAMAMXMMMMSAXMXMXASAXXMAMXAXSXSSSMMSXXSXSXSMMSXASMSMMAMAMMAMXMAMSSSSXXXXSAMAMXSASMXXXSMSSMXMAXXMMMXXMASXXAASMSMAMSASAMMMMSSSMSMS +XMAMAAAASXSMSSMMMSAAAMMMMXAMMXMMSSSMMMMMMAMAAAMMSXSAMAXAMXXXSAMAMMMAMMMMXMAMMAMAXXASMXSSMASMMMMMXMAXAXAXAMXMAMSXSSMSSMXSXMASMSASMSAAMXAAAAMX +XMAASMMMSAMAAXAXASMSMXAAAMAXMAMSXMAXMAMAMAMSMMAAMXMMMAMXMAMMMAMAXSSXSASASMSSMAMAMMMMAAAXMXMXSAASASXXASXSMMXSASMAMXAMXMAMASMMAMAMASMSSMMMSXSX +XMAMMAMSMAMMMSMMXXAXXSMSXSAASAMXASMMSMSASAXXAXMAMAMAMXSSMASXMMMXMMAASASAMAAAMAMAMXXXMMSMSMMAMSMSASAMXMMAAXASXMMAMMMMAMASMMXMMMAMXMAMXMSXAMSX +XXXXXMMASAMXXSXXXMSMMMAAAMXMXAMSMMXMAASXSMSMMMSAMMSASAAXSAXMXXSXSMAMMXMAMXMASXSAMXXAXMXAAAMXXMXMMMMMMASXMSMSSXSASAASMSASAXXMXSMSSMXMASAMXSMA +XXAMXXSXSMMXXMAMXMAAXMXMMAMMSAMAAAXSMXSAXAMXSASASAAMSMSXMXMMSAXASMXSMXSXMMSAMXSMSMSXMSSSSSMXMASXSAMXSMMAAMXMAMSAXAMMAMASMMMSAXSAAMSSMMMAMAMX +SSMMXXAMMMXMXMAMMMSSMASMXSAXMASMMMMXXAMXMSAXMASAMXSMXAMXXMSAAMMMMXMAMAMASMMSMMSAAASAMAAXMAXXSXSASMSMMAMMAMSSMMMMSXSMSMAMAAMMASMSMSAMMAXAXAMX +MAMSMMMMASAMASASXAAAMASMAMMSAMXAASMMMMSAMXAXMAMXMAXXMSMMSAMXSMSASXSAMXSAMAAXMAMSMMSAMXSMMXMMAMMAMXAMSSMMSMAAAXMASAAAXMSMSSSMXMAXMMASMSSMSSSM +MMMAAAXSASASASMSXMSSMASMXMXMASMSMMAAAAXXAASMSAMXMSSXMAAXMAMAAASASASXSAMXSMMSMMXXXXSAMAXAXAXAAMMAMSMXAMSAAMSSMMSAMSMMMMAAMAXMMSAXXMAMAAAAAMXA +SXSSSMXMASXMXSXMAMXAMXSAMXXXSXXMXSSMMSAXSAMAXXMXMMSXSMSMSAMSSXMXMAMSMXSAXMSXXXMXAMSMMXSSMSMSASMMMXSMXSMSSMMAMXMAXAMXSSMSMSMMMMMSMMASMSMMMSAS diff --git a/resources/2024/day5.txt b/resources/2024/day5.txt new file mode 100644 index 0000000..bdbb38d --- /dev/null +++ b/resources/2024/day5.txt @@ -0,0 +1,1369 @@ +79|26 +75|21 +75|86 +74|69 +74|86 +74|75 +35|62 +35|74 +35|47 +35|57 +86|28 +86|95 +86|53 +86|99 +86|46 +28|12 +28|25 +28|65 +28|83 +28|79 +28|43 +15|52 +15|18 +15|33 +15|67 +15|88 +15|57 +15|26 +95|72 +95|97 +95|12 +95|15 +95|74 +95|85 +95|82 +95|73 +26|38 +26|77 +26|47 +26|53 +26|97 +26|43 +26|21 +26|46 +26|95 +73|12 +73|52 +73|74 +73|86 +73|15 +73|57 +73|56 +73|68 +73|89 +73|88 +83|98 +83|48 +83|67 +83|57 +83|33 +83|44 +83|41 +83|34 +83|58 +83|15 +83|53 +37|41 +37|39 +37|18 +37|88 +37|58 +37|99 +37|69 +37|56 +37|36 +37|21 +37|53 +37|89 +54|56 +54|88 +54|98 +54|64 +54|12 +54|34 +54|86 +54|65 +54|67 +54|33 +54|57 +54|68 +54|52 +43|68 +43|75 +43|98 +43|83 +43|33 +43|88 +43|62 +43|73 +43|37 +43|65 +43|56 +43|94 +43|67 +43|57 +44|98 +44|48 +44|56 +44|15 +44|52 +44|12 +44|34 +44|41 +44|67 +44|68 +44|37 +44|88 +44|18 +44|89 +44|57 +98|69 +98|53 +98|33 +98|41 +98|36 +98|25 +98|95 +98|37 +98|99 +98|77 +98|56 +98|86 +98|21 +98|57 +98|89 +98|26 +58|46 +58|36 +58|72 +58|25 +58|77 +58|89 +58|21 +58|97 +58|47 +58|85 +58|62 +58|95 +58|38 +58|69 +58|82 +58|48 +58|54 +12|15 +12|74 +12|37 +12|52 +12|53 +12|56 +12|33 +12|77 +12|48 +12|89 +12|68 +12|57 +12|18 +12|98 +12|75 +12|34 +12|86 +12|69 +65|15 +65|67 +65|73 +65|79 +65|64 +65|33 +65|52 +65|34 +65|74 +65|98 +65|12 +65|86 +65|75 +65|88 +65|94 +65|68 +65|58 +65|41 +65|57 +62|41 +62|44 +62|98 +62|79 +62|64 +62|75 +62|12 +62|37 +62|65 +62|56 +62|33 +62|15 +62|34 +62|74 +62|88 +62|68 +62|18 +62|57 +62|54 +62|73 +46|12 +46|73 +46|44 +46|47 +46|57 +46|68 +46|82 +46|62 +46|79 +46|38 +46|35 +46|34 +46|67 +46|83 +46|64 +46|54 +46|98 +46|74 +46|94 +46|65 +46|43 +56|85 +56|25 +56|46 +56|72 +56|36 +56|99 +56|75 +56|28 +56|86 +56|82 +56|88 +56|48 +56|77 +56|97 +56|21 +56|26 +56|95 +56|41 +56|89 +56|39 +56|52 +56|69 +89|82 +89|28 +89|26 +89|21 +89|38 +89|69 +89|43 +89|36 +89|25 +89|62 +89|53 +89|95 +89|54 +89|48 +89|47 +89|46 +89|65 +89|35 +89|77 +89|99 +89|97 +89|39 +89|72 +33|41 +33|28 +33|58 +33|21 +33|53 +33|48 +33|97 +33|89 +33|88 +33|77 +33|57 +33|26 +33|86 +33|69 +33|36 +33|56 +33|25 +33|72 +33|75 +33|95 +33|52 +33|37 +33|99 +33|18 +41|86 +41|47 +41|46 +41|25 +41|36 +41|69 +41|72 +41|97 +41|21 +41|26 +41|53 +41|43 +41|28 +41|85 +41|95 +41|48 +41|77 +41|58 +41|38 +41|39 +41|82 +41|35 +41|99 +41|89 +97|74 +97|94 +97|79 +97|64 +97|65 +97|46 +97|34 +97|15 +97|68 +97|54 +97|12 +97|43 +97|82 +97|98 +97|47 +97|39 +97|62 +97|85 +97|38 +97|35 +97|44 +97|67 +97|83 +97|73 +47|98 +47|43 +47|68 +47|54 +47|65 +47|67 +47|64 +47|44 +47|62 +47|57 +47|73 +47|34 +47|18 +47|37 +47|75 +47|56 +47|33 +47|83 +47|94 +47|88 +47|12 +47|79 +47|15 +47|74 +68|72 +68|75 +68|77 +68|88 +68|57 +68|37 +68|18 +68|58 +68|56 +68|41 +68|53 +68|26 +68|86 +68|21 +68|69 +68|89 +68|25 +68|33 +68|36 +68|28 +68|99 +68|52 +68|48 +68|95 +34|95 +34|26 +34|99 +34|69 +34|52 +34|21 +34|68 +34|41 +34|75 +34|57 +34|77 +34|28 +34|25 +34|37 +34|56 +34|48 +34|58 +34|18 +34|89 +34|98 +34|88 +34|33 +34|86 +34|53 +99|64 +99|62 +99|12 +99|73 +99|94 +99|46 +99|54 +99|47 +99|79 +99|35 +99|95 +99|38 +99|43 +99|44 +99|65 +99|97 +99|72 +99|36 +99|83 +99|85 +99|39 +99|25 +99|82 +99|15 +67|52 +67|28 +67|68 +67|33 +67|34 +67|53 +67|37 +67|57 +67|74 +67|21 +67|26 +67|99 +67|69 +67|58 +67|89 +67|86 +67|98 +67|48 +67|18 +67|56 +67|41 +67|75 +67|88 +67|77 +18|88 +18|75 +18|89 +18|25 +18|86 +18|46 +18|77 +18|52 +18|26 +18|97 +18|56 +18|99 +18|28 +18|21 +18|41 +18|39 +18|69 +18|85 +18|48 +18|36 +18|72 +18|53 +18|58 +18|95 +69|85 +69|36 +69|77 +69|94 +69|38 +69|53 +69|48 +69|54 +69|97 +69|64 +69|25 +69|82 +69|62 +69|35 +69|47 +69|43 +69|65 +69|39 +69|46 +69|95 +69|28 +69|99 +69|21 +69|72 +64|83 +64|74 +64|75 +64|94 +64|34 +64|52 +64|58 +64|89 +64|12 +64|79 +64|57 +64|37 +64|18 +64|67 +64|41 +64|86 +64|44 +64|68 +64|73 +64|15 +64|98 +64|56 +64|88 +64|33 +53|35 +53|95 +53|94 +53|79 +53|54 +53|36 +53|46 +53|97 +53|73 +53|85 +53|21 +53|38 +53|82 +53|25 +53|43 +53|64 +53|99 +53|77 +53|72 +53|47 +53|62 +53|28 +53|39 +53|65 +25|44 +25|72 +25|79 +25|64 +25|47 +25|38 +25|97 +25|36 +25|73 +25|12 +25|95 +25|62 +25|15 +25|85 +25|67 +25|83 +25|46 +25|39 +25|43 +25|35 +25|65 +25|54 +25|82 +25|94 +36|65 +36|39 +36|97 +36|83 +36|38 +36|64 +36|46 +36|79 +36|44 +36|73 +36|74 +36|15 +36|67 +36|35 +36|85 +36|54 +36|62 +36|34 +36|47 +36|72 +36|12 +36|43 +36|82 +36|94 +72|54 +72|79 +72|62 +72|85 +72|39 +72|44 +72|94 +72|46 +72|82 +72|98 +72|43 +72|73 +72|97 +72|74 +72|15 +72|83 +72|35 +72|64 +72|65 +72|34 +72|47 +72|12 +72|67 +72|38 +21|39 +21|38 +21|47 +21|25 +21|46 +21|65 +21|99 +21|79 +21|28 +21|35 +21|97 +21|64 +21|36 +21|94 +21|62 +21|83 +21|43 +21|73 +21|95 +21|82 +21|85 +21|54 +21|77 +21|72 +77|79 +77|44 +77|82 +77|97 +77|72 +77|46 +77|43 +77|73 +77|35 +77|85 +77|39 +77|64 +77|94 +77|62 +77|54 +77|65 +77|83 +77|47 +77|38 +77|28 +77|25 +77|99 +77|36 +77|95 +57|69 +57|88 +57|48 +57|99 +57|77 +57|37 +57|36 +57|97 +57|52 +57|72 +57|75 +57|39 +57|21 +57|56 +57|18 +57|58 +57|95 +57|89 +57|86 +57|41 +57|53 +57|25 +57|26 +57|28 +52|35 +52|82 +52|72 +52|39 +52|28 +52|53 +52|26 +52|89 +52|97 +52|25 +52|38 +52|58 +52|95 +52|36 +52|85 +52|46 +52|21 +52|48 +52|47 +52|77 +52|86 +52|41 +52|69 +52|99 +39|12 +39|94 +39|65 +39|73 +39|46 +39|83 +39|98 +39|74 +39|62 +39|67 +39|44 +39|64 +39|38 +39|85 +39|33 +39|15 +39|43 +39|47 +39|35 +39|68 +39|79 +39|82 +39|34 +39|54 +94|98 +94|33 +94|73 +94|86 +94|34 +94|41 +94|37 +94|18 +94|26 +94|79 +94|56 +94|68 +94|83 +94|75 +94|15 +94|12 +94|74 +94|88 +94|67 +94|57 +94|89 +94|52 +94|58 +94|44 +38|75 +38|37 +38|79 +38|74 +38|57 +38|65 +38|33 +38|73 +38|34 +38|18 +38|64 +38|98 +38|54 +38|56 +38|12 +38|62 +38|68 +38|67 +38|44 +38|83 +38|15 +38|43 +38|47 +38|94 +88|52 +88|72 +88|77 +88|58 +88|97 +88|95 +88|85 +88|53 +88|38 +88|46 +88|35 +88|86 +88|48 +88|99 +88|69 +88|36 +88|39 +88|28 +88|89 +88|41 +88|82 +88|25 +88|26 +88|21 +48|21 +48|47 +48|97 +48|73 +48|85 +48|46 +48|25 +48|36 +48|54 +48|38 +48|62 +48|94 +48|28 +48|82 +48|39 +48|65 +48|72 +48|53 +48|43 +48|64 +48|77 +48|35 +48|99 +48|95 +82|83 +82|98 +82|38 +82|68 +82|74 +82|67 +82|12 +82|57 +82|94 +82|35 +82|33 +82|54 +82|43 +82|65 +82|37 +82|44 +82|15 +82|62 +82|73 +82|18 +82|47 +82|64 +82|79 +82|34 +85|79 +85|47 +85|73 +85|82 +85|35 +85|44 +85|98 +85|67 +85|12 +85|83 +85|65 +85|43 +85|57 +85|33 +85|38 +85|54 +85|74 +85|34 +85|94 +85|64 +85|15 +85|62 +85|68 +85|37 +79|15 +79|52 +79|41 +79|57 +79|67 +79|18 +79|88 +79|33 +79|12 +79|37 +79|69 +79|56 +79|83 +79|44 +79|68 +79|89 +79|75 +79|74 +79|98 +79|48 +79|86 +79|34 +79|58 +75|85 +75|89 +75|77 +75|52 +75|69 +75|48 +75|99 +75|26 +75|35 +75|82 +75|28 +75|46 +75|97 +75|36 +75|95 +75|39 +75|88 +75|58 +75|41 +75|53 +75|25 +75|72 +74|21 +74|18 +74|88 +74|99 +74|33 +74|89 +74|48 +74|53 +74|68 +74|34 +74|98 +74|57 +74|26 +74|25 +74|77 +74|41 +74|52 +74|56 +74|37 +74|28 +74|58 +35|68 +35|12 +35|44 +35|38 +35|18 +35|94 +35|56 +35|79 +35|98 +35|67 +35|83 +35|15 +35|43 +35|33 +35|37 +35|54 +35|65 +35|73 +35|64 +35|34 +86|39 +86|43 +86|85 +86|69 +86|36 +86|77 +86|48 +86|97 +86|26 +86|82 +86|89 +86|38 +86|35 +86|58 +86|25 +86|47 +86|72 +86|62 +86|21 +28|94 +28|35 +28|99 +28|36 +28|62 +28|39 +28|64 +28|95 +28|44 +28|82 +28|97 +28|46 +28|85 +28|47 +28|73 +28|38 +28|54 +28|72 +15|37 +15|74 +15|69 +15|86 +15|89 +15|21 +15|68 +15|53 +15|58 +15|75 +15|41 +15|77 +15|28 +15|98 +15|48 +15|34 +15|56 +95|35 +95|94 +95|65 +95|39 +95|43 +95|64 +95|36 +95|79 +95|83 +95|47 +95|38 +95|54 +95|44 +95|46 +95|67 +95|62 +26|69 +26|36 +26|28 +26|35 +26|25 +26|72 +26|65 +26|39 +26|85 +26|54 +26|99 +26|64 +26|48 +26|62 +26|82 +73|83 +73|58 +73|79 +73|37 +73|18 +73|98 +73|75 +73|26 +73|69 +73|33 +73|44 +73|67 +73|41 +73|34 +83|74 +83|37 +83|68 +83|89 +83|69 +83|86 +83|88 +83|26 +83|56 +83|75 +83|12 +83|52 +83|18 +37|28 +37|72 +37|77 +37|52 +37|25 +37|75 +37|95 +37|86 +37|48 +37|97 +37|26 +37|46 +54|79 +54|44 +54|15 +54|73 +54|37 +54|41 +54|74 +54|83 +54|75 +54|94 +54|18 +43|52 +43|44 +43|54 +43|34 +43|79 +43|18 +43|15 +43|64 +43|12 +43|74 +44|21 +44|75 +44|86 +44|53 +44|26 +44|74 +44|69 +44|33 +44|58 +98|28 +98|75 +98|88 +98|48 +98|58 +98|18 +98|52 +98|68 +58|99 +58|43 +58|35 +58|28 +58|53 +58|39 +58|26 +12|67 +12|26 +12|88 +12|41 +12|21 +12|58 +65|83 +65|44 +65|56 +65|37 +65|18 +62|83 +62|52 +62|94 +62|67 +46|15 +46|85 +46|33 +56|58 +56|53 +89|85 + +79,72,94,83,85 +83,69,15,79,37,44,52 +41,86,69,72,39,35,47 +94,62,85,35,43,54,57,79,38 +18,44,94,89,86,52,98,57,73,37,34,58,12,33,56 +72,46,88,58,26,89,85,39,86,41,48,36,69,82,75,28,95,97,52,25,53,99,77 +85,74,62,83,79,54,44,43,94,72,67,46,65,12,15,39,35,38,47 +75,52,28,37,86,34,77,48,53,18,33,21,41,69,57,25,98 +64,73,79,83,44,15,67,74,34,98,68,33,57,37,18,56,75,88,41,86,58 +65,64,73,79,83,44,12,15,67,74,98,68,37,56,75,88,52,41,86 +89,26,69,48,21,28,95,39,38,43,54 +89,26,48,77,99,25,72 +75,88,52,86,58,89,26,69,48,53,77,28,99,25,95,36,72,97,46,85,82 +73,54,44,62,57,83,52,18,15,65,56,12,75,68,34,74,33,94,67 +88,83,89,94,73,18,74 +67,34,98,68,33,57,37,75,58,89,26,69,21,77,28 +77,21,97,54,99,65,28,62,47,48,43,35,85 +74,57,75,15,88,44,89,41,33,58,94,37,83,73,68 +38,65,35,82,67,98,54,64,34,47,39,97,79,15,44,74,62,73,43,94,12,85,83 +83,44,12,15,67,74,34,68,33,57,37,18,56,75,88,52,41,86,58,89,26,69,48 +47,62,43,33,37,75,57 +57,18,75,88,52,41,86,89,26,69,53,28,95,36,97 +65,64,94,79,83,44,12,67,74,34,98,57,37,18,88,52,86 +64,75,83,12,37,88,57,67,62,56,98,94,18,54,79,74,68 +26,53,77,99,95,85,38 +67,34,53,86,37,26,98,28,88 +12,67,68,37,75,58,89,26,48,53,21 +56,79,15,67,41,73,33,98,34,74,37,57,26,86,75,89,44 +98,68,33,57,37,18,56,88,41,86,58,89,26,69,48,53,77,28,99,25,95 +12,73,38,79,33,56,18,65,74,67,62,43,34,94,44,15,54 +64,83,35,33,37,34,47,73,38,54,98,18,15,43,79,62,68,12,74 +18,56,75,88,41,86,58,89,26,48,53,77,99,25,95,36,97,39,46 +86,58,48,21,77,28,99,25,95,36,72,39,85,82,35,47,43 +98,68,33,57,37,18,56,88,52,86,58,89,26,69,48,53,77,28,99,25,95 +97,62,12,35,38,47,43,98,94,34,85,44,67,54,83 +94,73,79,83,44,12,67,74,34,98,68,33,57,37,18,56,88,52,41,86,58 +41,99,77,85,56,39,36,89,21 +73,12,33,37,56,52,26 +15,68,88,41,86 +52,58,89,69,48,53,28,25,95,36,72,46,85,82,38 +74,94,97,65,62,39,12,83,35,15,36,38,47,73,64,82,44 +86,18,52,58,12,68,34,44,64 +65,73,95,62,82,72,94,83,36,77,85,97,35,79,47 +82,69,86,95,48,58,75,39,77,52,25,88,99 +39,18,97,21,72,37,58 +46,82,35,47,62,65,73,44,33 +28,94,65,77,54,62,48 +62,35,43,74,44,54,15,79,39,73,64,65,38,12,85,47,34,98,82,67,46 +18,26,69,56,97,89,99,46,95,88,48 +37,86,12,56,48,57,41,75,69,18,89,52,26,21,58 +56,54,73,79,98,65,12,83,75,88,62,57,68,18,64,67,37,74,43,44,34,15,33 +35,46,43,97,39,73,62,85,28,99,54,79,21,72,38,25,77,64,47 +56,75,88,52,41,26,69,28,95 +86,58,26,69,53,21,77,28,99,25,36,72,39,46,35,47,43 +72,89,88,53,28,86,26,25,48 +35,65,39,64,34,46,97,44,79,67,38,54,94,15,47,43,85,12,82 +85,46,65,36,97,72,25,94,54,38,82,95,43,53,35,77,99,21,47,62,73 +34,98,33,18,56,75,88,52,86,26,69,99,25 +25,72,46,36,39,26,38,47,58,95,85,48,53,86,99,82,35,89,43,97,28,69,21 +25,95,36,72,97,46,85,82,47,43,62,64,94,73,79,83,44,12,15 +41,86,58,77,99,97,39 +37,41,58,48,21,77,36,97,39 +56,86,89,69,77 +67,79,15,82,34,65,83,94,98,47,38,54,73,33,74,35,57,85,12,68,64,43,44 +52,75,18,56,98,68,74,86,67,88,57,33,94,15,79,73,44,41,89 +99,25,95,36,72,97,39,46,85,82,38,47,43,62,54,65,64,94,73,79,83,44,12 +39,72,25,85,82,36,52 +35,26,77,52,46,72,88,69,89,85,99,58,21,39,95 +28,99,25,95,36,72,97,39,46,35,38,47,54,65,64,94,73,83,44 +56,86,89,33,28,88,53,37,58,69,26,21,48,72,18,52,57,41,77,25,95 +43,46,12,44,97,15,85,72,47,82,35,64,54,38,95,67,39,73,65,62,83 +43,54,65,64,15,33,37,56,88 +21,28,94,99,97,79,39,54,35,25,46 +99,72,82,58,36,38,52,46,85 +37,65,43,79,73,67,74,98,64,44,38,68,12,33,15,47,83 +74,86,26,12,52,57,73,68,34 +37,18,94,44,83,75,86,65,34,64,52 +43,15,83,57,74,62,44,56,33,12,38,79,94,54,67,64,18,34,68,47,65 +74,68,33,57,56,75,88,52,86,58,89,26,69,48,53,21,77,28,99 +65,34,79,88,74,44,12,41,18,94,83,98,67,86,68,52,64 +68,95,53,18,69,88,86,56,28,25,98,33,57,89,77 +97,47,43,53,54,82,73,64,99,39,46 +77,28,25,95,36,97,46,85,82,38,47,43,62,65,64,73,83 +72,85,88,53,39,52,95,99,86,69,56 +58,53,77,86,89,74,99,18,21 +28,25,69,85,97,64,46 +82,83,15,74,98,33,37 +21,77,28,99,25,95,36,72,97,39,46,85,82,35,38,43,62,54,65,64,94,73,79 +53,46,28,97,35,77,38,62,65,21,48,43,39,82,99,47,25,85,54,26,36 +39,35,38,47,43,62,54,73,79,74,68 +18,99,98,74,69,88,53,33,68,26,34,86,57 +82,35,43,62,54,65,73,79,44,67,34,68,33,57,37 +54,47,94,36,82,99,62,79,95,83,39,25,46,72,65,73,97,38,35,28,85 +33,57,37,18,56,75,88,52,41,86,58,89,26,69,48,53,21,77,99,25,95,36,72 +86,88,41,98,18,15,75,33,89,74,48,56,34,37,44,57,52,68,58,67,53 +88,41,58,89,26,69,53,21,77,28,25,36,97,39,46,82,35 +64,67,62,43,54,56,15,12,98,73,44,47,83,65,37,94,74 +56,88,52,89,53,77,85 +44,74,37,88,48,89,58,68,52,12,98,67,33,53,69,18,75,26,41,56,15 +98,83,12,94,18,65,37,35,15,47,33,68,67,74,54,34,73,43,57,44,38 +41,58,26,48,53,77,28,99,25,95,36,97,39,85,82,38,47 +47,43,62,54,64,94,73,83,44,12,15,67,34,98,68,33,57,37,18,56,75 +57,36,97,26,56,69,99 +75,28,53,41,21,18,89,48,25,52,46,88,36 +52,75,68,83,12,65,73,98,57,44,34,15,74,64,37,94,54,41,88 +74,75,67,52,21,15,58 +26,69,48,53,21,77,28,99,25,95,36,72,39,46,85,82,35,38,47,43,62,54,65 +67,74,34,68,33,57,37,18,75,88,86,26,69,48,21,77,28 +68,88,58,89,26,53,21,28,36 +83,12,15,74,75,88,48 +99,25,95,36,72,97,39,46,62,64,73,44,12 +97,21,35,94,64,65,43,47,72 +77,95,25,62,46,39,99,38,21,72,82,36,65 +57,73,67,79,75,37,68,33,86 +95,36,97,39,46,85,82,35,38,47,43,62,65,64,94,73,79,83,12,15,67 +57,48,89,26,41,18,72,52,33,75,88,77,99,56,69 +79,56,86,58,75,12,41,34,73,26,18,57,74 +89,43,69,26,39,47,48,28,85,35,54 +95,36,72,97,39,46,85,82,35,38,47,43,62,54,65,64,94,73,79,83,44,15,67 +94,82,64,83,38,35,12,62,72,34,65 +73,68,26,74,89,12,52,34,15 +52,86,58,26,21,28,99,25,95,36,97,46,85,35,38 +43,54,64,83,67,34,98,68,33,57,37,56,88 +69,56,86,33,44,89,79,68,88 +74,34,98,68,57,56,75,88,41,26,69,48,77,28,99 +74,98,33,37,18,56,88,41,86,26,69,48,53,21,77,28,99 +77,62,39,43,21,28,25,35,97,47,38,85,54 +41,86,53,21,77,28,25,95,36,72,97,46,85,82,35,38,47 +65,74,88,79,64,34,12,15,57,37,73,44,75,98,18,52,83,56,94 +62,64,94,79,83,44,15,67,74,34,98,57,52 +82,38,43,62,54,65,64,94,79,83,44,12,67,74,34,98,33,57,37 +68,33,18,34,88,26,74,52,48,57,12,15,83,58,56,37,69,41,86,89,98 +99,52,21,36,18 +75,88,53,28,77,18,52,67,26 +64,68,37,18,56,41,58 +52,72,37,77,18,39,69,86,58,36,75,25,48 +37,18,56,75,88,41,26,69,48,53,77,25,95,36,39 +82,58,53,48,72,86,69,35,38,46,47,77,43 +15,33,56,57,79,75,88,37,64,83,65,62,34 +15,98,33,57,37,18,58,69,77 +89,69,21,85,38,43,54 +58,77,99,25,36,97,39,46,82,38,43 +64,83,46,15,85,94,38,36,74,67,79,43,73,65,35 +39,46,82,38,47,62,65,94,73,79,83,44,12,15,67,74,34,98,68 +89,26,69,53,21,77,28,99,25,95,36,72,97,39,46,85,82,35,43,62,54 +26,46,89,39,97,95,77,41,21,72,48,35,25,88,52,58,28,82,99 +99,65,46,25,72,47,95,77,82,21,28,62,43,39,48 +33,67,64,68,74,56,98,57,94,44,62,79,54,65,47,73,37,38,12 +12,64,37,67,65,41,57,98,75,54,94,83,73,88,52,44,34,33,68 +47,73,38,62,65,82,57,15,43,94,44,68,85,33,54 +72,64,83,15,85,97,44,94,46,43,12,65,25 +48,53,47,95,26,97,86,39,43,25,72,85,99,89,69,58,28,46,21,77,82,38,36 +65,64,94,73,79,83,44,12,15,67,74,34,98,68,33,57,37,56,75,88,52,41,86 +41,58,33,56,15,52,86,44,79,67,88,83,74,75,34,37,26,89,12,98,57,73,68 +99,41,75,37,88,89,21,25,86,56,48,26,18,53,57,69,68 +68,35,33,62,12,64,43,15,79,44,54,65,34,46,73 +75,83,52,65,94,98,56,34,15,88,37,62,73,54,74,67,18,57,64 +28,89,77,36,38,82,48,99,53,35,62,39,69,46,95 +54,57,15,74,82,33,47,34,35,37,98 +15,67,74,34,98,68,33,57,37,18,56,75,88,52,41,86,58,26,69,48,53,21,77 +99,69,41,89,39,26,52,28,86,35,36,72,82,48,58,38,85,21,77,53,95,97,25 +41,69,89,57,68,53,25,88,48,28,34,98,56,86,75,99,58,77,18,52,26 +57,37,18,56,52,41,86,58,89,26,69,48,53,21,77,28,99,72,97 +57,37,18,56,88,52,86,26,69,53,21,72,97 +38,72,28,77,99,43,58,97,26 +62,56,54,65,18,94,88,37,33,15,74,68,44,34,64,98,73,52,12 +41,86,58,26,69,53,21,77,28,99,25,95,36,72,97,39,46,85,82,38,47 +62,44,12,15,34,18,52 +25,77,88,58,28,75,41,56,97,86,69,39,95,89,18,99,72,53,48,37,36,26,21 +88,52,41,86,58,89,26,69,48,21,77,28,36,72,97,82,35 +48,86,53,12,34,89,57,67,98,74,37,26,69,88,58,44,33 +18,88,52,86,89,26,69,21,95,36,97,39,46 +88,77,25,69,26,52,85,72,39,89,97 +12,67,56,86,89,26,69,48,21 +41,57,21,89,58,28,98,34,77,88,75,86,68,52,25,48,53,99,69,56,37,26,18 +94,12,83,97,65,79,73,95,54,67,36,15,44,47,72,82,62 +86,99,28,21,98,37,57,89,25,88,68,69,52,48,34 +53,28,36,97,39,46,38,47,43,62,65,64,73 +99,25,65,36,64 +44,69,26,88,86,15,79 +44,43,54,75,37,65,57,88,79,33,94,12,83,34,18,68,74 +52,58,89,26,77,28,25,36,97,85,82,35,38 +54,64,28,46,36 +54,44,62,37,74,18,47,64,94,67,33,98,15,73,12,56,65,43,34,38,79,57,83 +34,68,33,88,52,86,58,89,53 +43,38,77,95,64,21,62,82,28,35,48,53,69,65,47,99,85,36,97,39,54 +94,86,12,98,41,57,58,64,88,75,44,73,37,33,68,56,74 +64,44,74,41,75,15,68,83,94,79,33 +83,44,12,15,67,74,98,68,57,37,18,56,75,52,41,86,58,89,26,69,48 +25,35,39,73,94,36,65,47,53 +75,53,37,26,33,58,69,56,25,28,41,89,99,98,52,95,21 +79,85,36,39,95,72,64,44,73,46,54,83,65,15,38,97,94,12,47,67,35 diff --git a/run.py b/run.py new file mode 100644 index 0000000..431d07a --- /dev/null +++ b/run.py @@ -0,0 +1,175 @@ +from __future__ import annotations + +from pathlib import Path +import subprocess +import sys +from typing import Optional +import shlex +import re +import os +import argparse + +class Language: + def __init__(self, name: str, extension: str, run, build_extension: Optional[str] = None): + + self.name = name + self.extension = extension + self.run = run + self.build_extension = build_extension + +class Problem: + def __init__(self, language: Language, year: int, day: int, part: int, resource_location = None): + self.language = language + self.year = year + self.day = day + self.part = part + + self.source_location = str(Path("src") / self.language.name / str(self.year) / f"day{self.day}" / f"part{self.part}.{self.language.extension}") + + if resource_location: + self.resource_location = resource_location + else: + self.resource_location = str(Path("resources") / str(self.year) / f"day{self.day}.txt") + + self.build_location = str(Path("build") / f"{self.language.name}{self.year}day{self.day}part{self.part}") + (f".{self.language.build_extension}" if self.language.build_extension else "") + + self.resource_build_location = str(Path("build") / f"{self.language.name}{self.year}day{self.day}part{self.part}input") + + + def run(self, flags=None): + if flags is None: + flags = [] + + try: + self.language.run(self, flags=flags) + except RuntimeError: + pass + + +def print_command(command: str | list): + print(command if isinstance(command, str) else shlex.join([str(x) for x in command])) + +def run_command(command: str | list[str], **kwargs): + print_command(command) + p = subprocess.run(command, **kwargs) + if p.returncode != 0: + print("process returned with error code", p.returncode) + raise RuntimeError() + +def run_compile_command(command: str | list[str], **kwargs): + run_command(command, stdout=subprocess.DEVNULL, stderr=sys.stderr, **kwargs) + + +def run_run_command(command: str | list[str], **kwargs): + run_command(command, stdout=sys.stdout, stderr=sys.stderr, **kwargs) + + +def generate_commands_pladcl(problem: Problem, flags: Optional[list[str]]=None): + + preprocess_location = "utilities/dc/preprocess.py" + + run_compile_command(["pladclc", problem.source_location, "-o", problem.build_location] + (flags if flags else [])) + run_compile_command(["python3", preprocess_location, problem.resource_location, "-o", problem.resource_build_location]) + run_run_command(" ".join(["cat", problem.resource_build_location, "|", "dc", problem.build_location]), shell=True) + + +def generate_commands_pascal(problem: Problem, flags: Optional[list[str]]=None): + + run_compile_command(["fpc", problem.source_location, "-o" + problem.build_location] + (flags if flags else [])) + run_run_command([problem.build_location]) + +def generate_commands_z80(problem: Problem, flags:Optional[list[str]]=None): + simulator_location = "utilities/z80/z80sim" + preamble_location = "utilities/z80/preamble" + + run_compile_command(["zasm", problem.source_location, "-o", problem.build_location] + (flags if flags else [])) + run_compile_command(f"cat {preamble_location} {problem.build_location} > {problem.build_location + "0"}", shell=True) + + run_run_command(f"echo q | {simulator_location} -x{problem.build_location}0", shell=True) + + +languages = { + "pladcl": Language("pladcl", "pdl", generate_commands_pladcl, build_extension="dc"), + "pascal": Language("pascal", "pas", generate_commands_pascal), + "python": Language("python", "py", lambda problem, flags: run_run_command(["python3", problem.source_location] + (flags if flags else []))), + "z80": Language("z80", "z80", generate_commands_z80, build_extension="bin") +} + + +def parse_problem(problem: str): + + pattern = r"^([a-zA-Z0-9]+)(\d{4})d(?:ay)?(\d+)p(?:art)?(\d+)$" + + if not (match := re.match(pattern, problem)): + raise ValueError(f"unable to understand problem \"{problem}\"") + + language, year, day, part = match.groups() + + if not language in languages: + raise ValueError(f"unknown language \"{language}\"") + + language = languages[language] + year = int(year) + day = int(day) + part = int(part) + + p = Problem(language, year, day, part) + + return p + +USAGE = """ + +for example, to run pladcl year 2024 day 3 part 1 with debug flags +python3 run.py pladcl2024day3part1 -d + +extra flags are passed as is to the compiler""" + +parser = argparse.ArgumentParser( + prog="run.py", + epilog=USAGE, + formatter_class = argparse.RawDescriptionHelpFormatter, + exit_on_error=False, +) + +parser.add_argument("problem", type=str, + help="program to run [formatted as daypart]") +parser.add_argument("--resource-location", type=str, + help="override the default resource file (which is resources//day.txt)") + + +def fail(): + parser.print_usage() + print() + + print("\n".join(parser.format_help().splitlines()[2:])) + quit(2) + + + +if __name__ == "__main__": + + try: + args, extra_flags = parser.parse_known_args(sys.argv[1:]) + + problem = parse_problem(args.problem) + + if args.resource_location: + problem.resource_location = args.resource_location + + if not os.path.exists(loc := problem.source_location): + raise ValueError(f"couldn't find the source file\nexpected it to be {loc}") + + if not os.path.exists(loc := problem.resource_location): + raise ValueError(f"couldn't find the resource file\nexpected it to be {loc}") + + + problem.run(extra_flags) + + except (argparse.ArgumentError, ValueError) as e: + print(e) + print() + fail() + + + + diff --git a/src/pascal/2023/day1/part1.pas b/src/pascal/2023/day1/part1.pas new file mode 100644 index 0000000..d12bceb --- /dev/null +++ b/src/pascal/2023/day1/part1.pas @@ -0,0 +1,53 @@ +program day1part1; + +var +file_: text; +start: string; +c: char; +first, last: char; +sum, value: int32; + +(* Here the main program block starts *) +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day1.txt'); + reset(file_); + + { initialize sum to 0 } + sum := 0; + + { until the file is empty } + while not eof(file_) do + begin + + { read a line from the file } + readln(file_, start); + + { fill in placeholders } + first := 'a'; + last := 'a'; + + { for each characters } + for c in start do + begin + { if it is a number } + if (('0' <= c) and (c <= '9')) then + begin + { set last to that number } + last := c; + { if first hasn't been set, then set it as a number} + if (first = 'a') then + first := c + end; + end; + + { calculate the actual value of the number and add it to the sum } + val(concat(first, last), value); + sum := sum + value; + + end; + + { print out that beautiful sum} + writeln(sum); + +end. diff --git a/src/pascal/2023/day1/part2.pas b/src/pascal/2023/day1/part2.pas new file mode 100644 index 0000000..0347818 --- /dev/null +++ b/src/pascal/2023/day1/part2.pas @@ -0,0 +1,75 @@ +program day2part2; +uses sysutils; + +var +file_: text; +start: string; +c: char; +first, last: char; +value, sum: int32; +names: array [0..9] of string = ('zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'); +numbers: array [0..9] of char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); +i, j: int32; +s: string; + +(* Here the main program block starts *) +begin + + { open inp.txt for reading } + assign(file_, 'resources/2023/day1.txt'); + reset(file_); + + { initialize sum to 0 } + sum := 0; + + { until the file is empty } + while not eof(file_) do + begin + + { read a line from the file } + readln(file_, start); + + { fill in placeholders } + first := 'a'; + last := 'a'; + + { for each characters } + for i := 1 to length(start) do + begin + + c := start[i]; + + { check for text number } + for j := 0 to 9 do + begin + { compare the substring with the name of a number } + s := copy(start, i, length(names[j])); + if (comparestr(s, names[j]) = 0) then + begin + { if it matches then this is a number } + c := numbers[j]; + break; + end; + end; + + { if it is a number } + if (('0' <= c) and (c <= '9')) then + begin + { set last to that number } + last := c; + { if first hasn't been set, then set it as a number} + if (first = 'a') then + first := c + end; + end; + + { calculate the actual value of the number and add it to the sum } + val(first + last, value); + sum := sum + value; + + end; + + { print out that beautiful sum } + writeln(sum); + +end. diff --git a/src/pascal/2023/day10/part1.pas b/src/pascal/2023/day10/part1.pas new file mode 100644 index 0000000..d72160f --- /dev/null +++ b/src/pascal/2023/day10/part1.pas @@ -0,0 +1,136 @@ +program day10part1; +uses sysutils; + +type + direction = (Left, Up, Right, Down, NA); + + +function step_path(var curr: array of int32; last_direction: direction; c: char): direction; +begin + + // step_path := curr; + + step_path := NA; + + case last_direction of + Left: + begin + case c of + '-': step_path := Left; + 'L': step_path := Up; + 'F': step_path := Down; + end; + end; + Up: + begin + case c of + '|': step_path := Up; + '7': step_path := Left; + 'F': step_path := Right; + end; + end; + Right: + begin + case c of + '-': step_path := Right; + '7': step_path := Down; + 'J': step_path := Up; + end; + end; + Down: + begin + case c of + '|': step_path := Down; + 'J': step_path := Left; + 'L': step_path := Right; + end; + end; + end; + + case step_path of + Up: curr[0] := curr[0] - 1; + Down: curr[0] := curr[0] + 1; + Left: curr[1] := curr[1] - 1; + Right: curr[1] := curr[1] + 1; + end; + + if (last_direction = NA) then + writeln('bruh'); + +end; + +var + file_: text; + + map: array[1..1000] of string; + str: string; + + count: int32; + + steps: int32; + step: char; + + s_loc, loc: array[0..1] of int32; + ld: direction; + + i: int32; + + { node, left, right } + nodes: array[0..1000, 0..2] of string; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day10.txt'); + reset(file_); + + count := 1; + while not EOF(file_) do + begin + + readln(file_, map[count]); + + i := pos('S', map[count]); + + if i <> 0 then + begin + s_loc[0] := count; + s_loc[1] := i; + end; + + count := count + 1; + + end; + + loc := s_loc; + count := 0; + + { get possible initial directions } + if (map[s_loc[0], s_loc[1] - 1] = '-') or (map[s_loc[0], s_loc[1] - 1] = 'F') or (map[s_loc[0], s_loc[1] - 1] = 'L') then + begin + loc[1] := loc[1] - 1; + ld := Left; + end + else if (map[s_loc[0] - 1, s_loc[1]] = '|') or (map[s_loc[0] - 1, s_loc[1]] = '7') or (map[s_loc[0] - 1, s_loc[1]] = 'F') then + begin + loc[0] := loc[0] - 1; + ld := Up; + end + else + begin + { if it's neither up nor left, then both right and down must be valid. } + { pick right arbitrarily } + ld := Right; + loc[1] := loc[1] + 1; + end; + + while (loc[0] <> s_loc[0]) or (loc[1] <> s_loc[1]) do + begin + count := count + 1; + ld := step_path(loc, ld, map[loc[0], loc[1]]); + end; + + count := count + 1; + writeln(count div 2); + +end. + diff --git a/src/pascal/2023/day10/part2.pas b/src/pascal/2023/day10/part2.pas new file mode 100644 index 0000000..66aa117 --- /dev/null +++ b/src/pascal/2023/day10/part2.pas @@ -0,0 +1,276 @@ +program day10part1; +uses sysutils; + +type + direction = (Left, Up, Right, Down, NA); + blocktype = (Empty, Pipe, Red, Blue); + +var + blocks: array[1..1000, 1..1000] of blocktype; + + +procedure replace_if_not_pipe(y: int32; x: int32; new_type: blocktype); +begin + if blocks[y, x] <> Pipe then + blocks[y, x] := new_type +end; + +function step_path(var curr: array of int32; last_direction: direction; c: char): direction; +begin + + // step_path := curr; + + step_path := NA; + + { mark lefthand side as blue, righthand side as red } + case last_direction of + Left: + begin + replace_if_not_pipe(curr[0] - 1, curr[1], Red); + replace_if_not_pipe(curr[0] + 1, curr[1], Blue); + end; + Right: + begin + replace_if_not_pipe(curr[0] - 1, curr[1], Blue); + replace_if_not_pipe(curr[0] + 1, curr[1], Red); + end; + Down: + begin + replace_if_not_pipe(curr[0], curr[1] - 1, Red); + replace_if_not_pipe(curr[0], curr[1] + 1, Blue); + end; + Up: + begin + replace_if_not_pipe(curr[0], curr[1] - 1, Blue); + replace_if_not_pipe(curr[0], curr[1] + 1, Red); + end; + end; + + case last_direction of + Left: + begin + case c of + '-': step_path := Left; + 'L': step_path := Up; + 'F': step_path := Down; + end; + end; + Up: + begin + case c of + '|': step_path := Up; + '7': step_path := Left; + 'F': step_path := Right; + end; + end; + Right: + begin + case c of + '-': step_path := Right; + '7': step_path := Down; + 'J': step_path := Up; + end; + end; + Down: + begin + case c of + '|': step_path := Down; + 'J': step_path := Left; + 'L': step_path := Right; + end; + end; + end; + + { mark lefthand side as blue, righthand side as red } + case step_path of + Left: + begin + replace_if_not_pipe(curr[0] - 1, curr[1], Red); + replace_if_not_pipe(curr[0] + 1, curr[1], Blue); + end; + Right: + begin + replace_if_not_pipe(curr[0] - 1, curr[1], Blue); + replace_if_not_pipe(curr[0] + 1, curr[1], Red); + end; + Down: + begin + replace_if_not_pipe(curr[0], curr[1] - 1, Red); + replace_if_not_pipe(curr[0], curr[1] + 1, Blue); + end; + Up: + begin + replace_if_not_pipe(curr[0], curr[1] - 1, Blue); + replace_if_not_pipe(curr[0], curr[1] + 1, Red); + end; + end; + + { move to the next pipe } + case step_path of + Up: curr[0] := curr[0] - 1; + Down: curr[0] := curr[0] + 1; + Left: curr[1] := curr[1] - 1; + Right: curr[1] := curr[1] + 1; + end; + + if (last_direction = NA) then + writeln('bruh'); + +end; + +var + file_: text; + + map: array[1..1000] of string; + str: string; + + count: int32; + + width: int32; + + steps: int32; + step: char; + + s_loc, loc: array[0..1] of int32; + ld: direction; + + i, j: int32; + + { node, left, right } + nodes: array[0..1000, 0..2] of string; + + current: blocktype; + invalid: blocktype; + + red_count, blue_count: int32; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day10.txt'); + reset(file_); + + count := 1; + while not EOF(file_) do + begin + + readln(file_, map[count]); + + i := pos('S', map[count]); + + if i <> 0 then + begin + s_loc[0] := count; + s_loc[1] := i; + end; + + count := count + 1; + + end; + + width := length(map[1]); + + loc := s_loc; + + { get possible initial directions } + if (map[s_loc[0], s_loc[1] - 1] = '-') or (map[s_loc[0], s_loc[1] - 1] = 'F') or (map[s_loc[0], s_loc[1] - 1] = 'L') then + begin + loc[1] := loc[1] - 1; + ld := Left; + end + else if (map[s_loc[0] - 1, s_loc[1]] = '|') or (map[s_loc[0] - 1, s_loc[1]] = '7') or (map[s_loc[0] - 1, s_loc[1]] = 'F') then + begin + loc[0] := loc[0] - 1; + ld := Up; + end + else + begin + { if it's neither up nor left, then both right and down must be valid. } + { pick right arbitrarily } + ld := Right; + loc[1] := loc[1] + 1; + end; + + // shitty memset + for i := 1 to count do + begin + for j := 1 to width do + begin + blocks[i, j] := Empty; + end; + end; + + blocks[s_loc[0], s_loc[1]] := Pipe; + + + { mark array of pipes, and set some red and blue squares } + while (loc[0] <> s_loc[0]) or (loc[1] <> s_loc[1]) do + begin + + { mark pipe } + blocks[loc[0], loc[1]] := Pipe; + + ld := step_path(loc, ld, map[loc[0], loc[1]]); + end; + { step one additional time } + ld := step_path(loc, ld, map[loc[0], loc[1]]); + + { fill in the map and count} + { techincally filling in the map is uneccessary but it looks cool } + + red_count := 0; + blue_count := 0; + + for i := 1 to count - 1 do + begin + current := Empty; + for j := 1 to width do + begin + case blocks[i, j] of + Empty: + begin + blocks[i, j] := current; + case current of + Red: red_count := red_count + 1; + Blue: blue_count := blue_count + 1; + end; + end; + // Pipe you do nothing + Red: + begin + current := Red; + red_count := red_count + 1; + end; + Blue: + begin + current := Blue; + blue_count := blue_count + 1; + end; + end; + end; + + { if we're holding onto this at the end, then this is the color outside of the square} + if current <> Empty then + invalid := current + end; + + { print out the map } + for i := 1 to count - 1 do + begin + for j := 1 to width do + begin + case blocks[i, j] of + Empty: write(' '); + Pipe: write('â–ˆ'); + Red: write('â–’'); + Blue: write('â–‘'); + end; + end; + writeln(); + end; + + writeln(invalid, ' is bad color.'); + writeln('Red count is ', red_count); + writeln('Blue count is ', blue_count); + +end. + diff --git a/src/pascal/2023/day11/part1.pas b/src/pascal/2023/day11/part1.pas new file mode 100644 index 0000000..dd2249b --- /dev/null +++ b/src/pascal/2023/day11/part1.pas @@ -0,0 +1,113 @@ +program day11part1; +uses sysutils; + + +function dist_between(x1, x2: int32; empty_list: array of boolean): int32; +var + i: int32; +begin + + { swap operands so x1 is always smaller} + if (x2 < x1) then + begin + i := x2; + x2 := x1; + x1 := i; + end; + + { calculate distance } + dist_between := 0; + for i := x1 to x2 - 1 do + begin + + dist_between := dist_between + 1; + + { if gap, increment by an additional 1 } + if empty_list[i] then + dist_between := dist_between + 1; + + + end; +end; + +function galaxy_dist(g1, g2: array of int64; row_list, col_list: array of boolean): int32; +begin + galaxy_dist := dist_between(g1[0], g2[0], col_list) + dist_between(g1[1], g2[1], row_list); +end; + +var + file_: text; + + str: string; + + galaxies: array[0..1000, 0..1] of int64; + galaxy_count: int32; + + column_empty: array[1..1000] of boolean; + row_empty: array[1..1000] of boolean; + + i, j: int32; + count: int32; + + sum: int32; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day11.txt'); + reset(file_); + + { set row/cols to empty } + for i := 0 to 1000 do + begin + column_empty[i] := true; + row_empty[i] := true; + end; + + count := 0; + galaxy_count := 0; + + { read file } + while not EOF(file_) do + begin + + count := count + 1; + + readln(file_, str); + + for i := 1 to length(str) do + begin + + if str[i] = '#' then + begin + + { record this galaxy } + galaxy_count := galaxy_count + 1; + + galaxies[galaxy_count][0] := i; + galaxies[galaxy_count][1] := count; + + { mark rows/cols as nonempty } + row_empty[count] := false; + column_empty[i] := false; + + end; + + end; + end; + + sum := 0; + { for each pair } + for i := 1 to galaxy_count do + begin + for j := i + 1 to galaxy_count do + begin + + { sum the pairwise distance } + sum := sum + galaxy_dist(galaxies[i], galaxies[j], row_empty, column_empty); + + end; + end; + + writeln('The sum is ', sum); +end. + diff --git a/src/pascal/2023/day11/part2.pas b/src/pascal/2023/day11/part2.pas new file mode 100644 index 0000000..fd3dfc7 --- /dev/null +++ b/src/pascal/2023/day11/part2.pas @@ -0,0 +1,113 @@ +program day11part1; +uses sysutils; + + +function dist_between(x1, x2: int32; empty_list: array of boolean): int64; +var + i: int32; +begin + + { swap operands so x1 is always smaller} + if (x2 < x1) then + begin + i := x2; + x2 := x1; + x1 := i; + end; + + { calculate distance } + dist_between := 0; + for i := x1 to x2 - 1 do + begin + + dist_between := dist_between + 1; + + { if gap, increment by an additional 999999 } + if empty_list[i] then + dist_between := dist_between + 999999; + + + end; +end; + +function galaxy_dist(g1, g2: array of int64; row_list, col_list: array of boolean): int64; +begin + galaxy_dist := dist_between(g1[0], g2[0], col_list) + dist_between(g1[1], g2[1], row_list); +end; + +var + file_: text; + + str: string; + + galaxies: array[0..1000, 0..1] of int64; + galaxy_count: int32; + + column_empty: array[1..1000] of boolean; + row_empty: array[1..1000] of boolean; + + i, j: int32; + count: int32; + + sum: int64; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day11.txt'); + reset(file_); + + { set row/cols to empty } + for i := 0 to 1000 do + begin + column_empty[i] := true; + row_empty[i] := true; + end; + + count := 0; + galaxy_count := 0; + + { read file } + while not EOF(file_) do + begin + + count := count + 1; + + readln(file_, str); + + for i := 1 to length(str) do + begin + + if str[i] = '#' then + begin + + { record this galaxy } + galaxy_count := galaxy_count + 1; + + galaxies[galaxy_count][0] := i; + galaxies[galaxy_count][1] := count; + + { mark rows/cols as nonempty } + row_empty[count] := false; + column_empty[i] := false; + + end; + + end; + end; + + sum := 0; + { for each pair } + for i := 1 to galaxy_count do + begin + for j := i + 1 to galaxy_count do + begin + + { sum the pairwise distance } + sum := sum + galaxy_dist(galaxies[i], galaxies[j], row_empty, column_empty); + + end; + end; + + writeln('The sum is ', sum); +end. + diff --git a/src/pascal/2023/day12/part1.pas b/src/pascal/2023/day12/part1.pas new file mode 100644 index 0000000..e3f1c50 --- /dev/null +++ b/src/pascal/2023/day12/part1.pas @@ -0,0 +1,205 @@ +{$mode objfpc} + +program day12part1; +uses sysutils; + +type + int32array = array of int32; + stringarray = array of string; + +function sum(l: array of int32; start: int32 = 0): int32; +var + i: int32; +begin + sum := 0; + for i := start to length(l) - 1 do + sum := l[i] + sum; +end; + +function split_to_int(s: string; delim: char): int32array ; +var + i, last_delim, count : int32; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_int, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + val( + copy(s, last_delim + 1, i - last_delim - 1), split_to_int[count] + ); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + val( + copy(s, last_delim + 1, length(s) - last_delim), split_to_int[count] + ); +end; + +function split_to_str(s: string; delim: char): stringarray; +var + i, last_delim, count : int32; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_str, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + split_to_str[count] := copy(s, last_delim + 1, i - last_delim - 1); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + split_to_str[count] := copy(s, last_delim + 1, length(s) - last_delim) +end; + +function will_fit(s: string; idx, length: int32): boolean; +var + i: int32; +begin + will_fit := true; + for i := idx to idx + length - 1 do + begin + if s[i] = '.' then + begin + will_fit := false; + break; + end; + end; +end; + +function all_after_not(s: string; idx: int32; c: char): boolean; +var + i: int32; +begin + all_after_not := true; + for i := idx to length(s) do + begin + if s[i] = c then + begin + all_after_not := false; + break; + end; + end; +end; + +function possibilties(s: string; l: array of int32; start_s: int32 = 1; start_l: int32 = 0): int32; +var + i: int32; + +begin + + possibilties := 0; + + // writeln(s, l[start_l], length(l), start_s, start_l); + + { if there is only one spring left then } + if length(l) - start_l = 1 then + begin + + { check every possibility } + for i := start_s to length(s) - l[start_l] + 1 do + begin + { if it will fit here, then it's valid } + if will_fit(s, i, l[start_l]) and all_after_not(s, i + l[start_l], '#') then + possibilties := possibilties + 1; + + { if we pass by a #, then it's not valid anymore as the # won't be filled } + if s[i] = '#' then + break; + end; + + end + else + begin + + for i := start_s to length(s) - sum(l, start_l) - length(l) + start_l + 2 do + begin + { if it will fit and we aren't skipping a '#', recursively find possibilities } + + if will_fit(s, i, l[start_l]) and (s[i + l[start_l]] <> '#') then + possibilties := possibilties + possibilties(s, l, i + l[start_l] + 1, start_l + 1); + + { if we pass by a #, then it's not valid anymore as the # won't be filled } + if s[i] = '#' then + break; + end; + end; +end; + +var + + s: string; + pattern: array of int32; + + split: array of string; + + file_: text; + + total: int32; + +begin + + assign(file_, 'resources/2023/day12.txt'); + reset(file_); + + total := 0; + + while not EOF(file_) do + begin + + readln(file_, s); + split := split_to_str(s, ' '); + + pattern := split_to_int(split[1], ','); + + total := total + possibilties(split[0], pattern); + + end; + + writeln('The sum is ', total); +end. + diff --git a/src/pascal/2023/day12/part2.pas b/src/pascal/2023/day12/part2.pas new file mode 100644 index 0000000..9a3847b --- /dev/null +++ b/src/pascal/2023/day12/part2.pas @@ -0,0 +1,250 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day12part1; +uses sysutils; + +type + int64array = array of int64; + stringarray = array of string; + +function sum(l: array of int64; start: int64 = 0): int64; +var + i: int64; +begin + sum := 0; + for i := start to length(l) - 1 do + sum := l[i] + sum; +end; + +function split_to_int(s: string; delim: char): int64array ; +var + i, last_delim, count : int64; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_int, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + val( + copy(s, last_delim + 1, i - last_delim - 1), split_to_int[count] + ); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + val( + copy(s, last_delim + 1, length(s) - last_delim), split_to_int[count] + ); +end; + +function split_to_str(s: string; delim: char): stringarray; +var + i, last_delim, count : int64; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_str, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + split_to_str[count] := copy(s, last_delim + 1, i - last_delim - 1); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + split_to_str[count] := copy(s, last_delim + 1, length(s) - last_delim) +end; + +function will_fit(s: string; idx, length: int64): boolean; +var + i: int64; +begin + will_fit := true; + for i := idx to idx + length - 1 do + begin + if s[i] = '.' then + begin + will_fit := false; + break; + end; + end; +end; + +function all_after_not(s: string; idx: int64; c: char): boolean; +var + i: int64; +begin + all_after_not := true; + for i := idx to length(s) do + begin + if s[i] = c then + begin + all_after_not := false; + break; + end; + end; +end; + +var + cache: array[0..1000, 0..1000] of int64; + +procedure clear_cache(); +var + i, j: int64; +begin + for i := 0 to 1000 do + begin + for j:= 0 to 1000 do + begin + cache[i, j] := -1; + end; + end; +end; + +function possibilties(s: string; l: array of int64; start_s: int64 = 1; start_l: int64 = 0): int64; +var + i: int64; + +begin + + possibilties := 0; + + { clear the cache if we r starting } + if start_l = 0 then + clear_cache(); + + { return cache if we have the value } + if cache[start_s, start_l] <> -1 then + begin + possibilties := cache[start_s, start_l]; + exit; + end; + + { if there is only one spring left then } + if length(l) - start_l = 1 then + begin + + { check every possibility } + for i := start_s to length(s) - l[start_l] + 1 do + begin + { if it will fit here, then it's valid } + if will_fit(s, i, l[start_l]) and all_after_not(s, i + l[start_l], '#') then + possibilties := possibilties + 1; + + { if we pass by a #, then it's not valid anymore as the # won't be filled } + if s[i] = '#' then + break; + end; + + end + else + begin + + for i := start_s to length(s) - sum(l, start_l) - length(l) + start_l + 2 do + begin + { if it will fit and we aren't skipping a '#', recursively find possibilities } + + if will_fit(s, i, l[start_l]) and (s[i + l[start_l]] <> '#') then + possibilties := possibilties + possibilties(s, l, i + l[start_l] + 1, start_l + 1); + + { if we pass by a #, then it's not valid anymore as the # won't be filled } + if s[i] = '#' then + break; + end; + end; + + cache[start_s, start_l] := possibilties; + +end; + +function duplicate_int_array(arr: int64array; times: int64): int64array; +var + i: int64; +begin + setlength(duplicate_int_array, length(arr) * times); + + for i := 0 to length(arr) * times - 1 do + begin + duplicate_int_array[i] := arr[i mod length(arr)]; + end; +end; + +var + + s: string; + pattern: array of int64; + + split: array of string; + + file_: text; + + total: int64; + +begin + + assign(file_, 'resources/2023/day12.txt'); + reset(file_); + + total := 0; + + while not EOF(file_) do + begin + + readln(file_, s); + split := split_to_str(s, ' '); + + pattern := split_to_int(split[1], ','); + + //total := total + possibilties(split[0], pattern); + + total := total + possibilties(split[0] + '?' + split[0] + '?' + split[0] + '?' + split[0] + '?' + split[0], + duplicate_int_array(pattern, 5)); + + + end; + + writeln('The sum is ', total); +end. + diff --git a/src/pascal/2023/day13/part1.pas b/src/pascal/2023/day13/part1.pas new file mode 100644 index 0000000..20e8b9b --- /dev/null +++ b/src/pascal/2023/day13/part1.pas @@ -0,0 +1,142 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day13part1; +uses sysutils; + +type + Tmap = record + map: array[1..100] of string; + height: int32; + width: int32; + end; + +function max(a, b: int32): int32; +begin + max := a; + if b > a then + max := b; +end; + +{ check for mirrors that lay vertically (column mirror) } +function check_v_mirror(map: Tmap; col: int32): boolean; +var + i, j: int32; +begin + + check_v_mirror := true; + for j := 1 to map.height do + begin + for i := max(1, 2 * col - map.width + 1) to col do + begin + // writeln(i, ' ', col*2 - i); + if map.map[j, i] <> map.map[j, col * 2 - i + 1] then + begin + check_v_mirror := false; + break + end; + end; + + if not check_v_mirror then + break; + end; + + check_v_mirror := check_v_mirror; + +end; + +{ check for mirrors that lay vertically (column mirror) } +function check_h_mirror(map: Tmap; row: int32): boolean; +var + i, j: int32; +begin + + check_h_mirror := true; + for j := 1 to map.width do + begin + for i := max(1, 2 * row - map.height + 1) to row do + begin + //writeln(i, ' ', row*2 - i + 1); + if map.map[i, j] <> map.map[row * 2 - i + 1, j] then + begin + check_h_mirror := false; + break + end; + end; + + if not check_h_mirror then + break; + end; +end; + + +function get_mirror(map: Tmap): int32; +var + i: int32; +begin + { check vertical ones first } + for i := 1 to map.width - 1 do + begin + if check_v_mirror(map, i) then + begin + get_mirror := i; + exit; + end; + end; + + { check horizontal ones now } + for i := 1 to map.height - 1 do + begin + if check_h_mirror(map, i) then + begin + get_mirror := i shl 6 + i shl 5 + i shl 2; + exit; + end; + end; + +end; + +var + + map: Tmap; + file_: text; + s: string; + total, map_count: int32; + +begin + + assign(file_, 'resources/2023/day13.txt'); + reset(file_); + + total := 0; + map_count := 0; + + while not EOF(file_) do + begin + + readln(file_, s); + writeln(s); + if length(s) = 0 then + begin + // come back to this + + total := total + get_mirror(map); + + map_count := 0; + + end + else + begin + + map_count := map_count + 1; + map.map[map_count] := s; + map.height := map_count; + map.width := length(s); + + end; + + end; + + writeln(total); + +end. diff --git a/src/pascal/2023/day13/part2.pas b/src/pascal/2023/day13/part2.pas new file mode 100644 index 0000000..60ae1f2 --- /dev/null +++ b/src/pascal/2023/day13/part2.pas @@ -0,0 +1,149 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day13part1; +uses sysutils; + +type + Tmap = record + map: array[1..100] of string; + height: int32; + width: int32; + end; + +function max(a, b: int32): int32; +begin + max := a; + if b > a then + max := b; +end; + +{ check for mirrors that lay vertically (column mirror) } +function check_v_mirror(map: Tmap; col: int32): boolean; +var + i, j: int32; + errors: int32; +begin + + errors := 0; + for j := 1 to map.height do + begin + for i := max(1, 2 * col - map.width + 1) to col do + begin + // writeln(i, ' ', col*2 - i); + if map.map[j, i] <> map.map[j, col * 2 - i + 1] then + begin + errors := errors + 1; + if errors > 1 then + break; + end; + end; + + if errors > 1 then + break; + end; + + check_v_mirror := errors = 1; + +end; + +{ check for mirrors that lay vertically (column mirror) } +function check_h_mirror(map: Tmap; row: int32): boolean; +var + i, j: int32; + errors: int32; +begin + + errors := 0; + for j := 1 to map.width do + begin + for i := max(1, 2 * row - map.height + 1) to row do + begin + //writeln(i, ' ', row*2 - i + 1); + if map.map[i, j] <> map.map[row * 2 - i + 1, j] then + begin + errors := errors + 1; + if errors > 1 then + break; + end; + end; + + if errors > 1 then + break; + end; + + check_h_mirror := errors = 1; +end; + + +function get_mirror(map: Tmap): int32; +var + i: int32; +begin + { check vertical ones first } + for i := 1 to map.width - 1 do + begin + if check_v_mirror(map, i) then + begin + get_mirror := i; + exit; + end; + end; + + { check horizontal ones now } + for i := 1 to map.height - 1 do + begin + if check_h_mirror(map, i) then + begin + get_mirror := i shl 6 + i shl 5 + i shl 2; + exit; + end; + end; + + if get_mirror = 0 then + writeln('oh fuck'); + +end; + +var + + map: Tmap; + file_: text; + s: string; + total, map_count: int32; + +begin + + assign(file_, 'resources/2023/day13.txt'); + reset(file_); + + total := 0; + map_count := 0; + + while not EOF(file_) do + begin + + readln(file_, s); + if length(s) = 0 then + begin + + total := total + get_mirror(map); + + map_count := 0; + + end + else + begin + + map_count := map_count + 1; + map.map[map_count] := s; + map.height := map_count; + map.width := length(s); + + end; + + end; + + writeln(total); + +end. diff --git a/src/pascal/2023/day14/part1.pas b/src/pascal/2023/day14/part1.pas new file mode 100644 index 0000000..e7a60a0 --- /dev/null +++ b/src/pascal/2023/day14/part1.pas @@ -0,0 +1,61 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day14part1; +uses sysutils; + +var + + file_: text; + s: string; + + map: array[1..1000] of string; + + current_boulders: int32; + height, width: int32; + i, j, k: int32; + + sum: int32; + +begin + + assign(file_, 'resources/2023/day14.txt'); + reset(file_); + + height := 1; + fillchar(map[1], 255, '#'); + + while not eof(file_) do + begin + height := height + 1; + readln(file_, map[height]); + end; + + width := length(map[2]); + + sum := 0; + + for i := 1 to width do + begin + + current_boulders := 0; + + for j := 1 to height do + begin + case map[height - j + 1][i] of + 'O': current_boulders := current_boulders + 1; + '#': + begin + for k := j - current_boulders to j - 1 do + begin + sum := sum + k; + end; + current_boulders := 0; + end; + end; + end; + end; + + writeln('sum: ', sum); + +end. diff --git a/src/pascal/2023/day14/part2.pas b/src/pascal/2023/day14/part2.pas new file mode 100644 index 0000000..815ffc9 --- /dev/null +++ b/src/pascal/2023/day14/part2.pas @@ -0,0 +1,290 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day14part1; +uses sysutils; + +procedure print_map(map: array of string; height: int32); +var + i: int32; +begin + for i := 0 to height - 1 do + writeln(map[i]); +end; + +procedure copy_map(map: array of string; var map2: array of string; height: int32); +var + i: int32; +begin + for i := 0 to height - 1 do + map2[i] := map[i] +end; + +procedure shift_up(var map: array of string; height: int32; width: int32); +var + i, j, k: int32; + current_boulders: int32; +begin + for i := 1 to width do + begin + + current_boulders := 0; + + for j := 1 to height do + begin + case map[height - j][i] of + 'O': + begin + current_boulders := current_boulders + 1; + map[height - j][i] := '.' + end; + '#': + begin + for k := height - j + 1 to height - j + current_boulders do + begin + map[k][i] := 'O' + end; + current_boulders := 0; + end; + end; + end; + + for k := 0 to current_boulders - 1 do + begin + map[k][i] := 'O' + end; + current_boulders := 0; + + end; +end; + +procedure shift_left(var map: array of string; height: int32; width: int32); +var + i, j, k: int32; + current_boulders: int32; +begin + for i := 0 to height - 1 do + begin + + current_boulders := 0; + + for j := 0 to width - 1 do + begin + case map[i][width - j] of + 'O': + begin + current_boulders := current_boulders + 1; + map[i][width - j] := '.' + end; + '#': + begin + for k := width - j + 1 to width - j + current_boulders do + begin + map[i][k] := 'O' + end; + current_boulders := 0; + end; + end; + end; + + for k := 1 to current_boulders do + begin + map[i][k] := 'O' + end; + current_boulders := 0; + + end; +end; + +procedure shift_down(var map: array of string; height: int32; width: int32); +var + i, j, k: int32; + current_boulders: int32; +begin + for i := 1 to width do + begin + + current_boulders := 0; + + for j := 0 to height - 1 do + begin + case map[j][i] of + 'O': + begin + current_boulders := current_boulders + 1; + map[j][i] := '.' + end; + '#': + begin + for k := j - current_boulders to j - 1 do + begin + map[k][i] := 'O' + end; + current_boulders := 0; + end; + end; + end; + + for k := height - current_boulders to height - 1 do + begin + map[k][i] := 'O' + end; + current_boulders := 0; + + end; +end; + +procedure shift_right(var map: array of string; height: int32; width: int32); +var + i, j, k: int32; + current_boulders: int32; +begin + for i := 0 to height - 1 do + begin + + current_boulders := 0; + + for j := 1 to width do + begin + case map[i][j] of + 'O': + begin + current_boulders := current_boulders + 1; + map[i][j] := '.' + end; + '#': + begin + for k := j - current_boulders to j - 1 do + begin + map[i][k] := 'O' + end; + current_boulders := 0; + end; + end; + end; + + for k := width - current_boulders + 1 to width do + begin + map[i][k] := 'O' + end; + current_boulders := 0; + + end; +end; + +procedure spin_cycle(var map: array of string; height: int32; width: int32); +begin + shift_up(map, height, width); + shift_left(map, height, width); + shift_down(map, height, width); + shift_right(map, height, width); +end; + +function calculate_load(map: array of string; height: int32): int32; +var + i: int32; + c: char; +begin + calculate_load := 0; + for i := 0 to height - 1 do + begin + for c in map[i] do + begin + if c = 'O' then + calculate_load := calculate_load + height - i; + end; + end; +end; + +function strcomp(s1: string; s2: string): boolean; +var + i: int32; +begin + strcomp := true; + for i := 1 to length(s1) do + begin + if (s1[i] <> s2[i]) then + begin + strcomp := false; + break; + end; + end; +end; + +function map_equal(map: array of string; map2: array of string; height: int32): boolean; +var + i: int32; +begin + map_equal := true; + for i := 0 to height - 1 do + begin + if not strcomp(map[i], map2[i]) then + begin + map_equal := false; + break; + end; + end; +end; + +var + + file_: text; + + map: array[1..10000, 1..100] of string; + values: array[1..10000] of int32; + + height, width: int32; + i, j: int32; + + finished: boolean; + + wanted: int32; + +begin + + assign(file_, 'resources/2023/day14.txt'); + reset(file_); + + height := 0; + + while not eof(file_) do + begin + height := height + 1; + readln(file_, map[1, height]); + end; + + width := length(map[1, 1]); + values[1] := calculate_load(map[1], height); + finished := false; + + for i := 2 to 100000 do + begin + + copy_map(map[i - 1], map[i], height); + spin_cycle(map[i], height, width); + values[i] := calculate_load(map[i], height); + + writeln('Found value ', values[i], ' for the ', i, 'th spin cycle'); + + for j := 1 to i - 1 do + begin + if map_equal(map[i], map[j], height) then + begin + writeln('This map is equal to the ', j, 'th map'); + finished := true; + break; + end; + end; + + if finished then + break; + + end; + + wanted := 1000000000; + + writeln('This map has a cycle length of ', i - j, 'x + ', j); + writeln('This places ', wanted, ' at position ', (wanted - j) mod (i - j) + j + 1, ' in the cycle'); + writeln('It would have a total load of ', values[(wanted - j) mod (i - j) + j + 1]); + +end. diff --git a/src/pascal/2023/day15/part1.pas b/src/pascal/2023/day15/part1.pas new file mode 100644 index 0000000..2be8562 --- /dev/null +++ b/src/pascal/2023/day15/part1.pas @@ -0,0 +1,85 @@ +{$mode objfpc} + +program day12part1; +uses sysutils; + +type + stringarray = array of string; + +function split_to_str(s: AnsiString; delim: char): stringarray; +var + i, last_delim, count : int32; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_str, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + split_to_str[count] := copy(s, last_delim + 1, i - last_delim - 1); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + split_to_str[count] := copy(s, last_delim + 1, length(s) - last_delim) +end; + +function hash(s: string): int32; +var + c: char; +begin + hash := 0; + for c in s do + hash := ((hash + ord(c)) * 17) and 255; + + +end; + +var + + s: AnsiString; + to_hash: array of string; + + split: array of string; + + file_: text; + + sum: int32; + +begin + + assign(file_, 'resources/2023/day15.txt'); + reset(file_); + readln(file_, s); + + to_hash := split_to_str(s, ','); + writeln(length(to_hash)); + + sum := 0; + + for s in to_hash do + sum := sum + hash(s); + + writeln('The sum is ', sum); +end. + diff --git a/src/pascal/2023/day15/part2.pas b/src/pascal/2023/day15/part2.pas new file mode 100644 index 0000000..9d1f80d --- /dev/null +++ b/src/pascal/2023/day15/part2.pas @@ -0,0 +1,194 @@ +{$mode objfpc} + +program day12part1; +uses sysutils; + +type + stringarray = array of string; + lens = record + label_: string; + focal: int32; + end; + + +function split_to_str(s: AnsiString; delim: char): stringarray; +var + i, last_delim, count : int32; + c: char; +begin + + { there will always be at least one number } + count := 1; + { count number of delimeters } + for c in s do + begin + if c = delim then + count := count + 1; + end; + + { allocate enough space for count} + setlength(split_to_str, count); + + count := 0; + last_delim := 0; + + { second interation } + for i := 1 to length(s) do + begin + { if this is a delimeter } + if s[i] = delim then + begin + { add the value between this delimiter and the previous one to splitted } + split_to_str[count] := copy(s, last_delim + 1, i - last_delim - 1); + count := count + 1; + last_delim := i; + end; + end; + + { don't forget the final value } + split_to_str[count] := copy(s, last_delim + 1, length(s) - last_delim) +end; + +function streq(s1: string; s2: string): boolean; +var + i: int32; +begin + streq := true; + for i := 1 to length(s1) do + begin + if (s1[i] <> s2[i]) then + begin + streq := false; + break; + end; + end; +end; + +function hash(s: string): int32; +var + c: char; +begin + hash := 0; + for c in s do + hash := ((hash + ord(c)) * 17) and 255; + + +end; + +var + { ideally a linked list would be nice for the second dim, but eh.} + boxes: array[0..255, 1..100] of lens; + b_length: array[0..255] of int32; + +procedure insert_lens(l: string; f: int32); +var + hvalue: int32; + i: int32; +begin + + hvalue := hash(l); + + { check for duplicate } + for i := 1 to b_length[hvalue] do + begin + if streq(boxes[hvalue, i].label_, l) then + begin + boxes[hvalue, i].focal := f; + exit; + end; + end; + + { add to end } + + b_length[hvalue] := b_length[hvalue] + 1; + boxes[hvalue, b_length[hvalue]].label_ := l; + boxes[hvalue, b_length[hvalue]].focal := f; + +end; + +procedure remove_lens(l: string); +var + hvalue: int32; + i: int32; + shifting: boolean; +begin + hvalue := hash(l); + + shifting := false; + for i := 1 to b_length[hvalue] do + begin + if shifting then + boxes[hvalue, i - 1] := boxes[hvalue, i] + else if streq(boxes[hvalue, i].label_, l) then + shifting := true; + end; + + if shifting then + b_length[hvalue] := b_length[hvalue] - 1; +end; + +procedure write_boxes(); +var + i, j: int32; +begin + + for i := 0 to 255 do + begin + if b_length[i] <> 0 then + begin + + write('Box ', i, ': '); + + for j := 1 to b_length[i] do + begin + write('[', boxes[i, j].label_, ' ', boxes[i, j].focal, '] '); + end; + + writeln(); + end; + end; +end; + +var + + s: AnsiString; + to_hash: array of string; + + split: array of string; + + file_: text; + + i, j: int32; + sum: int32; + +begin + + assign(file_, 'resources/2023/day15.txt'); + reset(file_); + readln(file_, s); + + to_hash := split_to_str(s, ','); + + { fill boxes } + for s in to_hash do + begin + if s[length(s)] = '-' then + remove_lens(copy(s, 0, length(s) - 1)) + else if s[length(s) - 1] = '=' then + begin + val(s[length(s)], i); + insert_lens(copy(s, 0, length(s) - 2), i); + end; + end; + + { sum } + sum := 0; + for i := 0 to 255 do + for j := 1 to b_length[i] do + sum := sum + (i + 1) * j * boxes[i, j].focal; + + + write_boxes(); + writeln('The sum is ', sum); +end. + diff --git a/src/pascal/2023/day16/part1.pas b/src/pascal/2023/day16/part1.pas new file mode 100644 index 0000000..f40890b --- /dev/null +++ b/src/pascal/2023/day16/part1.pas @@ -0,0 +1,146 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day16part1; +uses sysutils; + +type + Tdirection = (Left, Up, Right, Down, NA); + +var + map: array[1..1000] of string; + illuminated: array[1..1000, 1..1000] of boolean; + splitted: array[1..1000, 1..1000] of boolean; + height, width: int32; + +procedure print_illuminated(); +var + i, j: int32; +begin + for i := 1 to height do + begin + for j := 1 to width do + case illuminated[i, j] of + true: write('#'); + false: write('.'); + end; + writeln(); + end; +end; + +function sum_illuminated(): int32; +var + i, j: int32; +begin + + sum_illuminated := 0; + + for i := 1 to height do + for j := 1 to width do + if illuminated[i, j] then + sum_illuminated := sum_illuminated + 1; +end; + +procedure step_illumination(x, y: int32; dir: Tdirection); +begin + + { range check } + if (x < 1) or (x > width) or (y < 1) or (y > height) then + exit; + + writeln('(', x, ',', y, ')'); + + illuminated[y, x] := true; + + { nested case my beloved } + case map[y, x] of + '.': + begin + { continue same direction } + case dir of + Up: step_illumination(x, y - 1, Up); + Left: step_illumination(x - 1, y, Left); + Down: step_illumination(x, y + 1, Down); + Right: step_illumination(x + 1, y, Right); + end; + end; + '/': + begin + { reflect direction } + case dir of + Up: step_illumination(x + 1, y, Right); + Left: step_illumination(x, y + 1, Down); + Down: step_illumination(x - 1, y, Left); + Right: step_illumination(x, y - 1, Up); + end; + end; + '\': + begin + { reflect direction but in the other way} + case dir of + Up: step_illumination(x - 1, y, Left); + Left: step_illumination(x, y - 1, Up); + Down: step_illumination(x + 1, y, Right); + Right: step_illumination(x, y + 1, Down); + end; + end; + '|': + begin + { up down passthrough, left right split } + case dir of + Up: step_illumination(x, y - 1, Up); + Down: step_illumination(x, y + 1, Down); + Left, Right: + begin + if not splitted[y, x] then // so we don't split forever in a loop + begin + splitted[y, x] := true; + step_illumination(x, y - 1, Up); + step_illumination(x, y + 1, Down); + end; + end; + end; + end; + '-': + begin + { lr passthrough, ud split } + case dir of + Left: step_illumination(x - 1, y, Left); + Right: step_illumination(x + 1, y, Right); + Up, Down: + begin + if not splitted[y, x] then // so we don't split forever in a loop + begin + splitted[y, x] := true; + step_illumination(x - 1, y, Left); + step_illumination(x + 1, y, Right); + end; + end; + end; + end; + end; +end; + +var + + file_: text; + +begin + + assign(file_, 'resources/2023/day16.txt'); + reset(file_); + + height := 0; + + while not eof(file_) do + begin + height := height + 1; + readln(file_, map[height]); + end; + width := length(map[1]); + + step_illumination(1, 1, Right); + print_illuminated(); + writeln('Total illuminated is ', sum_illuminated()); + +end. diff --git a/src/pascal/2023/day16/part2.pas b/src/pascal/2023/day16/part2.pas new file mode 100644 index 0000000..8ac6831 --- /dev/null +++ b/src/pascal/2023/day16/part2.pas @@ -0,0 +1,219 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day16part1; +uses sysutils; + +type + Tdirection = (Left, Up, Right, Down, NA); + +var + map: array[1..1000] of string; + illuminated: array[1..1000, 1..1000] of boolean; + splitted: array[1..1000, 1..1000] of boolean; + height, width: int32; + +procedure print_illuminated(); +var + i, j: int32; +begin + for i := 1 to height do + begin + for j := 1 to width do + case illuminated[i, j] of + true: write('#'); + false: write('.'); + end; + writeln(); + end; +end; + +function sum_illuminated(): int32; +var + i, j: int32; +begin + + sum_illuminated := 0; + + for i := 1 to height do + for j := 1 to width do + if illuminated[i, j] then + sum_illuminated := sum_illuminated + 1; +end; + +procedure reset_illuminated_splitted(); +var + i, j: int32; +begin + for i := 1 to height do + for j := 1 to width do + begin + illuminated[j, i] := false; + splitted[j, i] := false; + end; +end; + +procedure step_illumination(x, y: int32; dir: Tdirection); +begin + + { range check } + if (x < 1) or (x > width) or (y < 1) or (y > height) then + exit; + + illuminated[y, x] := true; + + { nested case my beloved } + case map[y, x] of + '.': + begin + { continue same direction } + case dir of + Up: step_illumination(x, y - 1, Up); + Left: step_illumination(x - 1, y, Left); + Down: step_illumination(x, y + 1, Down); + Right: step_illumination(x + 1, y, Right); + end; + end; + '/': + begin + { reflect direction } + case dir of + Up: step_illumination(x + 1, y, Right); + Left: step_illumination(x, y + 1, Down); + Down: step_illumination(x - 1, y, Left); + Right: step_illumination(x, y - 1, Up); + end; + end; + '\': + begin + { reflect direction but in the other way} + case dir of + Up: step_illumination(x - 1, y, Left); + Left: step_illumination(x, y - 1, Up); + Down: step_illumination(x + 1, y, Right); + Right: step_illumination(x, y + 1, Down); + end; + end; + '|': + begin + { up down passthrough, left right split } + case dir of + Up: step_illumination(x, y - 1, Up); + Down: step_illumination(x, y + 1, Down); + Left, Right: + begin + if not splitted[y, x] then // so we don't split forever in a loop + begin + splitted[y, x] := true; + step_illumination(x, y - 1, Up); + step_illumination(x, y + 1, Down); + end; + end; + end; + end; + '-': + begin + { lr passthrough, ud split } + case dir of + Left: step_illumination(x - 1, y, Left); + Right: step_illumination(x + 1, y, Right); + Up, Down: + begin + if not splitted[y, x] then // so we don't split forever in a loop + begin + splitted[y, x] := true; + step_illumination(x - 1, y, Left); + step_illumination(x + 1, y, Right); + end; + end; + end; + end; + end; +end; + +var + + file_: text; + + max: int32; + i, t: int32; + + // for pretty printing + max_dir: Tdirection; + max_idx: int32; + +begin + + assign(file_, 'resources/2023/day16.txt'); + reset(file_); + + height := 0; + + while not eof(file_) do + begin + height := height + 1; + readln(file_, map[height]); + end; + width := length(map[1]); + + max := -1; + max_dir := NA; + max_idx := -1; + + { check up + down } + for i := 1 to width do + begin + step_illumination(i, 1, Down); + t := sum_illuminated(); + reset_illuminated_splitted(); + + if t > max then + begin + max := t; + max_dir := Down; + max_idx := i; + end; + + step_illumination(i, height, Up); + t := sum_illuminated(); + reset_illuminated_splitted(); + + if t > max then + begin + max := t; + max_dir := Up; + max_idx := i; + end; + end; + + { check left + right } + for i := 1 to height do + begin + step_illumination(1, i, Right); + t := sum_illuminated(); + reset_illuminated_splitted(); + + if t > max then + begin + max := t; + max_dir := Right; + max_idx := i; + end; + + step_illumination(width, i, Left); + t := sum_illuminated(); + reset_illuminated_splitted(); + + if t > max then + begin + max := t; + max_dir := Left; + max_idx := i; + end; + end; + + writeln('The best configuration is going ', max_dir, ' at index ', max_idx); + writeln('The max illumination is ', max); + + +end. diff --git a/src/pascal/2023/day17/part1.pas b/src/pascal/2023/day17/part1.pas new file mode 100644 index 0000000..52f80b9 --- /dev/null +++ b/src/pascal/2023/day17/part1.pas @@ -0,0 +1,14 @@ +{$mode objfpc} +{$RANGECHECKS ON} + +program day17part1; +uses sysutils; + +type + Tnode = record + x, y: int32; + end; + +begin + +end. diff --git a/src/pascal/2023/day17/queue.pas b/src/pascal/2023/day17/queue.pas new file mode 100644 index 0000000..103c263 --- /dev/null +++ b/src/pascal/2023/day17/queue.pas @@ -0,0 +1,23 @@ +// i wrote this but i didn't use it +// might be useful for the future; + +var + queue: array[0..1000] of Tnode; + queue_start, queue_length: int32; + +procedure enqueue(node: Tnode); +begin + queue[queue_start + queue_length] := node; + inc(queue_length); +end; + +function dequeue(): Tnode; +begin + dequeue := queue[queue_start]; + inc(queue_start); + dec(queue_length); +end; + +var + + a, b: Tnode; diff --git a/src/pascal/2023/day2/part1.pas b/src/pascal/2023/day2/part1.pas new file mode 100644 index 0000000..a432cff --- /dev/null +++ b/src/pascal/2023/day2/part1.pas @@ -0,0 +1,141 @@ +program day2part2; + +var +file_: text; +str: string; +sum, game: int32; +state: int32; +number: int32; + +i: int32; +c: char; + +red_limit: int32 = 12; +green_limit: int32 = 13; +blue_limit: int32 = 14; + +(* Here the main program block starts *) +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day2.txt'); + reset(file_); + + { initialize sum and count to 0 } + game := 0; + sum := 0; + + { until the file is empty } + while not eof(file_) do + begin + + { increment game counter } + game := game + 1; + + { assume this game is fine and valid } + sum := sum + game; + + { read a line from the file } + readln(file_, str); + + { state of current searching } + state := 0; + { 0 = initial, going to colon -> 1} + { 1 = wasting a space, resetting number -> 2} + { 2 = searching for number -> 3} + { 3 = checking color -> 4 } + { 4 = waiting for space -> 2} + + + for c in str do + begin + + { holy case statement. } + + case state of + {seeking to first colon} + 0: + begin + {colon, move to state 1} + if (c = ':') then + state := 1 + end; + {wasting a space} + 1: + begin + {move to state 2, initialize number} + state := 2; + number := 0; + end; + {reading number} + 2: + begin + {if number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, i); + number := number * 10 + i; + end; + {at the end move to state 3} + if (c = ' ') then + state := 3 + end; + {check color} + 3: + begin + {check red} + if (c = 'r') then + begin + {if there's too many} + if (number > red_limit) then + begin + {set this game as invalid and break} + sum := sum - game; + break; + end; + end; + + {check blue} + if (c = 'b') then + begin + {if there's too many} + if (number > blue_limit) then + begin + {set this game as invalid and break} + sum := sum - game; + break; + end; + end; + + {check green} + if (c = 'g') then + begin + {if there's too many} + if (number > green_limit) then + begin + {set this game as invalid and break} + sum := sum - game; + break; + end; + end; + + {if we're still here, move to state 4} + state := 4; + end; + {wait for a space} + 4: + begin + if (c = ' ') then + begin + {reset number and go back to state 2} + number := 0; + state := 2; + end; + end; + end; + end; + end; + + { print out that beautiful sum } + writeln(sum); +end. diff --git a/src/pascal/2023/day2/part2.pas b/src/pascal/2023/day2/part2.pas new file mode 100644 index 0000000..e51c7ef --- /dev/null +++ b/src/pascal/2023/day2/part2.pas @@ -0,0 +1,130 @@ +program day2part2; + +var +file_: text; +str: string; +sum: int32; +state: int32; +number: int32; + +i: int32; +c: char; + +rcount, gcount, bcount: int32; + +(* Here the main program block starts *) +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day2.txt'); + reset(file_); + + { initialize sum to 0 } + sum := 0; + + { until the file is empty } + while not eof(file_) do + begin + + + { read a line from the file } + readln(file_, str); + + { state of current searching } + state := 0; + { 0 = initial, going to colon -> 1} + { 1 = wasting a space, resetting number -> 2} + { 2 = searching for number -> 3} + { 3 = checking color -> 4 } + { 4 = waiting for space -> 2} + + { initialize counts to zero } + rcount := 0; + bcount := 0; + gcount := 0; + + + for c in str do + begin + + { holy case statement. } + + case state of + {seeking to first colon} + 0: + begin + {colon, move to state 1} + if (c = ':') then + state := 1 + end; + {wasting a space} + 1: + begin + {move to state 2, initialize number} + state := 2; + number := 0; + end; + {reading number} + 2: + begin + {if number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, i); + number := number * 10 + i; + end; + {at the end move to state 3} + if (c = ' ') then + state := 3 + end; + {update color} + 3: + begin + {check red} + if (c = 'r') then + begin + {update red if it's max} + if (number > rcount) then + rcount := number + end; + + {check blue} + if (c = 'b') then + begin + {update blue if it's max} + if (number > bcount) then + bcount := number + end; + + {check green} + if (c = 'g') then + begin + {update green if it's max} + if (number > gcount) then + gcount := number + end; + + {if we're still here, move to state 4} + state := 4; + end; + {wait for a space} + 4: + begin + if (c = ' ') then + begin + {reset number and go back to state 2} + number := 0; + state := 2; + end; + end; + end; + end; + + { increase sum } + sum := sum + rcount * bcount * gcount; + + end; + + { print out that beautiful sum } + writeln(sum); +end. diff --git a/src/pascal/2023/day3/part1.pas b/src/pascal/2023/day3/part1.pas new file mode 100644 index 0000000..9c01de9 --- /dev/null +++ b/src/pascal/2023/day3/part1.pas @@ -0,0 +1,238 @@ +program day3part1; +uses sysutils; + +var +file_: text; +prev, curr, next: string; +sum, game: int32; +state: int32; +number: int32; +valid: boolean; + +i, b: int32; +c: char; + +LINE_LENGTH: int32 = 140; + +function is_symbol(str: string; ind: int32): boolean; +begin + is_symbol := ((not ((ind < 1) or (ind > LINE_LENGTH))) and (('0' > str[ind]) or (str[ind] > '9')) and (str[ind] <> '.')); +end; + +function is_ok(prev: string; curr: string; next: string; ind: int32): boolean; +begin + is_ok := is_symbol(curr, i-1); + is_ok := (is_ok or is_symbol(curr, i+1)); + is_ok := (is_ok or is_symbol(next, i-1)); + is_ok := (is_ok or is_symbol(next, i)); + is_ok := (is_ok or is_symbol(next, i+1)); + is_ok := (is_ok or is_symbol(prev, i-1)); + is_ok := (is_ok or is_symbol(prev, i)); + is_ok := (is_ok or is_symbol(prev, i+1)); +end; + + +(* Here the main program block starts *) +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day3.txt'); + reset(file_); + + { initialize sum and count to 0 } + sum := 0; + + { read the first two lines } + readln(file_, curr); + readln(file_, next); + + writeln(length(curr)); + + writeln(booltostr(true)); + writeln(booltostr(false)); + + { writeln(curr); } + { writeln(next); } + + state := 0; + number := 0; + { 0 : waiting for number } + { 1 : reading number } + + { first loop } + for i := 1 to LINE_LENGTH do + begin + c := curr[i]; + case state of + {waiting for number} + 0: + begin + {number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, number); + valid := false; + state := 1; + + valid := (valid or is_ok(next, curr, next, i-1)); + + end; + end; + {reading number and checking true} + 1: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + + {look for symbol} + + valid := (valid or is_ok(next, curr, next, i-1)); + + end + else + begin + state := 0; + + if (valid) then + sum := sum + number; + + end; + + end; + end; + end; + + { main loop } + while not eof(file_) do + begin + + state := 0; + + prev := curr; + curr := next; + readln(file_, next); + + writeln(); + writeln(prev); + writeln(curr); + writeln(next); + + for i := 1 to LINE_LENGTH do + begin + c := curr[i]; + case state of + {waiting for number} + 0: + begin + {number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, number); + valid := false; + state := 1; + + valid := (valid or is_ok(prev, curr, next, i-1)); + + end; + end; + {reading number and checking true} + 1: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + + {look for symbol} + + valid := (valid or is_ok(prev, curr, next, i-1)); + + end + else + begin + state := 0; + + if (valid) then + sum := sum + number; + + end; + + end; + end; + + write(state); + + end; + + if (state = 1) then + begin + begin + + if (valid) then + sum := sum + number; + + end; + end; + + end; + + state := 0; + + prev := curr; + curr := next; + + + for i := 1 to LINE_LENGTH do + begin + c := curr[i]; + case state of + {waiting for number} + 0: + begin + {number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, number); + valid := false; + state := 1; + + valid := (valid or is_ok(prev, curr, prev, i-1)); + + end; + end; + {reading number and checking true} + 1: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + + {look for symbol} + + valid := (valid or is_ok(prev, curr, prev, i-1)); + + end + else + begin + state := 0; + + if (valid) then + sum := sum + number; + + end; + + end; + end; + end; + + writeln(); + writeln(sum); +end. diff --git a/src/pascal/2023/day3/part2.pas b/src/pascal/2023/day3/part2.pas new file mode 100644 index 0000000..2f4cfe8 --- /dev/null +++ b/src/pascal/2023/day3/part2.pas @@ -0,0 +1,224 @@ +program day3part2; +uses sysutils; + +var +file_: text; +curr: string; +sum, game: int32; +state: int32; +number: int32; +valid: boolean; + +i, a, b: int32; +line: int32; +c: char; + +LINE_LENGTH: int32 = 140; + +curr_asterisk: int32; +asterisks: int32; +asterisk_values: array[1..1000] of int32; +asterisk_locations: array[1..1000, 1..2] of int32; + +function is_symbol(str: string; ind: int32): boolean; +begin + is_symbol := (str[ind] = '*') +end; + +function find_asterisk(hpos: int32; vpos: int32): int32; +var + j: int32; + +begin + + find_asterisk := -1; + + for j := 1 to asterisks do + begin + if ((asterisk_locations[j, 1] = hpos) and (asterisk_locations[j, 2] = vpos)) then + begin + find_asterisk := j; + break; + end; + end; +end; + +function get_asterisk_id(hpos: int32; vpos: int32): int32; +var + fucked_up: int32; + +begin + + get_asterisk_id := -1; + + fucked_up := find_asterisk(hpos-1, vpos-1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos, vpos-1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos+1, vpos-1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos-1, vpos); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos+1, vpos); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos-1, vpos+1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos, vpos+1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + fucked_up := find_asterisk(hpos+1, vpos+1); + if (fucked_up <> -1) then + get_asterisk_id := fucked_up; + +end; + +(* Here the main program block starts *) +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day3.txt'); + reset(file_); + + { initialize sum and count to 0 } + sum := 0; + + { read the first two lines } + + line := 1; + asterisks := 0; + + + {find the position of all asterisks} + + while not eof(file_) do + begin + + readln(file_, curr); + + for i := 1 to LINE_LENGTH do + begin + if is_symbol(curr, i) then + begin + asterisk_locations[asterisks + 1][1] := i; + asterisk_locations[asterisks + 1][2] := line; + + asterisk_values[asterisks + 1] := 0; + + asterisks := asterisks + 1; + end; + end; + + line := line + 1; + + end; + + line := 0; + + reset(file_); + + writeln('boobs'); + + { main loop } + while not eof(file_) do + begin + + state := 0; + line := line + 1; + + readln(file_, curr); + + for i := 1 to LINE_LENGTH do + begin + c := curr[i]; + write(c); + case state of + {waiting for number} + 0: + begin + {number} + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, number); + state := 1; + + curr_asterisk := get_asterisk_id(i, line); + + end; + end; + {reading number and checking true} + 1: + begin + if (('0' <= c) and (c <= '9')) then + begin + + writeln('boobs2'); + + {add number to number} + val(c, b); + number := number * 10 + b; + + {look for symbol} + b := get_asterisk_id(i, line); + if (b <> -1) then + curr_asterisk := b; + + end + else + begin + state := 0; + writeln(curr_asterisk); + + if (curr_asterisk <> -1) then + begin + if (asterisk_values[curr_asterisk] = 0) then + asterisk_values[curr_asterisk] := number + else if (asterisk_values[curr_asterisk] > 0) then + begin + sum := sum + asterisk_values[curr_asterisk] * number; + asterisk_values[curr_asterisk] := -1; + end; + end; + + end; + + end; + end; + + write(state); + + end; + + if (state = 1) then + begin + begin + + if (curr_asterisk <> -1) then + begin + if (asterisk_values[curr_asterisk] = 0) then + asterisk_values[curr_asterisk] := number + else if (asterisk_values[curr_asterisk] > 0) then + begin + sum := sum + asterisk_values[curr_asterisk] * number; + asterisk_values[curr_asterisk] := -1; + end; + end; + + end; + end; + + end; + + i := get_asterisk_id(114, 126); + writeln(i); + writeln(asterisk_locations[i, 1]); + writeln(asterisk_locations[i, 2]); + writeln(sum); + + +end. diff --git a/src/pascal/2023/day4/part1.pas b/src/pascal/2023/day4/part1.pas new file mode 100644 index 0000000..7828946 --- /dev/null +++ b/src/pascal/2023/day4/part1.pas @@ -0,0 +1,141 @@ +program day4part1; +uses sysutils; + +type + MState = (ToColon, WasteSpace, ReadWin, WasteSpace2, ReadHave); + +var + state: MState; + file_: text; + str: string; + number: int32; + + winning: array[1..100] of int32; + have: array[1..100] of int32; + + winning_length, have_length: int32; + + b, d: int32; + c: char; + i, j: int32; + + scores: array[0..10] of int32 = (0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512); + + sum: int32; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day4.txt'); + reset(file_); + + sum := 0; + + while not EOF(file_) do + begin + + { state of current searching } + state := ToColon; + + { read in a file} + readln(file_, str); + + fillchar(have[1], sizeof(have), 0); + fillchar(winning[1], sizeof(winning), 0); + + for c in str do + begin + + { holy case statement. } + case state of + ToColon: + begin + if (c = ':') then + state := WasteSpace + end; + + WasteSpace: + begin + state := ReadWin; + number := 0; + winning_length := 1; + end; + ReadWin: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + winning[winning_length] := number; + winning_length := winning_length + 1; + number := 0; + end + else if (c = '|') then + begin + state := WasteSpace2; + number := 0; + end; + end; + WasteSpace2: + begin + state := ReadHave; + number := 0; + have_length := 1; + end; + ReadHave: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + have[have_length] := number; + have_length := have_length + 1; + number := 0; + end + else if (c = '|') then + begin + state := WasteSpace2; + number := 0; + end; + end; + end; + end; + + have[have_length] := number; + have_length := have_length + 1; + + d := 0; + for i in winning do + begin + if (i = 0) then + begin + continue; + end; + + + for j in have do + begin + if (j = 0) then + begin + continue; + end; + + if (i = j) then + d := d + 1 + end; + end; + + sum := sum + scores[d]; + + end; + + writeln(sum); + +end. diff --git a/src/pascal/2023/day4/part2.pas b/src/pascal/2023/day4/part2.pas new file mode 100644 index 0000000..e3458c6 --- /dev/null +++ b/src/pascal/2023/day4/part2.pas @@ -0,0 +1,154 @@ +program day4part2; +uses sysutils; + +type + MState = (ToColon, WasteSpace, ReadWin, WasteSpace2, ReadHave); + +var + state: MState; + file_: text; + str: string; + number: int32; + cardnum: int32; + + winning: array[1..100] of int32; + have: array[1..100] of int32; + + copies: array[1..1000] of int32; + + winning_length, have_length: int32; + + b, d: int32; + c: char; + i, j: int32; + + sum: int32; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day4.txt'); + reset(file_); + + filldword(copies, length(copies), 1); + + sum := 0; + cardnum := 0; + + while not EOF(file_) do + begin + + cardnum := cardnum + 1; + + { state of current searching } + state := ToColon; + + { read in a file} + readln(file_, str); + + fillchar(have[1], sizeof(have), 0); + fillchar(winning[1], sizeof(winning), 0); + + for c in str do + begin + + { holy case statement. } + case state of + ToColon: + begin + if (c = ':') then + state := WasteSpace + end; + + WasteSpace: + begin + state := ReadWin; + number := 0; + winning_length := 1; + end; + ReadWin: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + winning[winning_length] := number; + winning_length := winning_length + 1; + number := 0; + end + else if (c = '|') then + begin + state := WasteSpace2; + number := 0; + end; + end; + WasteSpace2: + begin + state := ReadHave; + number := 0; + have_length := 1; + end; + ReadHave: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + have[have_length] := number; + have_length := have_length + 1; + number := 0; + end + else if (c = '|') then + begin + state := WasteSpace2; + number := 0; + end; + end; + end; + end; + + have[have_length] := number; + have_length := have_length + 1; + + d := 0; + for i in winning do + begin + if (i = 0) then + begin + continue; + end; + + for j in have do + begin + if (j = 0) then + begin + continue; + end; + + if (i = j) then + d := d + 1 + end; + end; + + for i := 1 to d do + begin + copies[cardnum + i] := copies[cardnum + i] + copies[cardnum]; + end; + + end; + + for i := 1 to cardnum do + begin + sum := sum + copies[i]; + end; + + writeln(sum); + +end. diff --git a/src/pascal/2023/day5/part1.pas b/src/pascal/2023/day5/part1.pas new file mode 100644 index 0000000..c7a7ee1 --- /dev/null +++ b/src/pascal/2023/day5/part1.pas @@ -0,0 +1,163 @@ +program day5part1; +uses sysutils; + +type + SState = (ToColon, WasteSpace, ReadSeeds, NewLine); + MState = (Seed, WaitMap, ReadMap); + + +var + + seeds: array[1..20] of int64; + next_seeds: array[1..20] of int64; + map: array[1..3] of int64; + + seed_length: int64; + cmap: int64; + + seed_state: SState; + state: MState; + file_: text; + str: string; + number: int64; + + c: char; + i, j, b: int64; + + srange, erange: int64; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day5.txt'); + reset(file_); + + state := Seed; + + while not EOF(file_) do + begin + + { read in a file} + readln(file_, str); + + case state of + Seed: + begin + seed_state := ToColon; + for c in str do + begin + case seed_state of + ToColon: + begin + if (c = ':') then + seed_state := WasteSpace + end; + WasteSpace: + begin + seed_state := ReadSeeds; + number := 0; + seed_length := 0; + end; + ReadSeeds: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + seed_length := seed_length + 1; + seeds[seed_length] := number; + number := 0; + end + end; + end; + end; + + seed_length := seed_length + 1; + seeds[seed_length] := number; + + fillqword(next_seeds, length(next_seeds), 18446744073709551615); + state := WaitMap; + end; + WaitMap: + if (length(str) > 0) then + begin + state := ReadMap; + + { change this later because this is wrong } + + for i := 0 to length(seeds) do + begin + if (next_seeds[i] <> -1) then + seeds[i] := next_seeds[i] + end; + + { this is -1 } + fillqword(next_seeds, length(next_seeds), 18446744073709551615); + + writeln('break'); + end; + ReadMap: + begin + + if (length(str) = 0) then + begin + state := WaitMap; + continue; + end; + + cmap := 0; + number := 0; + + for c in str do + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + cmap := cmap + 1; + map[cmap] := number; + number := 0; + end; + end; + + cmap := cmap + 1; + map[cmap] := number; + + srange := map[2]; + erange := map[2] + map[3] - 1; + + for i := 1 to length(seeds) do + begin + if ((seeds[i] >= srange) and (seeds[i] <= erange)) then + begin + next_seeds[i] := seeds[i] - srange + map[1]; + end; + end; + + writeln(); + for i in next_seeds do + writeln(i); + end; + + end; + end; + + writeln(); + + for i := 0 to length(seeds) do + begin + if (next_seeds[i] <> -1) then + seeds[i] := next_seeds[i] + end; + + for i in seeds do + writeln(i); + +end. diff --git a/src/pascal/2023/day5/part2.pas b/src/pascal/2023/day5/part2.pas new file mode 100644 index 0000000..546847e --- /dev/null +++ b/src/pascal/2023/day5/part2.pas @@ -0,0 +1,272 @@ +program day5part1; +uses sysutils; + +type + SState = (ToColon, WasteSpace, ReadSeeds, NewLine); + MState = (Seed, WaitMap, ReadMap, Q); + + +var + + seeds: array[1..100000] of int64; + next_seeds: array[1..100000] of int64; + map: array[1..3] of int64; + + seed_length: int64; + cmap: int64; + + seed_state: SState; + state: MState; + file_: text; + str: string; + number: int64; + + c: char; + i, b: int64; + + srange, erange: int64; + sseed, eseed: int64; + + times: int64; + +procedure add_seed(a: int64; b: int64); +begin + seeds[seed_length + 1] := a; + seeds[seed_length + 2] := b - a + 1; + seed_length := seed_length + 2; +end; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day5.txt'); + reset(file_); + + times := 0; + state := Seed; + + while not EOF(file_) do + begin + + { read in a file} + readln(file_, str); + + case state of + Seed: + begin + seed_state := ToColon; + for c in str do + begin + case seed_state of + ToColon: + begin + if (c = ':') then + seed_state := WasteSpace + end; + WasteSpace: + begin + seed_state := ReadSeeds; + number := 0; + seed_length := 0; + end; + ReadSeeds: + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + seed_length := seed_length + 1; + seeds[seed_length] := number; + number := 0; + end + end; + end; + end; + + seed_length := seed_length + 1; + seeds[seed_length] := number; + + fillqword(next_seeds, length(next_seeds), 18446744073709551615); + state := WaitMap; + end; + WaitMap: + if (length(str) > 0) then + begin + state := ReadMap; + + { change this later because this is wrong } + + for i := 0 to length(seeds) do + begin + if (next_seeds[i] <> -1) then + seeds[i] := next_seeds[i] + end; + + { this is -1 } + fillqword(next_seeds, length(next_seeds), 18446744073709551615); + + writeln('break'); + for i := 1 to seed_length do + begin + write(seeds[i]); + write(' '); + end; + + writeln(); + end; + ReadMap: + begin + + if (length(str) = 0) then + begin + state := WaitMap; + continue; + end; + + cmap := 0; + number := 0; + + for c in str do + begin + if (('0' <= c) and (c <= '9')) then + begin + {add number to number} + val(c, b); + number := number * 10 + b; + end + else if (c = ' ') then + begin + cmap := cmap + 1; + map[cmap] := number; + number := 0; + end; + end; + + cmap := cmap + 1; + map[cmap] := number; + + srange := map[2]; + erange := map[2] + map[3] - 1; + + write('here we go: '); + writeln(times); + + for i := 1 to length(seeds) do + begin + if ((i and 1) = 0) then + continue; + if (seeds[i + 1] = 0) then + continue; + if (i >= seed_length) then + break; + writeln(i); + + sseed := seeds[i]; + eseed := seeds[i] + seeds[i + 1] - 1; + + write(sseed); + write(' '); + writeln(eseed); + + srange := map[2]; + erange := map[2] + map[3] - 1; + + write(srange); + write(' '); + writeln(erange); + + { range contained } + if ((eseed > erange) and (sseed < srange)) then + begin + writeln('range contained'); + { add the right tail } + add_seed(erange + 1, eseed); + { add the left tail } + add_seed(sseed, srange - 1); + + next_seeds[i + 1] := erange - srange; + next_seeds[i] := map[1]; + seeds[i + 1] := 0; + + end + { left tailed } + else if ((eseed > erange) and (erange >= sseed)) then + begin + writeln('left'); + { add the right tail} + add_seed(erange + 1, eseed); + { update length } + next_seeds[i + 1] := erange - sseed + 1; + { adjust according to map } + next_seeds[i] := map[1] + sseed - srange; + seeds[i + 1] := 0; + + end + { right tailed } + else if ((eseed >= srange) and (srange > sseed)) then + begin + writeln('right'); + { add the left tail} + add_seed(sseed, srange - 1); + { update length } + next_seeds[i + 1] := eseed - srange + 1; + { adjust according to map } + next_seeds[i] := map[1]; + seeds[i + 1] := 0; + end + else if ((srange <= sseed) and (eseed <= erange)) then + begin + writeln('easy mode'); + next_seeds[i] := map[1] + sseed - srange; + end + else + begin + writeln('GOD FUCKING DAMMIT'); + end; + + end; + + writeln(); + for i := 1 to seed_length do + begin + write(next_seeds[i]); + write(' '); + end; + writeln(); + for i := 1 to seed_length do + begin + write(seeds[i]); + write(' '); + end; + writeln(); + writeln(seed_length); + + writeln('next'); + + times := times + 1; + { if (times = 6) then + break;} + end; + + end; + end; + + writeln(); + + for i := 0 to length(seeds) do + begin + if (next_seeds[i] <> -1) then + seeds[i] := next_seeds[i] + end; + + for i := 1 to seed_length do + begin; + if ((i and 1) = 0) then + continue; + writeln(seeds[i]); + end; + +end. diff --git a/src/pascal/2023/day6/part1.pas b/src/pascal/2023/day6/part1.pas new file mode 100644 index 0000000..1bc0ea4 --- /dev/null +++ b/src/pascal/2023/day6/part1.pas @@ -0,0 +1,35 @@ +program day5part1; +uses sysutils; + +type + SState = (ToColon, WasteSpace, ReadSeeds, NewLine); + MState = (Seed, WaitMap, ReadMap); + + +var + + race_times: array of int32 = (57, 72, 69, 92); + race_distances: array of int32 = (291, 1172, 1176, 2026); + valid: array of int32 = (0, 0, 0, 0); + + i, j: int32; + +begin + + for i := 0 to 3 do + begin + writeln(race_times[i]); + writeln(race_distances[i]); + + for j := 1 to race_times[i] do + begin + + if (race_times[i] - j) * j > race_distances[i] then + valid[i] := valid[i] + 1 + + end; + end; + + writeln(valid[0] * valid[1] * valid[2] * valid[3]) + +end. \ No newline at end of file diff --git a/src/pascal/2023/day6/part2.pas b/src/pascal/2023/day6/part2.pas new file mode 100644 index 0000000..2c0d1dc --- /dev/null +++ b/src/pascal/2023/day6/part2.pas @@ -0,0 +1,32 @@ +program day5part1; +uses sysutils; + +type + SState = (ToColon, WasteSpace, ReadSeeds, NewLine); + MState = (Seed, WaitMap, ReadMap); + + +var + + race_time: int64 = 57726992; + race_distance: int64 = 291117211762026; + valid: int64 = 0; + + i, j: int32; + +begin + + writeln(race_time); + writeln(race_distance); + + for j := 1 to race_time do + begin + + if (race_time - j) * j > race_distance then + valid := valid + 1 + + end; + + writeln(valid); + +end. \ No newline at end of file diff --git a/src/pascal/2023/day7/part1.pas b/src/pascal/2023/day7/part1.pas new file mode 100644 index 0000000..b8e57d9 --- /dev/null +++ b/src/pascal/2023/day7/part1.pas @@ -0,0 +1,188 @@ +program day5part1; +uses sysutils; + +type + MState = (ReadCards, ReadBet); + + +var + + + state: MState; + file_: text; + + c: char; + i, j, b: int64; + + sum, count: int32; + + rank: array[1..1000] of int32; + bet: array[1..1000] of int32; + + line: string; + + +function CardToValue(inp: char): int32; +begin + case inp of + 'A': CardToValue := 12; + 'K': CardToValue := 11; + 'Q': CardToValue := 10; + 'J': CardToValue := 9; + 'T': CardToValue := 8; + '9': CardToValue := 7; + '8': CardToValue := 6; + '7': CardToValue := 5; + '6': CardToValue := 4; + '5': CardToValue := 3; + '4': CardToValue := 2; + '3': CardToValue := 1; + '2': CardToValue := 0; + end; +end; + +function HandToValue(inp: string): int32; +var + + c: char; + type_, hand_value: int32; + counts: array[0..12] of int32; + duos, trips, quads, quints: int32; + + i: int32; + +begin + + filldword(counts, length(counts), 0); + + for c in inp do + counts[CardToValue(c)] := counts[CardToValue(c)] + 1; + + duos := 0; + trips := 0; + quads := 0; + quints := 0; + + for i in counts do + begin + if (i = 2) then + duos := duos + 1 + else if (i = 3) then + trips := trips + 1 + else if (i = 4) then + quads := quads + 1 + else if (i = 5) then + quints := quints + 1 + + end; + + {5K, 4K, FH, 3K, 2P, 1P, HC} + { 7, 6, 5, 4, 3, 2, 1} + if (quints = 1) then + type_ := 7 + else if (quads = 1) then + type_ := 6 + else if ((trips = 1) and (duos = 1)) then + type_ := 5 + else if (trips = 1) then + type_ := 4 + else if (duos = 2) then + type_ := 3 + else if (duos = 1) then + type_ := 2 + else + type_ := 1; + + hand_value := CardToValue(inp[1]) * 28561 + CardToValue(inp[2]) * 2197 + CardToValue(inp[3]) * 169 + CardToValue(inp[4]) * 13 + CardToValue(inp[5]); + + HandToValue := 371293 * type_ + hand_value; + +end; + +procedure DoubleSort(var arr1: array of int32; var arr2: array of int32; l: int32); +var + + i, t: int32; + swapped: boolean; + +begin + + while (true) do + begin + swapped := false; + for i := 1 to l-1 do + begin + if (arr1[i-1] > arr1[i]) then + begin + t := arr1[i-1]; + arr1[i-1] := arr1[i]; + arr1[i] := t; + + t := arr2[i-1]; + arr2[i-1] := arr2[i]; + arr2[i] := t; + + swapped := true; + + end; + end; + + if (not swapped) then + break; + + end + +end; + + +begin + + { open inp.txt for reading } + assign(file_, 'resources/2023/day7.txt'); + reset(file_); + + count := 0; + + while not EOF(file_) do + begin + count := count + 1; + + readln(file_, line); + + writeln(count); + + writeln(line); + + rank[count] := HandToValue(copy(line, 1, 5)); + val(copy(line, 6, length(line) - 5), bet[count]); + + write(rank[count]); + write(' '); + writeln(bet[count]); + + end; + + writeln('a'); + for i := 1 to count do + writeln(rank[i]); + writeln(); + + doublesort(rank, bet, count); + + writeln(rank[count]); + writeln(bet[count]); + + sum := 0; + + writeln('a'); + for i := 1 to count do + writeln(rank[i]); + writeln(); + + for i := 1 to count do + + sum := sum + bet[i] * i; + + writeln(sum); + +end. diff --git a/src/pascal/2023/day7/part2.pas b/src/pascal/2023/day7/part2.pas new file mode 100644 index 0000000..65f62aa --- /dev/null +++ b/src/pascal/2023/day7/part2.pas @@ -0,0 +1,199 @@ +program day5part1; +uses sysutils; + +type + MState = (ReadCards, ReadBet); + + +var + + + state: MState; + file_: text; + + c: char; + i, j, b: int64; + + sum, count: int32; + + rank: array[1..1000] of int32; + bet: array[1..1000] of int32; + + line: string; + + +function CardToValue(inp: char): int32; +begin + case inp of + 'A': CardToValue := 12; + 'K': CardToValue := 11; + 'Q': CardToValue := 10; + 'T': CardToValue := 9; + '9': CardToValue := 8; + '8': CardToValue := 7; + '7': CardToValue := 6; + '6': CardToValue := 5; + '5': CardToValue := 4; + '4': CardToValue := 3; + '3': CardToValue := 2; + '2': CardToValue := 1; + 'J': CardToValue := 0; + end; +end; + +function HandToValue(inp: string): int32; +var + + c: char; + type_, hand_value: int32; + counts: array[0..12] of int32; + duos, trips, quads, quints: int32; + + jokes: int32; + + i: int32; + +begin + + filldword(counts, length(counts), 0); + + for c in inp do + counts[CardToValue(c)] := counts[CardToValue(c)] + 1; + + duos := 0; + trips := 0; + quads := 0; + quints := 0; + + jokes := counts[0]; + { reset jokes so that they won't be counted} + counts[0] := 0; + + for i in counts do + begin + if (i + jokes = 2) then + duos := duos + 1 + else if (i + jokes = 3) then + trips := trips + 1 + else if (i + jokes = 4) then + quads := quads + 1 + else if (i + jokes = 5) then + quints := quints + 1 + + end; + + {5K, 4K, FH, 3K, 2P, 1P, HC} + { 7, 6, 5, 4, 3, 2, 1} + if ((quints = 1) or (jokes = 5)) then + type_ := 7 + else if (quads >= 1) then + type_ := 6 + else if ((trips = 1) and (duos = 1)) or (trips = 2) then + type_ := 5 + else if (trips >= 1) then + type_ := 4 + else if (duos = 2) then + type_ := 3 + else if (duos >= 1) then + type_ := 2 + else + type_ := 1; + + writeln(inp); + writeln(type_); + + hand_value := CardToValue(inp[1]) * 28561 + CardToValue(inp[2]) * 2197 + CardToValue(inp[3]) * 169 + CardToValue(inp[4]) * 13 + CardToValue(inp[5]); + + writeln(hand_value); + + HandToValue := 371293 * type_ + hand_value; + +end; + +procedure DoubleSort(var arr1: array of int32; var arr2: array of int32; l: int32); +var + + i, t: int32; + swapped: boolean; + +begin + + while (true) do + begin + swapped := false; + for i := 1 to l-1 do + begin + if (arr1[i-1] > arr1[i]) then + begin + t := arr1[i-1]; + arr1[i-1] := arr1[i]; + arr1[i] := t; + + t := arr2[i-1]; + arr2[i-1] := arr2[i]; + arr2[i] := t; + + swapped := true; + + end; + end; + + if (not swapped) then + break; + + end + +end; + + +begin + + { open inp.txt for reading } + assign(file_, 'resources/2023/day7.txt'); + reset(file_); + + count := 0; + + while not EOF(file_) do + begin + count := count + 1; + + readln(file_, line); + + writeln(count); + + writeln(line); + + rank[count] := HandToValue(copy(line, 1, 5)); + val(copy(line, 6, length(line) - 5), bet[count]); + + write(rank[count]); + write(' '); + writeln(bet[count]); + + end; + + writeln('a'); + for i := 1 to count do + writeln(rank[i]); + writeln(); + + doublesort(rank, bet, count); + + writeln(rank[count]); + writeln(bet[count]); + + sum := 0; + + writeln('a'); + for i := 1 to count do + writeln(rank[i]); + writeln(); + + for i := 1 to count do + + sum := sum + bet[i] * i; + + writeln(sum); + +end. diff --git a/src/pascal/2023/day8/part1.pas b/src/pascal/2023/day8/part1.pas new file mode 100644 index 0000000..692c1b7 --- /dev/null +++ b/src/pascal/2023/day8/part1.pas @@ -0,0 +1,82 @@ +program day8part1; +uses sysutils; + +type + MState = (ReadCards, ReadBet); + +var + file_: text; + + instructions: AnsiString; + str: string; + + count: int32; + + steps: int32; + step: char; + + i: int32; + + { node, left, right } + nodes: array[0..1000, 0..2] of string; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day8.txt'); + reset(file_); + + { read instructions } + readln(file_, instructions); + + { read empty line } + readln(file_, str); + + count := 0; + + { read nodes } + while not EOF(file_) do + begin + + readln(file_, str); + + { start } + nodes[count, 0] := copy(str, 1, 3); + { left } + nodes[count, 1] := copy(str, 8, 3); + { right } + nodes[count, 2] := copy(str, 13, 3); + + count := count + 1; + + end; + + { start at AAA } + steps := 0; + str := 'AAA'; + + { until we reach the end } + while CompareText(str, 'ZZZ') <> 0 do + begin + + { get step } + step := instructions[(steps mod length(instructions)) + 1]; + steps := steps + 1; + + { find node } + for i := 0 to count do + begin + if CompareText(nodes[i, 0], str) = 0 then + break + end; + + { go to next node} + case step of + 'L': str := nodes[i, 1]; + 'R': str := nodes[i, 2]; + end; + + end; + + writeln(steps); +end. + diff --git a/src/pascal/2023/day8/part2.pas b/src/pascal/2023/day8/part2.pas new file mode 100644 index 0000000..7fd9490 --- /dev/null +++ b/src/pascal/2023/day8/part2.pas @@ -0,0 +1,184 @@ +program day8part2; +uses sysutils; + + +var + file_: text; + + instructions: AnsiString; + str: string; + + count: int32; + + steps: int32; + step: char; + + i, j: int32; + + { node, left, right } + nodes: array[0..1000, 0..2] of string; + + prev_states: array[0..100000] of string; + prev_ics: array[0..100000] of int32; + prev_count: int32; + + b: array[0..1000] of int32; + l: array[0..1000] of int32; + a: array[0..1000, 0..1000] of int32; + a_count: array[0..1000] of int32; + + current_nodes: array[0..1000] of string; + current_nodes_count: int32; + + finished: boolean; + +begin + { open inp.txt for reading } + assign(file_, 'resources/2023/day8.txt'); + reset(file_); + + { read instructions } + readln(file_, instructions); + + { read empty line } + readln(file_, str); + + count := 0; + + { read nodes } + while not EOF(file_) do + begin + + readln(file_, str); + + { start } + nodes[count, 0] := copy(str, 1, 3); + { left } + nodes[count, 1] := copy(str, 8, 3); + { right } + nodes[count, 2] := copy(str, 13, 3); + + count := count + 1; + + end; + + current_nodes_count := 0; + + { find all nodes that end with A } + for i := 0 to count - 1 do + begin + { if ends with A } + if nodes[i, 0][3] = 'A' then + begin + { adds it to current nodes } + current_nodes[current_nodes_count] := nodes[i, 0]; + current_nodes_count := current_nodes_count + 1; + end; + end; + + + + { for each node } + + for j := 0 to current_nodes_count - 1 do + begin + + steps := 0; + prev_count := 0; + finished := False; + + writeln(current_nodes[j]); + + while not finished do + begin + + { add state } + prev_states[prev_count] := current_nodes[j]; + prev_ics[prev_count] := (steps mod length(instructions)) + 1; + + { get step } + step := instructions[(steps mod length(instructions)) + 1]; + steps := steps + 1; + + { find node } + for i := 0 to count do + begin + if CompareText(nodes[i, 0], current_nodes[j]) = 0 then + break + end; + + { go to next node } + case step of + 'L': current_nodes[j] := nodes[i, 1]; + 'R': current_nodes[j] := nodes[i, 2]; + end; + + { check if next node is in previous state } + for i := 0 to prev_count do + begin + if (prev_states[i] = current_nodes[j]) and (prev_ics[i] = (steps mod length(instructions)) + 1) then + begin + finished := true; + break; + end; + end; + + prev_count := prev_count + 1; + + end; + + { offset to start of loop } + write('b = '); + b[j] := i - 1; + writeln(b[j]); + + { length of loop } + write('l = '); + l[j] := prev_count - i; + writeln(l[j]); + + { find offsets to the loop where it's finished } + a_count[j] := 0; + + for i := b[j] to prev_count - 1 do + begin + + { i'm sure this will cause no problems } + if i < 0 then + continue; + + { if this is a finished state } + if prev_states[i][3] = 'Z' then + begin + + { add it to the a list } + a[j, a_count[j]] := i - b[j]; + + write('a_'); + write(a_count[j]); + write(' = '); + writeln(a[j, a_count[j]]); + + a_count[j] := a_count[j] + 1; + + end; + end; + + // O( n * (l + b)) + // l is length of loop + // b is length of leadup + // n is number of nodes + + // O(a^n) + // a is number of finished states + + { + + i might come back to this to actually do this i'm tired rn + + } + + end; + +end. + diff --git a/src/pascal/2023/day9/bigint.pas b/src/pascal/2023/day9/bigint.pas new file mode 100644 index 0000000..297facd --- /dev/null +++ b/src/pascal/2023/day9/bigint.pas @@ -0,0 +1,514 @@ +const + UINT32MAX: uint64 = $00000000FFFFFFFF; +type + int512 = record + { 16 32 bit values in 64 bit ints } + values: array[0..15] of int64; + end; + + +operator := (n: int64) b: int512; +begin + if n >= 0 then + fillqword(b.values, 16, 0) + else + fillqword(b.values, 16, UINT32MAX); + b.values[0] := n and UINT32MAX; + b.values[1] := n shr 32; +end; + +procedure print512(n: int512; printall: boolean = false); +var + i: int32; + started: boolean; +begin + + started := printall; + + for i := 0 to 15 do + begin + if (n.values[15 - i] <> 0) or started or (i = 15) then + begin + write(hexstr(n.values[15 - i], 8)); + if (i <> 15) then + write(' '); + started := true; + end; + end; +end; + +procedure print512f(n: int512; printall: boolean = false); +var + i: int32; + started: boolean; +begin + + started := printall; + + for i := 0 to 15 do + begin + if (n.values[15 - i] <> 0) or started or (i = 15) then + begin + write(hexstr(n.values[15 - i], 16)); + if (i <> 15) then + write(' '); + started := true; + end; + end; +end; + +function isneg(n: int512): boolean; +begin + isneg := (n.values[15] and (1 shl 31)) <> 0 +end; + +function bigshiftleft(n: int512; b: int32): int512; +var + i: int32; +begin + + bigshiftleft := 0; + + for i := 0 to 15 - b do + begin + bigshiftleft.values[i + b] := n.values[i]; + end; +end; + +function bigshiftright(n: int512; b: int32): int512; +var + i: int32; +begin + + bigshiftright := 0; + + for i := 0 to 15 - b do + begin + bigshiftright.values[i] := n.values[i + b]; + end; +end; + +operator shl (a: int512; b: int32) o: int512; +var + i: int32; +begin + + a := bigshiftleft(a, (b and (not 31)) shr 5); + + { handle first seperately } + o.values[0] := (a.values[0] shl (b and 31)) and UINT32MAX; + for i := 1 to 15 do + begin + o.values[i] := (((a.values[i - 1] shl (b and 31)) shr 32) or // leftover from behind cell + ((a.values[i] shl (b and 31)))) and UINT32MAX; // from this cell + end; +end; + +operator shr (a: int512; b: int32) o: int512; +var + i: int32; +begin + + a := bigshiftright(a, (b and (not 31)) shr 5); + + { + 00001234 00005678 00001234 + 12340000 56780000 12340000 + 00000012 00003456 00007812 + + } + + for i := 0 to 14 do + begin + o.values[i] := (((a.values[i + 1] shl (32 - (b and 31))) and UINT32MAX) or // from previous cell + (a.values[i] shr (b and 31))) // from this cell + end; + + { handle last seperately } + o.values[15] := a.values[15] shr (b and 31); +end; + +operator + (a, b: int512) out_: int512; +var + i: int32; + t: int64; + carry: int32; +begin + + carry := 0; + + for i := 0 to 15 do + begin + t := a.values[i] + b.values[i] + carry; + carry := 0; + + if t > UINT32MAX then + begin + carry := t shr 32; + t := t and UINT32MAX; + end; + + out_.values[i] := t; + + end; + +end; + +operator - (a: int512) out_: int512; +var + i: int32; +begin + for i := 0 to 15 do + begin + a.values[i] := a.values[i] xor UINT32MAX; + end; + + out_ := a + 1; +end; + +operator - (a, b: int512) out_: int512; +begin + out_ := a + (- b); +end; + +operator > (a, b: int512) out_: boolean; +var + i: int32; +begin + + out_ := false; + + for i := 0 to 15 do + begin + + if (a.values[15 - i] > b.values[15 - i]) then + begin + out_ := true; + break; + end + else if (a.values[15 - i] = b.values[15 - i]) then + continue + else + break + end; +end; + +operator < (a, b: int512) out_: boolean; +var + i: int32; +begin + + out_ := false; + + for i := 0 to 15 do + begin + + if (a.values[15 - i] < b.values[15 - i]) then + begin + out_ := true; + break; + end + else if (a.values[15 - i] = b.values[15 - i]) then + continue + else + break + end; +end; + +operator >= (a, b: int512) out_: boolean; +begin + out_ := not (a < b); +end; + +operator <= (a, b: int512) out_: boolean; +begin + out_ := not (a > b); +end; + +operator = (a, b: int512) out_: boolean; +var + i: int32; +begin + + out_ := true; + + for i := 0 to 15 do + begin + if (a.values[15 - i] = b.values[15 - i]) then + continue + else + begin + out_ := false; + break; + end; + end; +end; + +operator <> (a, b: int512) out_: boolean; +begin + out_ := not (a = b); +end; + +operator * (a, b: int512) out_: int512; +var + + i, j: int32; + t: uint64; + carry: int512; + neg: boolean; + +begin + + neg := false; + if isneg(a) then + begin + neg := not neg; + a := -a; + end; + + if isneg(b) then + begin + neg := not neg; + b := -b; + end; + + carry := 0; + out_ := 0; + + for i := 0 to 15 do + begin + for j := 0 to 15 do + begin + if (i + j > 15) then + continue; + + t := a.values[i] * b.values[j]; + + if t > UINT32MAX then + begin + carry.values[i + j + 1] := carry.values[i + j + 1] + (t shr 32); + t := t and UINT32MAX; + end; + + out_.values[i + j] := out_.values[i + j] + t; + end; + end; + + out_ := carry + out_; + + if neg then + out_ := -out_; + +end; + + +operator mod (a, b: int512) out_: int512; +var + + i: int32; + normalize_factor: int32; + +begin + + { normalize divisor } + + { big normalize } + for i := 0 to 15 do + begin + if b.values[15 - i] <> 0 then + begin + normalize_factor := i * 32; + b := bigshiftleft(b, i); + break; + end; + end; + + + { small normalize } + for i := 0 to 31 do + begin + if (b.values[15] and (1 shl (31 - i))) <> 0 then + begin + normalize_factor := normalize_factor + i; + b := b shl i; + break; + end; + end; + + {subtract} + + for i := 0 to (normalize_factor) do + begin + + if a >= b then + begin + //print512f(a); + //write('a '); + //print512f(b); + //write('b '); + //writeln(); + a := a - b; + // only necessary for true division + // out_ := out_ + 1; + // out_ := out_ shl 1; + end; + + b := b shr 1; + end; + + out_ := a; +end; + +operator div (a, b: int512) out_: int512; +var + + i: int32; + normalize_factor: int32; + neg: boolean; + +begin + + neg := false; + if isneg(a) then + begin + neg := not neg; + a := -a; + end; + + if isneg(b) then + begin + neg := not neg; + b := -b; + end; + + { normalize divisor } + + { big normalize } + for i := 0 to 15 do + begin + if b.values[15 - i] <> 0 then + begin + normalize_factor := i * 32; + b := bigshiftleft(b, i); + break; + end; + end; + + { small normalize } + for i := 0 to 31 do + begin + if (b.values[15] and (1 shl (31 - i))) <> 0 then + begin + normalize_factor := normalize_factor + i; + b := b shl i; + break; + end; + end; + + {subtract} + + out_ := 0; + + for i := 0 to (normalize_factor) do + begin + + out_ := out_ shl 1; + + if a >= b then + begin + + {print512f(a); + write('a '); + print512f(b); + write('b '); + print512f(out_); + write('o '); + print512f(out_ shl 1); + writeln('o ');} + + a := a - b; + + out_ := out_ + 1; + end; + + b := b shr 1; + end; + + if neg then + out_ := -out_; + +end; + +procedure print512d(n: int512); +var + c: array[0..1000] of char; + count: int32; + q: int32; +begin + + if isneg(n) then + begin + write('-'); + n := -n; + end; + + if n = 0 then + write('0') + else + begin + count := 0; + while n <> 0 do + begin + c[count] := chr(byte((n mod 10).values[0]) + 48); + n := n div 10; + count := count + 1; + end; + + for q := 1 to count do + begin + write(c[count - q]); + end; + end; +end; + +function abs(n: int512): int512; +begin + abs := n; + if isneg(n) then + abs := -n; +end; + +function power(n: int512; m: int32): int512; +var + i: int32; +begin + power := 1; + for i := 1 to m do + begin + power := power * n; + end; +end; + + + +// testing +{ + +var + a, b, c: int512; +begin + b := $1111; + a := $FFFFFFFFFFFFFFFF; + c := $3000000000000003; + + a := a shl 72 + 1; + + print512(a); + writeln(); + print512(b); + writeln(); + print512(a div b); + // 0f000f00 0f000f00 00000000 00000000 +end. + +} \ No newline at end of file diff --git a/src/pascal/2023/day9/fraction.pas b/src/pascal/2023/day9/fraction.pas new file mode 100644 index 0000000..6035f88 --- /dev/null +++ b/src/pascal/2023/day9/fraction.pas @@ -0,0 +1,131 @@ + +{$include bigint.pas} + +type + fraction = record + numerator: int512; + denominator: int512; + end; + +const + { i don't think there's a better way of doing this unfortunately } + SIMPLIFY_CUTOFF: int512 = ( + values: ($00000000FFFFFFFF, $00000000FFFFFFFF, $00000000FFFFFFFF, $00000000FFFFFFFF, $00000000FFFFFFFF, $00000000FFFFFFFF, $00000000FFFFFFFF, $0000000000000000, + $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000, $0000000000000000); + ); + +procedure print_fraction(a: fraction); +begin + if a.denominator <> 1 then + begin + print512d(a.numerator); + write('/'); + print512d(a.denominator); + end + else + print512d(a.numerator); +end; + +function c_fraction(num: int512; den: int512): fraction; +begin + if den = 0 then + writeln('holy hell what are you doing'); + + c_fraction.numerator := num; + c_fraction.denominator := den; + +end; + +operator := (f: int64) out_ : fraction; +begin + out_ := c_fraction(f, 1); +end; + + +function gcd(a, b: int512): int512; +var + r: int512; +begin + + while true do + begin + + r := a mod b; + + if r = 0 then + break; + + a := b; + b := r; + + end; + + gcd := b; +end; + +function simplify(f: fraction): fraction; +var + b: int512; + neg: boolean; + +begin + + neg := false; + if isneg(f.numerator) then + begin + neg := not neg; + f.numerator := -f.numerator; + end; + + if isneg(f.denominator) then + begin + neg := not neg; + f.denominator := -f.denominator; + end; + + b := gcd(f.numerator, f.denominator); + + if b <> 0 then + simplify := c_fraction(f.numerator div b, f.denominator div b) + else + simplify := f; + + if neg then + simplify.numerator := -simplify.numerator; + +end; + +{ add fractions } +operator + (a, b: fraction) out_: fraction; +//var + // g: int512; +begin + + // print_fraction(a); + // write(' '); + // print_fraction(b); + // write(' '); + + // g := gcd(a.denominator, b.denominator); + + out_.denominator := a.denominator * b.denominator; + out_.numerator := a.denominator * b.numerator + b.denominator * a.numerator; + + // print_fraction(out_); + // write(' '); + if abs(out_.numerator) > SIMPLIFY_CUTOFF then + out_ := simplify(out_); + // print_fraction(out_); + // writeln('ya'); +end; + +{ mult fractions } +operator * (a, b: fraction) out_: fraction; +begin + out_.denominator := a.denominator * b.denominator; + out_.numerator := a.numerator * b.numerator; + + if abs(out_.numerator) > SIMPLIFY_CUTOFF then + out_ := simplify(out_); + +end; \ No newline at end of file diff --git a/src/pascal/2023/day9/part1.pas b/src/pascal/2023/day9/part1.pas new file mode 100644 index 0000000..7f09c17 --- /dev/null +++ b/src/pascal/2023/day9/part1.pas @@ -0,0 +1,120 @@ +program day9part1; +{$INCLUDE 'polynomial.pas'} + +function lagrange(x, y: array of int64; l: int64 = 0): polynomial; +var + + new: polynomial; + idx: int64; + i: int64; + +begin + lagrange := constant(c_fraction(0, 1)); + + if l = 0 then + begin + case length(x) > length(y) of + true: l := length(y); + false: l := length(x); + end; + end; + + for idx := 0 to l - 1 do + begin + + new := constant(c_fraction((y[idx]), 1)); + + for i := 0 to l - 1 do + begin + if i = idx then + continue; + + new := new * binomial(c_fraction(1, 1), c_fraction(- x[i], 1)); + + new := new * constant(c_fraction(1, (x[idx] - x[i]))); + + end; + + lagrange := lagrange + new; + + end; + +end; + + +var + + { couldn't have done that with a for loop } + x: array[0..100] of int64 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100); + y: array[0..100] of int64; + + file_: text; + str: string; + negative, number: int64; + + c: char; + + count, b: int64; + + sum: fraction; + p: polynomial; + f: fraction; + +begin + + assign(file_, 'resources/2023/day9.txt'); + reset(file_); + + sum := c_fraction(0, 1); + + while not EOF(file_) do + begin + + readln(file_, str); + count := 0; + number := 0; + negative := 1; + + for c in str do + begin + if c = '-' then + negative := -1 + else if (('0' <= c) and (c <= '9')) then + begin + //add number to number + val(c, b); + number := number * 10 + b; + end + else + begin + y[count] := number * negative; + count := count + 1; + number := 0; + negative := 1; + end; + end; + + y[count] := number * negative; + + p := simplify_poly(lagrange(x, y, count + 1)); + + print_polynomial(p); + write(' at '); + write(count + 1); + write(' is '); + + f := simplify(eval_polynomial(p, count + 1)); + + print_fraction(f); + + sum := sum + f; + + writeln(); + + end; + + write('The final sum is: '); + + print_fraction(sum); + +end. diff --git a/src/pascal/2023/day9/part2.pas b/src/pascal/2023/day9/part2.pas new file mode 100644 index 0000000..05270d7 --- /dev/null +++ b/src/pascal/2023/day9/part2.pas @@ -0,0 +1,120 @@ +program day9part1; +{$INCLUDE 'polynomial.pas'} + +function lagrange(x, y: array of int64; l: int64 = 0): polynomial; +var + + new: polynomial; + idx: int64; + i: int64; + +begin + lagrange := constant(c_fraction(0, 1)); + + if l = 0 then + begin + case length(x) > length(y) of + true: l := length(y); + false: l := length(x); + end; + end; + + for idx := 0 to l - 1 do + begin + + new := constant(c_fraction((y[idx]), 1)); + + for i := 0 to l - 1 do + begin + if i = idx then + continue; + + new := new * binomial(c_fraction(1, 1), c_fraction(- x[i], 1)); + + new := new * constant(c_fraction(1, (x[idx] - x[i]))); + + end; + + lagrange := lagrange + new; + + end; + +end; + + +var + + { couldn't have done that with a for loop } + x: array[0..100] of int64 = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100); + y: array[0..100] of int64; + + file_: text; + str: string; + negative, number: int64; + + c: char; + + count, b: int64; + + sum: fraction; + p: polynomial; + f: fraction; + +begin + + assign(file_, 'resources/2023/day9.txt'); + reset(file_); + + sum := c_fraction(0, 1); + + while not EOF(file_) do + begin + + readln(file_, str); + count := 0; + number := 0; + negative := 1; + + for c in str do + begin + if c = '-' then + negative := -1 + else if (('0' <= c) and (c <= '9')) then + begin + //add number to number + val(c, b); + number := number * 10 + b; + end + else + begin + y[count] := number * negative; + count := count + 1; + number := 0; + negative := 1; + end; + end; + + y[count] := number * negative; + + p := simplify_poly(lagrange(x, y, count + 1)); + + print_polynomial(p); + write(' at '); + write(-1); + write(' is '); + + f := simplify(eval_polynomial(p, -1)); + + print_fraction(f); + + sum := sum + f; + + writeln(); + + end; + + write('The final sum is: '); + + print_fraction(sum); + +end. diff --git a/src/pascal/2023/day9/polynomial.pas b/src/pascal/2023/day9/polynomial.pas new file mode 100644 index 0000000..52afb88 --- /dev/null +++ b/src/pascal/2023/day9/polynomial.pas @@ -0,0 +1,170 @@ +{$mode objfpc} + +uses sysutils, math; + +{$include fraction.pas} + +const + MAX_POLYNOMIAL_LENGTH = 100; + +type + polynomial = record + degree: int64; + { coefficients will be stored in reverse. ofc} + coefficients: array[0..MAX_POLYNOMIAL_LENGTH] of fraction; + end; + + +procedure fill_array_1(var a: array of fraction; l: int64 = MAX_POLYNOMIAL_LENGTH); +var + i: int64; +begin + + for i := 0 to l do + a[i] := c_fraction(0, 1); + +end; + +{ add polynomials } +operator + (a, b: polynomial) add_polynomial: polynomial; +var + + new_degree: int64; + max_degree: int64; + i: int64; + +begin + + case a.degree > b.degree of + true: max_degree := a.degree; + false: max_degree := b.degree; + end; + + fill_array_1(add_polynomial.coefficients); + + for i := 0 to max_degree do + begin + add_polynomial.coefficients[i] := a.coefficients[i] + b.coefficients[i]; + + if add_polynomial.coefficients[i].numerator <> 0 then + new_degree := i + end; + + add_polynomial.degree := new_degree; +end; + +{ mult polynomials } +operator * (a, b: polynomial) out_: polynomial; +var + + i, j: int64; + new_degree: int32; + +begin + + out_.degree := a.degree + b.degree; + + fill_array_1(out_.coefficients); + + for i := 0 to a.degree do + begin + for j := 0 to b.degree do + begin + + out_.coefficients[i + j] := out_.coefficients[i + j] + a.coefficients[i] * b.coefficients[j]; + + end; + end; + + for i := 0 to out_.degree do + begin + + if out_.coefficients[i].numerator <> 0 then + new_degree := i + end; + + out_.degree := new_degree; + +end; + +function constant(c: fraction): polynomial; +begin + fill_array_1(constant.coefficients); + constant.coefficients[0] := c; + constant.degree := 0; +end; + +function binomial(m, b: fraction): polynomial; +begin + fill_array_1(binomial.coefficients); + binomial.coefficients[0] := b; + binomial.coefficients[1] := m; + binomial.degree := 1; +end; + + +function eval_polynomial(a: polynomial; b: int512): fraction; +var + i: int64; +begin + + eval_polynomial := c_fraction(0, 1); + + for i := 0 to a.degree do + begin + eval_polynomial := eval_polynomial + a.coefficients[i] * c_fraction(power(b, i), 1); + end; +end; + +procedure print_polynomial(a: polynomial); +var + + i: int64; + +begin + + for i := 0 to a.degree do + begin + if (a.coefficients[a.degree - i].numerator <> 0) or (a.degree = 0) then + begin + if i <> 0 then + begin + if isneg(a.coefficients[a.degree - i].numerator) then + begin + a.coefficients[a.degree - i].numerator := -a.coefficients[a.degree - i].numerator; + write(' - '); + end + else + write(' + '); + end; + + { yeah. need an equality for fraction. } + if (a.coefficients[a.degree - i].numerator <> 1) and (a.coefficients[a.degree - i].denominator <> 1) or (i = a.degree) then + print_fraction(a.coefficients[a.degree - i]); + + if i = a.degree - 1 then + write('x') + else if i < a.degree - 1 then + begin + write('x^'); + write(a.degree - i); + end; + end; + end; + + write(' ('); + write(a.degree); + write(')'); + +end; + +function simplify_poly(a: polynomial): polynomial; +var + i: int32; +begin + for i := 0 to a.degree do + begin + simplify_poly.coefficients[i] := simplify(a.coefficients[i]); + end; + simplify_poly.degree := a.degree; +end; diff --git a/src/pladcl/2023/day1/part2.pdl b/src/pladcl/2023/day1/part2.pdl new file mode 100644 index 0000000..5221c6e --- /dev/null +++ b/src/pladcl/2023/day1/part2.pdl @@ -0,0 +1,52 @@ +state search_first + parse_int() + `z0=q` + `ds1s2` + set_state(search_second) +end + +state search_second + parse_int() + `z0=q` + `s2` +end + +interrupt newline + `l2l110*+` + `lo+so` + set_state(search_first) +end + +interrupt program_end + `lop` +end + +function parse_int + + `[` + `ln48>qln57= `l!` then + `l#S3` # push # back onto 3 + #`[2)]nf` + break + end + + `l#S1` # push # onto 1 + #`[3)]nf` + + + end + + #`[4)]nf` + + # if we popped the end of array off then put it back on + if `l#` == -1 then + `_1S3` + end + + + `l!S3` # push ! into temp stack + + end + + debug_print("sorted 1") + + # until we drain 2 + while `L2ds@` != -1 do + + # until we drain 4 + while `L4ds$` != -1 do + # if top of stack is greater than @ + if `l$` >= `l@` then + `l$S4` # push $ back onto 4 + break + end + + `l$S2` # push $ onto 2 + + end + + # if we popped the end of array off then put it back on + if `l$` == -1 then + `_1S4` + end + + + `l@S4` # push @ into temp stack + + end + + `0so` + + debug_print("sorted") + + while `L4s2L3ds1` != -1 do + `l1l2-` + abs() + `lo+so` + end + + `lop` + +end + +function read_number + read_number_start() + read_number_end() +end + +function read_number_start + + -1 + # ret _1 if not a digit + return_if(`ln` < 48) + return_if(`ln` > 57) + `st` + + # throw the true digit onto the stack + `ln48-` + + # inc i + adjust_index(1) + # recurse + read_number_start() + +end + +function read_number_end + + # if we only have 1 item on stack (-1) we found no number, so return + return_if(1 == `z`) + + # push entire number thing onto temporary stack + `[STz0<.]ds.x` + # multiply ten then pop and add repeatedly until done + `0` + `[LTd_1=qr10*+l.x]ds.x` + # get rid of the extra -1 + `st` + # decrement i so we reread the skipped char + adjust_index(-1) + +end + +function abs + `d0 57) + `st` + + # throw the true digit onto the stack + `ln48-` + + # inc i + adjust_index(1) + # recurse + read_number_start() + +end + +function read_number_end + + # if we only have 1 item on stack (-1) we found no number, so return + return_if(1 == `z`) + + # push entire number thing onto temporary stack + `[STz0<.]ds.x` + # multiply ten then pop and add repeatedly until done + `0` + `[LTd_1=qr10*+l.x]ds.x` + # get rid of the extra -1 + `st` + # decrement i so we reread the skipped char + adjust_index(-1) + +end + + diff --git a/src/pladcl/2024/day2/part1.pdl b/src/pladcl/2024/day2/part1.pdl new file mode 100644 index 0000000..49da6b6 --- /dev/null +++ b/src/pladcl/2024/day2/part1.pdl @@ -0,0 +1,153 @@ +state start + # read a number and put it into the report stack + read_number() + `[d_1!=qs.q]x` + `SR` +end + +# prime the report stack with an end token +interrupt program_start + `_1SR` +end + +interrupt newline + + + # check sequence and add it into output + check_sequence() + `lo+so` + + # increment past newline + `li1+dsi;Isn` + # clear report + `_1SR` + +end + +interrupt program_end + `lop` +end + +function check_sequence + + `[chk]n10an` + + `[s.q]s?` + + # return value + `0` + + # start checking the first two values (+1) + `LRLRdSR-` + + # return if 0 (0) + `d0=?` + + # calc abs, return if > 3 (0) + `d` + abs() + `3q` + check_ascending_sequence() + `+q]x` + +end + +function check_descending_sequence + + `[dsc]n10an` + + `[s.s.1+q]s!` # success macro + `[s.q]s?` # cleanup fail macro + + # ret value + + `0` + + # start with smth + `LR` + `[` + `LRdSR` # grab (and replace the next character) + `d_1=!` # if we're done then break out of here as a success + `-` # get difference + `d_1 -1 fail + `_3>q` # if < -3 fail + `LR` # grab the next + `l.x` # and loop + `]ds.x` +end + +function check_ascending_sequence + + + `[asc]n10an` + + `[s.s.1+q]s!` # success macro + `[s.q]s?` # cleanup fail macro + + # ret value + + `0` + + # start with smth + `LR` + `[` + `LRdSR` # grab (and replace the next character) + `d_1=!` # if we're done then break out of here as a success + `-` # get difference + `d1>?` # if < 1 fail + `3 3 fail + `LR` # grab the next + `l.x` # and loop + `]ds.x` + +end + +function read_number + read_number_start() + read_number_end() +end + +function read_number_start + `_1` + # ret _1 if not a digit + `ln48>q` + `ln57` # macro for storing new number + + `lc1-sd` # now we start skipping. starting with the dth + + `[` + `_1SR` # make sure to cap report + `lc1-` # start of the thing + + `[` # copy loop + + `dld!=>` # copy a number iff index is not d + `1-` # decrement index + `d_1!=.` # loop if not -1 + `]ds.x` + `s.` # remove junk + + check_sequence() # add in this check sequence to our return + `+` + + `ld1-dsd` # decrement d + debug(`[d]np`) + `_1!=<` # loop if not _1 + + `]dsqs.1]x` # cap to one + + +end + +interrupt program_end + `lop` +end + +function check_sequence + + debug(`[chk]n10an`) + + `[s.q]s?` + + # return value + `0` + + # start checking the first two values (+1) + `LRLRdSR-` + + # return if 0 (0) + `d0=?` + + # calc abs, return if > 3 (0) + `d` + abs() + `3q` + check_ascending_sequence() + `+q]x` + +end + +function check_descending_sequence + + debug(`[dsc]n10an`) + + `[s.s.1+q]s!` # success macro + `[s.q]s?` # cleanup fail macro + + # ret value + + `0` + + # start with smth + `LR` + `[` + `LRdSR` # grab (and replace the next character) + `d_1=!` # if we're done then break out of here as a success + `-` # get difference + `d_1 -1 fail + `_3>q` # if < -3 fail + `LR` # grab the next + `l.x` # and loop + `]ds.x` +end + +function check_ascending_sequence + + + debug(`[asc]n10an`) + + `[s.s.1+q]s!` # success macro + `[s.q]s?` # cleanup fail macro + + # ret value + + `0` + + # start with smth + `LR` + `[` + `LRdSR` # grab (and replace the next character) + `d_1=!` # if we're done then break out of here as a success + `-` # get difference + `d1>?` # if < 1 fail + `3 3 fail + `LR` # grab the next + `l.x` # and loop + `]ds.x` + +end + +function read_number + read_number_start() + read_number_end() +end + +function read_number_start + `_1` + # ret _1 if not a digit + `ln48>q` + `ln57q` + `ln57q` + `ln57 57) + `st` + + # throw the true digit onto the stack + `ln48-` + + # inc i + adjust_index(1) + # recurse + read_number_start() + +end + +function read_number_end + + # if we only have 1 item on stack (-1) we found no number, so return + return_if(1 == `z`) + + # push entire number thing onto temporary stack + `[STz0<.]ds.x` + # multiply ten then pop and add repeatedly until done + `0` + `[LTd_1=qr10*+l.x]ds.x` + # get rid of the extra -1 + `st` + # decrement i so we reread the skipped char + adjust_index(-1) + +end + +function abs + `d0 57) + `st` + + # throw the true digit onto the stack + `ln48-` + + # inc i + adjust_index(1) + # recurse + read_number_start() + +end + +function read_number_end + + # if we only have 1 item on stack (-1) we found no number, so return + return_if(1 == `z`) + + # push entire number thing onto temporary stack + `[STz0<.]ds.x` + # multiply ten then pop and add repeatedly until done + `0` + `[LTd_1=qr10*+l.x]ds.x` + # get rid of the extra -1 + `st` + # decrement i so we reread the skipped char + adjust_index(-1) + +end + +function abs + `d0 12 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'red' in x]) + + sum([int(x.split(" ")[0]) > 13 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'green' in x]) + + sum([int(x.split(" ")[0]) > 14 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'blue' in x]) + ) > 0 else 1) + for y, z in enumerate(open('resources/2023/day2.txt').readlines()) + ]) +) + +# sum([(y+1) * (0 if (sum([int(x.split(" ")[0]) > 12 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'red' in x]) + sum([int(x.split(" ")[0]) > 13 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'green' in x]) + sum([int(x.split(" ")[0]) > 14 for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'blue' in x])) > 0 else 1) for y, z in enumerate(open('resources/2023/day2.txt').readlines())]) \ No newline at end of file diff --git a/src/python/2023/day2/part2.py b/src/python/2023/day2/part2.py new file mode 100644 index 0000000..d0cd17e --- /dev/null +++ b/src/python/2023/day2/part2.py @@ -0,0 +1,12 @@ +print( + sum( + [ + max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'red' in x]) * + max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'green' in x]) * + max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'blue' in x]) + for z in open('resources/2023/day2.txt').readlines() + ] + ) +) + +# sum([max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'red' in x]) * max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'green' in x]) * max([int(x.split(" ")[0]) for x in z.split(": ")[1][:-1].replace(";", ",").split(", ") if 'blue' in x]) for z in open('resources/2023/day2.txt').readlines()]) \ No newline at end of file diff --git a/src/python/2023/day3/part1.py b/src/python/2023/day3/part1.py new file mode 100644 index 0000000..7f91e02 --- /dev/null +++ b/src/python/2023/day3/part1.py @@ -0,0 +1,21 @@ +print(sum(sum( + [[m[2] for m in zip(*l) if m[0] and not (m[1] and m[2] == m[3]) and m[2] != -1] for l in + list(map(lambda x, y: (x, [False] + x, y, [-1] + y), + [[sum(n) > 0 for n in zip(*m)] for m in zip( + *list(map(lambda x: [ + [[False] + q for q in [[False] * len(x[0])] + x], [[False] * len(x[0])] + x, [q[1:] + [False] for q in [[False] * len(x[0])] + x], + [[False] + q for q in x], x, [q[1:] + [False] for q in x], + [[False] + q for q in x[1:] + [[False] * len(x[0])]], x[1:] + [[False] * len(x[0])], [q[1:] + [False] for q in x[1:] + [[False] * len(x[0])]]], + [[[x not in '0123456789.' for x in l] for l in open("resources/2023/day3.txt").read().split("\n")]] # array of True when a symbol + ))[0] + )], # array of True when next to a symbol + [[max(a) if a[1] != -1 else -1 for a in zip(*b)] for b in zip( + *list(map(lambda x: [[[-1] + q for q in x], x, [q[1:] + [-1] for q in x]], + [[[int("".join(c).strip('.!@#$%^&*()_+-=/')) if c[1] in '0123456789' else -1 for c in zip('.' + l, l, l[1:] + '.')] for l in open("resources/2023/day3.txt").read().split("\n")]] + ))[0] + )] # array of -1, or the number. + )) + ], [] +))) + +# sum(sum([[m[2] for m in zip(*l) if m[0] and not (m[1] and m[2] == m[3]) and m[2] != -1] for l in list(map(lambda x, y: (x, [False] + x, y, [-1] + y), [[sum(n) > 0 for n in zip(*m)] for m in zip(*list(map(lambda x: [[[False] + q for q in [[False] * len(x[0])] + x], [[False] * len(x[0])] + x, [q[1:] + [False] for q in [[False] * len(x[0])] + x], [[False] + q for q in x], x, [q[1:] + [False] for q in x], [[False] + q for q in x[1:] + [[False] * len(x[0])]], x[1:] + [[False] * len(x[0])], [q[1:] + [False] for q in x[1:] + [[False] * len(x[0])]]], [[[x not in '0123456789.' for x in l] for l in open("resources/2023/day3.txt").read().split("\n")]]))[0])], [[max(a) if a[1] != -1 else -1 for a in zip(*b)] for b in zip(*list(map(lambda x: [[[-1] + q for q in x], x, [q[1:] + [-1] for q in x]], [[[int("".join(c).strip('.!@#$%^&*()_+-=/')) if c[1] in '0123456789' else -1 for c in zip('.' + l, l, l[1:] + '.')] for l in open("resources/2023/day3.txt").read().split("\n")]]))[0])]))], [])) diff --git a/src/python/2023/day3/part2.py b/src/python/2023/day3/part2.py new file mode 100644 index 0000000..11afa4d --- /dev/null +++ b/src/python/2023/day3/part2.py @@ -0,0 +1,28 @@ +print(sum([ + v[0] * v[1] for v in # sums all asterisks with > 2 + [ + [sum([g[w, a] for a in range(140) if abs(w - a*140) < 280], []) for w in range(140**2)] for g in # coagulate the dictionaries + [{ + (r*140 + p, r): [m[2] for m in zip(*l) if m[0] and not (m[1] and m[2] == m[3]) and m[2] != -1 and r*140 + p in m[0]] # find adjacent numbers + for p in range(-280, 280) for r, l in enumerate( # from part 1. + list(map(lambda x, y: (x, [-1] + x, y, [-1] + y), + [[[l for l in n if l > 0] for n in zip(*m)] for m in zip( + *list(map(lambda x: [ + [[False] + q for q in [[False] * len(x[0])] + x], [[False] * len(x[0])] + x, [q[1:] + [False] for q in [[False] * len(x[0])] + x], + [[False] + q for q in x], x, [q[1:] + [False] for q in x], + [[False] + q for q in x[1:] + [[False] * len(x[0])]], x[1:] + [[False] * len(x[0])], [q[1:] + [False] for q in x[1:] + [[False] * len(x[0])]]], + [[[i * 140 + j if b == "*" else -1 for j, b in enumerate(a)] for i, a in enumerate(open("resources/2023/day3.txt").read().split("\n"))]] # array of asterisk ids, or -1 + ))[0] + )], # array of nearby asterissks + id + [[max(a) if a[1] != -1 else -1 for a in zip(*b)] for b in zip( + *list(map(lambda x: [[[-1] + q for q in x], x, [q[1:] + [-1] for q in x]], + [[[int("".join(c).strip('.!@#$%^&*()_+-=/')) if c[1] in '0123456789' else -1 for c in zip('.' + l, l, l[1:] + '.')] for l in open("resources/2023/day3.txt").read().split("\n")]] + ))[0] + )] # array of -1, or the number. + )) + ) + }] + ][0] if len(v) >= 2 +])) + +# sum([v[0] * v[1] for v in [[sum([g[w, a] for a in range(140) if abs(w - a*140) < 280], []) for w in range(140**2)] for g in [{(r*140 + p, r): [m[2] for m in zip(*l) if m[0] and not (m[1] and m[2] == m[3]) and m[2] != -1 and r*140 + p in m[0]] for p in range(-280, 280) for r, l in enumerate(list(map(lambda x, y: (x, [-1] + x, y, [-1] + y), [[[l for l in n if l > 0] for n in zip(*m)] for m in zip(*list(map(lambda x: [[[False] + q for q in [[False] * len(x[0])] + x], [[False] * len(x[0])] + x, [q[1:] + [False] for q in [[False] * len(x[0])] + x],[[False] + q for q in x], x, [q[1:] + [False] for q in x], [[False] + q for q in x[1:] + [[False] * len(x[0])]], x[1:] + [[False] * len(x[0])], [q[1:] + [False] for q in x[1:] + [[False] * len(x[0])]]], [[[i * 140 + j if b == "*" else -1 for j, b in enumerate(a)] for i, a in enumerate(open("resources/2023/day3.txt").read().split("\n"))]]))[0])], [[max(a) if a[1] != -1 else -1 for a in zip(*b)] for b in zip(*list(map(lambda x: [[[-1] + q for q in x], x, [q[1:] + [-1] for q in x]], [[[int("".join(c).strip('.!@#$%^&*()_+-=/')) if c[1] in '0123456789' else -1 for c in zip('.' + l, l, l[1:] + '.')] for l in open("resources/2023/day3.txt").read().split("\n")]]))[0])])))}]][0] if len(v) >= 2]) diff --git a/src/python/2023/day4/part1.py b/src/python/2023/day4/part1.py new file mode 100644 index 0000000..e9f28f2 --- /dev/null +++ b/src/python/2023/day4/part1.py @@ -0,0 +1,11 @@ +print( + sum([[0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512][p] for p in + [sum( + [[b in x[0] for b in x[1]] for x in [ + [[int(y) for y in x.strip().split(" ") if len(y) != 0] for x in l.split(':')[1].split("|")] + ]][0] + ) for l in open("resources/2023/day4.txt").readlines()] + ]) +) + +# sum([[0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512][p] for p in [sum([[b in x[0] for b in x[1]] for x in [[[int(y) for y in x.strip().split(" ") if len(y) != 0] for x in l.split(':')[1].split("|")]]][0]) for l in open("resources/2023/day4.txt").readlines()]]) \ No newline at end of file diff --git a/src/python/2023/day4/part2.py b/src/python/2023/day4/part2.py new file mode 100644 index 0000000..df96122 --- /dev/null +++ b/src/python/2023/day4/part2.py @@ -0,0 +1,34 @@ +def print2d(x): + print("\n".join([str(xx) for xx in x])) + +a = [sum( + [[b in x[0] for b in x[1]] for x in [ + [[int(y) for y in x.strip().split(" ") if len(y) != 0] for x in l.split(':')[1].split("|")] + ]][0] +) for l in open("resources/2023/day4.txt").readlines()] + +# print(a) + +b = [ + [d[x] for x in range(20) for d in [a]] +] + + +e = [2, 1, 1, 0, 0] + +# [1, 2, 4, 5, 1] + +# [0, 1, 1, 0, 0] +# [0, 0, 1, 0, 0] +# [0, 0, 0, 1, 0] +# [0, 0, 0, 0, 0] +# [0, 0, 0, 0, 0] + +p = [[1 if x > c and x < c + 1 + i else 0 for x in range(5)] for c, i in enumerate(e)] + +print2d(p) +print(p) + +print([ + [sum([p[x][y] for x in range(5)]) for y in range(5)] +]) \ No newline at end of file diff --git a/src/python/2023/day5/part1.py b/src/python/2023/day5/part1.py new file mode 100644 index 0000000..064734f --- /dev/null +++ b/src/python/2023/day5/part1.py @@ -0,0 +1,53 @@ +print( + min( + [ + [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[6]]] # final map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[5]]] # sixth map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[4]]] # fifth map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[3]]] # fourth map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[2]]] # third map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[1]]] # second map + ][0] for h in [ + [ + max(f) if max(f) != -1 else h + for f in [[g(h) for g in m[0]]] # first map + ][0] for h in [ + int(x) for x in open("resources/2023/day5.txt").readlines()[0].split(":")[1].strip().split(" ") # seeds + ] + ] + ] + ] + ] + ] + ] + ] for m in [[ + list(map( + lambda d: lambda e: e + d[0] - d[1] if e >= d[1] and e < d[1] + d[2] else -1, + [[int(a) for a in b.split(" ")] for b in c.strip().split("\n")[1:]] # bullshit to get maps + )) + for c in open("resources/2023/day5.txt").read().split("\n\n")[1:] # maps + ]] + ][0] + ) +) + +#min([[[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[6]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[5]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[4]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[3]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[2]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[1]]]][0] for h in [[max(f) if max(f) != -1 else h for f in [[g(h) for g in m[0]]]][0] for h in [int(x) for x in open("resources/2023/day5.txt").readlines()[0].split(":")[1].strip().split(" ")]]]]]]]] for m in [[list(map(lambda d: lambda e: e + d[0] - d[1] if e >= d[1] and e < d[1] + d[2] else -1, [[int(a) for a in b.split(" ")] for b in c.strip().split("\n")[1:]])) for c in open("resources/2023/day5.txt").read().split("\n\n")[1:]]]][0]) + diff --git a/src/python/2023/day7/part1.py b/src/python/2023/day7/part1.py new file mode 100644 index 0000000..6a86cf0 --- /dev/null +++ b/src/python/2023/day7/part1.py @@ -0,0 +1,19 @@ +print( + sum([a * (c + 1) for c, (_, a) in enumerate(sorted( # sort by hand value and payout bets according to rank + [(sum([ # total hand value + [max( + 13**5 * 6 if 5 in d else 0, # five of a kind + 13**5 * 5 if 4 in d else 0, # four of a kind + 13**5 * 4 if 3 in d and 2 in d else 0, # full house + 13**5 * 3 if 3 in d else 0, # three of a kind + 13**5 * 2 if list(d).count(2) == 2 else 0, # two pair + 13**5 if 2 in d else 0 # pair + ) for d in [{k: b.count(k) for k in b}.values()]][0], # total type value (value from the type of hand) + sum([13**(4 - e) * '23456789TJQKA'.index(a) for e, a in enumerate(b)]) # total card value (value from the type of card) + ]), int(v)) # makes an array of form (total hand value, bet) + for b, v in [x.split(' ') for x in open('resources/2023/day7.txt').read().split("\n")] # reads file split on \n + ] + ))]) +) + +#sum([a * (c + 1) for c, (_, a) in enumerate(sorted([(sum([[max(13**5 * 6 if 5 in d else 0, 13**5 * 5 if 4 in d else 0, 13**5 * 4 if 3 in d and 2 in d else 0, 13**5 * 3 if 3 in d else 0, 13**5 * 2 if list(d).count(2) == 2 else 0, 13**5 if 2 in d else 0) for d in [{k: b.count(k) for k in b}.values()]][0], sum([13**(4 - e) * '23456789TJQKA'.index(a) for e, a in enumerate(b)])]), int(v)) for b, v in [x.split(' ') for x in open('resources/2023/day7.txt').read().split("\n")]]))]) \ No newline at end of file diff --git a/src/z80/2023/day13/input.txt b/src/z80/2023/day13/input.txt new file mode 100644 index 0000000..7db1c8f --- /dev/null +++ b/src/z80/2023/day13/input.txt @@ -0,0 +1,1350 @@ +.###...## +##..#.... +##..#..#. +......### +#..##..## +######.#. +.#.###..# +#####.#.# +##..#..## +##..#..## +#####.#.# +.#.###..# +######.#. +#..##..## +......### +##..#..#. +##..#.... + +.#....#..#... +#..##..##.... +...##...#.##. +...##...###.# +.##..##.#.#.# +.##..##.#.### +...##...###.# + +....#.##..##. +....##......# +.##.##......# +#..####.##.## +####....##... +#..##..#..#.. +.##.####..### +#..###..##..# +####..#.##.#. +....###....## +.....#..##..# +.....##...### +....#.#....#. + +.######..##..## +.#.##.#.####.## +.#.##.#.####..# +.######..##..## +.#....#.#..#.## +########...#... +..####......... +..#..#..##.###. +#.#..#.#..####. + +..#.#.##.##.# +##.#.#.#..##. +....##..##.#. +..#..###...#. +#.###..#....# +..###..#.#.## +#..#.####..## +....#.######. +#.##.....#.#. +..##.######## +..##.##.##### +###.##.####.. +###.##.####.. +..##.##.##### +..##.######## + +#.####### +....##### +..##..... +.#.###### +.#..#.... +#........ +..#...##. +#.###.... +###.##..# +.######## +#.##.#..# +.#.###..# +..###.... +..###.... +...###..# + +#.##.######.##.## +###...####...#### +....##.##.##..... +#..#.#....#.#..## +.....##..##...... +#.#.###..###.#.## +.##.#.####.#.#... +.#..#......#..#.. +.####.####.####.. +###...####...#### +#.##........##.## +.#....#..#....#.. +..###.####.###... + +.##.#.....#.. +......#...### +.##..#..#.... +.##.##..#.... +.......#...## +.##..#.##...# +.....####..## +#..#.#..##### +####.#.#.#### +.##.#.##..#.. +.##.#####.#.. +#..#.##..##.. +####.###..#.. + +##.#...#..# +##.#...#..# +###....#..# +####.####.# +.###..#.##. +###...##.## +#...###.#.. +#...###.#.. +###...##.## +.###..#.##. +####.####.# +###....#..# +##.##..#..# + +.#.##..#..###.### +#..#..##.######## +..##..#.#...##### +.#...#..##....##. +#.####......##.## +#.#...##.#.###... +#.#...##.#.###... + +.#..###..###..# +.#..#.####.#..# +#.##.##..##.##. +..##.#.##.#.##. +##..##....##..# +#.##...##...##. +..##..#..#..##. +#.##..####..##. +#....##..##.... +.############## +###.###..###.## +#####.#..#.#### +#######..###### +.#..#.####.#..# +#....#.##.#.... + +....#..########.. +...#....######... +.......#.####.#.. +####.##.#.##.#.## +.##.##..#....#..# +..#.####..##..### +...#..#..#..#..#. + +##..##..######. +##..##..##..##. +#.#.##.#.#..#.# +###....######## +##.......####.. +.##....##....## +.#.#..#.#....#. +####..######### +###.##.###..### +.########....## +..######..##..# + +###.............. +.######.####.#### +.#..##.######.##. +##.....#.##.#.... +..#####.#..#.#### +#.#....######.... +##..##.######.##. +###.##..#..#..##. +...############## +.#....#.#..#.#... +#.#.............. + +#.##.#...##...# +#############.# +#.##.#.#....#.# +..##..##....##. +..##..########. +#.##.#..#..#..# +.#..#.###..###. +.####.#......#. +#.##.#.##..##.# +........#..#... +.####..######.. +........#..#... +........####... +.####.##....##. +..##..##....##. + +#.##....##.#. +#....##....#. +###......###. +###......###. +#....##....#. +#.##....##.#. +#.#......#.## +.#..####....# +.#...##...#.# +.##......##.# +...######...# +###.####.###. +...######...# +##.##..##.### +.####..####.. + +..###..#..#...# +..###..#..#...# +#.##..##..#.#.# +..#..#....##..# +##..##.##.##### +....####.#....# +##..#..#.##...# +.#...#####..##. +.#...#####..##. +##..#..#.##.#.# +....####.#....# + +...##.#..## +..#.##.#### +..#.###.... +######.##.. +...#.#..#.. +...#.....#. +##..#...### + +#....##..####.. +......#.##..##. +.####..#####..# +#######.##..##. +.#..#...######. +##..##..#..#..# +##..##..#..#..# +.#..#...######. +#######.##..### +.####..#####..# +......#.##..##. +#....##..####.. +#....###..#.### +#....#.##...#.. +.#..#..##..##.# +##..#######..#. +.####...#.##..# + +...#.#... +###....#. +..###.### +...##.### +###....#. +...#.#... +###....## +###..#... +##....##. +..#.#.#.. +####.##.# +..#####.. +##.##.##. +##.#.#..# +....##..# + +#...#.##. +#.#..#### +....##### +##.#..... +.##.##..# +.##.##### +.#.#..##. +#...#.... +.#.#..... +.####.##. +.####.##. +.###..... +#...#.... + +#.####.###......# +########.#.####.# +#..##..##...##... +##.##.##......... +#......##.######. +....#.....#....#. +#..##..#....##... +#.#..#.##..####.. +.##..##.#.######. +..####....#.##.#. +..#..#..##......# +#.####.###.####.# +.##..##..#..##..# + +.......#.#.#..##. +.##....#..##.#... +..#.#.#.##..#.##. +.####.#####.##... +#.#..#...####.#.# +..#..####.#.#.### +..#..####.#.#.### +#.#..#...####.#.# +.####.#####.##... +..#.#.#.##..#.##. +.##....#..##.#... +.......#.#.#..##. +######.....#.##.# +.###.###..##.#... +.###.####.##.#... + +######..#.. +##..#..#### +##.#.#.###. +..###..##.# +..#....##.. +...#..##... +....#....#. +....#....#. +...#..##... +..#....##.. +..###..##.# +##.#.#.##.. +##..#..#### + +....#.##.##.#.### +...#..#.#...#.... +..##..#.#...#.... +....#.##.##.#.### +########.##.##.#. +#.##.....##...#.. +.#..#....##.#.... +.#.#..##.#.#.##.# +#####.#...##...## +#.#######...##... +##..#.##.#.##.### +#..#......##..#.# +#..#......##..#.# +##..#.##.#.##.### +#.#######...##... +#####.#...##...## +.#.#..##.#.#.##.# + +..####..#.#.....# +##.#.#..#.#...#.. +#####.#.#.#.#..## +.###...##..##.#.. +##..#....##..#.#. +##..#....##..#.#. +.###...##..##.#.. +#####.#.#...#..## +##.#.#..#.#...#.. +..####..#.#.....# +..####..#.#.....# + +..####..####....# +##..#....#..####. +.##........##..## +.....####........ +#.##.####.##.##.# +##...####...####. +...#..##..#...... +####.#..#.####### +##....##....####. +.#....##....#..#. +.#.##.##.##.#..#. +.#####..#####..## +##.#.#....#.####. +##..######..####. +..##.#..#.##....# + +.##.##..##..# +#..#......... +#.##..##..##. +###..######## +######......# +..#..######## +..##.######## +..#.######### +..###.##..##. +.##..#..##..# +#####.##..##. +.#........... +.#.##.##..##. +#..##.##..##. +..########### +###..######## +##.#.#..##..# + +....##....##. +####.#.##.#.# +..####....### +...##.#..#.## +..##..####..# +..########### +.......##.... +#####.#..#.## +######....#.# + +....##.#.#.##.# +....#######..## +##.#..#..#....# +###....###....# +...#...#...##.. +..####....####. +...#.#.#.##..## +###......##..## +......#....##.. +##.###.####..## +..#..##...#.... +..#..#...#.##.# +##.#.#.....##.. +##.#.##...####. +...#..#.#...... +#####.####....# +##.###.##.#..#. + +#.#....#.##.. +##.#..#.##... +#.######.#... +.##.##.##.... +#........#.#. +##.####.###.. +....##.....## +##......###.. +..######...## + +...###.#.#.#. +#..#.##..#.#. +#.###..#.##.. +#.#..###..... +#.#..###..... +#.###..#.##.. +#..#.##..#.#. +...###.#.#.#. +##.##.#.###.. +....#.###...# +#.#####.#.#.. +#.#####.#.#.. +....#..##...# + +....####...#... +....#.....#.#.# +.....##...##... +..#..#..#.#..## +###..#..#.##### +##.##..##...... +##..#.#.#.#.#.. +....#.####..... +####.####.#.#.. +..###.###...### +#######....##.. +###.....####... +###..#....#.#.. + +..####. +###.#.. +.#..### +..#.#.. +####.## +#.#.#.. +#.#.... +.##.### +..#..## +..#..## +.##.### + +##.######.### +.##########.. +..#......#... +#.##.##.##.## +###......#### +.#.##..####.. +..########... +..#.#..#.#... +#..#.##.#..## + +.##.#...##. +#.##.#.##.. +#.##.#.##.. +.##.#...##. +#..#.#..### +.####.###.# +...#..###.. +####.#.#### +###.##...## +#...#..#### +##.##.....# +####.#..#.. +####.#..#.. +##.##.....# +#..##..#### + +###.#...####...#. +.###.#.#....#.#.# +#.###..##..##..## +###.#..........#. +###.#..........#. +#.###..##..##..## +.###.#.#....#.#.# +###.#...####...#. +.###...####.#...# +#..#.#..####..#.# +....##.#.##.#.##. +#.#..####..####.. +##.#.#.##..##.#.# +####..#..##..#..# +..####..#..#..### +#.###..#.##.#..## +##.##..##..##..## + +..##..... +###...##. +#..#.#### +..##..##. +#.#.#.##. +#.#.#.##. +..###.##. +#..#.#### +###...##. +..##..... +.##...##. + +..##.##.###..#. +..##.##.###..#. +#.##.###.#.##.# +..###...#.##.#. +.##....##..##.. +.###.######.... +...####..###.## +#####.##.###.## +###..#.###..... +###.#..#.##.#.. +..#..#....#.##. +###.#.##.##.... +##.##....##..## +##.##....###.## +###.#.##.##.... +..#..#....#.##. +###.#..#.##.#.. + +##.#..#...# +..###...#.. +....#.##### +..#.###.##. +#######..## +###...#..#. +....###..## +..#.###..## +###...#..#. + +...#.##..##.# +...#.##..##.# +#..#..#..##.# +..#.#.####.#. +..#.########. +.#.#........# +.###..####..# + +#..#.#####.##.. +........#...### +#####.##.#.#### +#####...##..... +....#.#..###### +..#.####..###.. +.##.#..##.###.. + +#...####. +#.##.##.# +#..###### +...#.##.# +...#.##.# +#..###### +#.##.##.# +#...####. +#.#.#..#. +..#.#..#. +#..#.#### +.#....... +..###..## +.#.##..## +.##.#..#. + +....####..# +##..####### +##..##.#### +....####..# +...##.##..# +.#...###### +.####.#.##. +#......#..# +.##...##### +.#..##..... +#......#..# + +#.#.#....###.#..# +#...###..#..##### +.#.#..####.##.##. +#.#......#...#### +..###.#.##..##..# +..#.#....#.###### +#..#.####..###### +.##.#..#.###..... +###....#.#....##. +.##.#.###...##### +.##.#####...##### +###....#.#....##. +.##.#..#.###..... +#..#.####..###### +..#.#....#.###### + +#..#...#### +.##.###.#.. +##.###....# +.....##..## +.....##..## +##.###....# +.##.###.#.. +#..#...#### +##..#.###.. +.......##.. +..##.####.. +..##.####.# +.......##.. + +##...#..#...### +###..####..#### +.###..##..###.. +##.########.### +#..#..##..##.## +###..#..#..#### +##.#.#..#.#.### +.#..#.##.#..#.. +.#.##....##.#.. +#..#......#..## +....#....#..... + +.##..#####. +.....##.#.. +###.###.#.. +####...#### +..#...##.## +#...####.## +.#...#.#### +##....#.... +.#.#.###### +....#..#.## +....#..#.## +.#.#.###### +##....#.... + +#.#.#.##..... +#......#####. +.###..#..#.## +.###..#..#.## +#......#####. +#.#.#.##..... +###..##..#.#. +###..##..#.#. +#.#.#.##..... +#......####.. +.###..#..#.## + +.#....... +#.####### +..##.#### +.....#..# +#..##.##. +..#...... +#..##.... +#.#.##..# +.###.#### +.###.#### +#.#.##..# +#..##.... +#.#...... +#..##.##. +.....#..# +..##.#### +#.####### + +..##.#....#.# +....###..###. +...#...##...# +..##.#.##.#.# +####...##...# +####.#....#.# +####.#....#.# +..###......## +..###....#.## +##....#..#... +##..########. +.....######.. +######.##.### + +..#.######. +..#..#####. +#...#..#.## +#.#.#..##.# +##..##..#.. +.#..###.### +.####.#.#.# +...#.####.# +.#..#####.# +.#..#####.# +...#.####.# +.####.#.#.# +.#..###.### +##..##..#.. +#.#.#..##.# +#...#..#.## +..#..#####. + +##.#.#### +.##.#.#.. +.##.#.#.. +##.#.#### +###.###.. +#.#..#.## +#...##... +##.#...## +...##.### +##..#.#.. +..##..#.. +..#...... +#.#.#.#.# + +..#.####.#. +###.####.## +....####... +..#.#..#.#. +##..#..#..# +###.####..# +##..#..#..# +..#......#. +..#.#..#.#. +....#..#... +....#..#... +##.#.##.#.# +....####... + +#...##..# +...#....# +..#.###.# +#....#... +..##.#### +.#.#####. +.###.#... +.###.#... +.#.#####. +.###.#### +#....#... +..#.###.# +...#....# +#...##..# +#.#.##.## +###.#..## +###.#..## + +###.##.#..##..# +.........#..#.. +#.#..#####..### +....#.##.####.# +....#.##.####.# +..#..#####..### +.........#..#.. +###.##.#..##..# +##..#.####..### +.#.##.##......# +.##....#.####.# +.#.###...####.. +###............ +.###...#.#..#.# +#..#..#.##..##. + +...####.##.## +.##..##....## +##...#......# +#...#..#..#.. +#####.##..##. +###..#..##..# +#..#.##.##.## +#...##.#..#.# +##.#..##..##. +.##..#.####.# +..#..#.####.# + +#.#..#.##...#.### +###..#######.#.## +.##..##..#..##..# +.#....#..#...#### +.#....#..#...#### +.##..##..#..##..# +###..#######.#.## +#.#..#.##...#.### +.#....#.#####...# +.#....#.#....#... +#..##..##...#.... +..#..#....#....## +..####..#.##.#..# +.#.##.##...#####. +##.##.###.#.#.... + +..#...### +.#.#.#### +.#.#.#### +.##...### +..#....## +..###.... +##....### +#..###... +..#.##### + +..####### +###.##..# +###...#.. +######..# +..####..# +..#.#.... +...###..# +##..##..# +..##.#..# +..#.#.... +###...... +##.###### +....#.##. + +###.##.#####..##. +.#.####.#.#...##. +.##....##.#..#..# +.###..###.#.#.... +.########..#..##. +####..####..##### +..#.##.#......##. +###.##.####..#### +##########...#### +#.#....#.##..#### +.#..#...#.#..#### + +....#.##.#... +####......### +##.#..##..#.# +####.####.### +####.####.### +##..........# +..#.#.##.#.#. +...######.#.. +##.##....##.# + +..#.....# +..#.....# +....##.#. +##.#####. +..#..#... +..#...##. +#.#.....# + +###..##..####..#. +##..#..#..##..... +.##.#..#.##..#### +..##....##..##### +#.#..##..#.###### +#.#......#.###..# +##..#..#..####### +..##.##.##..#.##. +####.##.#####.... + +..##..###.# +..#..#...#. +..###.##..# +..#.#.####. +.#..##..#.. +...#.#.##.# +####......# +####......# +...#.#.##.# +.#..##..#.# +..#.#.####. +..###.##..# +..#..#...#. +..##..###.# +#....#..#.# +#....#..#.# +..##..###.# + +#...####### +#.#.####### +#....#.#### +#....#.#### +#.#.####### +#...####### +#.##.##.### +#...#...##. +##.##..##.# +###.####.## +....##.#... + +#..#### +..###.# +###...# +.#.###. +.##..#. +.##.#.. +.####.. +.##..#. +.#.###. +###...# +..###.# +#..#### +##...#. +##...#. +#..#### + +....##.##.#####.# +#...##.##....##.# +.###.#####..##### +...####...##...## +#.#.#.###....###. +#######...##...## +.########.##.#### +..#.######..##### +#..#..#.######.#. +##..#.##..##..##. +.#..#.##..##..##. +.#.#.###..##..### +....#...##..##... +######.#......#.# +##.#######..##### +##.#######..##### +######.#......#.# + +#######......## +...##.########. +#.##........... +#######......## +.#.#..##.##.##. +#.............# +#.#.....####... +##.###........# +##.##.#......#. +...###..#..#..# +.#.##.......... +.####..#.##.#.. +.####..#.##.#.. + +.#..#..####.####. +.#####...###.##.# +#.##.#...##...... +.####.##...##..## +..##..#.#.#.#..#. +.####.#.#...#..#. +##..##.#..#.####. +.#..#.#.....#..#. +......#....#....# + +###...# +###.#.# +#.##### +###...# +...##.# +....##. +####.#. +####.#. +....##. +...##.# +###...# +#.##### +###.#.# + +#..##....##..#.#. +#..##....##..#.#. +#.....##.....#.#. +..###.##.###..### +...##....##....#. +.#..#.##.#..#.### +....#....#....#.# +.#....##....#..#. +####.####.#####.# +###.######.###... +..#..#####.#....# +#..#.#..#.#..##.# +..#..#..#..#..##. + +##.#..# +##.#..# +#..#### +...#... +#.##### +..#..#. +..##.#. +#.##### +...#... +#..#### +##.#..# + +..##........# +##..###..##.. +#.##.##..##.# +......####... +.......##.... +.####......## +.#..#.#..#.#. + +.#..#..#.##.# +..##.....#..# +.......#...#. +#.##.###.#### +#.##.###.#### +.......#...#. +..##.....#..# +.#..#..#.##.# +########..### +.#..#.##.#### +.####..##..## +.##.#..##.##. +.####.###.##. + +#...##...###.#.## +##..####.#.#.##.# +....#..#.....##.. +.#..##..#.#.##### +###........##..## +###........##...# +.#..##..#.#.##### +....#..#.....##.. +##..####.#.#.##.# +#...##...###.#.## +...##.#.#.......# +##...#..###.###.. +##...#..###.###.. +...##.#.#.......# +#...##...###.#.## + +##.#..##.##.# +#####........ +#####........ +##.#..##.##.# +..#.#..###### +...#.....#... +...#..#..##.# +......##..#.# +..##.###.##.# +#...##.#.##.. +.....####...# +#####..##.### +..#.####.###. + +###.###.# +##.#.##.. +..####... +...#..#.# +....##.#. +###....#. +###.###.. +...#...## +..##.###. +..##.###. +...#...## +###.###.. +###..#.#. +....##.#. +...#..#.# + +..##..# +..##..# +..#...# +.....#. +##..##. +##.#.## +..#...# +#....#. +##..... + +.#......#....#... +#........#..#...# +#..####..#..#..## +..........##..... +..#.##.#..##..#.# +.#..##..#....#..# +#..#..#..####..#. +##..##..##..##..# +..#.##.#..##..#.# +.#..##..#....#..# +#..#..#..####..#. +####..##########. +.#.#..#.#....#.#. + +####.## +..##... +.#..#.. +.####.. +.#..... +..###.. +..###.. +.#..... +.####.. +.#..#.. +..##... +#.##.## +.#..### +#...#.. +...#.## + +.#.#..#.#.##### +.###..###.#.... +#..#..#..###### +..######....... +.#.####.#..#### +##..##..####### +#...##...###..# +##......##.#### +###.##.#####..# +.##....##.##### +.#.####.#.##... +#.######.###### +##..##..###.... +..##..##..#.... +..#....#...#..# + +#.##..##.#. +##########. +###.##.###. +##.#..#.### +...#..#...# +...####...# +....##....# + +.....#..##. +..###.#..## +##.#...#.#. +##.....#.#. +..###.#..## +.....#..##. +.......#.## +.###.#..... +.###.#..... + +...#.#..##..# +###.....##... +....#.#....#. +#.#....#..#.. +#.#....#..#.. +....#.#....#. +###.#...##... + +##..#.####.#..##. +##..#.####.#..##. +####.#.##.#.####. +#.##........##.#. +.##..######..##.# +####..####..#.##. +..#..........#... +##..###..###..##. +.#..#..##..#..#.. +##.##..##..##.### +.####......####.. + +..##..#.###....## +##..##..#..#..#.. +#....######....## +#....#..#........ +......##.#..##..# +#....#.###..##..# +#....#.##..#..#.. +##..#######.....# +.####..####....## +.#..#..##.######. +#.##.#.##.######. + +##.#.#.###..# +...######.#.. +..###.#.#.... +#.#.###.##.## +#######.#.#.. +###...##.#... +.#.#.###..... +###..#.##.### +#####..###### +.....#.#..### +.####..#..#.. +#.###.##..### +.##.....#..## +.#.#.####.... +.#.#.####.... +.##.....#..## +#.###.##..### + +#.#..###.####.### +#.#..###.####.### +#...###........## +.....#.########.# +.#####.#......#.# +#..#...###..###.. +.##.##..#....#..# +#.#....#.####.#.. +##...#.########.# +.#.##.#.#.##.#... +..##..###.##.###. + +.#..##.## +....##.## +....##.## +.#..##.## +...#..#.. +.#.####.# +##.#..##. +#...###.# +.####...# +....##### +#.#.#.#.# + +..#..#....... +.#.##...##### +...######..#. +...######..#. +.#.##...##### +..#..#....... +#......#.###. +##..#........ +#...##..###.# +##.##.#.#..#. +##.##.#.#..#. +#...##..###.# +##.##........ + +..####...####.# +...##.##..##... +...##.##..##... +..####...####.# +###...#...##### +.#.#.##.#.#.##. +#####..###.##.. +...#.#..#..#### +####..#.......# +.#.#.##.#.#..#. +..####.#....... +....#.##.#.#.#. +##..#..#..####. +##..#..#..####. +....#.##.#.#... + +#..##.##.## +.#......... +#.##..##..# +#..###..### +###.##..##. +#####.##.## +##..#.##.#. +##..#....#. +.#..#....#. + +##.#..#.### +.########.. +.########.. +##.#..#.##. +..#.##.#... +##......##. +##########. +##..##..##. +.##....##.# + +...##...#.##### +.######...##### +#......##...#.# +..#..#..####### +#..###.#.....## +...##.......... +...##...####..# +########....##. +##.##.##..##..# +.##..##.##....# +#.#..#.##.#..#. +.#.##.#...####. +.#.##.#...####. + +..#..##..#..#...# +#.#..##.#....#.## +##.#...###..###.. +##...#..##..##..# +#.###.##.####.##. +###...##..##..##. +######..######..# +######..######..# +###...##..##..##. +#.###.##.####.##. +##...#..##..##..# + +#.#.##...#. +#..#.##..#. +#..#...#... +#..#...#... +#..#.##..#. +#.#.##...#. +##..#.##.## +#.##.###.## +###..##...# +#.#.##..##. +#..#.#.#### +#..#.#.#### +..#.##..##. + +..#.#.#.#..#.#. +##.#.#...##...# +...#...#....#.. +..#............ +###.#..##..##.. +......#..##..#. +####.#..#..#..# +###.#..######.. +...#...##..##.. +..##.########## +##....##....##. +###..#.#....#.# +###.#..#.##.#.. +..##..##....##. +...#..#.####.#. +#.#####......## +..#..#...##...# + +#..####.... +####.###### +.......#... +....#...#.. +####....... +#..#.....## +#..#...#### +#######.... +....###.#.# +.........## +.....#.##.. +######..### +#..##..##.. +#..###.#... +#..#.#..... +#..###.##.. +#..#..#.#.. + +#...##.#.## +#...##.#.## +.###..#.#.# +##.###..#.. +..#...##..# +....##.#### +##.###.#.#. +##.###...#. +....##.#### +..#...##..# +##.###..#.. +.###..#.#.# +#...##.#.## + diff --git a/src/z80/2023/day13/part1.z80 b/src/z80/2023/day13/part1.z80 new file mode 100644 index 0000000..893eee9 --- /dev/null +++ b/src/z80/2023/day13/part1.z80 @@ -0,0 +1,342 @@ +.org 0x0000 + + LD HL, FILE; + +main_loop: + + CALL LOAD_MAP + PUSH HL + CALL CHECK_MAP + POP HL + JR C, vert + + ;; ld a into bc + LD B, 0; + LD C, A; + + ;; add it into IX + ADD IX, BC + + JR vh_end + +vert + + ;; ld a into bc + LD B, 0; + LD C, A; + + ;; add it into IY + ADD IY, BC + +vh_end + + ;; test if (HL) is 0 + XOR A + CP (HL) + + JR NZ, main_loop + + + ;; mult IY by 100 into hl + PUSH IY + POP HL + + ADD HL, HL + ADD HL, HL + PUSH HL ; 4 + ADD HL, HL + ADD HL, HL + ADD HL, HL + PUSH HL ; 32 + ADD HL, HL ; 64 + POP BC + ADD HL, BC ; 64 + 32 + POP BC + ADD HL, BC ; 64 + 32 + 4 + + ;; add in IX + PUSH IX + POP BC + ADD HL, BC + + HALT + + ; cool funny function stuff + +.org 0x1000 + +start + defb 00h +end + defb 00h +count + defb 00h + +CHECK_V_MIRROR: + ; map in (HL) + ; col in A + ; width in B + ; height in C + + LD HL, map + LD DE, map + + ; A = 2 * col - map.width + SLA A ; A = 2 * col + PUSH AF ; save 2 * col + SUB B ; A = 2 * col - map.width + + ADD A, 2 ; for off by 1 errors or some shit idfk + + ; clip it to be 0 + JP P, v_pos + LD A, 0 +v_pos + + LD HL, map + + LD (start), A ; move 2 * col - map width (start check) into start + LD L, A ; and to L for safekeeping + + POP AF ; restore A to 2 * col; + SUB L ; A = 2 * col - start + INC A ; A = 2 * col - start + 1 + + LD (end), A ; store that in end + + SUB L ; A is the difference + SRL A ; divide by 2 + INC A ; + 1 + + LD (count), A ; you got the counter for the inner loop +v_loop_out + + ; move col into B for the counter + LD A, (count) + LD B, A + + ; mov start and end into the registers + LD A, (start) + LD L, A + LD A, (end) + LD E, A +v_loop_in + + ; compare the two characters + LD A, (DE) + CP A, (HL) + + ; return NZ if they're not equal + RET NZ + + ; next character + DEC E + INC L + + ; :clap: :clap: next meme + DEC B + JR NZ, v_loop_in +vq + + ;; go to next line + INC H + INC D + + DEC C ; dec the loop counter and loop if negative + JP NZ, v_loop_out +vq2 + + XOR A ; set zero flag and return + RET + +CHECK_H_MIRROR: + ; map in (HL) + ; col in A + ; width in B + ; height in C + + LD HL, map + LD DE, map + + ; A = 2 * col - map.height + SLA A ; A = 2 * col + PUSH AF ; save 2 * col + SUB C ; A = 2 * col - map.height + + ADD A, 2 ; for off by 1 errors or some shit idfk + + ; clip it to be 0 + JP P, h_pos + LD A, 0 +h_pos + + LD (start), A ; move 2 * col - map width (start check) into start + LD D, A ; and to L for safekeeping + + POP AF ; restore A to 2 * col; + SUB D ; A = 2 * col - start + INC A ; A = 2 * col - start + 1 + + LD (end), A ; store that in end + + SUB D ; A is the difference + SRL A ; divide by 2 + INC A ; + 1 + + LD (count), A ; you got the counter for the inner loop +h_loop_out + + ; move col into C for the counter + LD A, (count) + LD C, A + + ; mov start and end into the registers + LD A, (start) + ADD A, 60h + LD H, A + LD A, (end) + ADD A, 60h + LD D, A +h_loop_in + + ; compare the two characters + LD A, (DE) + CP A, (HL) + + ; return NZ if they're not equal + RET NZ + + ; next character + DEC D + INC H + + ; :clap: :clap: next meme + DEC C + JR NZ, h_loop_in +hq + + ; HALT + + ;; go to next line + INC E + INC L + + DEC B ; dec the loop counter and loop if negative + JP NZ, h_loop_out +hq2 + + XOR A ; set zero flag and return + RET + +CHECK_MAP: + ; B is width, C is height + + LD A, B + DEC A +v_detect_loop + + PUSH AF ; save loop count + PUSH BC ; save width + height + LD HL, map ; map as input + + CALL CHECK_V_MIRROR; + + JR NZ, v_not_it + + POP BC + POP AF ; fix the stack + INC A ; for off by one errors + OR A ; clear carry, cause it is a vert mirror + RET +v_not_it: + + POP BC + POP AF ; get values back + + DEC A + JP P, v_detect_loop + +vcq + + ;; load height-1 into A + LD A, C + DEC A +h_detect_loop + + PUSH AF ; save loop count + PUSH BC ; save width + height + LD HL, map ; map as input + + CALL CHECK_H_MIRROR; + + JR NZ, h_not_it + + POP BC + POP AF ; fix the stack + + INC A ; for off by one errors + SCF ; carry, cause it is a horiz mirror + RET + +h_not_it: + + POP BC + POP AF ; fix the stack + + DEC A + JP P, h_detect_loop +hcq + + LD A, 0xFF; + RET + +LOAD_MAP: + ; hl: address to start of map + ; out : bc, width; height + + LD BC, 0; + LD DE, map ; start of map +l_loop: + ; HALT + + LD A, (hl) ; get character + + ;; go to next thing + INC HL + + CP A, 0x0A ; check if newline + JR NZ, l_not_newline + + ;; check E is 0, break if so + LD A, E + OR A + RET Z + + ;; set width to this width, increment C + LD B, E + + INC C + + ;; mov to beginning of next line + LD E, 0 + INC D + + JP l_loop; +l_not_newline + + LD (DE), A ; copy character + + ; go to next address + INC E + + ; loop + JP l_loop; + +.org 0x6000 +map + DEFM 'fukfukfukfukfukfukfukfukfukfuk' + +.org 0x8000 +FILE + INCBIN "input.txt" + DEFB 0 \ No newline at end of file diff --git a/utilities/dc/preprocess.py b/utilities/dc/preprocess.py new file mode 100644 index 0000000..58a6de8 --- /dev/null +++ b/utilities/dc/preprocess.py @@ -0,0 +1,18 @@ +import sys +import argparse + + +parser = argparse.ArgumentParser(prog="preprocess.py") +parser.add_argument("input", nargs='?', help="input file", + type=argparse.FileType('r'), default=sys.stdin) +parser.add_argument("-o", "--output", nargs='?', help="output file", + type=argparse.FileType('w'), default=sys.stdout) + +args = parser.parse_args(sys.argv[1:]) + +contents = args.input.read() + +args.output.write( + " ".join([str(ord(c)) for c in contents]) +) +args.output.close() diff --git a/utilities/pascal/readme.md b/utilities/pascal/readme.md new file mode 100644 index 0000000..f34bb7f --- /dev/null +++ b/utilities/pascal/readme.md @@ -0,0 +1 @@ +you will need fpc (free pascal compiler) to run pascal programs diff --git a/utilities/pladcl/readme.md b/utilities/pladcl/readme.md new file mode 100644 index 0000000..7e880b0 --- /dev/null +++ b/utilities/pladcl/readme.md @@ -0,0 +1 @@ +you will need pladclc from https://github.com/plasmaofthedawn/pladcl on the path to run pladclc programs diff --git a/utilities/python/readme.md b/utilities/python/readme.md new file mode 100644 index 0000000..16fc1c3 --- /dev/null +++ b/utilities/python/readme.md @@ -0,0 +1,4 @@ +since i'm already super familiar with python all my python lines can fit on a single line +also no imports that's cheating + +you need python3 and whatnot diff --git a/utilities/z80/preamble b/utilities/z80/preamble new file mode 100644 index 0000000000000000000000000000000000000000..9e294ceb89e040dcf1f29fb2761670bd71739bcc GIT binary patch literal 3 Kcmey*zyJUP00961 literal 0 HcmV?d00001 diff --git a/utilities/z80/readme.md b/utilities/z80/readme.md new file mode 100644 index 0000000..7a195e6 --- /dev/null +++ b/utilities/z80/readme.md @@ -0,0 +1,6 @@ +z80 uses zasm to compile and z80sim from z80pack +. + +i edited z80sim to not print out that giant logo at the beginning but otherwise it's just the newest one built. the binary is included though lol. + +the output for day13part1 is in the hl register diff --git a/utilities/z80/z80sim b/utilities/z80/z80sim new file mode 100755 index 0000000000000000000000000000000000000000..fcdd6d45ca10595de8f425a57e67906b3aec70fa GIT binary patch literal 195976 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