This commit is contained in:
2023-12-03 12:59:53 -05:00
parent 26d876e178
commit 1261f35520
5 changed files with 429 additions and 0 deletions

View File

@@ -43,6 +43,9 @@
<None Remove="Problems\AOC2022\Day9\test2.txt" /> <None Remove="Problems\AOC2022\Day9\test2.txt" />
<None Remove="problems\aoc2023\day1\input.txt" /> <None Remove="problems\aoc2023\day1\input.txt" />
<None Remove="problems\aoc2023\day2\input.txt" /> <None Remove="problems\aoc2023\day2\input.txt" />
<None Remove="problems\aoc2023\day3\input.txt" />
<None Remove="problems\aoc2023\day3\sample.txt" />
<None Remove="problems\aoc2023\day3\sara.txt" />
</ItemGroup> </ItemGroup>

View File

@@ -0,0 +1,136 @@
using AdventOfCode.Runner.Attributes;
namespace AdventOfCode.Problems.AOC2023.Day3;
[ProblemInfo(2023, 3, "Gear Ratios")]
internal class GearRatios : Problem<int, int>
{
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<int>();
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<int> 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<int>();
var curNums = new List<int>();
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();
}
}

View File

@@ -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.......

View File

@@ -0,0 +1,10 @@
467..114..
...*......
..35..633.
......#...
617*......
.....+.58.
..592.....
......755.
...$.*....
.664.598..

View File

@@ -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......................