From 1261f35520c8f9f83ecf0915ccd89e4b9d689c52 Mon Sep 17 00:00:00 2001 From: Amatsugu Date: Sun, 3 Dec 2023 12:59:53 -0500 Subject: [PATCH] day 3 --- AdventOfCode/AdventOfCode.csproj | 3 + .../Problems/AOC2023/Day3/GearRatios.cs | 136 +++++++++++++++++ AdventOfCode/Problems/AOC2023/Day3/input.txt | 140 ++++++++++++++++++ AdventOfCode/Problems/AOC2023/Day3/sample.txt | 10 ++ AdventOfCode/Problems/AOC2023/Day3/sara.txt | 140 ++++++++++++++++++ 5 files changed, 429 insertions(+) create mode 100644 AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs create mode 100644 AdventOfCode/Problems/AOC2023/Day3/input.txt create mode 100644 AdventOfCode/Problems/AOC2023/Day3/sample.txt create mode 100644 AdventOfCode/Problems/AOC2023/Day3/sara.txt diff --git a/AdventOfCode/AdventOfCode.csproj b/AdventOfCode/AdventOfCode.csproj index a308fbc..e8d85e4 100644 --- a/AdventOfCode/AdventOfCode.csproj +++ b/AdventOfCode/AdventOfCode.csproj @@ -43,6 +43,9 @@ + + + diff --git a/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs b/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs new file mode 100644 index 0000000..11d77e1 --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day3/GearRatios.cs @@ -0,0 +1,136 @@ +using AdventOfCode.Runner.Attributes; + +namespace AdventOfCode.Problems.AOC2023.Day3; + +[ProblemInfo(2023, 3, "Gear Ratios")] +internal class GearRatios : Problem +{ + private string[] _data = []; + private int _width; + private int _height; + + public override void LoadInput() + { + _data = ReadInputLines(); + _width = _data[0].Length - 1; + _height = _data.Length - 1; + } + + public override void CalculatePart1() + { + var partNumbers = new List(); + + for (int y = 0; y < _height; y++) + { + for (int x = 0; x <= _width; x++) + { + var cell = _data[y][x]; + switch (cell - '0') + { + case '.' - '0': + continue; + case < 0 or > 9: + FindNumbers(x, y, ref partNumbers); + break; + } + } + } + Part1 = partNumbers.Sum(); + } + + public void FindNumbers(int x, int y, ref List results) + { + var seen = new HashSet<(int x, int y)>(); + + var n = GetNeighborPoints(x, y); + foreach (var (xN, yN) in n) + { + var c = _data[yN][xN] - '0'; + if (c >= 0) + { + var num = GetNumber(xN, yN, out var idx); + + if (seen.Contains(idx)) + continue; + seen.Add(idx); + results.Add(num); + } + } + } + + public int GetNumber(int x, int y, out (int iX, int iY) index) + { + var row = _data[y]; + + var numStart = 0; + var numEnd = _width + 1; + for (int i = x; i >= 0; i--) + { + switch (row[i] - '0') + { + case < 0 or > 9: + numStart = i + 1; + goto leftDone; + } + } + leftDone: + for (int i = x; i <= _width; i++) + { + switch (row[i] - '0') + { + case < 0 or > 9: + numEnd = i; + goto done; + } + } + done: + index = (numStart, y); + return int.Parse(row[numStart..numEnd]); + } + + public List<(int x, int y)> GetNeighborPoints(int x, int y) + { + var points = new List<(int x, int y)>(); + if (x > 0) + points.Add((x - 1, y)); + if (x < _width) + points.Add((x + 1, y)); + if (y > 0) + points.Add((x, y - 1)); + if (y < _height) + points.Add((x, y + 1)); + if (x > 0 && y > 0) + points.Add((x - 1, y - 1)); + if (x > 0 && y < _height) + points.Add((x - 1, y + 1)); + if (x < _width && y < _height) + points.Add((x + 1, y + 1)); + if (x < _width && y > 0) + points.Add((x + 1, y - 1)); + + return points; + } + + public override void CalculatePart2() + { + var ratios = new List(); + var curNums = new List(); + for (int y = 0; y < _height; y++) + { + for (int x = 0; x <= _width; x++) + { + var cell = _data[y][x]; + switch (cell) + { + case '*': + curNums.Clear(); + FindNumbers(x, y, ref curNums); + if(curNums.Count == 2) + ratios.Add(curNums[0] * curNums[1]); + break; + } + } + } + Part2 = ratios.Sum(); + } +} \ No newline at end of file diff --git a/AdventOfCode/Problems/AOC2023/Day3/input.txt b/AdventOfCode/Problems/AOC2023/Day3/input.txt new file mode 100644 index 0000000..75a5208 --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day3/input.txt @@ -0,0 +1,140 @@ +.242......276....234............682.......................958..695..742................714......574..............833.........159....297.686. +.............*............................612*......304..*..........*.......@175...#...*...........*890...........*.............*..*........ +..........346......................997........923......*..253..........698........122.746.....-832..........766.432..229.....674....415..... +...............#76...........332....*...............111...........785..............................=..720..*........*....................... +........204............396..*.....357..438*694...............154.................................26...*....422...200.../201................. +....859*......496.598.+....810........................816.......*713...........802#.........330......540...........................%344..... +..............*.....*..........344.......................*.............671............994.................467............................... +........$..388.........152*141..*......73.719...$526....830...759......%......943............541.624.781...*...$150.............966......... +.....877.......................67.....*.....*.............................859..*..502+........$..*.....*.425........778.../........*........ +................142.....569..........563...57......786..........303.......*...255.......*638....979..704...........*.......181.............. +...........560.....%....+......................276...=..................939..........194.........................675..............741....... +......681...*..................882..714................741......650.........&.................374...542/..........................*......... +344*.....%.340......$.....%......=.....*.....799...990...*.........*733..811.....................-...............8........844...660......... +....937.........301.227.775.24+....=.146..../.....*.......983...+.....................*822.898&.................*.....611*..............693. +...........&.....................328............254..582.......528...359&..........536..........*889........%...........................#... +..901.497.9.........473................193...........*....................168...........................382.450..@.......................... +..............................279..612..*..........795.......431......$............104....................*.......988....................920 +............614....478..430+....*..../...505...363...................195....642....-............493....852...612.........556................ +.............*................570....................961.....................=........178...23.$..................667...........=....415.... +...323*795....363.................414%.........$....@..................54.........680*.....*.....415.......34..........598.......74......... +..................904.124....766.........-..546....................-........100........167.424..*.........%.........83*................*.... +..906@.+.....-......&..........*..951.342.......208...........887...711....*...........*........627...............................=597..478. +.......323.187..+.............192...@......367.*.....107.........$......715.....923....103...........*991.....+....749..146................. +.................170.....511...........-................*...........943.....95..............................215.........*.....126........... +..166................809..*.........590...733.896.....575.333.......*......*...229...122.........................%.......860..-...315....... +.....*856....4.....%.-...826.174............&...*............*..851..655...692..*......*....*................346..659....................... +.............+...77............&.541$...........227.......329.....*............483..463...551....38......527.*...............168.....665@... +....915..635.........960...209........710.....................538..449..........................*.........*..586......574................... +..../.../.....61............*...........*...489..........510..@...........#.........254....52.411........894......932..*...206.121....=911.. +..................900..525.450.591...#..178.+..............%......125...433...362..*.......*.......................*..111.....*............. +.........736*134...*....*..........720..........#...................*.........&.....197..450......................252...........=516........ +...................638.314.....................510.........*..475....629...............................................930.................. +...........................926......../....*.......776....798../................/..............982..............437.....@.....937........... +....502-........-595..........*.....439.282.965...............................+..853..884.419..+......244*873....*........#....*.......309.. +...............................257..............937...413.199...@195..../....248.....+.....*..................100..585.....791..959......... +...............*912.......410......@...........*.........*.............4....................321....................*........................ +......653..................*.......817..#511.131..=785.........468/......128........#144..............*170...559..146..........625/..976.... +......&..................997..............................711..............*.................792...450......$..............12..........#.... +..................412.....................33...............*................672...=........3...*.7.................739.567...........#...... +......................569#.#.......850....*......381........621.253+...............355....*..942../........371.....*....*....285*118.754.... +.....-......................899............327...*.....................+........*......575..........*892........618......511................ +...91............................958-..........532..................914......925.............=.457&..........#......948*..........27.....382 +...................771......857.......-..................79...............................156.........938....389........353...502*.......... +..............................*.......847...............*....238....................161..............*.............*................164.660. +..995..........872.....690.....888...........69..=123..353......*..621..736*........+...87...887....518...........590...429....*254...&.*... +....*.584.631.......$....................980.*...............569......*.....14..........*.....*...............399..........*.............199 +..446..-..%.........200.933...385*.........*..150..........=..........169........374#.322......806...........+.....*........553............. +............@66.........*.........559...580.................120..147-..............................757..............933............644...... +.....................641...943................143..634.648................-...288...................*.............+.........%....$...*...... +..........273.............-...............430....&......@.........*.......876./........826..........67.......801.86......121.....210........ +...842....=...................599*17..182*.....@...................902.............980*........................@.............826............ +....*.......238................................769.....-.......................124......763...........98.491.....420....@901.*.........84... +...564.......&...........296........................503...591..967......162...=.........*...238..386........#.........#......629.26......... +...................423......*723........559$...................*..................849...342........./...............521............@........ +..833*.....3*974..+..............718..........884.#.............503..........284.....*.........223......................................*... +......................532....=.....*..........*....255.............................287..................31...........*....757%.977.......753 +640.....846...............252.....351.....372.258......................................871.........@33..*..149....624..........*.....537.... +...=.........495.....846..............526*..............622....*899.....870......81......%...&.........786...............891...668.......... +................*......*.....................+.........*....211.....498....*......-.654....368.....................916.................698.. +986......629....115..749.........=....925.858..........233............*.151....78......@.......593..684........916...@...................... +.........&....@................@.500.%.........681..+.........431...488..........*932....291=.#.......*........*.........782....$799........ +.....131.....319.944.........577...............*.....777.....................448................614..901..287..722.....&...*................ +....*....157.......*........................966...........442#....472..925...#...359..519......*.........*............937.39..........%639.. +..388......*..266..703...........................................*........@.........*....*......109....424......672...............601....... +...........89...=.................911...949.....#.............487....61.......*491.822.113.................250........*34............*9..... +..15...............345....703..%....*...-....673....239...191........*........................26.130.......*........20........393........... +....*991..%..........*.......*..453.70...............#.....-..597.491...328.....122..........*..........492....701......508....*..274....... +...........838........893...............53..658.865........................#....*.....-....570........$...........&........*........./...486 +................438.............71.............*.....854..+..107*647...200......575...932...........573....606...........850................ +................../.........838...*674..............#....69.............*......................534.........*..................235*.......... +.....877*8............184...*.................................*.........191...........*707........*...198..363......305.*338......392..657.. +.................98...=....953...362......148...335.........781.............484....608............207.*..............*...................... +................................*........*........@...............584@......%................418.......675.......520..260.............639... +41.$....952....133@.999......953..*.....64...792.................................$....111.......*...................*.................*..... +...572....*.........+............18............+.494..694.......+.....93.......443....#......861..................304...696....+487...89.... +...........3............................................+.....461.868...*........................596...#.710..793.......%................... +................362.................%684.........716...................420...............53......*...706.......*../.......@142......*....... +........@...696...*......489....434...............*........................670.......187*......992...........730.48..............443.986.... +.......904.....*.260....%..........#.139.....850..592..187.....137..987.......=.195................366..%.............596.427/.............. +............284.............*141...../...739...............131......*...........@..........510......*..112...-........*..................... +......192................313.......*........*.......43*......*.....309......557......669.....+.....386.......765.....567......758.287....... +..139...........................535.848..#..519........277....778..........*.........*...................526...................*......968... +.....*....-........664..45..............426..........................603.560..&558...909...................%....934......392.395............ +......755..928......-......197....126..................227.......689.+....................170.....@805.............*122..................... +..........................*.........*........909.......*...........*............263..475......201......193..................689..799.../2... +...407..977.........918%...109...332.........*.......910.........730...170.........*....*428....*.....$........185..637......&.............. +...../...$....713....................501......842.........258............*.........872.......822..879....*626....*....*........255.......229 +................*.....633*631.....=....*..................................722.....................*...736........339.171..........-..279.... +...531*393......714............828......384.830.....90..............................683.........647............&...........820@.......*..... +...........3...........965.........153........*.....................552.-.....709....*......413..........503....831.............289....138.. +..........*...906......*......................34..692.........941..+....205.....@..73..........*................................+........... +.........830./........473..388.648........563....*..............*.....................589.....345.....276..........=.471.931........854..... +135*315..........-604.........*....$.......&......134...=....565.......65.............../.............+.........866....=.%.....908.....*.... +....................................446......751.........437.....@.......*.140.....495....607#..783........625.............734*.......758... +...........141......915.....................*.....*...............137.664....&..29.+............/.....113#.*......118.290........715........ +..614.396...........*......................459.....368..........................*...........352.............254..*....*............@...168.. +.....*............746....859..........650........%.....735....../....../198......619..718......-..................147.909..826.......*...... +.........79.............*.............=..........808...*........306.....................@.618......659..3...................*.....852.714... +...157....*.901...957...422...369.......................236.............289........893.......*..............184*399..........958............ +...*........*.......................370.../....................2.990.62..../..........*......992...91.................816................... +...419..731..546..868*10..726........*..13..@........................./.........326.94..829.......%.............@...................354..... +..........*....................868..377.....319.....122=.787................463.........*...*.311...384..........418....774........*........ +..........762.#...&906........*..........................*........464.....*....*.....242..324.+...........444..............*..821.128....... +..............918..........375.........%825....&.........27...227*.........711.239.........................*..............838.-........496.. +....783............................$...........661.....&.............................839.................508.........%...................... +.....*.....106........138....50.....237..............776...&............................*..&825......337......*...550.......337..587#....... +..878.....*....391...=........*.733.......................32....353+..................265.......944..*...516..635...........*.........761... +........212................716................444=...........*.......73....469............=..#.$....823..@...............105................ +...................68..=.............626...............@...88.531..............981......139.37.....................................522...... +.........898.......*..255........969*.......593*886....222.........860.497*168....*.150..................................586..........*..... +............*177..58......681...........928..................131.....*..........560..#............................536......*...........860.. +..613......................*....-.......#.....363........701....*.116...565.....................-348....874...953..$..671..748.............. +......................$..408.....139.........*.............*............=..............615............*....+..*..........*............41.... +.....710..343....@...391.............$.....181..778........795..........................*.............201......875.....22...............*... +629...*..*......769........482.....511.........*......699..........366...%510........518....101...424....................................... +....374...875.........804...*...................395......*.........*.............162.......*.........*..........959............298$......... +..............74.834.........345.....=..540.248.........401....977..454.695.....*....................17........*......536...@............... +......807.......*........780.........54....*....................*........*...294...720...14&.................245........%....773......960... +.........$..132..........*.......652..........$....907.....@.344....848=.397..........*......747............................................ +....541*....&...*.....663...146...........364..611....*.440.....................455.336.209.......751....539................................ +........408.....377...........*..............*......541.........&.......988*150...*.......-........=....*.........#...../..39..306+......... +...%325..................*49...37.............922........344#...717.............179.400...............617.874...943...232................... +...........424........569............865.............978...................978......-......+....23=..........*.............................. +..........=....................782..*.........755........41......823.......@...............427............484.......-.....310.......401..... +...........................&..*....704....168*......264.............@...............240*...........................190................*..384 +617*.........710.....28.492..425............................-....4......=...757*283.....674....467....680......775.............$.....826.... +....975.....+........*...........100..........795..........67..........91...........946...........................*......138...390.......... +..........*.........808.............*474.....+.....141.........156.....................*..........194...........273.473..*...@.....86..+.... +.......589.919..........452.....842.......*.......*....472........*..................765...........*........$.........$..79.644.........905. +................452.....%.........*....223........121.*............816.-949..837..............-830...818.451.....703........................ +.527..934.625.....*..........461...........842-.......455.....................@...866..97...........*..............$..819...............*919 +................472.........*..........930............................208.........*...&.........767.563....%..../......*..422............... +.......%.389..............993..325.650..............344...*................651.379..............+.......516......607.142..+....284%......... +....575.............498...........*.....760...+.........47.385....#.91......*...........957.......@......................................... +.............588....*......./389.........*..839................567..*.....607..............*......377..460=...............260......491.282.. +.....137.........340................961.................383*.......295........................506...........*.....................*....*.... +......../..670..............52.....*.......802..950.........207..........334..377.625.....871...*........622..160.130..#.....295.30...216... +.............*............=.*.......34.941.=.......*............&.12......*....*...........*...20..356...........*......804.*............... +..........335..........562...258........*..........761.......758...*.....................602................................955........512.. +.........................................882........................730..........................566..............................202....... \ No newline at end of file diff --git a/AdventOfCode/Problems/AOC2023/Day3/sample.txt b/AdventOfCode/Problems/AOC2023/Day3/sample.txt new file mode 100644 index 0000000..624ea4f --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day3/sample.txt @@ -0,0 +1,10 @@ +467..114.. +...*...... +..35..633. +......#... +617*...... +.....+.58. +..592..... +......755. +...$.*.... +.664.598.. \ No newline at end of file diff --git a/AdventOfCode/Problems/AOC2023/Day3/sara.txt b/AdventOfCode/Problems/AOC2023/Day3/sara.txt new file mode 100644 index 0000000..9f8e0bf --- /dev/null +++ b/AdventOfCode/Problems/AOC2023/Day3/sara.txt @@ -0,0 +1,140 @@ +........................................................862...........20.............453...619......58........694...312.................292. +...846................132.49........308..........................=............50.....*..............*........+.....+...............59....... +........../46....140.......*............735......852&..706.....860...............297.459..........998................661..418.883.......+... +....*...............*....727......613..#.....517..........-........*..............*.......................888.......*......*...*.........982 +.828.865....395......163......................*......381............312....34...533..............................291.....440.488..370....... +.................+............122.....598*....400....+......................+.=.......451........746*...............................*....... +......864......279........203....*731.....335.....41....23..365.&.......659...817.......*.............89.931......672....661*92....72....... +943.....%..................*....................../..............455.....*...........155................*............*...................... +........................966.......823.................%702..881........874...494..........................364+..$.......#587....&....157.... +.......701.621......................%........%....93...........*................*.........*.&273.................497............814......... +.........*..+............201.863-.........113...-.+...*363....900.............111......586.......289........898.......306....*.............. +...*...894.....&...754...*........#803........609...80...............52....................246..=.............#....../....118..........633.. +...321.......642...*...764...644/......980..............$726.........*...306........787...*...................................550........... +.......666........902..............946*..........230...........45.245.......%...481*.......203......433......+.........294...%.............. +..........*862..........261...184..........744...*...................................................*........782........&...........984.... +....992*........678&.....$.....*..................229......60..........239.........*437...*...681....809......................541#...&...... +........812.................704........+......*.......33.......434....*...................840...*..................@300...../...........257. +.37..................-.17.......26..793.....71.486...............*..240........261.............605........*..............953................ +...............65.724....*..6....*......446.........#854.318...86................*........+922.........546.762.......................137.... +........279....*........382...925............*323........................364.....616.&.........................597.......-419..985*...*..... +..........@.370....................735+...597......@....*966.........................699.874/............446...%............................ +..................798.........%..................711.........905........*694.........................700*............................492.... +......706............+...%....536.$417................913$......@.....39.......+.......................................-................*... +......*........77.......975..................876..........................-954..443.804....&......36*..............51.369..247..........244. +..787.639......../.................$........./.........49..482.........*............/......952.......365....$.......*......*................ +....................................377....$.......603*...........&.....540.......$......................369..215.276.....397.856......-.... +...........&.........959...81............370..958..............768..............41..853......................*..................*.473..737.. +...802$...560...........*...*....................*......286................/596.....#............+..........490...............411........... +..............817.791...101..727.....404.689....606.......*.718.+...233...........=.......59..202..&...............61..................420.. +.....+..730...%.........................*............328@.......90....*..........460......-.......155........913..*...881................... +....928.............285....142......../............................819......755..........................609*.....927.*..................... +..........408..816...*......*.........539..850..21.....&...699.............+......#....952..&844.....88................952.................. +......................409...539..674.............=.....337...*....59...........+..698./..............*.....67....930.....................185 +......775/....726+.................+..259...141*............471...%..........172.....................185.....*.............670...411....*... +...............................=.......*........246.................447....................554...951........201...723...67.#....*......914.. +....................482...../...777.78.507..................$..................918............%...@.../..........&...........688............ +.457............40..*....564........$..................29...199..%537.............*....................489.....*........730................. +.......220..239....16........269..........220....#782......................592....857.......................435.343.....%...............913. +.............*.................$...487....$..............183=.........481...-..........118..........419....................286......163.*... +.........../..752.....................*...............#...........933....*.........10.....*........*......................*....735..*....315 +.........958.........934.............882............51....512....*....769....$.......$...533.....264............$...6....720.........550.... +..408...........366...$......................132.........=.....794........615...........................297...60....*....................... +....$.........6...*........&.....292.....&.................%..........106........889.......@..............@.........468.......$...239....... +.......314.........831.130..48......+.655.....757..976......594...924*......932....*....99..759.2.............750.*..........236.....*251... +..451....*................*......................*....*..........................274....*.................868*.....939...................... +....*..477....580..........739...743..346..802#...91...531......739*661..................925..........#................894.55...995......... +.178.........@..........90........*.....*....................................139.....855.............583..#....377........*....../.......... +........588.............*...65...261....28..10.............22....697+.812.....*.........&..141.............342.*....710..................... +.......*..............255......*............*.....@155..................@..254......#........*.................516................777....... +......876......364..............453.......745...................216..............187...&..686..............782............936............... +...........579....*...#.......................736................*...@..................9.........797..809....*...........=.....983.....*448 +............../.700.152....587..........444...&...375%.744#....21.....140.......=.........576........*..*.....420..............*.....399.... +........822...............*............./...................#.....377........657....$.856..*...811.658............111..+.....718............ +...689...*..............764....................758..........40...*................632.*...574.....................*...850.........626....... +........112.......................833.........*.......&........456.345..707.....*.....35......96..*.............891.......@218.....#........ +................714............................850.....131.................@.334.776.....896..*....878.....729.......846...............641.. +............121*.....736....737......742.....&..............429.125..104................*......397................................389....... +....................*.........*...............441....$......*...*...@....841*363...*...103.............*......#.....820....306...$.......... +.......772..........851.......580...................750...601....38...............715......./........54.832....226..-.......*............861 +.282/....*......264.....-.................63*...........................655...223..........360...........................887................ +........130......*....208....................2......976.............241...............969......588...........942.....................542.... +............782...208.....+....255........................918...476*......606*464....*.....447....=......674......979........+.............. +..............*...........979..........@..........@..........%.....................302........*...../...*..........@.......642........937... +.....200...837....=..109.......525..476...../..564.......#......571..........129........295..623...647...825..........*385......-.....*..... +.....*..........275.#....354....+........492............2...............303............+...........................991.......290...830...... +...246....912......................-.........104..940......440*931.595=../..........$.........741*......977....272......778*...../.......... +.........+.........@.......507.....803.........*...-.........................559*....328..........966.............%.........516..494.=...... +....*842..........464.........*........%750...338........253....386=..656........529......662............/..........757...............868... +.258........................843...................413...*.............*.....513......359.%........588*16.359.........@.........#...%........ +..........498.......$..555......@....................*.....*10.....145........%........+......*.............................136.....980..... +.....681......625.147.....*.....588..82%.397........376.677....633.........................523...607.372................................855. +.....*.......*........439..311..............*.....................-.96.......938*815.839...........-.$....................%.........286..... +...830........115......*.......908.........351...850....290..959/...*...................*.....*453................392......750.........*954. +.....................-.627.......................+..................120............50.900..........818.....668......*.............848....... +.....979*.....603.863......250.......*507.*751......411..../350...........@......../.........702...*...292..*........615...........*........ +...........................#......676...........140....*..................800.........$..895....#..93..*....51..295.........=....59......... +...............594.801.84................335.....*..521...883.......=33.......801....917....&..........667.....*.........893..........485... +........................+......................55........*....................-................#................895..................*...... +.........315.574..168...............................%.215.....123...........................966.........+...........774...526......11....... +...........*...*...-........533...&766...........709............$....931....624......275.............@..189......$....*......#..........=836 +..........342..551.........+...........178..621...........561..................&.....*..............214.......207...822..................... +.................................63...+......=......615..*.............499*825....167...................870.....................265.891..... +......................758..........%.....+................953......&...................727/.....273............413...............=.....*818. +....275..........81.....*.447.506/...67..242............+.........793...531*885...18...............*710........*...#....906................. +.......-..645.....-.........*......#.........98*520.565..958.....................*............88..............66..911.............44*....... +.........%.................455...@..298.......................=....510......-...366..162......*..........306.............354.........153.... +..................@....53......689...........#.....690.......318..*.........701............156....%519..*....386..917..........#............ +......718..754....606...............164.....28.303....*...........921..............342.558..................*......$..67.......682.......... +..............*.........586.....541*...........#.....756..931.....................*.......*.....92.......826..........-..................... +662...........775.........*................../.............*...................419........510..$....................*........-822......-.... +...*..........................690.398....98...9...999....617............681.........360.............&......*508..594.437..............385... +..647...709...............71....*...*.............$......................*..........*...539*864......826..................@................. +.......$......529...........$.260..672.538+........................996.560.........639....................867.......922....891........695... +..........$..*................................376..............922*............................875...........*.......*...........%....*..... +....331.542..........932..409$..........815..*......................888.322..............205.....=.940..2#.......................411.635.... +....................*..........698*119.......65.511................*....+....-......34......=........*......$..574...971.85.*630............ +...104.311.....561#..556...........................*514.............663.....416.......................243.728.....&.....*................... +...........521...........*131...979....227..556...........499....-..............895...42.........%..............=.........../............898 +............*..........*........../...*.....*........=....*.......614.....498..*......*...........612.205...138.664........190.............. +.........834...348..887.730...........475.404.....474..168..620.............$..175...549...............*.....*...................11..459.... +.....320........-................401..........261....................................................267......676..=629....-487............. +......./..%142...............................*....................551................-......961.751.........&......................360...... +.............................41&.504......416.............144........+..........&.....438.......*...385....635.330................*......... +....544.369..349..&.....=479..........995......566.80......*....595-....=..468..507............301..&.............*619...383.....498........ +.......*......*....950................*..........*..=....484.........258...-..............926..............=................*............... +...............224..............*394...81.....904..............................*.........*................537......521...882...231.....*837. +.......370...........625.....116................../11.866..288.........311.....375.708..67...*......380........170../...........&........... +...600*..........811..*....=...........287................................*211......=.......987....*.......448......................-....92. +............408.....+.405...17....32...+.................180...81................*.....*.........315......*..........-..............148..... +.......*401...-....................&.....713.67......475*......*....707.852*...830..484.77.............902........505..=273................. +..837...........................33........*...............492/.80...&......................203...686..........722...............178......... +...*......191.791..........433....$....342..................................689........988..*....#.........@.....#.923*622......*........... +.850.679.%....*.......376.-.....................308.812...742.........-.148....@.........$.663.........818..177..................839...388.. +......./...269...496...*........-....274*............*.....*........791..*........@....%.......*190.............*..241....127.........*..... +.74.................*........912.........435..107..790...640...200......578.112..83....252..269...........970.823.....................875... +...%..787.........515.305..........274.&.........*............*.......................................261...*..............+........&....... +...........136.-........*.564.......*..635.....26../....438.469.................@............193.......*.....55.....244#...185..258.287..... +............*...556...............245......855....928....*.................*61.370..74......-.........488................................... +.....970....315...........999.65..........=...........928.....164.......431.........*...........370.....................#...909...468...471. +.961..@..................%......../350.............*................746.............38....261......*.......301...278..750.....*......*.*.... +....*.................7.....................%...860.900....300.........*410..............*.........209.+98..*...............801....313.491.. +...845......%160.......=......=.....*......313.............*............................547...986............139.331../401.................. +........513........362...540..913..655.510..............483......@...#..670..651..433/...........*264.....43.....*............176........... +211.892....*..253.....%...*...............*.....................645..16..................116...............%...309......*569....*.......+... +.........402....*.83$...884......618.......465.............989..........................=....505..%..................101......974....871.... +...4..........565...................*....&.......297&.......*...........@....179..637...........*.199...924...-..713........&.....@......... +...................@.367&.#308.....752...997.23...........396..........883....&..............306...........*.148../.........76.979...382-... +.................677..........................*..933..................................637...............659...........678................... +.....*...............445..........952...837.....*............755........795.....#.....=.....178*731..............855.....=.................. +......173.15.417......./.....180....*....*....328...607.........*.392...-.....495.546...............183...&.....-..................224...... +..........*.....*.............*......16...65.................772...*..............+........937...........981......92.....+.....164......833. +.116.....149.225....*....287....................136..............240..242.749.............*....688.................=......49...-.......*.... +...&.............202.985..-...732*812.......................-../.....=......-.798.......533........468...30%.........................228.... +.........94...................................+798..&.....431...425............................929*............+............................ +.........*.......................704...982...........332.................447............307%................704...775%.......$973...90..424. +..........711..253.....#...........*......*119..............486........#...........89...........438..666...............487..........*....... +.....947..........*.....823..544....883............291.....@..........813............*.425..659*..........28..491.....+..........896........ +.............../...943......................590...*....145....414*969..............896....*.........622.........*.938.........=............. +....@...#184.935.............................*.....71......$................84*.........825.....637...*.......528...*......990.............. +..745...............534..............58....901...........974...................637.....................87..........361......................