From c0d08474439cbbd46b0279a73e2f348b1dbd868b Mon Sep 17 00:00:00 2001 From: Zev Averbach Date: Mon, 11 Dec 2023 11:45:24 +0100 Subject: [PATCH] first --- day3_short.txt | 20 + day_1.py | 37 ++ day_1.txt | 1000 ++++++++++++++++++++++++++++++++++++++++++++++++ day_10.py | 141 +++++++ day_10.txt | 140 +++++++ day_2.py | 90 +++++ day_3.py | 94 +++++ day_3.txt | 140 +++++++ 8 files changed, 1662 insertions(+) create mode 100644 day3_short.txt create mode 100644 day_1.py create mode 100644 day_1.txt create mode 100644 day_10.py create mode 100644 day_10.txt create mode 100644 day_2.py create mode 100644 day_3.py create mode 100644 day_3.txt diff --git a/day3_short.txt b/day3_short.txt new file mode 100644 index 0000000..a245a24 --- /dev/null +++ b/day3_short.txt @@ -0,0 +1,20 @@ +.........426.............985.........40..........207............................841..463................................633........17.384... +531&......+..........125....-..312..........#........895......998..945.....@......$.....-...33...................353.....*........*......... +........................#......*...........21..727..*..../..-./.............545......80...................602......@..272.......743......... +...........558.577..........486...186*925.....*....483.883.1....286...................................625..................#474.....491..... +..............*.........243.................287................*............$....245............830.........793......#..........306..*...... +238.685.................*................#.........%........807.........28.947.................*.....705.....*....573...500*781...#..496.... +..................989..923.......713...539......917.................115..*.....-...........662.........-......413........................... +...........=......*..........886.*.........................442......*...........398........*.............%.............636...........%...... +............976.413...498..../...266........796....................87.....................969.881..&.....815...........*.....279....415..... +......728*..............*..............129..........670...890.....................760...=.......@.832........227.....632.212*............... +..........257.....712.491....-41...........970........*....*...373........742.......*....330....................*.....................814... +....................*..................415......406..441..35..../.........-..........828.........................239.....@...533*206........ +......687.........834......448...658...*..........&..................467*..................244.......+332....*..........35..............*... +.............453.......616..*...........609.............662......672.....56........661.602*...............549.661...................141..73. +.......699...*.........*...904..........................&..........*...@..............................189..........$677.......473.....*..... +........*..670.........938.........267.......684...........514...211....875.........667..171.110&.426*......../...............*........29... +.....164..........................*....@786.*..........646.=.........43.......885....+...=.............641.....996...........117....28...... +.........*921....150*....635..973............587...346*......771........&3....+....................=................................@....... +......962............821....*...*...........................$....174............391+......732*177...101.....146.............555............. +..........................117.965.........327.....................*../127.54.........354.....................*...37/.......&....56....656... diff --git a/day_1.py b/day_1.py new file mode 100644 index 0000000..b3ef5ef --- /dev/null +++ b/day_1.py @@ -0,0 +1,37 @@ +import pathlib + + +def solution_line(line: str) -> int: + first_num = None + for char in line: + if char.isnumeric(): + first_num = char + break + if first_num is None: + return 0 + for char in reversed(line): + if char.isnumeric(): + return int(first_num + char) + raise Exception + + +def solution(input_text: str) -> int: + total = 0 + for line in input_text.split("\n"): + solution_for_line = solution_line(line) + total += solution_for_line + return total + + +sample_input = """1abc2 +pqr3stu8vwx +a1b2c3d4e5f +treb7uchet""" +first, second, third, fourth = sample_input.split("\n") +first_solution = solution_line(first) +assert first_solution == 12, first_solution +second_solution = solution_line(second) +assert second_solution == 38, second_solution +answer = solution(sample_input) +assert answer == 142, answer +print(solution(pathlib.Path("day_1.txt").read_text())) diff --git a/day_1.txt b/day_1.txt new file mode 100644 index 0000000..3c83528 --- /dev/null +++ b/day_1.txt @@ -0,0 +1,1000 @@ +rhqrpdxsqhgxzknr2foursnrcfthree +2bmckl +four95qvkvveight5 +2tqbxgrrpmxqfglsqjkqthree6nhjvbxpflhr1eightwohr +7two68 +nine7twoslseven4sfoursix +fivemnjxbrnsvl3 +3qcfxgzsevenone1rv +9four6dk7gvv +nine91threepdcthjkmrthreeeightwonsg +fivetglzqdfthreergnseight2lpphhbd +fourtwohldlr6294 +qkvc7pvsv6rvsxlqzpjdjkd1eightthree +onefourm5qpfvdnbs +ql8jbzzjpsdgmrjtngrkfdmcsix6eightsix +8nl2 +5lfzqhgeightnine +three313eight2zcjnnmtnh +4three77dgjzfj4five +ntr5sixfourznnljvqdr5one +threedlmnd98nineeighteight7 +pzcnnbjjthreefmlf9znfnkdrjs +flbdjkseven7338qxzbcsx6 +six43fourthree2 +one24hndgmz37mjqqm1 +4fiverlgtbr +7hqtlxgngd15qkfl2three +mtcztwo46one +3onefivechmlkgp87clrmmhseven +tvsctqdlns1hhhctpn34cztkqzztpcgtzhgrtt +four8flptk +6zkb +7eight9fivesix75hclgfphhvv +ct53qdjpnkdpxdhvpqqcx8 +144six +kbjtmgfrx3mpmjhncfl78nine +7sgnlbdfivecxz +oneqrbbnrdxgbbfl3 +8ndmrfggfz1six87 +hjkfb8vhrhnlmbhbl59rxplvmgzspfour +3sixjhdn4hckqsnvseven +zmkgmlpfsixxhmv25bqlgm5 +three48eighttwo +rgfzfourbmpxzrh6dfjcdkhqhcdkpfpk +bpccbcqmlstwos8threenineeightg8 +nbcpd2prckbshrbvsmrmlhxdkq +6flfsxv +84xqeightseven +1xf8five8rgplhdvteightseven9 +frtwone34btgz4bxlqbf +three5eight +8xtcsggc +9gtrcffqmxpvccjpsfqsixlcmdfkfgjqc +5svskptp1twothreersjrlnfdbxttzrkkqz +tsdtcfsj5sixfivesxvxxsgxhkhngzl +dgfcrtck2twosxkdq +fivektlxgmeighttwo1 +9661ldh +twobqcfnxbgnd68 +pbsnjqtqhzfrjjtkninexqjbsvrcnnine983 +bfcndjjsqseight81 +rgvxddcs82one62 +oneeightcgseven7 +fivexhvmhjhmzscjpxjgnxpd37 +onefourdxsgvbkttj2zcpvnrcbpnbfonesix9 +four65mrbfjsix +tgbgnqcdrsixone2hsznmgtgtp +3five3 +3vzg7 +five94eight1xrbcgnnq7rknvvfnrgv +mjsmnineone7phrfqseven7 +njtk1one895 +jrpbp7n62zgnrnxlzdvtlt8vqm +135sslqzn +9ninenineeightsix4ljnj1twoner +6nine44mgmvrfhvh4four3 +gvqxreight6 +sqrfkncdk3 +5nine7qkjsdscrvsevenfive +qbxmone9twoninesljzz +qhss364lsscxxdk96six +35bxgcfive8x +eightcmzzdxc853sixsixprnnjknfp +one23pxdgrsbsonegfive8 +41three4 +eightkzpscshdstmnklzthreeqzkftmng46 +2two66 +threeeightninefvmbcfjf2xjsixlrpr +2269qhvrrfp +527 +2onevb +nine7ninefour7threeqsblhrgxvjtwonelg +fourvjdqxnn84szdc +kbgtfcrr6twotwoeightthreeone +5cjlvqhbfivetwo49 +knzgl5cnftwovmffkrgblnjmhhb +6glbpbn7 +fiverfourfivefive1three +121 +eight3one +gxlvnmkpkksixfour6 +k8pmlfgsixninetwo +ldlhsix56one +h1 +5vlcktk +139nine9gtgqkddsixeightcgqv +fivesixsixeight3nsnhcqcfoursix +pfdksfpmonejrbbninethreeqsjsfrv8njfdh +nzltgfsbqpbzcrgvpj5 +eighthtfive5gzmqxhbcdmseven7 +nxfvdgxhxninethreegfqlzqmlc4three6 +hfs524zfive +5fourtflone +4threenndghtkh41 +54bkrhrt2rrptrvcszrskc97 +spfone69nlpgftmslthlqdf +qgtf2pz1seven53nfscpnrf +r4fivehkpthtn +gvd2qshbjjsevenone +47397 +gtzqvvsntvqnhrkxqb6twonebt +3sixninefivekjkgpjvtcqcsix +six7ninefourseventwosix7eight +6fivemgdj +dvbbjrbfjsxffnjlhfdqthree51oneighttsp +seven784mxkxr219lf +6ddjspgcmtkqd4752 +7xlvdtztq +8sevencjsfivethreefour +8rqzng +ninejttfnfzrffnzzbtrbzhsix9fivesix +jhgtblzxbs9klzzztwoxlpsfbvhcl +9ninetwohnvpkkbzklh8 +7threen2zfkphngfkjhvkkz +gqldlljv5 +nineskmdqcqxj16 +9pgbdlfcmbonesixthreep8s1 +4dbjktxcbqh8cvxsnrkdgvjrghcfhx +sevensixsevenhtbhnpcpnqjtpfsix686 +5hkvjlrjbgtsevenhrlone7sfrztpcqjpdn +52nine7ninethree +three1251 +1ghlmpvmmseven1threeghgfrsch +3sixseven7fsdssixdckfvhzrvq8 +jtwoninesevenfour73tspxfxcd +2lxlsninelvnzjvd +nine1zfx +gsmfnbkzqqkczkpgg522 +zoneightone9zlxxrtbxzrh73sixthreesix +twotwoztxzhrlbnlhtqmlzph6g4eight2 +fkqrmjrhmjjnthdt281sevenfour +twodzpjpvx1eightmmkhxtlrfzsevenrnhthree +one72ptwoljccvmmkscflxqv +9nine9kbmlcvn +3ninefivevgvcssvfqhrfvxc6hhlmcllsxpzp +1four7 +vhvlxg5six +sgcdxjqvkrfive3three +sixfivesixvgtrtxs5 +4zsevenfour2 +2onenqjkjxjxcknc52fivethree8 +sixzqtgtdkqm1sksnfgbhtwoseven33seven +4twobq2 +twocxxl6htqlcrlsdskmone6 +731 +5sevendfrgsdjhdnrhvdp11fgpxknxvfvv +pdktwo2eight824tlpmsmflg1 +71sxtsjtff +ninesixeight5 +eightsix3xzrhclnl +twotwo6tmslnxnfdfbdvffgt668 +four54xclbszc +tt6fourzlbcldmffour +fourvnxqfngsz7zkh74fourtwo +twoeightl8five1scfnnbh +one4bjzzckgseven +kcb9five +7five6lgdlmjqblvtfprrfht2 +4fivetwopcnlntseventhreenqrdgrjg +twobkbfkmzdlkcjbrfvnl65onesix5three +73eight7 +nine52jrlrthreez +six8tmxhjxgjm6six3 +635jksvjvndtxbkksznrbnine +zncthreeninefive4seven4pdckvp +one1four +xndfpkzeight5 +7msxkdfzvtkrsdtqz +4onejglhdmnjx5 +1seven1three2 +4nvkv +hd3 +9zbgttprszjmpv +fourzcxeightthree6 +dkkvxvzzktr5vrztgv1 +797cqxvfhtlthdbhvcmrktwo6 +four383twoeighttwo +1lnkzjrlzdtfvgckczfour +onefivesix3ncll3hcrpsdmtpxvnine +3fiversgksrncxh46mzvpzv94 +4eightmzsgftrxjsix637pdjhsds +gz4tgghpmtseveneighteightsix +9sevenmfourfkfscq +hjmbkzznjflhtd3one +eighttwoone5gfzxmptfivemlkfzpnxr +one4txtzkrtzmqtfbzdgnfouronenkcmqdtdgfnjvhc +kljssprljm5nine +z5 +lrmgjltmfive79lhqj9 +vdgvlvhptpprbx16fourgph5one3 +fivenine9two3 +ninemglpslone6 +988seven3seven +twonine6zjhhxsdlglsmpmvmvvztbhhxklzponeeight +3ghmsrggblfngvtt +gdftwone1six +sixxtxkgzqvldsixzzqtfq5bvhlxkxrthreeoneeight +3oneseven +4three6one19five +sixfourseventwo2threetwoseven7 +1fiverltmfpdkkj3nine5 +6mzrdnpnfivebfgbbvtmmj4rqssl +vxjncmpg3twoeightone +fivefiveztghmbgd1 +6sevenljbnlsfjgpsix38 +threeskseven1rqtfrmkkxkkkkbqrqknsfsrfoursix +jh5one +3145hsxsrthree56 +hdxxdz6threenpq68zpqhvrt +qbfxrcfpeight5lqpcfd +seven4hldkmhfbeightonenine +seven9threeeightwocvb +qtdp6grfdn +fourhqp93 +three1tmgpxlqjninenine +mtbvfjkmxr941bct +one61one +ninesqtf872six526 +ncdfhxmgsjseventhree3xvpq8 +1sevenjjnvfjzd1twovpkrsvrdbninestsgzdjfgmfxnc +36sixmxnhfkneightwov +threeeight5sixfive241four +four76nine +oneddcxxggx7tvg +7gstvsclkjsixtwoseveng6four1 +vttsixsrqgmkptdsqbnhvdmhmzxcstxtx3eight +5qckzltb5 +nine943four +hdgbvjtjkc3onetwo238 +q97gghxdgcqdkeight3onethree +sixrsdrdvqlht2sixonexn216 +4nxkbsvninenineqjphghzjqnjqfvhnine +21fivejpqsgktsjczkdps79three +onesixst8 +5ctxhzsvllbseventwo91zhznxqeightrlblc +1178fzjfsevenseven9 +2j5dp +cpxeightwoonethreehgnldljndt8onetwo +thltnonefive8twoeight +cfsthmmztroneqmtwo6 +threethreesixcsfvf7 +dnsskccxfour3 +bdgcdzdvbjninefourhgtwoone1nine +6sixeightfive24 +sixcgkfour5 +ninekbtkninefsbmjgppfive2 +96cgstvtnsix +4two4qqflzdeight4 +1pctd7zmpndjhljt +78two +hjfbdjggrkjbxjtlmcnnfngrgmfsevendtqjsmqx2 +58eightkpxlqmneight +eightninefoursix44txgslt2vvp +5fivefive1one6qskqbldeight +1six3threenine +5fourqzjhzsgbqkczhvhrvr2two +7seventhreeeighttwo4lmkdgkftftwofour +threeeight21fjfxvrcnfive +vkzgjvdjzdpdxdsfiverbgeight3 +878 +9zcthreerhvxsp +hninepjjvvzmfns1pjtbtkoneonenine +lbjxxthreehkcbjv7 +1682seven +3xhbltveightfivethreeln +vdtktf9threesix544 +81sixfournineqshtzqhcp +ninetwomdvdkfm815 +6eight7ninetwosszxkvqmjpdcz9 +twofive3 +ninetwo1vdhjdjd +qpkgszmrndvgn11seventwo +crspcbvbone8h +48one27754seven +5dcfivedrpmdlcbvlbjdthree634 +1fivefour21mxfzlkbjft +7btfbb9twokldmpeighteight +98qpzgfourfivefivefive9 +eight2sixfmsxhvcshrqhpmxj +threetwosix126 +fourfivesix1foursgbzzfnggoneighttbk +2twojnine5ktbjbcgbsdfivefour +njbxmqkn3tdthreeeight58 +4zltkpphfiveqmlteightjbklpkmgbhmzt +fourxx3 +qkgs3eightgnzvnhcdjzjflfsczdonejqbnine6 +3twogqdhbgvqsfour +618 +plknlddeightjhpmhfleightsnszjmsixczhzq6nlrk +onesix1sggfxdtxvlnpjllm21 +91mfcztmvnqrrxqftwoeight7five +2xdthsq +9vlvsrmdsevensix5sxxn8 +jprfqddhp97tbvbtt +jzdpqqrhsmnhtfhbrjdp2 +225ln +three18eight99three +rjsbbkts5zftbxzttrl1 +1hvvhtbgvm95gtcprjgvxcf4 +8sjmrkxxbht +dgcgzff9fivethree9 +8sixkgtfhppcvp562 +kptdxhmdlfrlfml2 +2lkssldqgt +grfkn89ptp36two +sixfhddpztzntwofive3 +kxxcmtseven2 +1lbdhrzdnd89qphjhxqntxnine +grqgmqzfhvksrxgqkb25rjmbllsvzk +eight4fivefivesix1zkbcmhsql16 +dhdpvclbmnine2sixeightchcz +6ninetwonine +onepjonehbzsclh83 +4xxzjsqddfxbc29four +zhdrrgdqkx9hns7three +1zqfkdhhninebstlhseven +5zxnn9eight1fourvjqsvpn +one2kdmrrbjhxddxfjqjlxr3one +nqjghpdmssjbv47zdgbm7 +bvktwonetwothreefive97skqmlv +nd4onedlvthnsrxfxm8 +eight6pcntqp2oneeight79eight +6vjzqcnvksn91khthreesixtwo +kxncx932mmmfqf +93546ctxfbhpgxxnlnx +five52 +ninevtxblcsbqfzqdqz921 +2lqkgmkpcjhsvtnj +v2sixmjktdbtpqgbkcbhvm +rxhvtwo2sixfive +3one7dffhm9 +1twofoureighteightjczpmtfpmxf1tfpm +123 +16eightshkfbchsvrrqhjpj +sevenfoursevennvxthree49tworzzxtvghkn +one1qzskdmrc +two86cqnhvpnsfourtwo1one +lhxcbcqbrnqvjdlt3znmcbjlfh6 +six8289 +three9onetjzqjzdck1jkfive +eight15jrdrjrs5xtdvm +two9fourcnjlvxeightvflxm7eight +pd3nine +746twoshbngs +eight28 +pjztfhmvtsixmbbjxfvmpstfpttfive1 +fivevnncxmbfbtkdqrnmdpdxsqbzprsx2seven +oneljtwo5fivefivethreefour3 +hhzoneightsevenfour5seven9sv +xkhjlkrr6zcnchhmrjh6hngjjzhgq4eightqdpqf +3pxcvxkzxlttpsgpk4six +lpfhfhjshfive96six3 +6rkpkhgjjxrkgldqzvhxmkmfivenine1eight +9djnfrqzcldeightoneightkxn +7fourone +threethreefourr1four +2gcmft +37four8 +7eightbshnvzbzpxeighteight2three +two48pfkmcrkvtfpnine62 +qsix8rfmnine425 +dhssxzlonesixsevennine9three +eightzxdpbdjzfx4pseven6 +threesxgsncfmthreetwos867 +four6lkgjqpvqtvvlkmg +8fiveseven +threevhlkdd3 +twofdgdlhmglf2gjrrnhhhfxpkqjxhspclbh +fivecjcgbdct4 +3mlnbbcgpnvscmg61csix5 +nksxgppxsixsvzxhrqzs9threesix +kghb787jdzpjr68 +ninegpbqfq6ninethreeeightsixseven +3eightblxrqctk1llv +llqzqvmr4dcqtv26threethreeseven5 +6nhzbxeight971fivezmvkvnspj +gvhvninefiveseventwo1bfnvzdc +tz3lhtpftvlgkr7zxqjczcblqcxnbxbvp8 +eightppnmdmnlvcqsmlsvvvhk9onetwo5 +48fourthreesevenbjj1eight8 +5ghflmtwo +nineninethreecprnvsvg3dhxhk +sevenqmmlpdplcmgjtseight5 +sevenksdpnqxfn7vzqg11ninefrrtmncl +162hsvvpjlg76ksbbrxpqnoneightk +2733 +vlhzdjxd55 +three48nine +6mtkftqtmbf +4three3eight3eight4one3 +1glmnzhgzzvfn235four +5seven4hqsjsft9cdfhfccfmbfhteight +bv7eight1skmkdtbx +524blmgfivesixhhpv +57eight79fpmznfjjdckxkjqvk8one +six3ttcnzvqhkltbnrrjm +dpttv5nine4one +three3threejpcpzshhrr31one2njhjb +hlhlclcjnnjfourtgxqsxqtgrprvcslsm2 +6seven257eight +8ksixfflvxzvhmfninepgq3five +lncgmjnx14fourrnpfhfmhqkgkr5five +sixsixseven1seventhreegkjfkznkqhlhk +sevenzbcpkjkcjq2 +smsdpfourgpxnine8five +fxhdt3deight +7htrrjvtworninebtgkdnbt2five +qphmdxgzfiveonemxkx3 +1drgktkjcq7mnnxnsixkfhkrf +two7c +43eighttdcnpqldvd +4onevnfd +fltqvxksjrn7 +six4p5nvfsjdxbfszpxmttcqgqghcczmlz +8twojseven4 +7mcgkthree4nvqqnjkzcqjt +nine5onepjmghlc3one7sixone +4hdone2onezrpnt6 +qcdttnqdtdt6 +tkrztgn1four4eight66 +djvbrczzqj9nine7vfcctvjqdnmsixkeight +44htbnmgvxtznzlzfhtwo93 +3xpmx4 +6sixnine +5hqqspvrzrxqr2eight +ninemgkhcdtfpz2 +3threetwofive4 +6njcmnlkrcf +gnfxzcxhvbxpc4 +pd41seven +91jvrhxgzrzq4fxcqsixdtnnr +fivehspkhfour4threefourseven +8fiveninegcgkpkone4 +6jrk +4one7sevennrtrdltwo +thhsjklkq81eightthreeseven +ltzdlltggeight5eightzrbvrh +sixninem48onespjtjrszk +7hrnvkdslhb +76sixvfcdjhgqpccsksfour2hfjccbplzthree +437ndgtxtwo +5xv5eight +npsmnhzghsrpkrm7 +9four94 +sixpcgj2nine1frhfn8 +51 +sdq8cgphzvqffsljtxlxlc5txqnsfdrmn +ninelxdnzqlsevenj8sixtpxrpfive +7hcczrfthqkthr39six +fivesixdkqdnfq9 +5n9threertlbqxtj +5threeseven +mqdptrrhxz9threefour +two2two6 +vlkzqbztvnbprdc94one4one9 +xxcfhgkbss94four3nineseven +jlnhmvgczmninefives8 +eightoneeightjsixfhkxphlj57 +vpg3fourtwo1 +lnineone31jsmeight +45srsljgdfivezvrdmntmb +three6onelrnmnmqpcn4 +twozcjvvcdv7xdql993 +71fourtwonejpm +one4one56bnhf +twohssdrcsklone8six +7tcjkcchbpggpk1rddpdgvpgzm5 +7eight7fmqpzrjlcctjvhrdcjgm2mgkqrbdcmzlzngbkqlj1 +fvb4four +rvqhqhb7kdsrmcc +pdklstjsevenfive6 +gsglqtpj5lmbcfxchmjnbvhpcvbssx +hgjlmklngdk4zpkfbhmzcmzcjsmfkghdttfb +586ninesixsixvfbveight +hrvthreeninesix58 +pxmg4threevhrrsbfrck654 +1p5eightonesixhbjbxgjb +four6eight2sevenbtgfkkzcm8lxstnvfbz +c4bqc +12mmrlfnsxtpfncc3 +five7eightkvdghfvcrgsevenfivenngqmzh4 +5onefourtwopgnhsfrpfourtwonineqfhrz +sixzpzk1 +five45 +gjfpvjvqhpfrrjpddqfbvdpjj8twoqfvkfkvpqzcjvrqn +czqxtqbxpjt9fourqdcdcfourseven2six +8gmgfsktkxmfourqfshsqvqjx +qjdfggfhtfnine38sevenrvslgljqrpeight +7five6pxhrxcvzsixmcqvjp31nine +drvdnptcltnmxxtjvslq98 +fiveqttmkpkrxzngddzsncjlsevenone6 +crlldnmx9rpx3 +8tqcfour2vbznhzzzl +9vdtxfbgrqzsix16 +7sixrjpcfdv9twothree9dqjlgkbmb +eightfourvzxckjqbm6tdbthhsnjr +9bnqfmkxlkj4 +62tskjsixtwonine +foureight6gqkdstfivef +seventhreesevencqj12 +rqfq6rtcvjjqnmk9gvvttbpnbgvjcmmph8 +5zngdplj93seventqlknninesix +fourgnqdcrgsznk8xknsrmd8qpxxm +vgslbcnlpk74dfskqgsp +qmbnjllvvs1fbjslc4onegthree +z82sdgvgktzfive +fourdmxcqmstvj7jgzjkfxjntt5cxhchtglmfive9 +npnfivep2three1tlcctmfp +mptzvjmfourfive4three +onelkcmzninefbmgnfghsix3cgpzd +jbshqrc5nbjhktdqmtwotwoxpffrlzxbsix3 +9threefive1threenclhfgrzxl9mnlmcckvnd +4231 +1366 +one9blcprdq +two9two2tdmhtcq13gspmmkrb +eighteightfiveeightjthjbgjm5hpqtbtrfour7 +jsjninevmtdscxftwolzfqpbx2gdnflhpvlvtt +fivegjxkbzdtj6four5 +3oneone +8gkmzrfhvchfs78jxbtbvgj4 +5two89fzrvnkmkgt +53four884seven +five5hbxqmfccfivefourfourfour3 +onepbsevenbsgvmgf78875 +4fivempxjjpjdgzfkqhqdrrz +7vqj +twovnnknngstnine8 +four7twofourqddvxkzvvgzrrvlthreekflqh +vcbmfspdq1jone2two1 +eightsixjgfjrsszgmvbdnbqrpzpps6 +6eightwomm +hgjjltvnsd39nbxdgfpgjl +jfour16xmrdzq +1jgrkhmjbeight +lhsdll94kccmdhtwozxlfkrmpxksixthreetwo +zmtdfour8 +9eightqcpmp8threesevenfive +sftwonenrzbrvmqjp6br3 +tgqoneighteightsevenonethreesevennpk4qsffx +dkhqbdnchvfiveeighttwo2fourfthgrgl +brfivefive1mlfxznfourfourfive +dlpqtdpgsevenvzkzljds4three +tzcvrf1srrjxlhszsixsix89l +blbnntbjzsixthree44one +rmppdzntgjtdone1shsevenfive +dpfdbjtv8 +two19nhtbktfk +4hbkvbrnpxsevensix +jccqhkonetwo6twotlmbfmvbz +4fouronegbx9 +6xhfxfnmmoneightp +lnmmkfntxdsghsxzxkf279 +xjdg92ninethreepglp221 +seventhree4xmzxp21bdssnzqnrthreefive +196 +rgd4 +vlmfjrrmpd2two7sevenqrzcrhhvgpvksqh85 +71sixfour +sixnine5jfconesevenfournine +5fourfour96hqphnjrmfhsix +nshzgrhveight8oneightrhg +two5c9 +dgkvzfzd1 +888ninedvdslkfkf +fxmd1qfjnpbhrkhptrp +lnmh48sevenfiveclptstdd5 +zgjbxpgpnlseven6ffjcjjfck +seven2rmcdrsix +jggjjpj4eightczcngxm3nineone +tworrgbm31mbhkfhndvb +szkfqfbknv54fiveninesixsevenseven +three3six27 +rf376 +7clbr1999 +xlmfbvseven71nhddnq +nmpgsvzq2jkfoureight6fourhzhzxkseven +5344two1bkxdtwo +six8dnql4zjd641 +4fourmngrflsix2two +2tthglxfourfivenpvrqcsrzkfkcqq +njrfive4 +633qdvsmlsv2 +seven79oneceightljnkxdsvxrgg +onefourzlrvctmc663 +27jznqcz861 +sixone6twoeight +9fivethree75ffldxglvtone +68onesxzcksgm6 +rpphzspvq8zznrthcdsmvmfbgninefour6six +5drvndprrvh178 +5threeone3eightthreedmtkpjtmq +two9fzfxseveneightthree +6xbqvhlbeightsgsjbtqcg +seven9twofiveseven +sixtwo87pnltrpkndfttxthpkhjninetxqtcdfxkg +fivethree2five4688seven +2fqmcqdbdzfzjn8sixfournrclzsseven6 +9sevensevenxbpljmfsevenone +five98seven3 +threexpnxsveightone5nqqcd +27eight8 +eight1six2one2htb +twoeight4bhlvvksqqgqone2eight +lbroneightthree3ninefournine +4ctwo7 +fhjpvtwo981foureight +pjffszkdkdg3sevencbh4twothreenine +12vljtwo +bldmronetwo33four +jjmcmjmf9fbffcpnp9ptxfptz6vjmbrx +snine9kxkxpkk2two +4eightfive1ftqzsfqgmdcnmrdpthreefivevsdfjt +lfjnvmm9 +ninethpqntwothreeeight4 +8qcplzvqzrlzlznjlvltcbslthree +eighttgqrvm5twoksr37nine +2fourprchr53three +qnmkxnhm5ninetwotwoksbnvtqs +fourdngcgnnfiveonethree8four9 +two3kzmrhsdqtfivefourns48eight +grclfxj4nblzccrfrcctwo83 +llvcskkmhzrbzvfd1five +8sixnine3 +16kpsgmcffhdmrqpnmthree +1qkkpbptccqg5fivethree99 +four5zslbrzjfvcl9trcnkfdkvrthree +kv2 +5pxtjhltvxmczx25dtktone +rsjxvln27cvkk +five88three2fourbhmpcthreehxk +one8six +sevensix5sixlqthreenzsphnxbjtksk +lmq8fivefiveseven8fvt +lrshhmlgcxdtq87 +fivexmgsixsix282 +4sczfdpsix54four +2vxonehqfcvdvxrr +9seven7five +27xkkmp5qone3four +jdjjdjr6lgpgszz +two87sevensixtwofive7qktfvch +86fiveninetwo37 +zjxlcjthree3ninefive76fiveeight +9rczvmthplvpxhxt1vgf2fzgg +4nineplxfourtwoseven1lzh6 +twothreelmvmhkndcrlvggsqfq2xzksfhgsix1 +njfknspt14hfpsxdpninerdzklfg8 +qsbeightwolczzd9vblksgxrxdseven9two +8fourseven8five6cnfrcvpnhvttq +nlstwonevgqvzg3fdllsqktqf7cgsvfjhzmfffntvkln +glvmzeightonesix85xrfvt2 +5cmlnbrtwo +one6mp82twoeightfour3 +six11nqvlrrpxhr +hj95dtrpdkgsevencccfxqlxfour +7frxlq4two4seven6 +four6cpkgghfxgfour9fivefour +lsix1sixthreeeight1cxnnqqhxxk +zkntsdftthreejk16 +nine2c +9czbtsl +5jqxkskkkzdvznine +7two9 +lfssrfourv363vtbjnxj +9fourdpcrxtxnvklltlnsheighttwoqzhnrgheight +twotwo2jh4431nine +57nine19xj11 +8sevencone5seven +xz4sixtnnklcvjfdq +15nine +kqtsqznbctwo7vhzfsf987six +6fournine6rsbdsp2qrrnnvqreight2 +4fr +hpfllcmjjbbtbfive2sevenmgfvrgbhxmjbxrh +8nrsix +mxrgrhtsfvtzxqlt8vspfive9fourgpkpnhsj7 +f6892fourzjgk7three +xzxnlvgbgninenine49two +eightzjtdkvnmnvone2fzhkqzzthree6 +six259mtjninerfourkmlg +sixthreepflrvthree5dsrppdzgb +one882three +mtmb8ninenpxtfkchcztwompfcjkmnh +128sevenbeightsixphngd +qx2 +1flktj7 +six4nine76kcc68one +48lvjfsfmgnine +fmkmvmrrcgeight32three535dl +one7one +5jlscrmvnvtwonine +3ls +eight86 +xphtwonefourspczfive9seven6 +four9g +tmjtfgrddj9seveneightsixninekzqtwo7 +sxvgv3 +qvrsvlfvpg99 +22qztqxlbjtznfdgcngprx3eight +2fiveseven +76jbmlnine1fourtwohsptzfour +p6ffvh6vzqdglghnfgpdd +sixone9 +five6grzlghcztrtjqpncr3lpjstpmcvfvxpnthree +8zkgnine +onedlnmzkzh46sixsix +hcmqknkmzrfnchs5vrjbdqvshvtwonev +twoqnzpmzbgxm6 +89nmgdvvzgmvsfxpbc155six7 +dhqnjmtzh6bhjnrktjh +one4sdcnk +qkrsblxng61fzqfcjrjnfndzg +8fsklvmcsixgdqvkgcqd +onefiveeightpt2 +395lqvmp1 +7htxhxzxkonesixdlpvnfbcrrgmx4lzpnjxj +xdf8seven3223 +cmsfivebtn9vtwojmcsix +92mntfpfseven +2sixdsdlgvrzbseightqzmdghdvc6 +fourgkncjh8onethreemzpnpx +five9pfmbbffcfc9threepdkjxtone +2lrpmpfzceightzrglddshdfour +xhgxmvclgvone2 +dlcrxnsix9onesixszqbqbxqfgjgsgsix +939one4ppp +5onessszzgf9hpzmpjctql +9ninesix79 +szbrmlbzxp8cqsgkqnz2four +vbddlztfkqzb8fivethreeone9 +7four5 +2zccllppptfour6 +2twotwosevennine6fbccsix +7txcxone4onercgzkskvhlfffive +six4ninexzlnfivekgqggbmkcmqeight +27fourone +12ljvnmlzbgfkccmqmgkrlccfgk +twovgvzxzcfxjdrxbj96bbxvnnnine +363 +six1vkcbcpmxtvlksxxjz2btzscsct +5ninetdrhxk6qgfive7 +srlvrshx8one +2oneightg +pvflfr73eighteightprthree +nmeightwo6 +3three858rvdfxvrmpxhn +five8fourtwonineseventnjgmnrjdj +two9ffcstwo5pq9nine3 +79onecscxpbrfoursix5five +fivemlfbzxczbsixkjgrxjxfourtwo6 +nmtqf7onescmbq +jflnldgfknsxhmmvmtvmgprsbrdglmpxsdn5 +hnb4lxnineeightoneeight +ttshkjxgsdqzjvsvq2fivertgmqplkone +bvknfivethree4ninemztfvcszdhdghgc +91sbfbpxhkkndhnhdjsevenonehxglqqfxdkjp3 +qzbqpxvtwo5eight +frcgeight5onefivesix78xltkhzx +248sbtpeighttwozncmmp1vtmndj +mczxcone918ninetwo1two +nvhmdc1prjgfknkc5five +7seven9mdbcjbgx +5fivephqnc +seven1gthg +9xbzmrth +xxhzgnmtv891two2npv +eight171 +9rnjvzmsix3rkjbmdv +93oneightxtk +mkmbfour8 +twoxbnonefiverx6mjkkfktdxx +ninehrvrcpxfxbzvrtwo1zhbzone +three8tps19mqcmchone +m466zcczxcghqzqlshhzhbkxkm6 +vroneight4eight9seven4two46 +seven5sevensixtwoseveneighttwo +snxjjttqxkcs6jvlb +5six8 +pcqpzp6six51 +six2twothree4zjgcsgmjhjsix +tcks16 +4jgprfrphdhp52nssrhkfgzhzbvddbtctk9xv +fivesix8one +6onermrhxdqbbcdh +jst7ldbfkdkzkvzpqbtxvvcfvkzsrf9eight6 +nine3three9 +krmjjfrsixsixfqp2 +7gkdlgbdln9jqvzfjq +eighthfslbhxgcbqbldxn9 +1fivesevenj9 +9trldgsznqlkthreetdmfbxbzhdcskv6kbfour +556qvdmncnkfccnqnkxlslmv +shc27 +knmhrbkpseventhree715vtnrnpmrnb +tsnlnmxg5cnxshnmffive +4fourllsqvbfive254 +stfivezzjhltsfsix83nineq +six4five +four13 +89qcgfqtsdcmktmctwo2seven9tqlbffgrjg +8five6 +4three3 +59twosplbcrzmgtdrjmrhmhthreetwo4 +dlm538nine +pgsixtdtxsrteightnine9fjcvpnxzgfcjggjgmr +9rksix3seven4twoeight +7bzvgmkr5fivezrhpknpkdfournine +cbsdlrqsixtwofour1twonffm +59ndhbj +gblgkrdtffkcsdthreejbbggninesevenzkrsnm5 +kftmd5 +fourdnvkx84clrnbpftqj6rkdvt +fournine76bzf59 +threevhrkzrvbqkfqn26 +one9sevensix32bbpvvvt +8zhnptsl16vkv +vslkvkffs2fdcvtngkgtdvzzgplvs11 +twoqmtnnnftnhqb2sixzqzqfmbrqj6 +nineoneggqtf1l72 +7264eightsrjdmhhlfthmglmvgpthree +eightsixsevenone3 +9rlkvhq1threevnqzkpfive4 +16three +cksqzvzct63fvbcqtr +xlq4three6vfxn8eightwoq +seven3fbhrdgft23onesixpffgmptzxj +fiveone9fmkgxz6thb2 +5vsksrdnrtzqzxkhjxfcsnine +eightfivesix77tnlktpb +threeeight11lhc6fivex +1seven36 +ljhbgqdb9cmpjzzct +sevensdnfvp1 +bzvfsgdhg7p +8z8fivefivefrlfeighttwo +fivelqkmsjstqn93foursnkqthreetwo +bjbnjkpr83 +5sixseven +843lxtfgzrg +19xzqmptgslgfxdlvone8 +qvs9ninetwotfivetwofivefour +3two7177gchxqndqb2 +pclgmslngmhninegktmlrvmvbrb1five +twosix7fivekcstvdpksn6 +one8lgrcj987sixthree5 +3fnjpnhxh +ninefive8slfz4 +threetwonnxdmnpftn9cjkglxp97 +4one5two8 +8h672smmqm6nine +qsddxqjbxvjlrmlsfxqjptp8twofourkddx +eightxdlqtltjbccnqkcsgvbcpvrltjfourone8nine +zvhfiveeightpxmhfsixmfjnsrfncl1 +891 +twospnzhxsix5twopsgxhcpgkdthree8 +twosix4vvznbz34xbglgczpcd3 +bkhgn2 +kggbsfour2kcrfbxcscd9lgmthree2 +sixxbzmknzt7fourhmhnmgfivezclrhtgshtwo +8txhbgvfjfhsjfivegxshndv3nine1 +jeightwosix46splstbtjtthree +55tmflknjjqmrvjtwo +oneqmsxzx8threenine72 +1three8zjdpnclmfive +mvqeight93one1one +qqxvlr5fourthreeeight2 +six82seven +seveneightseven5one3 +4nine59onefivetwonep +fourghdmclp7 +11nineeight +3qx74fxsxdpd +8rlvfhchthree68 +hbtwone2vgxlzdfsthreesixdxmxrhcone +ssgfcpxgmtwoeightzmtqlhqfive15 +sixtwonpgvtn9ninemq +nine3one524 +smleightwoccnpgzqxg2qzvzmnineseven1sshrbzzqmt9 +vzbbxr9fivetwolkzqp +642fivepkkpljsmtwo +2qhvjljhxlxlg8plckhqhpbc +fivesix8xqzfhrkfvqr1eight +eight2onekmfjqzhgthree +sixfiveeight7 +fournine6hhxtwotwo +bncgbbfrfktzrhjkfltn9fourtwonercp +twosixtwojqtcnznfoureight5 +kphpbmlgvxhcqctksjvkrcfsbthree9gfhtkbs +eightvfkbm3pvtwotworjqxrx8 +2kgfcrvtfive1sgk2nbz8six +6zgdkmzfr44 +x7qvmtdnhclnn68foursdkdcvrfrfour +lsrbdckq1 +one7xzmhknhgbfks +hnmkmltwonine729hdf1 +j2fivehttgmfhgzstrcdnvdspxzcxkt +7fourvhrhqtconefive +sevensixfour2ccprddhlxdvxtzshnbqtgmp38 +9twolpshzrpgqonercvlqjglchfour +rcbqcxzlgjlprbcqmjrfourldkgxhsnlb74 +sixtwo6mdrfflbkrone +rxcsh1 +mcnine4sixrloneightspv +qkdpnztwoxjcrfnsmhj4eight1gzzzgkcznine +mkglfvb2vmvrnrfourklnj76onethree +nrqxpfxcgg2fiveceight6 +6three4xsknpdhgchq6hdgblxszbpnnt +xvmnsdvqfrgkb1pmqtjfgdsix +78threexvllvmdgjpck4 +threermvn16nineone5seven +sixjkxjmfl4 +fdvhjb16gvpz +9hnqsix2eight5fiveeight +szxzqzkhbf9lgxfzvnsxjfhhgc +qxlbhrtjlkvsixbhvqdvd91 +6sixfour3 +6two2c528ldpscl9 +6rgceight7five931 +2gkprbninefgn +9vbzhldtxsgmcbst +dbmqtfkst4eight76 +2sevenoneqkhrxdhbkhcbxbhnjxzsevennine +foureight2nine +five9ninethreeseven +one8threefourthreexrrhnpdqcf +mgvq6vrsprdcvjs +vronedb876four53 +2cpv4tbk +jbvrn2 +81blgc8five295 +4threefour7eighteightdcmrckqxqmnpf +nxcbtwo5four66 +5seven3 +hlcrfjjkjqrvsevenbtdkvzqvxgrjdcmhggcqrr7fiveeight +dcjszvn3phczz34qdgfive +fivefourgrkthree2three1 +three28nine8 +eightt4 +sixfour8 +cptkxpzxk138five1sevenone +gsxjbkkg3foursix78fnkvhsddqvxs6 +htkvspn4fourfourtwo +52rlnsspjhrgfnckg +9six27sdgmz +g6ninezrnine +four6eightnjzpmninetkfxqgcqnb +2five8ffgdtrhzqntjzjssckdggqcvbskpdsrclv +3sixninecxghbrnpcx3vj3 +9hpm4qtdjpdnbqknine4 +9twosevenlnjfz +5prpkmbkfq6 +bsltmrpklzhrldlvpj1eightkbnxnfrlc71three +z8 +2sevenlzxone +9l5pxeight6 +ninexhskkhdkgjgvjhrqhrfj9bnrfbtxpp +sixsixsix3twosevenfivekjdkpxch +jkpvm1567seven +dvjdfnqgbsixeightsixqdkfpbc3lcjz +7twonineninetwo +zjtsjvhfldplt33qpgnlflhj +eight9mkqpbddonejtc78eight6 +797ninetwotwo +dfjnzxtlnine9five +gmjknnzrnrpcbcngzqgseven8 +vqplmsqninenbsjvctjfk8one29zrqb +3ljdlfldqtlqxrmxone4 +qbsixfour6six89pqxspnr8 +6vxhzrmcbvthree +four563pllcfonebvnbltn +dxbtmg2three21 +xtfzzr73 +fivessix4 +sixone485pvzxbd +18cfour +xjtctnllkp57seven2jgbjmjbxnpfgone +eight5gmbzbqtxrr27dtgfdbmtc7 +twoggvcnfmtrseven4dx +ssevenhcltwoseven2cxrmxxcr diff --git a/day_10.py b/day_10.py new file mode 100644 index 0000000..972fa9e --- /dev/null +++ b/day_10.py @@ -0,0 +1,141 @@ +import pathlib + + +sample_input = """..F7. +.FJ|. +SJ.L7 +|F--J +LJ...""" + + +def get_start_cell(rows: list[str]) -> tuple[int, int]: + for i, row in enumerate(rows): + for j, char in enumerate(row): + if char == "S": + return i, j + raise Exception + + +NE_SW = 1, 1 +SE_NW = -1, 1 +SW_NE = -1, -1 +NW_SE = 1, -1 + + +DIRECTIONS = { + "F": NE_SW, + "L": SE_NW, + "J": SW_NE, + "7": NW_SE, +} + + +VALID_PAIRS = ( + ("|", "|"), + ("F", "|"), + ("7", "|"), + ("|", "L"), + ("|", "J"), + ("-", "-"), + ("F", "-"), + ("L", "-"), + ("-", "7"), + ("-", "J"), + ("F", "7"), + ("F", "J"), + ("L", "J"), + ("L", "7"), + ("J", "7"), + ("J", "F"), + ("7", "J"), + ("7", "L"), +) + + +def get_next_tile(rows: list[str], s: tuple[int, int]) -> tuple[tuple[str, int, int], str]: + i, j = s + + for name, (x, _) in DIRECTIONS.items(): + next_tile_x = i + x + next_tile_y = j + + if next_tile_x < 0 or next_tile_x > len(rows): + continue + + next_tile = rows[next_tile_x][next_tile_y] + + if next_tile == ".": + continue + elif (name, next_tile) not in VALID_PAIRS: + continue + else: + s_serves_as = name + return ( + (next_tile, next_tile_x, next_tile_y), + s_serves_as, + ) + + raise Exception + + +def print_matrix(rows: list[str]) -> None: + print() + for idx, row in enumerate(rows): + if row.strip(): + num_spaces = 2 if len(str(idx)) == 1 else 1 if len(str(idx)) == 2 else 0 + spaces = "" + for _ in range(num_spaces): + spaces += " " + print(f"{spaces}{idx}) {row}") + print() + + +def solution(matrix_text: str) -> int: + rows = matrix_text.split("\n") + i, j = get_start_cell(rows) + + next_tile_tup, s_serves_as = get_next_tile(rows, s=(i, j)) + + next_tile, next_tile_x, next_tile_y = next_tile_tup + + print(f"S is located at {i}, {j}") + print(f"S serves as '{s_serves_as}'") + + prev_tile_x = i + prev_tile_y = j + iters = 1 + + ### TRAVERSE + + while next_tile != "S": + direction_x = next_tile_x - prev_tile_x + direction_y = next_tile_y - prev_tile_y + prev_tile_x = next_tile_x + prev_tile_y = next_tile_y + if next_tile not in "-|": + n_x, n_y = DIRECTIONS[next_tile] + if direction_x == n_x: + next_tile_y -= n_y + elif direction_x == -n_x: + next_tile_y += n_y + elif direction_y == n_y: + next_tile_x -= n_x + elif direction_y == -n_y: + next_tile_x += n_x + else: + if next_tile == "|": + next_tile_x += direction_x + elif next_tile == "-": + next_tile_y += direction_y + next_tile = rows[next_tile_x][next_tile_y] + iters += 1 + print(f"i{iters}: {next_tile} {next_tile_x},{next_tile_y}", end=" ") + + print_matrix(rows) + + print(f"{i=}, {j=}") + return iters // 2 + + +entries = pathlib.Path("day_10.txt").read_text() +print(solution(entries)) diff --git a/day_10.txt b/day_10.txt new file mode 100644 index 0000000..26e628a --- /dev/null +++ b/day_10.txt @@ -0,0 +1,140 @@ +777FJ.F|-|FFF-L-J7.7.F-7--L-7-L-LF-7-FFF.FLF7.FL7-J77F-7.L7-7.-F77F|FLJ7.L---7.7---J77F|.F|-J7FFF|7-F7-77.FF7|-7-F77F-.J7.777FF|F|-F77|-77.F +L|F|JJ||.FL7L-JFJLJFFJFJJ|FFJFJ-LLJJ.7.F-.LJJFF|L7.F-.LJFLFJ|7|||.|FJ|LJ7J...-J77.L|F|7.--.LLF-FFFL7||7LF-F7-J7JF|77L-|L-L7LFL-F-7JLJ-|.L7.F +L--JJ|L-.LLJ-L-J||FJJ-JJFF7JFL77.LL-|J7|J.-L-LFJ7|-L.FFJ|7|.L7FFJFJ|LJ-FL.-77|7|F7FLJ|.F-L7|.|JFL-.L|JF|L-L77J7.|JL7F7|7LLJ...||-J-FL-L|JJF| +FF|-L7.J..-JFJ.L7-|J.FL7F7J.|-7-F7L--F-JL-J|-FJ-||7L|7J-J77F-L-JLFJF7|L|-L-J7-J7.J-J--.|F||-J7-|J|-FJ.FFJ.||JL7-L--L--J-F.LF7LL.--77.F.|||L| +F|.7F-7-|.|.||.|F7JJ.LL||LJ-JFL-JJF|.|JJ-7.F.7||L-F--7-7.F7JFLL7FF-|L-7|J|.L|7-7.|J7-LL--JJ|.JF-7L|.7FLL..L7FJ|J.F|7-JJ|LL7L||.7L-7J-J-F77-7 +F7.LF|.FJF77JF-FLJJ.FL.L|J..L|J.|.LF-77.L7FLFJ-JJJ|F-J.L.|L7J77F77JL-7L77|.|.|JL|.-7..L-FL7-|LFL7FF-FL-LL-F|7.-7F7F-7|FF7|F.J-|JLFJJJ-7-7|-J +7JFFL--J.7|F-F7||J-F.|.|.L-|FJ-7J|L|FJ-L-77J|7L|.FJ|JJ-L7--JLF-||JFF7L7|777F-7.L-7.F7.FF7LF7L-|FJ7JL|||LL7FJJ.L-LJ||L--J-|L7-|L--J.F-7LL|J77 +|--77|LJFL-|FLF7JLFF7-L7F7.|F-F-.|.||7.||LF7-|77FJFJJ.---7|F|LFJL--J|FJL-7JJJJ|7J|.|-F-JL-JL7-|7FJJ..F7F|7J7.-.J|FJL.L|7LL-JF77FL.FJFF.JL-JF +LLJL|7LFFJ7FJ-|77.L||7L-L7FF7-|J-FFJ|7F7-7L|-F-7L7|LF..FLJ-F|-|F-7F7LJF7FJ7-|J...L|JLL7F--7FJF7-7|..F77F|-----J-|J|.|.J7-||F7J77|LF-JJ..FJ.7 +|L|.L|.J.7F|..JLF.F||7J..FF|L777J|L7L7||J7|F7L7L7|L--77-L7FJ|.|||LJL-7|LJL7777F|7--7|.LJF7||7||.L7..|JF-JFLJL7J-|7-F|F|77-L7|.7---L-.F|.|FF| +L.|.L|L.LF-JF7.|F--J|J-FFF|L7||F77|L7|||--FJL7L7LJF--JJJJ|L7L-LJF--7FJL7F77F-7LJJFLF7-F7|||L-JL77FJ7F-77FF-F-|7|L7FL77|F7-|L|-|..7J..|J-7|.| +|FF77FJL-L|FF77L|F-7|7JF--7FJL-J|F--JLJL7FL7FJFJF-JF-7JJF--7-FL.L-7|L-7LJL7|FJ7|.J-|L-JLJLJF--7L7-JFL7L-7|FJL|-JLJ.LF7LLJ7LJ.F|7.|.L7L|-JFFJ +77L--7.L-7JF||7.LJL||F7|F-JL---7|L---7F7L7FJL7L7|F7|FJ-F|F7|-|JFF7||F7|F--J||F7-F7.L----7F7L-7L-JJ-F7|F-J-L-7J.|7J7.L|-LFFJFFFL--LJ.F-FJF77J +.-JL-L-LLFF7||7F7F7|||LJL7F----JL7JF7||L-J|F7|FJLJLJ|7-FJ|LJ7F7FJLJLJLJL--7||||7F7-|F--7LJL7FJF7F77||||7|.|-J.FJJLJ-|L-7|JJFJJ|.|.LF7LL7LFJ. +J7FJ.|||FL|LJL7||||||L-7FJL--7F-7|FJ||L--7LJ|LJF7F--JF7L7L7JF||L------7F--J|||L-J|F-JF-JF7L|L-J||L7|LJL77F-77F-F-7F7|F-7J|F-7FF7|.LL|JL|LLJ. +LLJ-FFL-|F|F-7LJLJ|||F7|L7F7LLJ-||L7LJF--JF7|F-J|L--7||.|FJF-J|F7F7F--JL7F7|||F--JL-7|F7||FJF--J|FJL-7FJF7-LJ-L|FJ-L|7-JFJJLF-LJ-L----.|.L77 +FJ||F7LFJFLJJL---7||||LJFJ||F7F7|L7L7FJF-7||||F-JF7FJ||FJL7L-7LJLJ|L--7FJ|||LJL7F7F7|||||LJFJF--J|-F-JL-JL77JF-JL7.-|J.LL7FL|7.|.LJJ.|.L|F-7 +-7JFL|JLF7L-F----J|||L-7L-J||LJ||FJFJ|JL7|||LJL-7|LJ|||L7FJF7L---7|FF-JL7|||F--J|||||||LJF7L7L--7L7L-7F---JF7L-7FJ--J-|L|77.FL7-7JL||77|L|FF +LLF|7J..||J.|F---7LJL-7|F--J|F7LJL7L7L7FJLJL7LF7|L7F-JL7|L7|L7F7FJL7L--7||||L7F-J||LJ|L7FJL-JF-7|FJ7FJL---7|L7FJL7-7JF-7F7||J.F77..7|F|7..FL +..FJ-.7FLFJ7||JF-JF7F7LJ|F77LJ|F-7L-JFJ|F-7FJFJLJFJ|F--JL7|L7|||L-7L-7L|||LJFJ|F7|L-7L7||F7F7L7LJ|F7L-7F--JL7||F-J-F7|FJ|L-7LF7.F7F|||F-|-|| +|7LF-FJFJFJFJ||L--J||L-7||L7F7LJJL--7L-JL7LJ-L--7L7|L7F7FJ|FJLJ|F7L-7|FJLJF-JFJ|LJFFJFJ|||LJ|FL-7|||F7||F7-FJ||L77FJLJL7|F-JFJL-7---J-|||.-- +|7LJF|-|F|-L-JF7F--J|F-JLJFJ||F77|F7L7F--JF7FLF7|FJ|FJ|||FJ|F--J|||FJ|L7F7|F7L7L--7L7L7|||F-JF7FJLJLJ||||L7L7|L7L7L-7F-J|L7LL7F-J|.LLJJF-||| +JJ.LF|F-7JFL-FJ|L-7FJL-7F-JFJ||L7FJ|FJL7F7|L7FJLJL7|L7||||-|L7F-JL7L7||LJ|LJL-JF--JFJFJ|||L77||L7F---J|||FJFJL7L7L-7||F7|FJLFJL77J7.FF.L7|FJ +||FFL-7-77FL7L7|F-JL7F-JL-7L7||FJL7||F-J|LJFJL---7||FJ|||L7|FJL--7L-J|F7-L7F--7L7F7L7L-J|L7L7||FJL7F7FJLJL7L7FJFJF-J|LJLJL-7|F7L7-F-JJF.77FJ +FF|.LJ|7|F7-F-JLJF-7|L---7|||||L7FJ|||F7|F-JF-7F-JLJ|FJ|L7LJL-7F7L-7FJ|L-7||F-JFJ||LL--7L-JFJ|||F-J|||F---JFJL7L7|F7|F-----J||L-J7L|JF.FL-JJ +J|J.|F77L|-FL-7F7|FJ|F---JL7||L7|L7||||||L7-L7|L--7FJ|FJ7L7F7FJ||.FJL7|F-JLJL-7|7||F-7FJF--JFJ|||F7||||LF7LL7FJFJLJLJL----7FJL7-F--7.|L|||JJ +L|JFFFJF7.LFJ-LJ||L7|L7F7F7LJL7|L7||||||L7|F7||LF-JL7||F7FJ|LJFJL7|F-J|L7F7LF7|L7|||FJL7|JF7L7||||LJ||L7||F7||FJF7F7F-----J|F-JFJF-J---|-J.F +L|LF-L7L-J-||||.LJ.|||LJLJL7F7LJFJ|||LJL7|||||L7|F7FJ|LJ|L7|F7L-7LJL-7|FJ||FJ|L7|||||.FJL7|L7|LJLJF-J|FJ|||||LJFJ||LJF-7F7|||F-JFJ-J7JF||FF7 +.LF-F--7|LFF-|7F7F7LJF7F---J||F7L-J|L-7FJ|LJ||FJLJ|L7|F-JF|LJL77L-7F-J||FJ|L7L7|||LJL-JF-J|FJL7F-7|F7||FJLJLJF7|.LJF7|FJ||FJLJF7L7-J|J7|FLJ| +-77F7.L-|L||-77|||L-7||L--7FJLJL--7L--JL-JF-J||F7FJFJ||-F7L-7FJF7FJ|F7|LJFJFJFJ|||F-7F-JF7|L7.LJJ||||||L7F---J|L---JLJL7|||F--J|FJJ7JFF--J.7 +|FJLJ7--.-LFF7FJ|L-7|||F7|LJF7F---JF--7F--JF-J|||L7|F|L7||F-JL7|||FJ||L-7|FJFJFJ||L7LJF7|||FJF7F7||||||J||F7F7L--7F7F--J|||L--7LJ7F7--JJ|.-J +FF---77|7FF7||L7|F7|||LJ|F--J|L---7|F7LJF-7L7FJ|L-JL-JFJ||L7F-J|||L7|L-7||L7L7L7||FJF7|||||L7|||LJ||LJ|FJLJLJ|F7JLJ||F-7|||F7FJF7F7LFJ7FF77J +|JL77FL7JFJLJL-JLJ|||L-7|L-7FJF---JLJL-7L7|FJL7L--7F--J|||F|||FJLJFJL7FJ||-L7L7|||L7|LJ||||FJ||L-7LJF-JL7F---J||F7-LJ|FJ|||||L-JLJ|-L7L7|F7J +777FF7J|FJF7F7F7F7LJL--JL7FJL7|F7F-7F--JFJ|L-7L7F7||F7F7||FJL7L7F7|F7|L7||F7L7||||FJL7FJ|||L7|L77L-7L7F7|L-7F7|LJ|F-7|L7||||L---7FJ|.L7|||.| +L77LLLJ-L7|||||LJL7F7F--7||F7|LJLJ|||-F7|FJF7|FJ|||||||||||F-J|||LJ||L7|||||7||||||F7||L||L7||FJF77L7||||F-J|||F-J|FJL7||||L---7LJL77.J7.F77 +-|-F7L.-LLJLJLJF7-LJLJF7||LJ||F7FF7|L7||||FJ||L7|||LJLJ|||||F7FJL7FJ|FJ||LJL7|||LJ||||L7|L7|||L7||F7|||LJL--JLJL-7||F7|LJLJF---JF---777FL-F7 +L|JJL-JF||.F---JL-7F--JLJL--JLJL-JLJ7LJ||||FJ|FJ|||F---J|||||||F-J|FJ|FJL--7|||L7-||||FJL7||LJFJ|||||||F---------J|||||F---JF7F-JF7FJJ7-7.L- +FL7.|FLLF--L7F---7|L--------7F-------7FJ||||FJL7|||L-7F7|LJ||LJ|F7|L-JL7F-7|||L7L7LJ||L7FJ|L-7|FJ||||||L--7F-7F---JLJLJL----J||F7|LJ|J|F7JJ7 +JJ|.77.LFJJLLJF--JL-77F--7F7LJF------J|FJ||||F7|||L7LLJ||F-JL-7LJ|L7F--JL7LJ|L7L7||FJL7|L7|F7|||FJ|||||F--JL7LJF-7F7F7F--7F-7LJ||L77|JF-J.|L +FFF-FJL-|||LF7L--7F-JFJF7LJ|F7L7F----7|L7LJ|LJ||||FJF7FJ||F7F7L-7|FJ|F7F7L-7L7|FJL7L7FJ|FJ||LJ||L-J||||L----JF7L7||LJ|L-7|L7L7FJ|FJ7|F|.J--J +FL|..7J|FF--JL---J|F7L-JL-7LJL7||F---JL-JF-JF7|||||FJLJFJ|||||F-J||.LJ||L7FJFJ|L7FJJ|L7||FJL7FJL-77LJLJF-----JL-J|L-7L--JL-JFLJ.LJFFJJL|F|-L +LL|..--7FL-------7LJ|F7F-7L-7FJLJL------7L7FJ||LJ||L7F7||LJLJ|L-7|L7LFJ|FJL7|FJFJL-7|FJ||L7FJ|F-7|F7F-7L-7JF----7L--JF-7F-----7F---7J.LL7J.| +L|LFFL-LF-7J.F---JF7LJ|L7L--J|F7F-7F7F-7|FJL7|L-7||FJ||L--7F-JF7|L7|FJFJL7FJ||FL7F7|LJ||L7||FJL7||||L7|F7L-JF7F-JF-7J|FJ|F----JL7F-JJ77|L77. +|.F-|.|LL7L--JF7F-JL-7L7L---7LJ|L7||LJFJ||F7|L--J|||FJ|F7FJL-7|LJLLJL7L7J|L7|L-7|||L--7L-J||L7FJ||||FJ|||F--JLJF7L7|FJL-JL---7F7||F7F7FF7.77 +F7|-|.FF-JF-7FJLJF7F7L7L-7F7|F7L-J|L-7|FJ|||L---7||||L|||L7F-JL-7F---JFJFJFJ|F-J|||F7FJF7FJ|-||LLJ||L7|||L-----JL7|||F-------J|LJLJL-7-J.FF- +FLF-77LL7FJLLJF--JLJL-JF7LJLJ|L7F7|F-JLJ-LJ|F7F-JLJLJFJ|L7||F7F7||F-7FJ.L7L7|L-7LJLJ|L-J|L-JFJ|F--JL-JLJL-------7LJLJL-----7F-JF7F--7|F|F-7J +L-|.FLJ.||7JF7L--7F7F7FJ|F7F7L7LJ|LJF7F7LF7LJLJF7F---JFJFJ|||||||LJFJL-7|L7||F7L--7F|F7FJF-7|FJL--7F7F7F-------7L7F7F7F-7F7LJF7||L-7LJ77LLL. +|LJFL|JFLJF-J|F--J|||||FJ|LJL7|F-JF-J|||FJL7-F-J|L---7L7L7||||||L7LL-7FJF-J||||F-7L7|||L7L7|LJF---J|||||F-7F-7FJ7LJ||||LLJL-7|LJL--J|JL7L|J7 +L.L|7F-JJLL-7LJF7FJLJ||L-JF7LLJL--JF-J|||F-JFJF7L7LF7|FJF||LJ||L7L--7|L7L7FJ|||L7|FJ||L7|7||F7L-7F7|||LJL7LJ-|L---7LJ|L----7LJ|F7JF77L|L7.|J +L7FLFLJF--7.L-7||||F7LJ.F-JL-7F---7L-7||||F-JFJL-JFJLJ|F7LJF-J|7|F7FJL7|FJ|FJ|L7|||FJL7LJFJLJ|F-J|||||F-7L--7L----JF7|F7F-7L--7||FJL7-77L|-J +J7F7L-FL7FJ-F7LJ|L7|L---JF--7|L--7|F-J|||LJF7L-7F7L--7LJL7LL-7|FJ||L-7|||FJL7|FJ|LJ|F7|F7L--7|L--JLJLJL7L---JF-----J|||LJ||F-7LJLJF-JJF7|LJ. +|LFJLFF-JL-7|L7-L7||F7F7FJF-JL--7||L--JLJF7||F7LJL-7.|F--JF--J|L7||F7|LJ|L7FJ|L7L-7|||||L---JL-----7JF7L-----JF--7F7||L--7|L7|F7F7L-77FJJ7L. +J|LL-LL---7LJFJF7||LJLJLJ.L----7LJ|F7F7F-JLJLJ|F-7FJFJL-7||F-7|FJ||||L77L7|L7L7|F7|LJLJL----7F7F--7|FJL-------JF7LJLJL---JL7|||LJL--J7J.LF.| +F-J|J7FF7LL-7L-J|LJJF7F--7F----JF7LJLJ|L-----7LJFJ|JL7F7L7LJFJ||FJ||L7L7FJ|-L7||||L--7F7F---J|||F-J|L-7F--7F---JL7F7F----7JLJ|L-7-|LLJL|-|F- +FLF-7-F||F--JF--JF7FJ||F7|L---7FJL-7F7L--7F--JF7L-JF7||L7L-7L7||L7|L7|FJ|FJF7||||L7F7||LJF--7||||F7L-7LJF-J|F----J|LJF7F7L--7|F-J7F-7-7JJLJJ +L.L7|F7||L--7L7F7||L7|LJ||LF--J|F--J|L-7FJL--7|L77FJ|||7|F-J|LJ|FJ|FJLJFJ|FJLJ|LJ-LJLJL7FJF7LJLJ|||F7L-7L--JL7-F--JF7||||F7FJ|L7J-7L-JFJLLJ7 +J7L|LJLJ|JF7|FJ|LJ|FJL7FJ|FJF--JL--7|F-JL----JL7|FJFJ|L7|L7F---JL7LJF7L|FJL--7L---7F--7LJFJL---7||LJL-7L--7F7L-JF7FJLJLJ||||7L-JJ|.|7.|.|JL- +L7LL---7|FJLJL7L-7|L-7|L7|L-JF7-F-7LJL---7F7|F7|||FJF|FJ|FJL7F--7L--JL7LJF---JF---JL-7L-7L----7|LJLF7|L7F7LJL---JLJF7|F7LJ||JFJ|F77|LFF.|.|. +FLF----JLJF-7FJF-J|F7|L-JL---J|FJFJF7F7F-J||FJLJLJL-7LJ.LJJJLJF7|F7F7FJF-JF7F7L7|F---JF7L7FF7FJL7F7||F7||L---7F7F--JL-JL-7LJ||LF|J-J.7J.|F.| +F7L------7L7|L7L-7|||L-------7||FJFJLJLJJFJLJF7F-7F-JF7F7FF7F-JLJ|||||JL-7|LJL7L7|F7F7|L7L-JLJF7LJLJ|||LJF--7LJ||F----7F-J.|FF-7J7.F|JFFFJFJ +||F7F7-F7|FJL7|LFJ|||F7F77F7FJLJL7L-----7L-7FJLJFJL--JLJL-J|L7F-7|||LJF--JL--7L7|||||LJJL7F---JL---7|||F-JF7L-7||L-7F7LJF77FFJFLJL7-L.JJJ--J +|LJLJ|FJ|LJF-JL7L7||||||L-JLJF-7FJF--7F7L--JL-77L------7F--JFJL7|||L-7L7F7F7FJFJ|||LJF7F7||F-------J|||L--J|F7LJ|F-J|L--JL7-F7|L7.F-J-L7F.J7 +L7F-7|L7|F7L--7|FJ|||||L--7F7|FJL7L-7||L-7F7F-JF---7F7LLJJF7L7FJ|||F-JLLJLJ|L7|FJ||F-JLJLJ|L--7F-7F7LJL---7LJL--JL7FJF--7FJ-|L77F-7J||LFJ7-F +FLJFJL-JLJL---JLJFJ|LJL---J||||F7L--JLJF7||LJF-JF-7LJL----JL7||FJ||L-77JJ.FJFJ|L7LJL------JF--J|FJ|L7F7F-7L----7F-JL7|F7LJF7|FJ-L7L--7LL--.F +|JFL7F-7F-7F--7F7L-JF7F-7F-J||||L7F7F--J||L--JF-JFJF-7F-----JLJL7|L7FJJFF-L7L7L-JFF--7F-7F7L--7|L7L7LJLJFL----7LJF7FJLJL-7||||F7.|F--J7.FJ-J +F7F7LJFJ|FJ|F-J||F-7||L7LJF7LJLJLLJLJF7FJL7F7FJF7L7L7|L-77F-7F7FJ|-|L-7-J.LL7L7.L-L7FJL7LJL7F7LJ-L-JF--------7L7L|LJF----J|||||L-JL--7-L-7F| +|LJ|F7L7|L-JL-7|||FJ||FJF-JL7F7F-----JLJF7LJ|L-JL7L-JL-7L7|FJ||L-JFJF-JF|.F-L7|7-|L||F7L--7LJL--7FF7L-7F----7L-JFJF7L--7F7|||LJF-7F--JJLL|-| +L-7LJL-J|F7F7FJ|||L7|LJLL-7FJ||L----7F7||L7FJF-7FJF7F7|L-J||FJL-7-L7L7L-L|.LLLJF-7FJLJ|F7FL----7L-JL--J|F-7FJF7J|FJL---J|||||F-JFJL--77.||FJ +JLL-----J|LJLJFJ||FJ|F----JL-J|F7F--J|L7L7|L7L7LJFJ|||F7F7|||F--JF7L-JFF|L-.|L-L7|L--7|||F7F--7L--7F---JL7LJ7|L-JL7F7F7FJLJLJL-7L--7FJ|FL-|| +F|LF-----JF7F7||LJL-JL-----7F7LJ|L-7FJFJFJL7L-JF7|FJ|||LJLJLJL---JL--7-7F7JL|.L||L---JLJLJLJF7L---J|F----JF--JF--7LJLJLJF7F7F--JF-7|L-7JJ.LL +|7-L-----7|LJLJF7F7.F--7F7FJ|L-7L-7LJFJ-L-7|F7J|LJL7|LJF-7F-----7F-7FJLL|L7-J.F-JF7F7F7F7F-7|L7F---JL----7|F-7L-7L7F----JLJLJFF7|FJ|F-JJF777 +L|-F-----JL7.F7|LJL-JF7LJLJFJF7L7FJF-J7F7.|LJ|FJF--J|F7L7|L----7LJLLJ7FLF7|.LFL-7|||LJLJLJFJ|FJ|F-------7LJL7L-7|-|L---7F77F-7|LJL7LJJLFJ||7 +||.L7F7F7F7|FJLJF7F-7||F--7|FJ|FJL-JF-7|L7|F-JL7L---J|L-JL-----JF-7F-7-7L--7.-LJLJLJ.F--7.|FJ|FJ|F7F---7L---JLFJL7L---7||L7L7||F--JF7.F|L7-- +F---LJ||||LJL-7FJLJF||||F-J|L7LJF---JFJ|FJ||LF-JF7F--JFF7F7LF7F-JFJ|FJFF-FL777|7F7LF7L-7L-JL7||FLJLJF7|L-----7L-7L--77LJ|FJFJ|||F7L||F77.|7. +|||||-||LJF---J|F---J|LJ|F7L7L-7|F7F-JFJL7|L-JF-JLJF7F7|LJL-J||F-JFJL7J|.7-F-7F-JL-JL--JF7F-JLJF----JL-------JF7L---JF7FJL7L7LJ||L-JLJL-7-77 +FL7J|7LJF-JF--7|L----JF7LJL-JJFJ||LJF-JF7LJF7FJ.F7F|||||F----J|L-7L7FJJ-7|.|FJL---7F--7FJ||F--7L---------7F7F-JL7F---JLJF7L7|F7LJF------JJ-J +7J.||FF-JF7L7FJ|F----7||F----7L-JL-7L7FJL-7||L7FJL-JLJLJL-----JF7L-JL-77-|F|L7FF7FLJF7LJFLJL-7L7F7F7F7F7.||LJF-7LJF7F--7|L7LJ||F-JF7F77FJLFJ +F777|7L-7||FJL7|L---7LJLJF7F7L----7L-JL--7||L7LJF7F-7F--------7|L7F-7FJ-F7FJFJFJL---JL----7F7L7||LJLJLJL7LJF-JJ|F-J|L-7|L7L7FJ||F-JLJL77FFJJ +-JL-F-F-J|LJF7LJF---JF-7FJLJL7F--7|F-7F-7|||L|F-JLJFJL-------7|L7LJ.LJFL|LJFJ-L------7F7F7LJL-JLJF-----7L-7L--7|L-7|F7||FJFJL7|LJF--7FJJ|F|| +J77F|JL-7L-7|L--JF--7L7||F7F-J|F-JLJ||L7LJLJFJL--7FJF-7F7F-7FJL-JF7F7F7-L-7L7|FF---7.LJ||L----7F7|F----JF7|F7FJL--JLJLJ||FL--J|F7L-7LJLLL-F7 +|7FFJJ.FJF-JL----JF-JFJLJ||L--J|F7F-7L7L---7L7F-7||FJL|||L7|L---7|LJLJ|F7FJFJF7L--7L--7LJF----J||||F7F--J|LJ|L--7F-7F7LLJF-7F-J|L--JL|-||JLL +||L7.LL|FJF----7F7|F7L-7.||F7F7LJLJFJ-L----JJLJ|LJ|L7FJ||FJL----JL-7F-J||L7L7||-F7|F--JF7L-----JLJLJLJF--JF7L---JL7||L-7FJFJL-7L---77J7-|.F7 +||L--.LLJJL7F-7LJLJ|L--JFJLJLJL-7F7L-------------7L7|L7|||F7F7F7.F7||F7|L-JFJ|L-J||L---JL-------7F7F7LL---JL--7F7FJLJF-J|FJF7FJF7F7L7F|J|777 +||7F|.FLJJ.LJFJF7F-JF7F7|F-7F7F7LJL--7F-7F-----7FJFJ|FJ|LJ||||||FJ||LJ|L--7L-JF--JL7F-7F-7F7F7F7LJLJL-7F------J|LJF--JF-JL7||L7|LJL7L7J.LLFL +L7F||F7J.FFF-JFJ||F7|||LJL7LJLJL-7F-7|L7|L----7|L7L-JL7L-7|LJ|||L7||F-JFF-JF7FJ-F7JLJFJL7LJLJ||L7F7F-7LJF------JF7L---JF-7LJ|-LJF7-L-JF777.L +FL-|--7.FL|L-7L7LJ||||L7F-JFF7F--J|FJ|FJ|F7F--JL-JF--7|F7||F7LJL-JLJL7F7L-7|||F7||F-7L--JF7F7||FJ|LJJL--JF-7F7F7|L--7F7L7|F7L7F-JL7JJFFF7JFJ +F||||.L77FL7FL7|F-J||L7LJF--JLJF--JL7||FJ||L----7FJF7|LJLJ|||F7F---7FJ||LFJ|LJ|||||FJ-F-7|LJLJ|L-JJF7-F--J|LJ|||L--7LJL-JLJL7LJF--J|LFJL||-. +7JL-7-|JLJFFL|LJL-7|L7|F7L-----JF---J||L7||F7F--J|FJLJF--7LJ||LJ|F7|L-JL7L7L7FJ|||||F7L7|L----JF7LFJL7L--7F-7LJL---J|F----7JL-7L-7F77.L-7.JJ +LL-J7-JL|-||LF----JL-JLJL------7L--7-LJ|||||LJ.F7|L7JFJF7|F7LJ7F7||L7F--JFJFJL7LJ||LJ|FJL7F7F--JL-JF7L---J|FJF7-F7F7FJF---JF7JL-7LJL77FJLJ.| +..|.F7|F77JJLL7F7F7F--7F7F7F--7||F-JF7F7LJLJ.F7|LJFJFJFJLJ||JF-JLJL-J|F7-L7|||L-7LJF-JL-7|||L-----7|L7F7F7|L-JL-J|||L7L----JL7JJL7F-J-7J.F|7 +.|--.L-JJJ77LFJ|||LJF-J|||||F-JL-JF-JLJL7F7F7|LJF7L7L7L--7|L7|F7F---7||L7FJL7F--JF7|F7F7||||7F7F--J|LLJLJ||F---7FJ||FJF7F---7L-7L|L77-J-|--F +FFJJ-FLJ.7-|.L7|LJF7L--JLJ||L---7FJF7F7FJ||||L7FJL-JFJF--J|FJLJLJF-7|LJFJ|F-JL-7FJ|||||||||L7||L---JF-7F7LJL--7|L-JLJFJLJLF7L--J-L-JF7J.||F| +LJ7J||J|FJL77FLJF7||F7F--7LJ-F7F||FJLJLJFJ|||FJL---7L7L7LFJL7FF7FL7LJF7|FJL7-F7||FLJ||||||L7|||F-7JFJFJ||F7F-7||F-7F7|F7F7|L---7LF--J|.|JFJJ +.LL.F77-|-F|F---JLJ|||L-7|F7FJL-J|L-77F7L7LJLJF7F--JFJFJFJF-JFJ|F7L--J|LJF7L7|LJL7LFJLJ||L7||||L7L7L7L-JLJLJFJ||L7|||LJLJLJF---JFJF--J-F.7J. +7.|-|7|F7.-7L-----7|||F-JLJLJF7F7|F-JFJL-JF-7FJLJFF7L7|FJFJF7L7|||F7|FJF-JL-JL--7L7L7F-JL7|||||J|FJFJF-7F--7L-J|FJLJL-7F---JF7F7L7L--7|L-F-J +LF-.LFL-7J7F|FF---JLJLJF7F7F-JLJLJL--JF-7FJ-LJJF-7||L|||FJ||L-JLJLJL7L7L---7F7|FJFJFJL-7FJ||LJ|FJL-JFJ.LJF-JF-7|L----7LJFF7-|LJ|FJF--JJ77|7| +F||JFJFL|FLFL-L--7F-7F7|||||F---------J-|L----7L7LJ|FJLJ|F7L-------7L7L7F--J|L7L7L7L7F-JL7|L-7|L----JF-7FJF7|FJL7F7F7L---JL-JF-J|FJJLJ7L7JLF +||F.7.J-777J|FF--JL7LJLJLJLJL--------7F7L-7F7FJJL7FJ|F--J||F-7F7F-7|FJFJL7F-JFJ-|FJ|||-F7||F7|L----77L7|L7||||F7LJLJL7F7F7F7FJ.FJL-7|FJJ||JL +F-L7L|77||7JF-L----JF7F7F7F7F7F7F----J||F7LJLJ.F7|L-JL-7FJ|L7|||L7|||FJF7|L-7L7FJL7FJL7|||S|||F-7F-JF-JL7LJLJLJL---7FJ|||||LJF7|F--J7JJ-7L7. +7.L7-L-|-L|7|LJF--7FJLJLJ||LJ|||L-----JLJL7F7F7|||F-7F-JL7|FJ||L-JLJ||FJLJF-JFJ|F-JL-7|||||||LJFJL7|L--7L---7F-----JL7||||L--JLJL--7JJ-L-.|J +F-F-.LL|..|F|JJL-7LJF-7F7LJF7LJL-----7F7F7LJ||LJLJL7LJ7F7|||FJL7F7F7LJ|F-7L-7L7|L7|F7|LJLJ||L-7L7FJF-7.L---7|L------7||||L7F7F-7F7FJJ7LL|.L7 +L--|-7-F77F-J|||FL7FJ|LJ|F-JL-------7||LJL--JL7F---J7F-J||||L7JLJLJL-7||FJF-JFJ|FJFJ|L7F-7||F7L-J||L7L-----JL-------J||||JLJ|L7||LJJ|F-7|-|F +7JF--F7JL||..FF---J|F---J|F-7F7F7F--JLJ.F77F--JL7F7F7L-7LJLJFJF7.F7F7|LJL7L-7|FJ|.L7|FJL7LJLJL7F-JF7L-----7F7F----7F7LJLJF-7|FJLJ-|FL-JLJ7L| +7.||FL-.FF--FFL----JL-7F7|L7LJLJLJF--7F7|L7L---7|||||F7L---7L7|L7||||L7F7|F7|||FJF7||L-7L7F7F7|L7FJ|F7F---J|||F7F7LJL---7|FJLJ|7..L7.|-L.7L| +LL-|7-L.|LFF----------J|||LL----7FJF-J|||FJJF7|||||||||F7F7L7|L7|||||F||LJ||||||7||||F7|FJ||||L7||FJ||L---7||||LJL7F---7LJL7|FL7F7L7--7..F77 +.|.|L7.||.LL7F7F-----7FJLJF77F--J|FJF7|||L7FJL7|||||||LJ||L7|L7||||||FJ|F7|||||L-J||||||L7||||FJLJ|FJ|F7F7LJLJL7F7LJF-7|F-7L-7.LL-7|.|JFLJLJ +77.LJ--L7-FLLJLJF7F--J|F--J|FJF-7|L7||||L7|L-7LJ|||||L7FJ|FJL7||LJ||LJFJ||||||L-7L||||LJFJ|||||F--J|FJ|LJL7F7F7LJL-7|FJLJ|L7FJ77J.|.LLJ7.L7| +LL-7LLJF-7JL|LF-JLJF7FJL7F7LJFJFJ|FJ||||FJL7FJF-J||||FJL7|L-7||L7FJ|F-JFJ||LJ|F7L7|||L-7L7|||LJL-7FJL7L-7FJ||||F--7LJL----7|L--7.---J.FJ-7.J +L|-F-7F--|.F7LL7F7FJLJ|JLJL7FJFJFJL7|LJ|L7FJ|-L--J|||L7FJL7FJ|L7|L7|L7FJFJ|F-J|L-JLJL7FJFJ|||LF--JL7||F7|L7|LJLJF7|F7F-7F-J|F7FJ-|L-J.L|||-| +-JF.LL-J-FLJJ.LLJ||LFF7F7F7LJJL-JF-JL-7|FJL7L---77||L7||F-J|FJF|L7LJL||-L-J|F7L--7F--JL7L-JLJFJF-7FJFJ||L7||JF--J||||||LJF7LJ|L7FJF---.F-7-J +LFJF---L.-7JF-7LFJ|F-J||LJL------JF-7FJ|L-7L7F7FJFJ|FJ||L7FJL-7|FJF--JL--7FJ|L7F-JL7F-7L-77F-JFJFJL7L7|L7||L-JF7FJ|||L---JL7FJFJ7LLJ7.|.7L7J +-L7L77.|.FJ|J.J.L-JL-7|L-7F7F-7F-7L7||FJF7L7||||7L7|L7||FJL7F7||L7L-7F7F7||FJFJL7F-J|FJF7L7L-7L7L7FJ7||FJ||F-7|LJJ||L7F---7|L-J|J.|7||7JJFL. +L7L-J7-F|J-FF.|.|L.F7||F7LJLJFJL7L7|LJL7|L7|LJLJF7|L7||LJF-J|LJL-JF7||LJLJ||FL7FJ|F7||FJL7L-7|FJFJL-7||L7|||-|L--7||FJL--7||JJ.-.|FL7|.|F--7 +FJL|.|LLLL7|L7-F|7F|LJLJL----JF7|FJL7F-J|FJL7.F-JLJFJLJF-JF7L-7LF-JLJL7F--JL7FJ|FJ||||L7FJF7||L7L7F-JLJFJ||L7L---JLJL-7F-JLJJ-|.|L7-FJFF|--- +F|---7.L-|-LFJ-FJLJL-7F------7|LJ|F7||F7||F-JFJF7F7L--7L-7||F7L7L---7FJ|F-7FJL7||FJ|||FJL7||||FJFJL7F-7L7|L7L--------7|L7F7JJ-7.L7JFF.7||7|7 +.L-7.L-.F7..-JLF.LF--J|F-----J|JFJ|LJ|||||L-7L-J|||F7FJF-J|LJ|FJF---J|FJL7|L-7LJ||FJ|LJ77||LJ||FJF-JL7L-J|FJF7F7F7F-7|L7LJL-7-JF|--L|F|-J-FJ +FF-L-||.F|..||.|7.|F-7|L-7F7F7L7L7L7FJ||||F7|F--J|||LJFL-7|-FJ|7L7F-7|L-7||F-J.FJ|L7L7F7FJL7LLJL7|F--JF-7|L7|LJLJLJJLJFJF-7FJ|LL-.|.L|JJFLL7 +FJ-J-||F-JLF-7F.L7LJLLJF7LJLJ|FJFJFJL7|LJ||||L-7FJ|L7F---JL7L7L-7||FJL7J|||L--7L7L7L7LJ||F7L---7||L7F7|JLJ||L-7F7F77F7L-J7||F-J.|F|-7|J7F77| +|7J|.FLFJF7J.LJ7F7FLF--JL----J|FJFJJJ||F-J|||F-JL7L7||F-7F-JFJF7||||F7L7LJL7F7L7L7L7L7FJ|||F7F7|||FJ|||F---JF7LJLJL-JL-77F|L7LF7|F|-LJF|F77. +L7-|7L-JL|--|.FLJLJ7L-----7F7FJL7L--7LJL7FJLJL7F7|FJ|||FJL7-|FJLJLJLJL-JF--J|L7L7L7|||L7||||||||||L7|LJL7F7FJ|F7F-7F7F7L7FL-JJLL7-F..|LJ-LF7 +L-.L-JJ.FJ|-|777F---F-----J||L-7|F7FJF--J|F---J||||FJLJL7FJFJ|F7F-7F-7F7L7F-J||FJFJ|FJFJ||||||LJ||LLJF--J|||FJ||L7LJLJL7L7|7L.FFJJ|7.77FF7L- +7--|J7.F77|FLLF--JFL|F7F-7FJ|F-JLJ||LL--7||F7F7||||L7F7L||.L7LJLJFJL7LJL-JL--7LJ7L-JL7|FLJLJ|L-7||F--JF-7|LJ|FJL7L--7J-L7L-7J.LJJ7L-7JF7LJ7. +7|..F|J7|.|JLL|7J.|.LJLJFJL7|L-7-LLJF7F7||LJLJ|||||FJ|L-JL-7L-7F7L7JL7F--7F-7L---7F--JL7F77FJF7|LJL--7L7|L7FJ|F7|F-7L7F-JF-JL7J|J|F7|FLJ-L-7 +FJ7FFLJ|||..|.L--L|-F---JF-JL7FJ|7-L|LJLJL7F--J|LJ||J|F-7F7|F-J||FJF-J|F-JL7|F7F-J|F--7LJL7|FJLJF----JFJ|FJL-J|LJ|-L-JL-7|J-FF7F77|-J-FJ.|F| +7|.-|J-FJL|-|--J..L.L---7L7-F||-F---L-7F7FJL-7FJF-J|FJ|7LJLJL-7||L7L7FJL-7FJ|||L7-LJF-JF-7|LJF-7|F7F-7|LLJF7F7|F7L---7F-JL77L|FJL-JJ|7.FFF-J +LJ-L7.F---JL|F|7-7J-JFLL|FJ7-LJFJJ|F|-LJ|L-7FJ|-L7FJL7|F------J|L-JFJL7F-J|FJ|L-JF-7L-7|J|L--JFJ||LJFJL---JLJ|||L7F7FJ|F--J.|.7|7LJ7L7JJLLJJ +F|.F---7LJF-FJL--|.|.FF-|L7F-7J|77FF|FF-JF-JL7L-7|L7.LJL7F-7F-7L--7L--JL7FJL7|F7LL7L--JL7|F7F7L7|L7FJF--7F7F-J||FJ||L7|L-7JF|7|-J||--|J.7.L| +|.F|-JLLJ-F--J-L|LF--FJFL7LJFJ|LL7FLLFJF7|J.LL-7||FJ.F--J|-|L7L7F-JF----JL-7|LJ|F-JF7F7FJLJ||L-JL-JL7|F-J||L7FJ|L7|L-J|F-JJJL7JJJ|J|-L--F--7 +77||FJ||.|JFFJ-FJF|.|LF-JL--JLJ7L|LLF|FJLJ|-|FLLJLJ.LL--7|FJFJFJL-7L--7F7F7||F7|L7FJ||||LF-JL-----7FJ|L-7|L-JL-JFJL--7LJJJ-|-|LL.L7|.J7FF.FL +LL|J7JF|.|FF7FF---|F|.77FLJ7||.|.F77LLJ-L|--|JLJ7.F-JFJLLJ|FJFJF-7|F--J|||||LJLJFJL7LJ|L7L-7F7F-7FJL7|-FJL7F7J|LL-7F-JJ.|J.F7--J-LJLJJFF7||7 +-JJLF7J|FJFJ|FL-J7L-J7|-|-L|FF7L-F-7J.L.L|---J.LL-|..F||LFJL7L7|-LJL-7FJ|||L--7.|F-JJFJFJF-J||||LJ|-LJ.L-7LJ|L-.L7LJ-|..|77JL7-|J.F7--|||J|7 +F|7.77.-7LL7F|F-JF-7LL7-7-|L7|.FL|-F-7.|.7J|J-|-L.LF---F-JF7|FJL-7F7||L7||L7F-J.||-F-JFJFJF7||L---7FJ.-LFJF7L7J-|-||-7F7|JL7LJ-LF7-JJFLLJ|.L +FFJ7|F|L--L7--JJ7LL|7.LLL-777F-JFL7||LJF-J-J|L|.FJJLFJLL--J|||F7FJ|L-JFJ||FLJ-L7||FL7FJLL7|LJL-7F-JJL7|LL7||FJJ-7.L7FF7L|-|-77.||LJF777..-7J +||LL7|.7..|L-J--F7F---7.|FLF-LJ7F7FF7|LJ-J77||F-7-F.J7J..J.LJ|||L7L--7|-|L-7JJ.FLJ7LLJ7..|L7J.FLJJ|L.L7.FJ|||JFF---FFJ|F|F|7|7--7FLFJJ-L.||. +.LLL-|F|JFF-|F-.L|L|-|LL7F-JJ|7FLFFJFJ7|--77|LL..FL7F7.|-7FJ.LJ|FJF--JL7|F-JJ7F-J--J|LFF-L-J7J7|LFLJF-F-L-JLJLJ-|.F|LFLLJF7LJ.-7L||||L77.-J7 +.|.|L|L--7J-|J.7F7F|LF7F7-JJF--.LLL-.FJJ|FF--|LF-7-|7.|.L|J..|.LJ-L-7F7||L-7.|FJLF7FJ7|77|L-7|LJ.||F|L-7-FJJ7.|J.F-|LJLF7--7J.LJFJ-|-7L77|LJ +FLF||LL|7J|J|.FFJL||.FJLJFJ-L-|L-LJLFJ.FL-|7.F7|F|F||.FJ..L|-7-J.F--J|LJ|F-J-FJ||FLJFF|L-J||L7FL7J77F-|JF7JFFF|7-|.|...J|.F|LF-L|J.LFJJL77|. +|F-77LLL|-J----L|7LJ7L-|-JJ7|F-|.LL77LJ7|.LLF|FLFJ7FL-|L77.|L|LLFL--7L-7|L7.FJF|--LL--F--|F|F--JF.FLJ...||7FFJLJ-77L7J-LF7F7FFF7|F7.J|FLJFF. +L7L|-7-||L7.||FLJ7FJ7JF7.|.|FL-J7.FL-JF|-7FL|LL-LF|L||.FLJFF7J-7FLF-JF-J|FJFL7||.FJL||J|-JJ.L|.FF-L--L7F|FL---7|F-77FJFL.F7.L|LL-|-FLJ-J-FJ- +LLF7.J.L7-J-L-|.L|JL|JLL-FL7JLL7.L-JJL-J-LJ.LJL77-|-J-.F-LF-JJ.LJLL--JLLLJ-L-FLF-7...J-J-LJF.L.L7JL|JLLFF7J-LFL--L|-JLJ.--L7.|.LLJL|-J.F-JJ. diff --git a/day_2.py b/day_2.py new file mode 100644 index 0000000..28bea27 --- /dev/null +++ b/day_2.py @@ -0,0 +1,90 @@ +import pathlib + + +NUMBERS = { + "one": 1, + "two": 2, + "three": 3, + "four": 4, + "five": 5, + "six": 6, + "seven": 7, + "eight": 8, + "nine": 9, +} + + +def solution_line(line: str) -> int: + first_num = None + pending_chars = "" + break_out = False + for char in line: + if break_out: + print("breaking") + break + if char.isnumeric(): + first_num = char + pending_chars = "" + break + else: + pending_chars += char + if pending_chars in NUMBERS: + first_num = str(NUMBERS[pending_chars]) + break + else: + for word in NUMBERS: + if pending_chars.startswith(word) or pending_chars.endswith(word): + first_num = str(NUMBERS[word]) + break_out = True + break + if first_num is None: + return 0 + pending_chars = "" + for char in line[::-1]: + if char.isnumeric(): + return int(first_num + char) + else: + pending_chars += char + if pending_chars[::-1] in NUMBERS: + last_num = str(NUMBERS[pending_chars[::-1]]) + return int(first_num + last_num) + else: + for word in NUMBERS: + if pending_chars[::-1].startswith(word) or pending_chars[::-1].endswith(word): + return int(first_num + str(NUMBERS[word])) + raise Exception + + +def solution(input_text: str) -> int: + total = 0 + for line in input_text.split("\n"): + solution_for_line = solution_line(line) + total += solution_for_line + return total + + +sample_input = """two1nine +eightwothree +abcone2threexyz +xtwone3four +4nineeightseven2 +zoneight234 +7pqrstsixteen""" +first, second, third, fourth, fifth, sixth, seventh = sample_input.split("\n") +first_solution = solution_line(first) +assert first_solution == 29, first_solution +second_solution = solution_line(second) +assert second_solution == 83, second_solution +third_solution = solution_line(third) +assert third_solution == 13, third_solution +fourth_solution = solution_line(fourth) +assert fourth_solution == 24, fourth_solution +fifth_solution = solution_line(fifth) +assert fifth_solution == 42, fifth_solution +sixth_solution = solution_line(sixth) +assert sixth_solution == 14, sixth_solution +seventh_solution = solution_line(seventh) +assert seventh_solution == 76, seventh_solution +answer = solution(sample_input) +assert answer == 281, answer +print(solution(pathlib.Path("day_1.txt").read_text())) diff --git a/day_3.py b/day_3.py new file mode 100644 index 0000000..bcf34fd --- /dev/null +++ b/day_3.py @@ -0,0 +1,94 @@ +import pathlib + +sample_input = """467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598..""" + + +def solution(data): + total = 0 + lines = data.split("\n") + prev_line = None + for lidx, line in enumerate(lines): + next_line = None + if lidx < len(lines) - 1: + next_line = lines[lidx + 1] + + num = "" + + prev_char = None + for cidx, char in enumerate(line): + next_char = None + if cidx < len(line): + next_char = line[cidx] + + if char.isnumeric(): + num += char + else: + if len(num) > 0: + num_int = int(num) + len_num = len(num) + prev_char = line[cidx - len_num - 1] + num = "" + if ( + prev_char is not None and prev_char != "." and not prev_char.isnumeric() + ) or (next_char is not None and next_char != "." and not next_char.isnumeric()): + total += num_int + print(num_int) + else: + line_indices = [] + for i in range(len_num + 1): + if cidx - i >= 0: + line_indices.append(cidx - i) + if cidx - len_num - 1 >= 0: + line_indices.append(cidx - len_num - 1) + if cidx + 1 < (len_num - 1): + line_indices.append(cidx + 1) + if num_int == 509: + print("---") + print(509) + print(f"{len_num=}") + print(f"{line_indices=}") + print(f"{prev_line=}") + print(f"{line=}") + print(f"{next_line=}") + print("---") + for ix in line_indices: + if ( + prev_line is not None + and prev_line[ix] != "." + and not prev_line[ix].isnumeric() + ): + total += num_int + print(num_int) + # print(f"{ix=}") + # print(f"{prev_line[ix]=}") + # print(f"{prev_line=}") + # print(f"{line=}") + break + if ( + next_line is not None + and next_line + and next_line[ix] != "." + and not next_line[ix].isnumeric() + ): + total += num_int + print(num_int) + # print(f"{ix=}") + # print(f"{next_line[ix]=}") + # print(f"{next_line=}") + break + prev_line = line + return total + + +# print(solution(sample_input)) +print(solution(pathlib.Path("day_3.txt").read_text())) +# print(solution(pathlib.Path("day3_short.txt").read_text())) diff --git a/day_3.txt b/day_3.txt new file mode 100644 index 0000000..6337732 --- /dev/null +++ b/day_3.txt @@ -0,0 +1,140 @@ +.........426.............985.........40..........207............................841..463................................633........17.384... +531&......+..........125....-..312..........#........895......998..945.....@......$.....-...33...................353.....*........*......... +........................#......*...........21..727..*..../..-./.............545......80...................602......@..272.......743......... +...........558.577..........486...186*925.....*....483.883.1....286...................................625..................#474.....491..... +..............*.........243.................287................*............$....245............830.........793......#..........306..*...... +238.685.................*................#.........%........807.........28.947.................*.....705.....*....573...500*781...#..496.... +..................989..923.......713...539......917.................115..*.....-...........662.........-......413........................... +...........=......*..........886.*.........................442......*...........398........*.............%.............636...........%...... +............976.413...498..../...266........796....................87.....................969.881..&.....815...........*.....279....415..... +......728*..............*..............129..........670...890.....................760...=.......@.832........227.....632.212*............... +..........257.....712.491....-41...........970........*....*...373........742.......*....330....................*.....................814... +....................*..................415......406..441..35..../.........-..........828.........................239.....@...533*206........ +......687.........834......448...658...*..........&..................467*..................244.......+332....*..........35..............*... +.............453.......616..*...........609.............662......672.....56........661.602*...............549.661...................141..73. +.......699...*.........*...904..........................&..........*...@..............................189..........$677.......473.....*..... +........*..670.........938.........267.......684...........514...211....875.........667..171.110&.426*......../...............*........29... +.....164..........................*....@786.*..........646.=.........43.......885....+...=.............641.....996...........117....28...... +.........*921....150*....635..973............587...346*......771........&3....+....................=................................@....... +......962............821....*...*...........................$....174............391+......732*177...101.....146.............555............. +..........................117.965.........327.....................*../127.54.........354.....................*...37/.......&....56....656... +.335.747*967..*469.................................-.....$.450..560...........553...+.......327*..........215.........950..............-.... +......................253%...........796.........267...946..*........&...583.-...........-......727.37........@....#....-.......337......... +.............-...............-.649.........-.................316..680......*.....982..398..................961......632...718......*..%..... +..........599.............876......700..617....344*138...611..........907........-...........................................*...291...209.. +.860...........................*......*......................850........*..............=....761...721*804...............%...33.............. +...*...........................61./....378........268....956..#..813@..191...610.168..216....$...............853%......826.................. +.757..=422.........................427..........+....%....=...................#.../..............908................@....................... +.........................172.................464...........................-.....................*.......667...931...131..@.........939..... +............456.....462....*.....985................801......933..464..641.874............*189..42.........................430..596...=..... +..............*....%........945.@........456....*23...........*..........*.............335.........889..557#....................*........... +....810.........65......382................#.532...............704......796...192....................@..........46...527......929........... +...=....%..................*433...........................925.............................................30.....*................617....... +.....792.......386.....................575...%859................................................................993...334*..........&...... +..........657.&.....&....................*.....................296.+513.............36..........267........703.............186.............. +......336...........443...#.....474......897.215*346.....100.....=...........+.812../......47.%....*444..&............128........-...196.... +705.............980......932.......*122..................*...........305..817..*......424.../.40.........193.210.736.*..../....&.512..*..... +...%...............*.....................................326..615.......*.......472..*...........350*201.......*..@....681...902......330... +...................907...303...........140*112.............../........93...875......339....361=.............730............................. +..............540...........*...................498.170.....................*....................#...757........241...............201....... +...359*42.....=.......309...561....528.....444.....*........570............................125/.379......707.......*........*285.$.......... +............%.........................*770.............253..*....515..926..................................=........45.946..............*... +....155..573..103.24..............................@......*...179..*........275......................*...................*................134 +....*............*......963...........444......801...656.796.....524.84#......*433.......997.....122.500....711.......447................... +..80.........992..........*............*...+..........*....................................*.................*...............$.....894...61. +........183..../.......492..955....+.222....519........373....=......304........151.........691..............655......223....37......*...... +.........$...................&..221................859.....929.......*...398.......*......-......591.....&.............$..........134....... +................960......264........./..............#..............508...@........118..449........*...907......=791......................... +...........239....#.....=...........248.531...................@..................................696.......741...................50..174.... +.....=......*............................*.....506*809.....796.....906.....=...........17*...........51...*.......................*..*...... +...520...198...781....253..............957.222.....................*.....216..............513....959*....638.312........172.318......514.... +...............*.........*239...............*.....%.....923.........852..............414+............../.....%...104.......*.............936 +.....221.....116.....712...........201...346...475.........*...............&..............745....109..202...........*....................... +....*............957*.....$....353...............................171....468....%..........*.........*.........906..593..592#......&316...... +.........232...........251....#.......%.......................$...*...........179..904.....365.....331..541..*.............................. +...................................856..........412..-....844.877..871....*.........../.................*....416...........810*685..776.969. +.158.......@......319........681..........780.#...+...428.*............650.241....@....................................123.............*.... +....%....826......@....%.688*.......983../....723.........892...................270.....234....*......443...970...........*................. +....................314................*.................................................*..=...588......*.....%........225...496*732....... +...344+........................644......413.997....553...................................87.282..........943........866..................... +..........*563....910......267..*..546........*.....*..................60.............+..........421*739.............*...251.169.605........ +938.....52...........*761.*....762............335....842.....................44/.......528..........................77......*.......*201.... +..........................597......$.....................896.....543.76.........................938./707...............8........982......... +...894..195.......310*986.....=54.854...553................#.......*...*..192...127..566*768..........................*....850...*..970..... +.....*..................................=...835...874...........663...65..*.....*.................*947..539.12...947.485.....*..749..*...... +......34.378........$............#.........*......*......922...............947.598..880........723.....*....*...@..........791........18.... +..165.............388..94.......863........132.184..973.*.......58.................*......226..............618.....................=........ +.....*.............................................@.....154.............240..34.297.......*...........429.....625...............672........ +......619...#............641*520.340.918............................../..@...............390......502..-..../.*.....164....789........984... +.............933.....................*.....838..240..400&..........288.......196..109............*.......749...513........*.......751...*... +.....709.....................881..905.........*....*.....................643..*.....@...114...608......................190..........*....993 +...............109...........*........368..123....98...501.....691..410-...*.126......................92........+..546...........219........ +..................*......18..70..296.....*..............&..987..*........235............8.............././...828...*........................ +.151.............551.153*..........*.....883...............*.......*833........497..287*..427.377%.428...910......448.598.....334..53..619.. +..........589.......................723.........832.131..705.............................#............*.................@......*...*..*..... +..........*........794*686......790...............*..........192..............................970......612.546.98............942......941... +....223.686..............................547...665.......396..*.....210......408.322..839.......*..557......*...+.................521....... +.....*.......170...........166.....390..............100.....*..921....*.........*.....+........984....*..450..........639..../....*...296... +...372..........*760...266.*...600*......999.........*...906........................#....632.......469........250.......*...422..643....@... +..............-........#...911......494...*...355...159.......................848..676.................../.....*......35.................... +......81$.....544..67...............*.....159....*............209.747*29........./..........812.........430.232...................199*587... +760.................*...#........331.................%...158...................#.....................29.................596...477........... +..........%./....922...388..970...............510...68......*....590....545...621...-..977.593..889...*.........................=..879..*389 +....163.618.370..............................*...............946..................332....*.......&..&..837.658......................*....... +.............................835.....129...566.....690.237..............#.............$.....386....36......#......411.....52..733...783..... +.........670...978.84...........=......*.......991*....*....632.......957...52.......548.....&....................*.........-.*............. +....920....*..*.....*...............949..............482...*......812........-...413.....201................663.286.....-......424...296*630 +........992...307...634.................716..287.........811.....+........4......*...413*.........896......*...........84.52................ +.........................253.............................................*.....459..........926..*.......446..............$.......175....... +.........................*.......168-.....781*......344.........85......373..........224.....*..393.545........749%.643......-..%.....968... +...*776../145...&.....140..........................*........578*........................#..45..........*............/......596..639......... +415............393..................988...........878.22..............909..........284...............173...564*48.......33.............444.. +........259..........%.....207-........*631...........*......669*...................*...........282......%........%.....*................... +.130................119.....................422......440.........461...-154........575.............$.=....329...180..576.....367............ +...........618...............=.../..538$.......&............493*............729..........903.........82.......................*............. +.............*............541..124.........627........806*......666.703.146*...........*.%..............-.....................142........551 +...#..3......660.....................*........*.......................*......./164...498..............872.621....991........................ +174....*...............683..542*.....960.....782.....755............557../.....................#282.......#.........*409.103.......943...... +........231.891...........*.....782.....................*992.............492......69.......610...............+...............557......*..... +............*...964.104.289..........853......691..830.......&.....................*...870.*.............77..189.310*...............583..... +....449....435.*....../........732+.=.........*...*.........238...161.....688......675..*...934......................891.................... +...............21.......................239........430..........@....*.....@..376.......205......790........................73..334...598... +......863-................474...339.....*.................765.534.116...........*..................*..........@.......513...-....%...../.... +.262..........#......785....*..$....915..622....440$.&416.*.............143...34..45....515#....448...........268........*.................. +...*..+.......844......*.142..................*...........666.......266...*......*...................236..............439......338.496...285 +647...393...........236.......218..........819.779...+................./.........765...................*.......292.........$......*......... +..........................257....*.................274.........247...........951........................121........391....817.../........... +........742..................&....98...................628....*.................%.168..........539............................701........... +.......................659................................*.622...868.............=...713.357....*.298....917...781......................... +.....467....382..899......*819.....952*388..............684.......*.....................*.....558...%....%...............$..*.....60..615... +.....*.....*.......*............-..........604.................85.76....%893.866.&...784.....................$423.....334....935..*....*.... +..154....424......583.......8....926...$............$441.....................*...50...............=....155.......................599..115... +.............%............-...........96.506..846.................152.....985..........589.......384...@...44...............560............. +.............161...%167..906..901.........*......&....92..+610.......*247.............*...................*...........330..*....92.......... +....26.........................*...........523........*......................190...711.......*..........302.690.........*.986........714@... +........154.....................763..59..............305..560...726......79...*...........521.160..159................81.................... +991.339*........-.........434..........*....................-..*.........*..626....................*..............692......+................ +..............448.....96./...........782............353........949.....655...............752.522....905...964#......-.683..83............... +.......=..........127../.........$....................../.......................................*......................+.........671........ +.783..14...........*...........746....271.38............666..................513..37.....=984.824....@....$..463.................*...154.... +.................60..892..304............*....354*20.................99.........*..%.351............367..914.*....622...........310...*..194 +.../.....339............*......318..........6.................329*...*..240.....76...*...45....*..............601......+.............211.... +.700...../...925......616...........*56.570.$...970...751...........556..%..958.....50..*...667........63...........793..................... +...............................8.........*........*......*854................*.........304........324.....%..................*.....213%..... +832...............%....$.........572......303.....872.=.............822.....2...434........%..76.@......34...866.684*.......571..........756 +.....922........908.811......792....#.967..............432..............304......+........676......314........*..................364....#... +........................=.....*.........*.......39............127.........*........27..............+.........937.172.....532*......&........ +....*.............156....626...667......151..../.......................776..846...*............562.....254$......../..@......297.......751.. +..457.213.....403*....=......................#.......656.....546%..............*.......*866......+...................954.576...........%.... +.........*..........227........364....752..977.231..*...........................739.610...................................*...730..#........ +......838......645........$692.................*....170...............906........................149.....578..470.........981.....310....... +959...........*....447.................33.513...412..........784.......*....................365.....%....*.................................. +...../......593......*....=..965..=907...*.............................482.....................*.......915..............327...529.....425... +......613.........%.490..971.-..............&542..............................695.......803.....917........446.....53...*........*455..$.... +...............258..................+..303+..........................517....7*....598..@....472.....224...*............903..#............... +........................724...+....575........312...&.........................................*....*......628........@.....108.............. +.....343.374.......$....*....675...............%...371......409.....502.928.135...482.384....195...59.............144..982........787....... +....*....*.......289..729..........990....................../.........+.......*..*......*...............*.@...........#.............+....... +....147...613.............*534.........938....882...740.518.....994..........800.222..933...836.......260..339.=...........628.$935...../... +...............726.....308.............%........*...../.+........=..../146.................*...................509..........*........593.... +930.........................823..............994.................................100.....857.......................708.220.184..............