Compare commits
26 Commits
2k22
...
69a941d34d
| Author | SHA1 | Date | |
|---|---|---|---|
| 69a941d34d | |||
| d647742ca0 | |||
| bc79ea9fa6 | |||
| c0b05d45bc | |||
| ebd5d67fff | |||
| 217cabac34 | |||
| 0ff21ba937 | |||
| ed8f30c972 | |||
| 380eeda47b | |||
| 8f8448a0e7 | |||
| be3fbcd34c | |||
| ab3ff19db3 | |||
| 10429f3302 | |||
| 5f08adc3cb | |||
| 6e433fcf3d | |||
| d839ab7ec9 | |||
| 8b46a65d56 | |||
| ef9892502e | |||
| 9b865a12b1 | |||
| 9920041301 | |||
| 323bb83e56 | |||
| ca58bd804b | |||
| bbaa3289f6 | |||
| 83ae67a03a | |||
| 2590458b13 | |||
| 828f9bc3dc |
@@ -2,9 +2,10 @@
|
||||
|
||||
<PropertyGroup>
|
||||
<OutputType>Exe</OutputType>
|
||||
<TargetFramework>net7.0</TargetFramework>
|
||||
<TargetFramework>net9.0</TargetFramework>
|
||||
<ImplicitUsings>enable</ImplicitUsings>
|
||||
<Nullable>enable</Nullable>
|
||||
<LangVersion>latest</LangVersion>
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
@@ -12,4 +13,9 @@
|
||||
<PackageReference Include="Spectre.Console" Version="0.45.0" />
|
||||
</ItemGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<None Remove="Inputs\*" />
|
||||
<EmbeddedResource Include="Inputs\*" />
|
||||
</ItemGroup>
|
||||
|
||||
</Project>
|
||||
|
||||
@@ -7,7 +7,13 @@ namespace AdventOfCode;
|
||||
[MemoryDiagnoser(false)]
|
||||
public class DayBenchmark
|
||||
{
|
||||
private Day Day => new Day15();
|
||||
private Day Day { get; } = new Day10();
|
||||
|
||||
[GlobalSetup]
|
||||
public void Setup()
|
||||
{
|
||||
Day.ReadInput();
|
||||
}
|
||||
|
||||
[Benchmark]
|
||||
public void Part1()
|
||||
|
||||
12
Days/Day.cs
12
Days/Day.cs
@@ -1,3 +1,5 @@
|
||||
using System.Reflection;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public abstract class Day
|
||||
@@ -5,9 +7,19 @@ public abstract class Day
|
||||
public abstract int Number { get; }
|
||||
public abstract string Name { get; }
|
||||
|
||||
protected string Input { get; private set; } = null!;
|
||||
|
||||
public abstract void RunPart1(bool display = true);
|
||||
public abstract void RunPart2(bool display = true);
|
||||
|
||||
public void ReadInput()
|
||||
{
|
||||
using var inputStream = Assembly.GetExecutingAssembly()
|
||||
.GetManifestResourceStream($"AdventOfCode.Inputs.Day{Number}.txt")!;
|
||||
|
||||
Input = new StreamReader(inputStream).ReadToEnd();
|
||||
}
|
||||
|
||||
public override string ToString()
|
||||
{
|
||||
return $"Day {Number}: {Name}";
|
||||
|
||||
2311
Days/Day1.cs
2311
Days/Day1.cs
File diff suppressed because it is too large
Load Diff
372
Days/Day10.cs
372
Days/Day10.cs
@@ -1,3 +1,5 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
@@ -5,283 +7,163 @@ namespace AdventOfCode.Days;
|
||||
public class Day10 : Day
|
||||
{
|
||||
public override int Number => 10;
|
||||
public override string Name => "Cathode-Ray Tube";
|
||||
public override string Name => "Hoof It";
|
||||
|
||||
private const int MapSize = 60;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
int cycle = 1;
|
||||
int x = 1;
|
||||
long sum = 0;
|
||||
var hikingTrailsScores = 0;
|
||||
|
||||
// Increment sum when needed
|
||||
void IncrementCycle()
|
||||
var (heightMap, trailHeads) = ParseMap();
|
||||
|
||||
var hikingTrails = new HashSet<Point>();
|
||||
|
||||
foreach (var trailHead in trailHeads)
|
||||
{
|
||||
cycle++;
|
||||
hikingTrails.Clear();
|
||||
|
||||
// Check for signal stength at the start of a cycle
|
||||
if ((cycle + 20) % 40 == 0)
|
||||
{
|
||||
sum += x * cycle;
|
||||
}
|
||||
}
|
||||
GetHikingTrailScore(trailHead, -1);
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
{
|
||||
// noop
|
||||
if (line == "noop")
|
||||
{
|
||||
// noop finished, go to next cycle
|
||||
IncrementCycle();
|
||||
}
|
||||
// addx
|
||||
else
|
||||
{
|
||||
var split = line.Split(' ');
|
||||
var v = int.Parse(split[1]);
|
||||
|
||||
// Prepare addx
|
||||
IncrementCycle();
|
||||
|
||||
// addx finished, add to x and then go to next cycle
|
||||
x += v;
|
||||
IncrementCycle();
|
||||
}
|
||||
hikingTrailsScores += hikingTrails.Count;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Sum of signal strengths: [yellow]{sum}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Sum of scores of hiking trails: [yellow]{hikingTrailsScores}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
void GetHikingTrailScore(Point position, int previousHeight)
|
||||
{
|
||||
// Out of bounds
|
||||
if (position is { X: < 0 or >= MapSize } or { Y: < 0 or >= MapSize })
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
var height = heightMap[position.X, position.Y];
|
||||
|
||||
if (height - previousHeight is not 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if (height == 9)
|
||||
{
|
||||
hikingTrails.Add(position);
|
||||
}
|
||||
|
||||
|
||||
GetHikingTrailScore(position + (1, 0), height);
|
||||
GetHikingTrailScore(position + (-1, 0), height);
|
||||
GetHikingTrailScore(position + (0, 1), height);
|
||||
GetHikingTrailScore(position + (0, -1), height);
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
// Setup the CRT
|
||||
const char litPixel = '#';
|
||||
const char darkPixel = '.';
|
||||
var (heightMap, trailHeads) = ParseMap();
|
||||
|
||||
const int rowCount = 6;
|
||||
const int columnCount = 40;
|
||||
var crt = new char[rowCount, columnCount];
|
||||
var crtCanvas = new Canvas(columnCount, rowCount);
|
||||
var totalRating = 0;
|
||||
|
||||
// Now cycle is the position where the CRT is drawing (need to offset by 1 in the grid)
|
||||
int cycle = 1;
|
||||
// x is the position of the sprite
|
||||
int x = 1;
|
||||
|
||||
// Draw first pixel
|
||||
crt[0, 0] = litPixel;
|
||||
crtCanvas.SetPixel(0, 0, Color.Red);
|
||||
|
||||
// Increment sum when needed
|
||||
void IncrementCycle()
|
||||
foreach (var trailHead in trailHeads)
|
||||
{
|
||||
cycle++;
|
||||
GetHikingTrailRating(trailHead, -1);
|
||||
}
|
||||
|
||||
// We're done drawing the crt
|
||||
if (cycle > 240)
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Total rating of hiking trails: [yellow]{totalRating}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
void GetHikingTrailRating(Point position, int previousHeight)
|
||||
{
|
||||
// Out of bounds
|
||||
if (position is { X: < 0 or >= MapSize } or { Y: < 0 or >= MapSize })
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw a white or black pixel
|
||||
int row = (cycle - 1) / columnCount;
|
||||
int column = (cycle - 1) % columnCount;
|
||||
var height = heightMap[position.X, position.Y];
|
||||
|
||||
// The CRT is drawing on the sprite
|
||||
if (column == x - 1 || column == x || column == x + 1)
|
||||
if (height - previousHeight is not 1)
|
||||
{
|
||||
crt[row, column] = litPixel;
|
||||
crtCanvas.SetPixel(column, row, (cycle + row) % 2 == 0 ? Color.Green : Color.Red);
|
||||
return;
|
||||
}
|
||||
else
|
||||
|
||||
if (height == 9)
|
||||
{
|
||||
crt[row, column] = darkPixel;
|
||||
crtCanvas.SetPixel(column, row, Color.Black);
|
||||
totalRating++;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
{
|
||||
// noop
|
||||
if (line == "noop")
|
||||
{
|
||||
// noop finished, go to next cycle
|
||||
IncrementCycle();
|
||||
}
|
||||
// addx
|
||||
else
|
||||
{
|
||||
var split = line.Split(' ');
|
||||
var v = int.Parse(split[1]);
|
||||
|
||||
// Prepare addx
|
||||
IncrementCycle();
|
||||
|
||||
// addx finished, add to x and then go to next cycle
|
||||
x += v;
|
||||
IncrementCycle();
|
||||
}
|
||||
}
|
||||
|
||||
// Print the CRT
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.Write(crtCanvas);
|
||||
GetHikingTrailRating(position + (1, 0), height);
|
||||
GetHikingTrailRating(position + (-1, 0), height);
|
||||
GetHikingTrailRating(position + (0, 1), height);
|
||||
GetHikingTrailRating(position + (0, -1), height);
|
||||
}
|
||||
}
|
||||
|
||||
#region Input
|
||||
private (byte[,] HeightMap, List<Point> TrailHeads) ParseMap()
|
||||
{
|
||||
var heightMap = new byte[MapSize, MapSize];
|
||||
var trailHeads = new List<Point>();
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
noop
|
||||
noop
|
||||
addx 15
|
||||
addx -10
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
addx 1
|
||||
addx 4
|
||||
addx -1
|
||||
addx 1
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx -1
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
addx 3
|
||||
addx -38
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
addx 26
|
||||
addx -21
|
||||
addx -2
|
||||
addx 5
|
||||
addx 2
|
||||
addx -14
|
||||
addx 15
|
||||
noop
|
||||
addx 7
|
||||
noop
|
||||
addx 2
|
||||
addx -22
|
||||
addx 23
|
||||
addx 2
|
||||
addx 5
|
||||
addx -40
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 2
|
||||
noop
|
||||
addx 24
|
||||
addx -19
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 5
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 7
|
||||
noop
|
||||
addx 3
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -38
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 2
|
||||
addx -1
|
||||
addx 2
|
||||
addx 30
|
||||
addx -23
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 3
|
||||
addx 5
|
||||
addx -11
|
||||
addx 12
|
||||
noop
|
||||
addx 6
|
||||
addx 1
|
||||
noop
|
||||
addx 4
|
||||
addx 3
|
||||
noop
|
||||
addx -40
|
||||
addx 4
|
||||
addx 28
|
||||
addx -27
|
||||
addx 5
|
||||
addx 2
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx 3
|
||||
noop
|
||||
addx 2
|
||||
addx -25
|
||||
addx 30
|
||||
noop
|
||||
addx 3
|
||||
addx -2
|
||||
addx 2
|
||||
addx 5
|
||||
addx -39
|
||||
addx 29
|
||||
addx -27
|
||||
addx 5
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 4
|
||||
noop
|
||||
addx 1
|
||||
addx 2
|
||||
addx 5
|
||||
addx 2
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
addx 5
|
||||
addx 1
|
||||
noop
|
||||
addx 2
|
||||
addx 5
|
||||
addx -32
|
||||
addx 34
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
noop
|
||||
""";
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var x = 0;
|
||||
foreach (var height in line)
|
||||
{
|
||||
var heightValue = height - '0';
|
||||
|
||||
#endregion
|
||||
if (heightValue is 0)
|
||||
{
|
||||
trailHeads.Add(new Point(x, y));
|
||||
}
|
||||
|
||||
heightMap[x, y] = (byte)heightValue;
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
return (heightMap, trailHeads);
|
||||
}
|
||||
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
}
|
||||
276
Days/Day11.cs
276
Days/Day11.cs
@@ -1,233 +1,127 @@
|
||||
using System.Collections.Immutable;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Monkey
|
||||
{
|
||||
public int Number { get; }
|
||||
public long InspectionCount { get; private set; }
|
||||
|
||||
private readonly Queue<long> _items;
|
||||
private readonly Func<long, long> _operation;
|
||||
private readonly long _testDivider;
|
||||
private readonly int _testFailMonkey;
|
||||
private readonly int _testSuccessMonkey;
|
||||
|
||||
public Monkey(int number, IEnumerable<long> items, Func<long, long> operation, long testDivider, int testFailMonkey, int testSuccessMonkey)
|
||||
{
|
||||
Number = number;
|
||||
_operation = operation;
|
||||
_testDivider = testDivider;
|
||||
_testFailMonkey = testFailMonkey;
|
||||
_testSuccessMonkey = testSuccessMonkey;
|
||||
|
||||
InspectionCount = 0;
|
||||
_items = new Queue<long>(items);
|
||||
}
|
||||
|
||||
public void AddItem(long item)
|
||||
{
|
||||
_items.Enqueue(item);
|
||||
}
|
||||
|
||||
public bool ThrowItem(IImmutableList<Monkey> monkeys, bool divideWorry = true)
|
||||
{
|
||||
// Return false if there's no item to throw
|
||||
if (_items.Count < 1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Increment inspection count
|
||||
InspectionCount++;
|
||||
|
||||
// Take next item to throw
|
||||
var item = _items.Dequeue();
|
||||
|
||||
// Apply the operation on worry level
|
||||
var newValue = _operation(item);
|
||||
|
||||
// Divide worry level by 3 before test
|
||||
if (divideWorry)
|
||||
{
|
||||
newValue = newValue / 3;
|
||||
}
|
||||
|
||||
// Even using this simplification, it's still needed to use longs because
|
||||
// they sometime overflow before being simplified in part 2
|
||||
newValue = newValue % (2*3*5*7*11*13*17*19);
|
||||
|
||||
// Test is a success
|
||||
if (newValue % _testDivider == 0)
|
||||
{
|
||||
monkeys[_testSuccessMonkey].AddItem(newValue);
|
||||
}
|
||||
// Test is a fail
|
||||
else
|
||||
{
|
||||
monkeys[_testFailMonkey].AddItem(newValue);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
public class Day11 : Day
|
||||
{
|
||||
public override int Number => 11;
|
||||
public override string Name => "Monkey in the Middle";
|
||||
public override string Name => "Plutonian Pebbles";
|
||||
|
||||
private const int BlinkIterations = 25;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
const int roundsCount = 20;
|
||||
var stones = ParseStones();
|
||||
|
||||
var monkeys = ParseMonkeys();
|
||||
|
||||
// Do 20 rounds
|
||||
for (int round = 0; round < roundsCount; round++)
|
||||
for (var iteration = 0; iteration < BlinkIterations; iteration++)
|
||||
{
|
||||
foreach (var monkey in monkeys)
|
||||
var index = 0;
|
||||
|
||||
while (index < stones.Count)
|
||||
{
|
||||
// Throw items while there's some
|
||||
while (monkey.ThrowItem(monkeys)) { }
|
||||
var stone = stones[index];
|
||||
var stoneString = stone.ToString();
|
||||
|
||||
if (stone is 0)
|
||||
{
|
||||
stones[index] = 1;
|
||||
}
|
||||
else if (stoneString.Length % 2 == 0)
|
||||
{
|
||||
var splitIndex = stoneString.Length / 2;
|
||||
|
||||
var leftStone = long.Parse(stoneString[..splitIndex]);
|
||||
var rightStone = long.Parse(stoneString[splitIndex..]);
|
||||
|
||||
stones[index] = leftStone;
|
||||
stones.Insert(index + 1, rightStone);
|
||||
|
||||
index++;
|
||||
}
|
||||
else
|
||||
{
|
||||
stones[index] = stone * 2024;
|
||||
}
|
||||
|
||||
index++;
|
||||
}
|
||||
}
|
||||
|
||||
var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Number of stones after blinking {BlinkIterations} times: [yellow]{stones.Count}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
const int roundsCount = 10_000;
|
||||
var stones = ParseStones().ToDictionary(s => s, _ => 1L);
|
||||
|
||||
var monkeys = ParseMonkeys();
|
||||
|
||||
// Do 10 000 rounds
|
||||
for (int round = 0; round < roundsCount; round++)
|
||||
for (var iteration = 0; iteration < (BlinkIterations * 3); iteration++)
|
||||
{
|
||||
foreach (var monkey in monkeys)
|
||||
var stonesToIterate = stones.ToList();
|
||||
|
||||
foreach (var (stone, count) in stonesToIterate)
|
||||
{
|
||||
// Throw items while there's some
|
||||
while (monkey.ThrowItem(monkeys, false)) { }
|
||||
var stoneString = stone.ToString();
|
||||
|
||||
if (stone is 0)
|
||||
{
|
||||
SafeAdd(stones, 1, count);
|
||||
}
|
||||
else if (stoneString.Length % 2 == 0)
|
||||
{
|
||||
var splitIndex = stoneString.Length / 2;
|
||||
|
||||
var leftStone = long.Parse(stoneString[..splitIndex]);
|
||||
var rightStone = long.Parse(stoneString[splitIndex..]);
|
||||
|
||||
SafeAdd(stones, leftStone, count);
|
||||
SafeAdd(stones, rightStone, count);
|
||||
}
|
||||
else
|
||||
{
|
||||
SafeAdd(stones, stone * 2024, count);
|
||||
|
||||
}
|
||||
|
||||
SafeAdd(stones, stone, -count);
|
||||
}
|
||||
}
|
||||
|
||||
var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
|
||||
var stonesCount = stones.Sum(p => p.Value);
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Number of stones after blinking {BlinkIterations} times: [yellow]{stonesCount}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private static IImmutableList<Monkey> ParseMonkeys()
|
||||
private List<long> ParseStones()
|
||||
{
|
||||
var monkeys = new List<Monkey>();
|
||||
var stones = new List<long>();
|
||||
|
||||
// Split by monkey description
|
||||
foreach (var monkey in Input.ReplaceLineEndings("\n").Split("\n\n"))
|
||||
var span = Input.AsSpan();
|
||||
|
||||
foreach (var stoneRange in span.Split(' '))
|
||||
{
|
||||
var split = monkey.Split('\n');
|
||||
var numberLine = split[0];
|
||||
var itemsLine = split[1];
|
||||
var operationLine = split[2];
|
||||
var testDividerLine = split[3];
|
||||
var testSuccessLine = split[4];
|
||||
var testFailLine = split[5];
|
||||
|
||||
// Monkey attributes
|
||||
var number = int.Parse(numberLine[numberLine.LastIndexOf(' ')..^1]);
|
||||
var items = itemsLine[(itemsLine.IndexOf(':') + 2)..].Split(", ").Select(long.Parse);
|
||||
|
||||
// Read operation
|
||||
operationLine = operationLine[(operationLine.IndexOf('=') + 2)..];
|
||||
long? rightOperand = operationLine.EndsWith("old") ? null : long.Parse(operationLine.Split('+', '*')[1].Trim());
|
||||
|
||||
Func<long, long> operation = operationLine.Contains('+') switch
|
||||
{
|
||||
true => rightOperand is null
|
||||
? old => old + old
|
||||
: old => old + (int)rightOperand,
|
||||
false => rightOperand is null
|
||||
? old => old * old
|
||||
: old => old * (int)rightOperand
|
||||
};
|
||||
|
||||
var testDivider = long.Parse(testDividerLine[testDividerLine.LastIndexOf(' ')..]);
|
||||
var testSuccessMonkey = int.Parse(testSuccessLine[testSuccessLine.LastIndexOf(' ')..]);
|
||||
var testFailMonkey = int.Parse(testFailLine[testFailLine.LastIndexOf(' ')..]);
|
||||
|
||||
monkeys.Add(new Monkey(number, items, operation, testDivider, testFailMonkey, testSuccessMonkey));
|
||||
stones.Add(long.Parse(span[stoneRange]));
|
||||
}
|
||||
|
||||
return monkeys.ToImmutableList();
|
||||
return stones;
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
Monkey 0:
|
||||
Starting items: 89, 95, 92, 64, 87, 68
|
||||
Operation: new = old * 11
|
||||
Test: divisible by 2
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 4
|
||||
|
||||
Monkey 1:
|
||||
Starting items: 87, 67
|
||||
Operation: new = old + 1
|
||||
Test: divisible by 13
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 2:
|
||||
Starting items: 95, 79, 92, 82, 60
|
||||
Operation: new = old + 6
|
||||
Test: divisible by 3
|
||||
If true: throw to monkey 1
|
||||
If false: throw to monkey 6
|
||||
|
||||
Monkey 3:
|
||||
Starting items: 67, 97, 56
|
||||
Operation: new = old * old
|
||||
Test: divisible by 17
|
||||
If true: throw to monkey 7
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 4:
|
||||
Starting items: 80, 68, 87, 94, 61, 59, 50, 68
|
||||
Operation: new = old * 7
|
||||
Test: divisible by 19
|
||||
If true: throw to monkey 5
|
||||
If false: throw to monkey 2
|
||||
|
||||
Monkey 5:
|
||||
Starting items: 73, 51, 76, 59
|
||||
Operation: new = old + 8
|
||||
Test: divisible by 7
|
||||
If true: throw to monkey 2
|
||||
If false: throw to monkey 1
|
||||
|
||||
Monkey 6:
|
||||
Starting items: 92
|
||||
Operation: new = old + 5
|
||||
Test: divisible by 11
|
||||
If true: throw to monkey 3
|
||||
If false: throw to monkey 0
|
||||
|
||||
Monkey 7:
|
||||
Starting items: 99, 76, 78, 76, 79, 90, 89
|
||||
Operation: new = old + 7
|
||||
Test: divisible by 5
|
||||
If true: throw to monkey 4
|
||||
If false: throw to monkey 5
|
||||
""";
|
||||
|
||||
#endregion
|
||||
private void SafeAdd(Dictionary<long, long> dictionary, long key, long valueToAdd)
|
||||
{
|
||||
if (dictionary.TryGetValue(key, out var currentValue))
|
||||
{
|
||||
dictionary[key] = currentValue + valueToAdd;
|
||||
}
|
||||
else
|
||||
{
|
||||
dictionary[key] = valueToAdd;
|
||||
}
|
||||
}
|
||||
}
|
||||
386
Days/Day12.cs
386
Days/Day12.cs
@@ -1,3 +1,5 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
@@ -5,329 +7,149 @@ namespace AdventOfCode.Days;
|
||||
public class Day12 : Day
|
||||
{
|
||||
public override int Number => 12;
|
||||
public override string Name => "Hill Climbing Algorithm";
|
||||
public override string Name => "Garden Groups";
|
||||
|
||||
public const int EndElevation = 25;
|
||||
|
||||
// Color map of elevation: blue -> green -> yellow -> orange -> red
|
||||
private readonly Color[] _colorMap =
|
||||
{
|
||||
Color.Blue1,
|
||||
Color.DodgerBlue1,
|
||||
Color.DeepSkyBlue1,
|
||||
Color.Turquoise2,
|
||||
Color.Cyan1,
|
||||
Color.Cyan2,
|
||||
Color.MediumSpringGreen,
|
||||
Color.SpringGreen1,
|
||||
Color.SpringGreen2_1,
|
||||
Color.Green1,
|
||||
Color.DarkOliveGreen2,
|
||||
Color.GreenYellow,
|
||||
Color.DarkOliveGreen1,
|
||||
Color.Yellow2,
|
||||
Color.Khaki1,
|
||||
Color.Yellow1,
|
||||
Color.NavajoWhite1,
|
||||
Color.LightGoldenrod2_1,
|
||||
Color.Gold1,
|
||||
Color.SandyBrown,
|
||||
Color.Orange1,
|
||||
Color.DarkOrange,
|
||||
Color.OrangeRed1,
|
||||
Color.IndianRed1,
|
||||
Color.HotPink,
|
||||
Color.MediumOrchid1_1
|
||||
};
|
||||
|
||||
private (int x, int y) _end;
|
||||
private (int x, int y) _start;
|
||||
private const int GridSize = 140;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var map = ParseMap();
|
||||
var canvas = DrawMap(map);
|
||||
var areas = ParseAreas();
|
||||
|
||||
// Test all possible solutions
|
||||
var minimumPathLength = ExplorePath(map);
|
||||
var visited = new HashSet<Point>();
|
||||
var totalPrice = 0;
|
||||
|
||||
// Draw solution path
|
||||
foreach (var (x, y) in minimumPathLength.path)
|
||||
var currentArea = 0;
|
||||
var currentPerimeter = 0;
|
||||
|
||||
for (var y = 0; y < GridSize; y++)
|
||||
{
|
||||
canvas.SetPixel(x, y, Color.White);
|
||||
for (var x = 0; x < GridSize; x++)
|
||||
{
|
||||
// Skip already visited points
|
||||
if (visited.Contains(new Point(x, y)))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var id = areas[x, y];
|
||||
|
||||
ComputeAreaPrice(new Point(x, y), id, ref currentArea, ref currentPerimeter);
|
||||
|
||||
// Add price of fencing this area
|
||||
totalPrice += currentArea * currentPerimeter;
|
||||
|
||||
currentArea = 0;
|
||||
currentPerimeter = 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.Write(canvas);
|
||||
AnsiConsole.WriteLine();
|
||||
AnsiConsole.MarkupLine($"[green]Total pricing: [yellow]{totalPrice}[/][/]");
|
||||
}
|
||||
|
||||
AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
|
||||
return;
|
||||
|
||||
void ComputeAreaPrice(Point position, byte id, ref int area, ref int perimeter)
|
||||
{
|
||||
if (!visited.Add(position))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Update area and perimeter
|
||||
area++;
|
||||
perimeter += 4;
|
||||
|
||||
var left = position with { X = position.X - 1 };
|
||||
var right = position with { X = position.X + 1 };
|
||||
var up = position with { Y = position.Y - 1 };
|
||||
var down = position with { Y = position.Y + 1 };
|
||||
|
||||
if (left is { X: >= 0 and < GridSize } && areas[left.X, left.Y] == id)
|
||||
{
|
||||
perimeter--;
|
||||
|
||||
ComputeAreaPrice(left, id, ref area, ref perimeter);
|
||||
}
|
||||
|
||||
if (right is { X: >= 0 and < GridSize } && areas[right.X, right.Y] == id)
|
||||
{
|
||||
perimeter--;
|
||||
|
||||
ComputeAreaPrice(right, id, ref area, ref perimeter);
|
||||
}
|
||||
|
||||
if (up is { Y: >= 0 and < GridSize } && areas[up.X, up.Y] == id)
|
||||
{
|
||||
perimeter--;
|
||||
|
||||
ComputeAreaPrice(up, id, ref area, ref perimeter);
|
||||
}
|
||||
|
||||
if (down is { Y: >= 0 and < GridSize } && areas[down.X, down.Y] == id)
|
||||
{
|
||||
perimeter--;
|
||||
|
||||
ComputeAreaPrice(down, id, ref area, ref perimeter);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var map = ParseMap();
|
||||
var canvas = DrawMap(map);
|
||||
|
||||
// Test all possible solutions
|
||||
var minimumPathLength = FindNearestStart(map);
|
||||
|
||||
// Draw solution path
|
||||
foreach (var (x, y) in minimumPathLength.path)
|
||||
{
|
||||
canvas.SetPixel(x, y, Color.White);
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.Write(canvas);
|
||||
AnsiConsole.WriteLine();
|
||||
|
||||
AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private (int length, List<(int x, int y)> path) ExplorePath(byte[,] map)
|
||||
private byte[,] ParseAreas()
|
||||
{
|
||||
var height = map.GetLength(0);
|
||||
var width = map.GetLength(1);
|
||||
var areas = new byte[GridSize, GridSize];
|
||||
|
||||
// Store seen positions with number of steps to reach this position
|
||||
var exploredPositions = new Dictionary<(int x, int y), int>();
|
||||
var toExplore = new Queue<(int x, int y, int elevation, int steps, List<(int x, int y)> path)>();
|
||||
var pathLengths = new List<(int length, List<(int x, int y)> path)>();
|
||||
int y = 0;
|
||||
|
||||
toExplore.Enqueue((_start.x, _start.y, 0, 0, new()));
|
||||
|
||||
// Explore all possible path
|
||||
while (toExplore.Count > 0)
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var (x, y, previousElevation, steps, path) = toExplore.Dequeue();
|
||||
int x = 0;
|
||||
|
||||
// If we went out of bound
|
||||
if (x < 0 || x >= width || y < 0 || y >= height)
|
||||
foreach (var area in line)
|
||||
{
|
||||
continue;
|
||||
areas[x, y] = (byte)(area - 'A');
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
// If new elevation is too high
|
||||
var newElevation = map[y, x];
|
||||
if (newElevation - previousElevation > 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If new path is not better than old path, just skip
|
||||
if (exploredPositions.TryGetValue((x, y), out var oldSteps))
|
||||
{
|
||||
if (oldSteps <= steps)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Mark this position as explored and store required number of steps to reach it
|
||||
exploredPositions[(x, y)] = steps;
|
||||
|
||||
// Update path
|
||||
var newPath = new List<(int x, int y)>(path) { (x, y) };
|
||||
|
||||
// If we found the end, note that we could end the search here since it's a bfs, there can't be
|
||||
// any shorter path to this point
|
||||
if ((x, y) == _end)
|
||||
{
|
||||
pathLengths.Add((steps, newPath));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var nextPositions = new (int x, int y)[]
|
||||
{
|
||||
(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
|
||||
};
|
||||
|
||||
foreach (var nextPosition in nextPositions)
|
||||
{
|
||||
toExplore.Enqueue((nextPosition.x, nextPosition.y, newElevation, steps + 1, newPath));
|
||||
}
|
||||
y++;
|
||||
}
|
||||
|
||||
return pathLengths.MinBy(p => p.length);
|
||||
return areas;
|
||||
}
|
||||
|
||||
private (int length, List<(int x, int y)> path) FindNearestStart(byte[,] map)
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
var height = map.GetLength(0);
|
||||
var width = map.GetLength(1);
|
||||
|
||||
// Store seen positions with number of steps to reach this position
|
||||
var exploredPositions = new Dictionary<(int x, int y), int>();
|
||||
var toExplore = new Queue<(int x, int y, int elevation, int steps, List<(int x, int y)> path)>();
|
||||
var pathLengths = new List<(int length, List<(int x, int y)> path)>();
|
||||
|
||||
toExplore.Enqueue((_end.x, _end.y, EndElevation, 0, new()));
|
||||
|
||||
// Explore all possible path
|
||||
while (toExplore.Count > 0)
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
var (x, y, previousElevation, steps, path) = toExplore.Dequeue();
|
||||
|
||||
// If we went out of bound
|
||||
if (x < 0 || x >= width || y < 0 || y >= height)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If new elevation is too low, skip
|
||||
var newElevation = map[y, x];
|
||||
if (previousElevation - newElevation > 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// If new path is not better than old path, just skip
|
||||
if (exploredPositions.TryGetValue((x, y), out var oldSteps))
|
||||
{
|
||||
if (oldSteps <= steps)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// Mark this position as explored and store required number of steps to reach it
|
||||
exploredPositions[(x, y)] = steps;
|
||||
|
||||
// Update path
|
||||
var newPath = new List<(int x, int y)>(path) { (x, y) };
|
||||
|
||||
// If we found a possible start, same as in the 1st part, we could stop here
|
||||
if (newElevation == 0)
|
||||
{
|
||||
pathLengths.Add((steps, newPath));
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var nextPositions = new (int x, int y)[]
|
||||
{
|
||||
(x + 1, y), (x - 1, y), (x, y + 1), (x, y - 1)
|
||||
};
|
||||
|
||||
foreach (var nextPosition in nextPositions)
|
||||
{
|
||||
toExplore.Enqueue((nextPosition.x, nextPosition.y, newElevation, steps + 1, newPath));
|
||||
}
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
return pathLengths.MinBy(p => p.length);
|
||||
}
|
||||
|
||||
private byte[,] ParseMap()
|
||||
{
|
||||
var lines = Input.ReadAllLines().ToArray();
|
||||
var lineCount = lines.Length;
|
||||
var columnCount = lines[0].Length;
|
||||
|
||||
var map = new byte[lineCount, columnCount];
|
||||
|
||||
for (int i = 0; i < lineCount; i++)
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
var line = lines[i];
|
||||
|
||||
for (int j = 0; j < columnCount; j++)
|
||||
{
|
||||
var elevation = line[j];
|
||||
|
||||
map[i, j] = elevation switch
|
||||
{
|
||||
'S' => 0,
|
||||
'E' => EndElevation,
|
||||
_ => (byte) (elevation - 'a')
|
||||
};
|
||||
|
||||
// Store the end
|
||||
if (elevation == 'E')
|
||||
{
|
||||
_end = (j, i);
|
||||
}
|
||||
|
||||
// Store the start
|
||||
if (elevation == 'S')
|
||||
{
|
||||
_start = (j, i);
|
||||
}
|
||||
}
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private Canvas DrawMap(byte[,] map)
|
||||
{
|
||||
var height = map.GetLength(0);
|
||||
var width = map.GetLength(1);
|
||||
|
||||
var canvas = new Canvas(width, height);
|
||||
|
||||
for (int x = 0; x < width; x++)
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
canvas.SetPixel(x, y, _colorMap[map[y, x]]);
|
||||
}
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
return canvas;
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
abccccccaaccaaccccaaaaacccccaaaaccccccccccccccccccccccccccccccccaaaaaaaaaaaaaaaaaaaccccccccccccccccaaaccccccccccccaacccccccccccccccccccccccccccccccccccccccccaaaa
|
||||
abaaaaccaaaaaccccaaaaaccccccaaaaccccccccccccccccccccaaacccccccccccaaaaaaaaaaaaaaaaaaccccccccccccccccaaaaccccccaaacaaccccccccccccccccccccccccccccccccccccccccaaaaa
|
||||
abaaacccaaaaaaaacaaaaaacccccaaaaccccccccccccccccccccaaaaacccccccccaaaaaaaaaaaaaaaaacccccccccaaccccaaaaaacccccccaaaaaccccaaccccccccccccccacccccccccccccccccccaaaaa
|
||||
abaaacccccaaaaaccccaaaaccccccaaacccccccccccccccccccaaaaaccccccccccaaaaaacacaaaaaacccccccccccaaccccaaaaacccccccccaaaaaaccaaaaaaccccccccccaaaccccacccccccccccaaaaaa
|
||||
abaacccccaaaaaccccaacccccccccccccccaaaaacccccccccccaaaaacccccccccaaaaaaaaccaaaaaaacccccccaaaaaaaaccaaaaacccccccaaaaaaaccaaaaacccccccccccaaacccaaaccccccccccccccaa
|
||||
abaaacccaaacaacccccccccccccccccccccaaaaaccccccccccccaaaaacccccccaaaaaaaaaccaaccaaacccccccaaaaaaaaccaacccccccccaaaaaaccaaaaaaccccccccccccaaaacaaaaccccccccccccccaa
|
||||
abaaacccccccaaccccccccccccccccccccaaaaaaccccccccccccaaccccccaacccaaaccaaaaccccccaacccccccccaaaacccccccccccccccaacaaaccaaaaaaaccccccccccccajjjjjjjcccccccccccccccc
|
||||
abcaacccccccccccccccccccccccccccccaaaaaaccccccccccccccccccccaaaaccccccaaaaccccccccccccccaacaaaaaccccccccccccccccccaaccccaaaaaacccccccccccjjjjjjjjjcccccaaaccccccc
|
||||
abccccccccccccccccccccccccccccccccaaaaaaccaaccccccccccccccaaaaaacccccccaaacccccccccccaacaaaaaaaaccccccccccccccccccccccccaaccaaccccccccaiijjjjojjjjcccccaaacaccccc
|
||||
abcccccccccccccccccccccccaaacccccccaaacacaaacccccccccccccccaaaaccccaaccccccccccccccccaaaaaaacccaccccccccccccccccccccccccaacccccccccccaiiijjooooojjkccaaaaaaaacccc
|
||||
abccccccccccccccccccccccaaaaccccccccccaaaaaccccccccccccccccaaaaacccaaaaaccccccccccccccaaaaaacccccccccccccccccccccccccccccccccccccciiiiiiiioooooookkkcaaaaaaaacccc
|
||||
abccccccccccccccccccccccaaaaccccccccccaaaaaaaacccccccccccccaacaaccaaaaacccccccaaacccaaaaaaaaccccccccccccccccccccccccccccccccccchiiiiiiiiooooouoookkkccaaaaaaccccc
|
||||
abcccccccccaaccccccccccccaaaccccccccccccaaaaacccccccccccccccccccccaaaaaccccccaaaacccaaaaacaacccccccccccccaacaacccccccccccccccchhhiiiinnnooouuuuoookkkccaaaaaccccc
|
||||
abcccccccccaaacccccccccccccccccccccccccaaaaacccccccccccccccccccccccaaaaacccccaaaaccccccaaccccccccccccccccaaaaacccccccccccccccchhhnnnnnnnnouuuuuuppkkkkaaaaaaccccc
|
||||
abccccccaaaaaaaacccaaccccccccccccccccccaacaaccaacaaccccccccccccccccaacccccccccaaaccccccaacccccccccccccccaaaaacccccccccccccccchhhnnnnnnnnntuuxuuupppkkkkkacccccccc
|
||||
abccccccaaaaaaaacacaaaacccccccccccccccccccaaccaaaaacccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccaacccccchhhnnnnttttttuxxxuuppppkkkkkcccccccc
|
||||
abcccccccaaaaaaccaaaaaaccccccccccaaccccccccccaaaaaccccccccccccccccccccccccaaacccccccccccccccccccccccccccccaaaaccaaccaaacccaaahhhnnntttttttuxxxxuupppppllllccccccc
|
||||
abcccccccaaaaaacccaaaacccccccccaaaaaaccccccccaaaaaacccccccccccccccccccccccaaacccccccccccccccccccccccccccccacccccaaaaaaacaaaaahhhppntttxxxxxxxxuuuuvpppplllccccccc
|
||||
abcccccccaaaaaacccaaaacccccccccaaaaaacccccaaaaaaaaaccccccccccccccccccccaaaaaaaacccccccccccccccccccccaaaccccccaacaaaaaaccaaaaahhhpppttxxxxxxxxyuuvvvvvppplllcccccc
|
||||
abcccccccaaccaacccaacaccaaaaccccaaaaacccccaaaaaaaaaccccccccccccccccccccaaaaaaaacccccccccccccccccccccaaacaaaaaaaccaaaaaaaaaaaaahhppptttxxxxxxyyyyyyvvvppplllcccccc
|
||||
SbccccccccccccccccccccccaaaacccaaaaacccccccaaaaaaaaacaaaccccccccaacccccccaaaaaccccccccaaaaacccccccccaaaaaaaaaaaaaaaaaaaaaaaaacgggpppttxxxxEzzyyyyyvvvqqqlllcccccc
|
||||
abccccccccccccccccccccccaaaacccaaaaacccccccaaaaaaaaccaaaccccccccaaacaaccaaaaaaccccccccaaaaacccccccaaaaaaaaaaaaaaaaaaaaaaaaaaacgggpppsssxxxyyyyyyvvvvvqqlllccccccc
|
||||
abcccaaaccccccccccccccccaaaccccccccccccccccaaaaaaaaaaaaaccccccccaaaaaaccaaaaaacccccccaaaaaacccaaaccaaaaaccaaaaaaaaaaaacccccccccgggppssswwyyyyyyvvvvqqqqlllccccccc
|
||||
abcaaaaaccccccccccccccccccccccccccccccccccaaaaaaaaaaaaacccccccaaaaaaacccaccaaacccccccaaaaaacccaaacccaaaaaaaaaaaccccaaacccaaaaacgggppsswwwyyyyyyvvqqqqqlllcccccccc
|
||||
abcaaaaaaccccccccccccccccccccccccccccccccccaaccaaaaaaaaaaaccccaaaaaaacccccccccccccccccaaaaacccaaacaaaacaaaaaaaaccccaaacccaaaaacggpppsswwwywwyyyvvqqqmmmlccccccccc
|
||||
abcaaaaaacccccccaacaaccccccccccccccccccccccccccaaaaaaaaaaaccccccaaaaacccccccccccccccccaaaccaaaaaaaaaaacccccccaacccccccccaaaaaacggpppsswwwwwwwwyvvqqqmmmcccccccccc
|
||||
abcaaaaaccccccccaaaaaccccccccccccccccccccccccccccaaaaaaaacccccccaacaaacccccccccccccccccccccaaaaaaaaaccccccccccccccccccccaaaaaagggoossswwwwrrwwwvvqqmmmccccccccccc
|
||||
abcaaaaacccccccaaaaaccccccccccccccccccccccccccccaaaaaaacccccccccaaccccccccccccccccccccccccccaaaaaaacccccccccccaaaccccccccaaaaagggooosssssrrrrwwwvqqmmmcccaacccccc
|
||||
abcccccccccccccaaaaaaccccccccccccccccccccaacccccccccaaaccccccccccccccccccccccccccccccccccccccaaaaaaccccccccccccaaaaccccccaaaccgggooosssssrrrrrwwrrqmmmcccaacccccc
|
||||
abcccccccccccccccaaaacccccccccccccccccccaaaacccccccacaaacccccccccccccccccccccccccccccccccccccaaaaaaacccccccccaaaaaacccccccccccgffoooooosoonrrrrrrrrmmmccaaaaacccc
|
||||
abcccccccccccccccaccccccccccccccccccccccaaaacccccccaaaaacccccccccccccccccccccccccccccccccccccaaacaaacccccccccaaaaacccccccccccccfffoooooooonnnrrrrrmmmddcaaaaacccc
|
||||
abccccccccccccccccccccccccccccccccccccccaaaaccccccccaaaaacccccccccccccccccccccccccaaaccccccccaacccccccccccccccaaaaaccccccccccccffffoooooonnnnnnrnnmmmdddaaaaacccc
|
||||
abcccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccccccccccccccaaaaaccaaaacccccccccccccccccccccccccaacccccccccccccccfffffffffeeeennnnnnmmdddaaaacccccc
|
||||
abcccccccaaaccccccccaccccccccccccccccccccccccccccccaaaaccccccccccccaaaccccaaaaaccaaaaccccccccccccccccccccccccccccccccccccccccccccfffffffeeeeennnnnmddddaaaaaccccc
|
||||
abcccaaccaaacccccaaaacccccaacccccccccccccccccccccccccaaacccccccccccaaacccaaaaaacccaaaccccccccccccccccccccccccccccccccccccccccccccccffffeeeeeeeedddddddcccaacccccc
|
||||
abcccaaaaaaacccccaaaaaaccaaacccccccccccccccccccccccccccacccccccccccaaaaccaaaaaaccccccccccccccccccccccccccaacccccccccaaaccccccccccccccaaaaaaeeeeedddddcccccccccccc
|
||||
abcccaaaaaacccccccaaaacccaaacaaaccccaaaacccccccccaaacaaaccccccaacccaaaacaaaaaaacccccccccccccccccccccccccaaaccccccccaaaacccccccccccccccccccaaaaeeddddccccccccccccc
|
||||
abccccaaaaaaaacccaaaaaaaaaaaaaaaccccaaaacccccccccaaaaaaacccccaaacccaaaaaaaaaacccccccccccccccccccccccaaacaaaccccccccaaaaccccccccccccccccccccaaaccccccccccccccaaaca
|
||||
abcccaaaaaaaaacccaacaaaaaaaaaaacccccaaaaccccccccccaaaaaacaaacaaacaaaaaaaaaacccccccccccccccaaacccccccaaaaaaaaaaccccccaaaccccccccccccccccccccaacccccccccccccccaaaaa
|
||||
abcccaaaaaaaacccccccccccaaaaaacccccccaacccccccccccaaaaaaaaaaaaaaaaaaaaaaaaccccccccccccccccaaaacccccccaaaaaaaaacccccccccccccccccccccccccccccaaacccccccccccccccaaaa
|
||||
abccaaaaaaacccccccccccccaaaaaaacccccccccccccccccaaaaaaaaaaaaaaaaaaaaaaaaaaacccccccccccccccaaaacccccccaaaaaaaacccccccccccccccccccccccccccccccccccccccccccccccaaaaa
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
760
Days/Day13.cs
760
Days/Day13.cs
@@ -1,731 +1,87 @@
|
||||
using Spectre.Console;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public abstract class PacketElement : IEquatable<PacketElement>, IComparable<PacketElement>
|
||||
{
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj)) return false;
|
||||
if (ReferenceEquals(this, obj)) return true;
|
||||
return obj.GetType() == GetType() && Equals((PacketElement) obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
||||
public static bool operator ==(PacketElement left, PacketElement right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
public static bool operator !=(PacketElement left, PacketElement right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
public static bool operator <(PacketElement left, PacketElement right)
|
||||
{
|
||||
return left.CompareTo(right) < 0;
|
||||
}
|
||||
|
||||
|
||||
public static bool operator >(PacketElement left, PacketElement right)
|
||||
{
|
||||
return left.CompareTo(right) > 0;
|
||||
}
|
||||
|
||||
public bool Equals(PacketElement? other)
|
||||
{
|
||||
return other is not null && (this, other) switch
|
||||
{
|
||||
(IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value == rightInteger.Value,
|
||||
(ListElement leftList, IntegerElement rightInteger) => leftList.Elements is [var x] && x == rightInteger,
|
||||
(IntegerElement leftInteger, ListElement rightList) => rightList.Elements is [var x] && x == leftInteger,
|
||||
(ListElement leftList, ListElement rightList) => leftList == rightList,
|
||||
_ => throw new ArgumentException("Can only compare lists and integers")
|
||||
};
|
||||
}
|
||||
|
||||
public int CompareTo(PacketElement? other)
|
||||
{
|
||||
return (this, other) switch
|
||||
{
|
||||
(IntegerElement leftInteger, IntegerElement rightInteger) => leftInteger.Value.CompareTo(rightInteger.Value),
|
||||
(ListElement leftList, IntegerElement rightInteger) => leftList.CompareTo(new ListElement(new PacketElement[] { rightInteger })),
|
||||
(IntegerElement leftInteger, ListElement rightList) => -rightList.CompareTo(new ListElement(new PacketElement[] { leftInteger })),
|
||||
(ListElement leftList, ListElement rightList) => leftList.CompareTo(rightList),
|
||||
_ => throw new ArgumentException("Can only compare lists and integers")
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
public class ListElement : PacketElement, IEquatable<ListElement>, IComparable<ListElement>
|
||||
{
|
||||
public override bool Equals(object? obj)
|
||||
{
|
||||
if (ReferenceEquals(null, obj)) return false;
|
||||
if (ReferenceEquals(this, obj)) return true;
|
||||
return obj.GetType() == GetType() && Equals((ListElement) obj);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return HashCode.Combine(base.GetHashCode(), Elements);
|
||||
}
|
||||
|
||||
public IList<PacketElement> Elements { get; }
|
||||
public int Count => Elements.Count;
|
||||
|
||||
public ListElement(IList<PacketElement> elements)
|
||||
{
|
||||
Elements = elements;
|
||||
}
|
||||
|
||||
public static bool operator ==(ListElement left, ListElement right)
|
||||
{
|
||||
return left.Equals(right);
|
||||
}
|
||||
|
||||
public static bool operator !=(ListElement left, ListElement right)
|
||||
{
|
||||
return !(left == right);
|
||||
}
|
||||
|
||||
public static bool operator <(ListElement left, ListElement right)
|
||||
{
|
||||
return left.CompareTo(right) < 0;
|
||||
}
|
||||
|
||||
public static bool operator >(ListElement left, ListElement right)
|
||||
{
|
||||
return left.CompareTo(right) > 0;
|
||||
}
|
||||
|
||||
public bool Equals(ListElement? other)
|
||||
{
|
||||
return other is not null && Count == other.Count && Elements.Zip(other.Elements).All(t => t.First == t.Second);
|
||||
}
|
||||
|
||||
public int CompareTo(ListElement? other)
|
||||
{
|
||||
if (other is null)
|
||||
{
|
||||
throw new ArgumentException("Other can't be null");
|
||||
}
|
||||
|
||||
// Compare elements by elements
|
||||
for (int i = 0; i < other.Count; i++)
|
||||
{
|
||||
// If there's no element in this list anymore, it's that it's lower
|
||||
if (i >= Count)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
// If the two next values aren't equal, return the result, else continue
|
||||
var compare = Elements[i].CompareTo(other.Elements[i]);
|
||||
|
||||
if (compare != 0)
|
||||
{
|
||||
return compare;
|
||||
}
|
||||
}
|
||||
|
||||
// If there's still more elements in this list, it means that it's bigger, else they are equal
|
||||
return other.Count != Count ? 1 : 0;
|
||||
}
|
||||
}
|
||||
|
||||
public class IntegerElement : PacketElement
|
||||
{
|
||||
public int Value { get; }
|
||||
|
||||
public IntegerElement(int value)
|
||||
{
|
||||
Value = value;
|
||||
}
|
||||
}
|
||||
|
||||
public class Day13 : Day
|
||||
{
|
||||
public override int Number => 13;
|
||||
public override string Name => "Distress Signal";
|
||||
public override string Name => "Claw Contraption";
|
||||
|
||||
private const int MaxButtonPress = 100;
|
||||
private const int ButtonACost = 3;
|
||||
private const int ButtonBCost = 1;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var pairs = ParsePacketPairs();
|
||||
var lines = Input.AsSpan().EnumerateLines();
|
||||
|
||||
var sum = 0;
|
||||
var minimumTokensToWin = 0;
|
||||
|
||||
for (int i = 0; i < pairs.Count; i++)
|
||||
while (lines.MoveNext())
|
||||
{
|
||||
var pair = pairs[i];
|
||||
var (aX, aY, bX, bY, goalX, goalY) = ParseMachine(ref lines);
|
||||
|
||||
if (pair.left < pair.right)
|
||||
for (var i = MaxButtonPress; i >= 0; i--)
|
||||
{
|
||||
sum += i + 1;
|
||||
var xOffset = bX * i;
|
||||
|
||||
if (xOffset > goalX)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ((goalX - xOffset) % aX != 0)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var timesAPressed = (goalX - xOffset) / aX;
|
||||
|
||||
if (bY * i + aY * timesAPressed != goalY)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
minimumTokensToWin += i * ButtonBCost + timesAPressed * ButtonACost;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Minimum tokens to win all prizes: [yellow]{minimumTokensToWin}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var packets = ParsePackets();
|
||||
|
||||
// Add divider packets
|
||||
var firstDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(2) }) });
|
||||
var lastDivider = new ListElement(new PacketElement[] { new ListElement(new PacketElement[] { new IntegerElement(6) }) });
|
||||
packets.Add(firstDivider);
|
||||
packets.Add(lastDivider);
|
||||
|
||||
var orderedPackets = packets.Order().ToList();
|
||||
|
||||
var firstDividerIndex = orderedPackets.IndexOf(firstDivider) + 1;
|
||||
var lastDividerIndex = orderedPackets.IndexOf(lastDivider) + 1;
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Decoder key is: [yellow]{firstDividerIndex * lastDividerIndex}[/][/]");
|
||||
}
|
||||
}
|
||||
private static PacketElement ReadElement(ref ReadOnlySpan<char> packet)
|
||||
|
||||
private (int aX, int aY, int bX, int bY, int goalX, int goalY) ParseMachine(ref SpanLineEnumerator lines)
|
||||
{
|
||||
// This is an integer
|
||||
if (packet[0] != '[')
|
||||
{
|
||||
return ReadInteger(ref packet);
|
||||
}
|
||||
var lineA = lines.Current;
|
||||
lines.MoveNext();
|
||||
|
||||
// This is a list packet
|
||||
return ReadList(ref packet);
|
||||
var lineB = lines.Current;
|
||||
lines.MoveNext();
|
||||
|
||||
var lineGoal = lines.Current;
|
||||
lines.MoveNext();
|
||||
|
||||
return (
|
||||
int.Parse(lineA[(lineA.IndexOf('+') + 1)..lineA.IndexOf(',')]),
|
||||
int.Parse(lineA[(lineA.LastIndexOf('+') + 1)..]),
|
||||
|
||||
int.Parse(lineB[(lineB.IndexOf('+') + 1)..lineB.IndexOf(',')]),
|
||||
int.Parse(lineB[(lineB.LastIndexOf('+') + 1)..]),
|
||||
|
||||
int.Parse(lineGoal[(lineGoal.IndexOf('=') + 1)..lineGoal.IndexOf(',')]),
|
||||
int.Parse(lineGoal[(lineGoal.LastIndexOf('=') + 1)..])
|
||||
);
|
||||
}
|
||||
|
||||
private static ListElement ReadList(ref ReadOnlySpan<char> packet)
|
||||
{
|
||||
var list = new List<PacketElement>();
|
||||
|
||||
while (packet[0] != ']')
|
||||
{
|
||||
// Skip delimiter
|
||||
packet = packet[1..];
|
||||
|
||||
// If it's an empty list
|
||||
if (packet[0] == ']')
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
list.Add(ReadElement(ref packet));
|
||||
}
|
||||
|
||||
// Skip closing bracket
|
||||
packet = packet[1..];
|
||||
|
||||
return new ListElement(list);
|
||||
}
|
||||
|
||||
private static IntegerElement ReadInteger(ref ReadOnlySpan<char> packet)
|
||||
{
|
||||
var intEnd = packet.IndexOfAny(',', ']');
|
||||
var element = new IntegerElement(int.Parse(packet[..intEnd]));
|
||||
|
||||
packet = packet[intEnd..];
|
||||
|
||||
return element;
|
||||
}
|
||||
|
||||
private static IList<(PacketElement left, PacketElement right)> ParsePacketPairs()
|
||||
{
|
||||
|
||||
var pairs = new List<(PacketElement, PacketElement)>();
|
||||
foreach (var pair in Input.ReplaceLineEndings("\n").Split("\n\n"))
|
||||
{
|
||||
var split = pair.Split('\n');
|
||||
|
||||
var leftSpan = split[0].AsSpan();
|
||||
var rightSpan = split[1].AsSpan();
|
||||
|
||||
pairs.Add((ReadElement(ref leftSpan), ReadElement(ref rightSpan)));
|
||||
}
|
||||
|
||||
return pairs;
|
||||
}
|
||||
|
||||
private static IList<PacketElement> ParsePackets()
|
||||
{
|
||||
var packets = new List<PacketElement>();
|
||||
|
||||
foreach (var packet in Input.ReadAllLines().Where(l => !string.IsNullOrWhiteSpace(l)))
|
||||
{
|
||||
var packetSpan = packet.AsSpan();
|
||||
|
||||
packets.Add(ReadElement(ref packetSpan));
|
||||
}
|
||||
|
||||
return packets;
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
[[5,[[3,0]],[0,[8,6,9],2,9],[5,6,[2,8,3],[0]],[6,2,[2,6,8],10]]]
|
||||
[[6,4,[2,[2,2],8,[3,7,0,6,2]]],[4,10]]
|
||||
|
||||
[[[6,[10,9,7]],9,[9,[9,0,8,3],[0],3],[8,1]],[2,10,9],[[0,6,[4]],2,[2,3,[6,7,0],[1,4,2]],[[3,7,2],[],0],9],[],[[]]]
|
||||
[[1,[1,10]]]
|
||||
|
||||
[[2,3,[]],[7,[[6,9,9,1,6],[0,3],10,3,[5]],[[]],[9,[],[1,0,0,1,1]]],[7,[1,[3,0],[7,10,8,5,0],2,1],4,7,3],[[5],6,4],[9,3,[4,[0,7,9,9],5,[2,0],[]],[6,[],[4,9]]]]
|
||||
[[2,[[3,4,7],[7,2,2,6],[8,9,7,7,6],[7,8,1,6,1],[]],[],8]]
|
||||
|
||||
[[4,[[9,8,1],2],10,6,[[],[],7]]]
|
||||
[[9,4,10],[0,[1,[10,4,6],[1],8],[[6,2,7,2,4],[9,3,5,6],[0,3,7],10],3],[[[5,4],2,10],2,9,4,[[6,7,2,3],[6]]],[],[]]
|
||||
|
||||
[[0,1],[[7,[10,0,8,1],1,4]],[]]
|
||||
[[1,3,2,3],[1,[[],7,[6,5,8,7,9],[0,2]],[8],5,[]],[[7,8,[],[8,9,4]],[2]]]
|
||||
|
||||
[[7,[[6]],[4,9]]]
|
||||
[[10],[],[[10,[10,10,5,2,1],[10],5],[4,4],[[2,1],[9]],6],[6,8]]
|
||||
|
||||
[[[[],[2,3,7],4],0],[[[6,5,10,2,6],10,[2,7],5,5],7,8,[0]],[[10,1,3,3,[7]],0],[]]
|
||||
[[[[6,2,2,8],[7,4,9,4],3,[0]],7,10]]
|
||||
|
||||
[[6,5,5,1],[8],[]]
|
||||
[[1,[]],[10],[10,[8,[4]],6,1],[5]]
|
||||
|
||||
[[[[1,1,2,4],[7,8,8,7],5,[9,1,7,0,8],[2,10,10,4]],10,[7,[6,10],[6,10,6,9],[0,8,10],7]],[8,[[],[],[1,3,0,5,10],[7,0,7]],1],[]]
|
||||
[[6,3,[],5],[]]
|
||||
|
||||
[[[3],[2,[],[1,10,5,5],[1,0,3,3,1]]]]
|
||||
[[[6,5,[4]]],[5,10,5,3],[6],[10]]
|
||||
|
||||
[[[[],[5,0,8,5,4],[2],0,[]],7,6,10,[7,1,10,9]],[]]
|
||||
[[[8,[1,2,3]]],[8],[6,9,[3,1,1,[10,10,3,10,0]],3,0],[[[8,7]]]]
|
||||
|
||||
[[0,[[0],5,[6,3,3],[10,3,10,9]],4]]
|
||||
[[],[5],[8],[[[10,8,10,5,3],[3,7,10,9,8],0],[[],[]]]]
|
||||
|
||||
[[],[10,[7,3,[6],7],[9,[3],[8],7,[1]],10],[6,9,[9,3],[[4,8,1],[10,1,4,7],7],10],[[],[3]]]
|
||||
[[[6],5,6,10,6],[[]],[1,[6,10],8,3],[1]]
|
||||
|
||||
[[1,3],[10,[2],8,1,[6,6,[5],5,[2]]],[[4]],[],[]]
|
||||
[[[],[1,0,[8],8,[0,3,6]],1],[[[6,1],8,3,1],1,[6,[6,9,3,8,7]],10,[5,[4]]]]
|
||||
|
||||
[[9,[6,2,[],[3,0,2,7]],0],[[[5,4,0],0,[2],[7,3,2,5,1]],9,3]]
|
||||
[[2,[7,[5,2,4],8,5,[3,0,4,5,4]],0,8]]
|
||||
|
||||
[[8,6,3,[[10,1,1,7]],8]]
|
||||
[[[9,2,5],10,5]]
|
||||
|
||||
[[],[6],[[[3,6,3,9]],[[2,0],7,1,[10,10,4,4,10]]]]
|
||||
[[4,[[6,8,4,9,2],[],5,[10,1]],1,6],[[[4,2,5],4]],[[3,6]],[7,8,[[5,8,9,10],1,[6,8],1,7]]]
|
||||
|
||||
[[[[],10,7],[],[1,[]],8,[9,0]],[0,[[6],3,1,[0,7,5]],[[7,6,3,9,3],4,4],[],0],[],[9,2,[9,1,[0,9,4,6],[9,2],10],9]]
|
||||
[[],[2,5,6,5,8]]
|
||||
|
||||
[[[[4,4],5,[7],3,[8,8,4]],2],[]]
|
||||
[[[[6,5,4,7,1],[0,9,9]],[[7,3,7,6,10],3,[6,4,9,4]],[1,[],[]]],[[7,5,[2,4,1,1]],2,4],[],[[[4,7],[1,7,9],5,[]],4,[[7,5,1,9,10],2,5,[1,2,0,9,9]]],[9,[]]]
|
||||
|
||||
[[7,[[8,10,9,4,5],[1,3]],1],[[[1,1],2],[[3]],[[7,9,6,6,8],4,[5]],7],[3],[[9,[3,9],[3,1,0,9,2]],4,5,9,[[1]]]]
|
||||
[[[4,[9],5],[[2],8,[5,7,0,0],0,9],[[2,1],[],7,[7,1],2],4,7],[[[4,7,0,10,2],[5,5,0,3,6],[10,6,3,3],4,8],2,[[1]],9,9]]
|
||||
|
||||
[[[[6,2,4,0]],[],[[8,3,1,5,5],1,7,4,2],5,1]]
|
||||
[[[],0],[],[4,[[1,6],2,[8,4,1,3,10]],[5,0,[10,1,0]],8,[2,[10,8,4],[6,2,7,10,10],[8,2,4,4],[]]],[[],6],[[4,5,[2],[10,2,2,1],[4,6,5,10]],[5,[],9,[1]],[]]]
|
||||
|
||||
[[9]]
|
||||
[[[],8],[7,[6,4]],[5]]
|
||||
|
||||
[[],[[3,5,[1],3,[3]],[5],6,[[7,2,6,9],[1,0,0,1]]],[[[5,5,2,0,10],10,7,8,7],5,7,7,[[],1,[6]]],[[]]]
|
||||
[[[5,8,10,[9,1,3,2,4],[6,7,0,7,6]],3,[[7],3,9,4,[9]]]]
|
||||
|
||||
[[3,1,4,[[6]],[[4,6],1,[4]]],[0],[3,[],7]]
|
||||
[[7]]
|
||||
|
||||
[[4,[[5]],[10,8,5,0]],[4]]
|
||||
[[7,6,10,[[1],8,0,[10,5,1]]],[[[2,1,6],9,9,[4],9]],[]]
|
||||
|
||||
[[7,0,5,3,1],[],[[0,9,[8,4,9]],[7,[10,9,4,1,7],2,6],10,[],10],[]]
|
||||
[[1,[],[],6,[[],10,3]]]
|
||||
|
||||
[[[[1,6]]],[[[5,3,7],[],[10,9,7,3,3],0,[]],3,10,5],[],[10,[2]]]
|
||||
[[[[1,5],5],[[6],[3,2],9,[2,0,8]],[9,[6,9,4],8,0,6]],[[[8],8,10],0,[],6,[[2,7,8],0,9]],[7,1],[[[0],[9,5,9]],[[2,10]],[]]]
|
||||
|
||||
[[1,7,[[9],8,[1,1,8]]],[[[9,10,2,0,1],10],0,[7,[10,10],10],5],[7,1],[9,[[],[7,10]]],[[2,9,8,[0,0],[10,9,4,1]],[5],[[8,6]]]]
|
||||
[[[[4,7,4],[],6,[5,4]],[],[7,[],[],3],[[9,3,5,1,10],[],[7,2]]],[[6,1],3,[[],[3,2],[],[3],[8,7,3,9]]]]
|
||||
|
||||
[[[2],0],[2,[6,1],6,5],[0,[],[[9],[],[],[10,8,6]],[[9,6,8,2,3],8,1,5,1],[[4],2,[]]],[[10,1,0,6,1],6],[4]]
|
||||
[[1,[[4,10,2],10],[4],6,[[1,0,7],[8,1,9,5,2],6]]]
|
||||
|
||||
[[],[9],[[],[[4,4,1,8],3,5]]]
|
||||
[[[[10,7],6,[]],[[1,3],[8,9,4],8,[],[2,9]],[8,3],10],[7],[8,9,10]]
|
||||
|
||||
[[3,[10,[],4],[[8,3],4,6,[0,6,9,3,6],[8,9,5,9]],[10,[7,1,0,1],[7,1,2,1],[],[]]]]
|
||||
[[7,2]]
|
||||
|
||||
[[8,[],2,0],[[1,[10,7],[0],2,0]],[4,0,[10,[0,5,1],[1],[]],6,[9]]]
|
||||
[[],[6,[[5,1,6,0,5],4],[7,7,[6],8,[2,1]],1,[[3,0]]],[4,10,[[5,10],[4,9,2,1,5],[7,1,5,6]]],[],[1,9,[]]]
|
||||
|
||||
[[[[5,7,1,2],[8],[7,0,9,7,3],[4,2,1],1],8,[4,1,[8,6,1,10],[6,8,3,2,0]],[[3],1,[2]]],[[8,[7,10,1,5,2],[1,1],[1,2]],[[0,4],2,1,[4,6,8]],1,0,3],[10,1,[[0,0,7,8,7],3]],[[4,[4],3,7,[]],3,[10,1,5,[9,6,3]],[[3],[2]],[[],1,10,[2,7]]],[[[9],7,3],8,10]]
|
||||
[[[3]],[[10],2,3]]
|
||||
|
||||
[[[10,4],1,[[4,2,5,8],3,6,[6,10,5,5],5],6],[[7,3,4,5],3,[],[]]]
|
||||
[[[[0,5,8,4],[2,3,9,1],5],[[9,7,1,5,3],6,[4],[9,2]],[]],[10,[4,1,3,2,7]],[2,9,[4,[],8,[8,10,6,10,10]],[5,8,[]]],[10,4,3,3],[]]
|
||||
|
||||
[[],[[[0,9,10,9],9]],[3,[[],[10],4,[4,2,7,8]],0,[[9,10,1,2],9,0],[5]]]
|
||||
[[[[8,2,9,9],9,4,2],[[9,9],0],[9,[4,1],2,[2,5],2]],[]]
|
||||
|
||||
[[],[[0,[4,9]],[4,7,[9],7],[[1,8,9,7,5],[1,4],3,[9,1],4],[4,10,[1],[],[]]],[[5,4,2,10,[9,7,0,4]]],[[[0,10],4],1,5,[[10,7,0,8,9],[6,10,6]],1],[[[5,7],7,5,[]],10,[[6,10,1],[0,8,0]],[],6]]
|
||||
[[7,[[0,5,8,1],[10,10,0,2],[3]],10],[[[0,1,2,7],4],[1,6]],[[[3],[2],[]],6],[[1],[]]]
|
||||
|
||||
[[2],[[],2],[3,9],[],[7,[],1,[[4],8,6,[9,4]],9]]
|
||||
[[7,[[],[2,10,5,10],1,0,[9,2,1]]],[8,[[],0],4,9],[4,[6,3,5],7]]
|
||||
|
||||
[[[[5,5,6,3],[2],8,[]],[[10,1,4,7]],8,6],[[9]]]
|
||||
[[[[8,9],4]],[[[6,0,6],[0,4,2,8,5],2,[5,6,0,9],1],10,4],[]]
|
||||
|
||||
[[[[0],10],[[6,2,10,8]]],[],[[[2],10,3],[],2,10,[10,[]]]]
|
||||
[[[],1,[]],[[],8]]
|
||||
|
||||
[[[2,[10,8,8],[7,1,7,1]],7,1,[]],[6,[[5,10,5,6],2],2,[2,2,[6],10,8]],[[[5,1],[7],1],2,2,10]]
|
||||
[[5,[3,[8,2,10],[3,10,10,10]],2,7]]
|
||||
|
||||
[[],[9,1,4,[1]],[10,[[8,9,2,1],8,6,[],6],8,5],[]]
|
||||
[[[8,5],[[],2,7,[5,0],[10,5,6,8]]]]
|
||||
|
||||
[[[]],[[1,1,5,10,[4,0,10,6,1]],[10,[2,4,7,7],[6,0,8,7]],9,0]]
|
||||
[[[[4,9,6,4,9],2,[5,1,0,1,5]]],[[1,[4,7,5],8,5],[7,[9,4,8,3,7],8,8,[6,8,3,10,2]],[[6],[8],[2,5,8,3],0]],[]]
|
||||
|
||||
[[[4,6,[8,2,10],9],[6],5],[[],0,[1,[4,5,9,1],2]]]
|
||||
[[[],9,[8,6,[4]]]]
|
||||
|
||||
[[6,[]],[4,[],[3,[6,8],[1,6,7,6,6]],6],[],[2,5,5]]
|
||||
[[8,[[5,3],2,2,6,6]],[]]
|
||||
|
||||
[[2,[]],[],[[3,9,10],9]]
|
||||
[[[]]]
|
||||
|
||||
[[[9,[8,6,1,5,0],7,[5,0],[5]],[[]]]]
|
||||
[[7,4,[[6,4,6,5]],[[9,1],[3,0]],4],[0,[[10,4,8]]],[],[],[[6,7],0,[],[]]]
|
||||
|
||||
[[9,3,[8],[10,[10],[7,4]]],[1,[[10,9,4],[7,6],[]],10,5,[]],[[5,7,0],[[3,6,2,8,7]],[[2,6],[],[1,3,9,8,8],10,5],6],[10],[[0,3,7],[[7,1,1,2,1],9]]]
|
||||
[[1,[3,[],[5,3,9,2],[10,5,4,1,7],[1,5,7]]],[[4,[4,0],9,0]],[[1,[9,8,0,6,9]],2,[[7],7,[1],[10]],7],[[0,[],[6],[]]]]
|
||||
|
||||
[[6,1,[10,[4,1,3],1,9]],[]]
|
||||
[[],[],[],[10]]
|
||||
|
||||
[[8,[[10],0,1]]]
|
||||
[[7,2,7,8],[],[6,0,6,4],[[[5,4,5],7],6,[],[]]]
|
||||
|
||||
[[],[[[8,2],7,9],4,2],[7,0],[]]
|
||||
[[0,1,9,7,5],[[[4,1,10]],8,6],[[[8,9,9,10],[6,5],[8,5,3,5]]],[[],8]]
|
||||
|
||||
[[[4,5,6,8],[[5,0,7,10,8],0,[],[7,4,9,9,3]],[]],[],[0,5,[6,8]],[4,[2,[0],[10,1,9,7]],8,3],[]]
|
||||
[[],[]]
|
||||
|
||||
[[[4],4,9],[],[[[3,1],[4,2,5,10,1]],3,[[5,1,0,1,2]],10,[7,[10,5,9,9,9],[2,3,4,10],[2,1],9]]]
|
||||
[[6,[10,[10]],[7,[4,0,4]],[[0,3,10],7]],[[[9,7,2],7,9,[7,4,8,4,9]],2]]
|
||||
|
||||
[[7],[[3,[],[5],[0,6]],[[3,10,5]]]]
|
||||
[[3,[4,7,[9,0,1,1,7]],0],[[8]]]
|
||||
|
||||
[[9,4]]
|
||||
[[9,[[5],2]],[3,3,[4,[9,3,8],0,5],3,7],[9,5,6],[10,9,2,5,1]]
|
||||
|
||||
[[[],[6],8],[[[8],9,[5],1],[6],4,6],[[[]],6],[],[5,[8,8,[10],[5,1,5,9],4],[5,7]]]
|
||||
[[6,[[],2,9,3],7],[4,[[5,9],3,[3,5,5]],7,7],[[],[[2,0,2,9,3],6],[],[[9,6]],2],[5,9,[[],2,[9,10,10],[7,0,4,1],9],9,[[8,2,2]]]]
|
||||
|
||||
[[[7,5,[5,10,1,9],[2,9,9,3]],1,[6,9,[7,9,6]],9,[[5,1,9,10,0]]],[6,8,[]],[],[[2,[2,5,4,9,10],[3,3,3],1],7,[2,9],[4,7,7,[5],[1,2,5,9,8]]],[4,[[],[7]],8,2,1]]
|
||||
[[4,9,3],[6,[],[6,[7,7,9,1,5],[10,4],10],10,3]]
|
||||
|
||||
[[[2,3,[7,5,1,0],5,[10,2,0]]],[7,6],[[[1,0,8,10,2],1]],[0],[6]]
|
||||
[[10,6],[7,10],[[4],[]],[8,[],[[],10,2,10],[[9,3],[6,9,8],[10,2,4,1],8],2]]
|
||||
|
||||
[[[],4],[10,8,[3,9,[]],9],[8,5,[],2],[[8,[10,5,7,2,10],[4,10,7,9],[4,4,5]],[[5,4,6]],[],4]]
|
||||
[[],[0,8,[5,[6,3,0,7],1,9,6],[3,8,[10,3,8,10],4],[8,[10,6,10],10,[],4]]]
|
||||
|
||||
[[[[],6,[5,5],8,[0,5,1]],[7,4,4,[4,1,3,0],8],3,[5,6],8],[9,[4]],[[0,[6,5],1],2,[],[],[2,[8,0,2,10,6],1,[5,8,9,9,4]]],[9,9,[],0]]
|
||||
[[2,[[7,9,8,8,10],[],[4,5]],[[1,10],7,[1,9,1,0]]],[[4,[6,10,1,5],5,6],[],[[4,9,2,3,2],6,[3,0,2,2]],9,[]],[5,[[10,0,10,6,4],1]],[9,[0,[8,2,2],8,[5],4],[]]]
|
||||
|
||||
[[[8],[7,6,10]],[2,5,[[9,9,1,2],[],[],2,4],1],[],[[[7,3,8],1,1,0],[[4,8,7,10,3]],6]]
|
||||
[[],[[9,9,[4,2]],[7,[],9,[3]],[[1,5,0],[9,3,6,1,2]],[[9,9],4,10,1],1]]
|
||||
|
||||
[[],[[0,[9,6],[2,4],9,3],[]],[5],[],[6,[[4,1,0,7,7],[]]]]
|
||||
[[8,10,6,[],4],[[9,7,2,8]],[0,[5,10,[3],[6,5,9],[4,4]],[],6],[[[],2],8,[9,[3],5,[10,1],8],0],[[3]]]
|
||||
|
||||
[[[4,5,[],6,[]],[0,6,[2,4]],10],[[1,[10,6,4,10],[10,4]],1,7,10,7],[],[[],[4,10,[9,0]]],[[6,[10,7,0,7,10]]]]
|
||||
[[3,[3,[4,1,1,10,10],[8,4]],4],[]]
|
||||
|
||||
[[10,[10,4,7]],[7,[1,2,[0,8,6,7]]],[4,6,4]]
|
||||
[[10,10],[[[2,4,4],0],4]]
|
||||
|
||||
[[[[10,4],[1,4,7,1]],2],[[[]]],[3]]
|
||||
[[[[],[5,4,5,9],8,5],[[],0,4,[1,0],6]],[[3],[[],6,7,0,[7,1]],8,7,8]]
|
||||
|
||||
[[[[6,6,5,8],[10,2],[4,10,0]]],[[[1],[4],[0,3,5],[0,1]],[6,[0]],8,1],[1,10,8]]
|
||||
[[[10,3],[6,[2,2],5]],[[10],[],[[7]],[[],3,[0,0,1,8,0],3,[]],2],[],[]]
|
||||
|
||||
[[6],[[],7,[[1,2,0,1]]],[[7]]]
|
||||
[[[[],[],3]],[]]
|
||||
|
||||
[[1,[[5,2,1,10]]]]
|
||||
[[],[6,1,[]],[1,10,5,6,[[1],[10],2,[2],[4,6,10]]],[]]
|
||||
|
||||
[[10,[2,[6,9,4,10,7],[5,8],0],8,10,6],[[[4,10,1]],[[7],[7,4,10,0],[7]],10],[],[[2,[0,2,10,10,1],7,8],[9],[1,[0],[2]],[8,7,[]]],[[]]]
|
||||
[[1,2,3,[3],[]]]
|
||||
|
||||
[[[],1,10,3],[],[5,2,0]]
|
||||
[[10],[5,1,[8,[9,0,9,10]]],[],[[0],[10,10],4,1]]
|
||||
|
||||
[[0,[[0,5],5,2,3]]]
|
||||
[[],[[],5],[],[0]]
|
||||
|
||||
[[3,[9,1,3,[0,9,1,4]]],[],[3,6,[3,10,6]]]
|
||||
[[9,[[],[7,6],[9],1,10],7,[[4,0],[7],[1]],[1,1,3,[4,5,3,10],1]],[7,4,[[2,9,1,9,3],5,[4]],[8],8]]
|
||||
|
||||
[[[[4,5,7],[0],6,[6,7]],8,4]]
|
||||
[[4,3,[[7,4,6],0,2]],[3,3,8,[[5,5,1,8],[8,2,3],7,3,10],7]]
|
||||
|
||||
[[[[7],3,7],0,7,2],[7,[[4,6,8,2,4]],[[6,6,5],[4,4,5,6,6]],[],5],[10,9],[]]
|
||||
[[2,[[6,2,7,5,7],5,1,3],8],[5,[8,[5,9,8],[],[7,5,3],[4,9,0,2]]]]
|
||||
|
||||
[[[2]],[3,[0]],[9,10,2,[],[[7,0,8],4]]]
|
||||
[[[6,[],7],6,5,9,7],[9,[5,[10,1]],[6],3],[0],[4,4,9,7,[3,6,3,8]]]
|
||||
|
||||
[[6,0]]
|
||||
[[4],[[[4,6],[4,10,3],2,[]],3]]
|
||||
|
||||
[[6,8],[[],[5,8,7,3,[]],2,[5,10,[0,5]]],[10,[3,7,[0,5,6,3],1,[9,4,5,1]],5],[[],[7,0,0],[7,6],[7,[7,3,1,1,1],0],[[],8,[]]]]
|
||||
[]
|
||||
|
||||
[[[1,[6]]]]
|
||||
[[[8,[],[6,9,0,9,7],3,0],4,5,5,[[],8]],[0,5,7,[10,9,[]]],[],[[],[10],[5,8,7]],[6,[[6,10,1],0,[4,9,8,4,7],6,[0,4,9,2]],[5,[1,5,7,1]],3]]
|
||||
|
||||
[[10,[0,1,[10],[]],[]],[[8,6],4,9,8,0],[5,[[3,0,6,7],1],4,8],[5,[8,[3]],9,3,[[10,5]]]]
|
||||
[[[[1,10],[5],[6,2,2],5],[8,5,8,[6,0,0],3]],[]]
|
||||
|
||||
[[1,[9,[3,6,3,9]],[[10,4,2],4,4],[[5,10,4]]],[2,[[10],3],[6,[],[2,10],1,[2,4,6,8]],[8,[8,8,9,2],[],7,[2]],[[10,5,5,10],[3,0,10,2,6],[2,2,7,8]]],[[[6,7,1],[8,7],[4,4,4,4],[],9],3,9,0],[[4,2,[2,3],0],[[10],8,1,5]]]
|
||||
[[[],[10,[2,10,8]]],[]]
|
||||
|
||||
[[2,9,4,2,[[2,6,4,9],[10,4,4],[],0,[]]],[[[9,0,9,5],[0,1,0,6,10],[10,2,0,6],10]]]
|
||||
[[[],7,[3,9,[],2,[2]],10],[],[7,1,[[4,1],[],[5,3,1,8,2]],4,4]]
|
||||
|
||||
[[10,[[6],[10,8,1,5],[2,3],3],[[6],8],[5,[4,6],[5,2]],[[8,8,2]]],[2],[[[],[5,3,7],5,[8,2,6]]],[[[2]]]]
|
||||
[[10,8,9,4,[8,[],8]],[5,7],[]]
|
||||
|
||||
[[5],[],[[[1,8,0,8],[1,7,4],5,[]],[],[[]],[2,8,[6],10,10]],[[[0],9,[],[1,0]],10,7,3]]
|
||||
[[3,[],5,[[10],[9],5],[[10,3,6,9],[8,7],2]],[8,9],[7,[]],[[5],[],8,0]]
|
||||
|
||||
[[10,[[9,2,3,7],10,[3,8,4,3]],[10,[3],[4,4]],[2]],[],[3,[7,[9,8,10,10,1],10,[10],1],[7,8,6,[4,8,7],2],6],[[[10]],[[10,7,1],2],0,[[]],8],[]]
|
||||
[[3,0,1,[7,[0,7,5,2],[],[],[6,5,0]]],[],[],[10],[9,5,[]]]
|
||||
|
||||
[[0,8,[],[[1,0],[5,8,3]],[9,8,10]]]
|
||||
[[],[8,[]]]
|
||||
|
||||
[[[7,9],[]],[],[[[1,10,3,8,4]],[9]],[]]
|
||||
[[[],6,[4,1],2],[9,10],[6,0,1,3],[3,[],[],[7,2]]]
|
||||
|
||||
[[[10,[],8,9,[0,1,7,3]],[[10,4,10]]],[],[[5,[5,7,6,7],5,4],3,8,[6,[],[3,2,10],[5,6,2,7]],8],[7,[[9,7,2],8,3,0,9],[5,4,4],7]]
|
||||
[[[]],[],[2,[],0],[[2,[],4,4]],[[10,[4,7],[1,3,2,4,2]],[],[6,[8,1,3,2],2],6,[5,10,[8,10,6,8,2],6,[]]]]
|
||||
|
||||
[[[[7,6,1,3],8,[]],3,1,[0,[5,0,9,8],4,9]],[[[3,10,5,8],[2,2,4],[9,7,6],[7,7,10],0],5,[[0],[4,9,3],3,1,1],[[9],6,5],[]]]
|
||||
[[3,1,[6,[9,0,3],[2,9,1,2,7],2,[9,9,5]],[0,0,0],3],[8,4,[[2,10,9,6,2],0,[7,5]],[7,2,[9]]]]
|
||||
|
||||
[[[10,[],[1,9,4],[0,7,10]],10,10,[[],[7,1,1,9],[4,5,7,2,0],9]],[[[8,7,7,7,10],2,9],[],[[4,10,6,6],[]]],[]]
|
||||
[[[[],8,[6,0,1],9,9],3],[],[]]
|
||||
|
||||
[8,3,10,5]
|
||||
[8,3,10,5,4]
|
||||
|
||||
[[[10,8,1,6],9],[4],[[8],10,[[1,3,2,10],[1,1,8,8,4],10,6]],[9,2],[[[8,9],5,9]]]
|
||||
[[[[1,5,1,8],[3,6],5],7,10,7,4],[[9,4,6,5,9],[[0],3,[2,2,10,1,1],1],[2,2,[2,10,7],5,10]],[7,6,[4],[[],3,10]]]
|
||||
|
||||
[[4,[],[9],7],[5],[[7]],[8,[[3,9,10],10,[4,4,1,7],[7,1,0]],[[2,3,1,7,10],1],5],[9,10,9,[]]]
|
||||
[[1,1,8,1],[]]
|
||||
|
||||
[[[[0,9,3,8],9]],[7,[[8,7,6],4,1,5,[10]],2,[5,[9,6,4,9],[6,7,5,8],10]],[[5,4],8,1,8],[]]
|
||||
[[7,10,10,[[2,6,6],2],[[]]],[],[5,7,[1,[]],[[4,8,7]],1]]
|
||||
|
||||
[[9],[2],[],[]]
|
||||
[[[],[0,1,4,4],[],[[10,8,8,4],9,[0,2,4,6],[],[7,2,8,9]]],[6,[[2,5,5,8],6,1,[7,1,7,2],[6,9]],[[4,5,6],5,4]],[[]],[],[4,4,[[9],[],9,0,2]]]
|
||||
|
||||
[[],[[0,[10,3,3],4,5],[6,9,4]]]
|
||||
[[9,[[],2,[1],[4,4,6]],[[9],[6,5,2],[6,3,7,4],4],[]],[2],[],[[[2,7],[1,1,10,2,9],7]],[[],[[10,6,4,3],[]],0,[4],[[4],1,10,5]]]
|
||||
|
||||
[[[[3],5],[7,9,10]],[2,[1,7,8,[3]],[]],[]]
|
||||
[[7,6,[],0],[],[[[7,6],[10],1,2,10],1,1,[6,10],[[4,10,4]]],[0,[],[],8,[[5,6,0,1,0]]],[6]]
|
||||
|
||||
[[3,[9],[2,[5,0,5,8],[],4],[9,[8],[2,5,4]],[2,[4,7,2],[10,0,3,8,8]]],[[10,2],7,3,9,[[4],1,[1,9,6,9],10,10]],[1],[4,4],[[[7,1],1],10]]
|
||||
[[[[4,2,1,3],7,[6,0,9,6,8],[3,0,10],8],6,[],3],[[[6],[0,10,5,4,6],7],10,[9,7,[10,3,0,4,0],2,[9,4,2,5]]],[3,[0],[[9,0,1,6,1]]],[[4,1,8,8],[[5,0,6,3,8],[7,8,7],7,[10,6,5]],5,[0],[[],9,9]],[[5]]]
|
||||
|
||||
[[[6,[0],[0]],9,[10,7,[10,1,6,8],10],[[],3,2,9],3],[7]]
|
||||
[[[[9],[8,5,4,6]],10,[[9,6],4,5],6,4],[[10,[]],10,2],[],[[[8,10,9],7,0],[[4],[5,9,8,1,2]],[[8],[10,9,3],[2,6,3,2,6],1],[[6,8],[5,5,4],3]],[[8,1],[5,10],6,0,1]]
|
||||
|
||||
[[8,[0,1,6,6,8]],[],[[1,9,2,[4,5,2,4]],4,[],[7,1,7],7]]
|
||||
[[[7,[7,1],4,10],5,5],[[[1,6,8,9,2],[4],[5,5,7]],1,10,[0,[10,6],3]],[],[[[6],[6,2,0,10]],[[6,6,4,1,3],1],[]],[1,[[7,2],5],[],[2,8,10,[10,1,2,2],4]]]
|
||||
|
||||
[2,0,1,0,6]
|
||||
[2,0,1,0]
|
||||
|
||||
[[],[5,[],3,[[1,9,3]],2],[[[],[3,2,3,2,7],[1,10,6,3,9]],1,8]]
|
||||
[[6],[[[1,0,6],[6,4]],7,1,[2,[5]],7]]
|
||||
|
||||
[[9,0,4]]
|
||||
[[1,10,5,9,[5,5]],[[[3,8,10,8],0,[4],[8],[9,7]]],[[[1,5,4],10],9],[4,[[5,2,8,8],[10,5]],4]]
|
||||
|
||||
[[7,6]]
|
||||
[[[],[[10],0,8],0],[1,5]]
|
||||
|
||||
[[[[2],4,[8,7,7,0,4],[3],7],[],[[3,6,6,1]],6],[[[7,0]],1,[1]],[[0,10,[1,0,5],[0,5]],8,4,[9],[0]],[[3,0]],[9]]
|
||||
[[],[[[0,6,6]],[[8]],3,[1],9]]
|
||||
|
||||
[[[4,[0,2,0],8],[[5,10,6,6],[2]]],[],[]]
|
||||
[[0,6,4],[8,[5,[]],[[9,3],[9],[2,5,0]]],[[10,8,2,[3,0,4,9]],[6,6,5],[4,[],5,9],9],[[[5,0,10,5],5,3],6,4]]
|
||||
|
||||
[[0,4,[],4]]
|
||||
[[[1,[]],6,9,[[4,0],[]]]]
|
||||
|
||||
[[0,[[1],10,[4,7],4]],[[10],1,[3],6],[[[7,2,0,7,0],9,[0,8,4],1,6],[[9,2,0]],8,6,[10,8]],[[],10,[9,[8,5,0]],[10],3],[]]
|
||||
[[1,[[],9,[7],[7,6]],[3,5,1]]]
|
||||
|
||||
[[6],[1,6,[[2,3,2],[7,9,4,3,5],5,[6,6]],[9,5,2,0],[3,[7,1,4,1,2],4,[2,7,7,9],[8,8,4,10]]],[]]
|
||||
[[[10,7,[],[3,4],[8,1]],[5,[9],3]],[[3,[8,7,0,8,6],[0],[5,3,1,0,5]],[9,[4],10,[8,0,2,10],2]],[[[10,10],0],[]]]
|
||||
|
||||
[[2,[[7,5,10,9]],5,5,[]],[[[1,6,5,10,6],[5,8,4,10],[2,5,3,8]]],[[],[[2,10,1],[],8],5],[]]
|
||||
[[3,[10],9,[5,[],[2,3],6,7]],[[],4,9],[],[[[1,10,4,10]],0,10]]
|
||||
|
||||
[[],[10,[2,[0,8],[7,4],6],2,2,[[2,2,7,2,9]]],[0,[]]]
|
||||
[[[[10]]],[],[],[[[2,2],6,0,[]],[],10,3,[[4,7,1],[6,10],2]]]
|
||||
|
||||
[[[4],[],5]]
|
||||
[[],[[],3,8,8,10],[7]]
|
||||
|
||||
[[]]
|
||||
[[[3,5,1,[0,8,0,7,6]],[2,10,1,[]],[[8,8,3,8,2]],[[10,1],1,[0,2,6],[10]]],[[[1,2],[5,2,6,7,9],10,1],2,5,[]],[[7],[6,9,10],[2,[6,4,10,1]],3,[[10,5,8],9,[2,5,10,2]]],[[5,6,[7,7,8]],[7,[],7],[],[6,10,[7,7,5]]],[]]
|
||||
|
||||
[[[5,[5],[],10,[3]]],[],[],[5,3,4,8,[[0,10,7,3],[5,5,6],[10,7,9,2,7],[6]]],[[],[[6,0,5,10]],[[10,1,1,5,7],[8,6],[],[5,5,5],2]]]
|
||||
[[8,[9,4,[8,0,3],[0,4],2],[[3],1,1,4]],[5,[1,[],6,5,[4,7,0,8]],3,[[3,8,10,0]]],[7,4,[],1,6],[[[7,4,9,10,8],[],10,[7,9],[2,1,3,8]],2],[[[8,5,1,6,6],[3,9,3,1],[2,10,0,3,5]],7]]
|
||||
|
||||
[[7],[2,[10,[9],[9,10],[1,5,8,8,3]],[[3,7,0],3,[9,1,0,9,10],8,[5]],[[1,6,10,9]],3],[[9,1],[[10,1,7]],6]]
|
||||
[[9,[],4,[[],5],5],[8,[5,6,3,[5,8],[4,10,0]],[3,8]],[8,[[0,1],3,0,1],4,[[2,9,3,1]]],[[5,3,5,1,[6,5,6,3,6]]],[1,[[]],[5],[2],7]]
|
||||
|
||||
[[10,9,9,2],[[10,6,7,6,[0,1,10,10,0]]],[2,[3,[6,9,5],9,[]]],[8,2,[]]]
|
||||
[[],[[7,[8,10,7],[7,8,10,6],3,[]]],[],[[[5,5,1,4,2],6],[],0],[2,4]]
|
||||
|
||||
[[5,[8,0,[7,10,7],9,[1,6,9,2]],7],[[10,9,[7]],2,[4,[10,7,0,8,6],[],[4,1],5]],[]]
|
||||
[[6,2],[0,[],6,[[1,10,4,8,8]]]]
|
||||
|
||||
[[[5,[]]]]
|
||||
[[6,[],2],[0],[[],10,[[1,8],4,[9],[5,2,0,6,9]],[]]]
|
||||
|
||||
[[10,[[],[5,8,10]],2,[10,1],[]],[[],5,[6],[3,[2,0,4],6,4,3],[7,4,[],1,7]]]
|
||||
[[[[5,0],[10,10,3],[9,10,10,10,5],5],5,[[0,1,10,9],10,[8,8,6]],5,9]]
|
||||
|
||||
[[4,[[]],[]],[],[[10,[7],0,[3,10,1]]],[[6,3],10,10,[2]],[3,4,[3,6,10,0],[[5],8,[3],[6,2,8,2,2]]]]
|
||||
[[2,[0,[3]]],[9]]
|
||||
|
||||
[[[2,5,[9,10,7],[0]],[[4]]],[9,3,[3,10,9],[9,[3,9,10],[6,3,10]]]]
|
||||
[[],[8],[[[],10,[],8],5,4],[[6,10,[],5],[8]],[[8,[9,10]],[[9,0,3,4,10],[7,9,4],8]]]
|
||||
|
||||
[[5,7,5],[1],[1,[],10],[[9],5,10,0,[]]]
|
||||
[[7,0],[[],9,4]]
|
||||
|
||||
[[3,[]],[[]],[[0,[7],[8,2,9,0]],[[3,2],[3],[3,3,3]],[]]]
|
||||
[[[[],5],7,[[0,0,1]]],[9,[6,[10,8],[6,7],1],0,[6,0],0],[2,5,[9,3,6],[[5],8,2,5]],[[[],4],[]]]
|
||||
|
||||
[[9,10,2,[5,[],[3,7,0,8,3]]],[[9],4],[2,[[3],[9,2,0,3,8],[9,4,2,9,10]],[[5],[4,2,0,8],9,[],[1,6,6,7,8]],10,8],[9,2]]
|
||||
[[0],[10,[[2],3,2,[9]],[0]],[9,[8]],[1,[],[2,2],8],[7,6,[8,[],5,8],[[6]],7]]
|
||||
|
||||
[[0],[[5,7,3,8],[[1,5,2,2,5],9,3],[],[],[[0,0,5,6,1],9]],[[9]]]
|
||||
[[3,[[3,6,8,3],[]],4],[[9]],[1,[0]]]
|
||||
|
||||
[[[1,[6,3,1,4,4],[]],10,10],[[[],[4,6,2,8],[7,3,8]],[],[8],[[9],[4],[5,8]]]]
|
||||
[[8]]
|
||||
|
||||
[[],[8,[[0,2,0],[4],2],[8,[]],10,[]],[0],[[7,2,[6,4,10,7,8],[8,2,10],[3,10,9,5]],[],[1],3]]
|
||||
[[8,3],[[[7,2],[4]],[],[7,10,[7,7,4],[0,5]]],[10,6,8,8,[[10,9],[9,7],[0,10],[10,6,5,6,2]]],[10,7,8,[[7],3,6]]]
|
||||
|
||||
[[[10,[7,6,5,8,7],10,4]]]
|
||||
[[[9,2,7,2],[[8]]]]
|
||||
|
||||
[[],[[0,[8,5,1],2],[[5,9,4,1],8,2],[[3,6,1],[5,4,4,7],[6]]],[],[4,8,[[5,9,6,4],9,[10,6],[0,8,9,1,10]],[4],2]]
|
||||
[[6,2,[[7,10,2,8,5],2]]]
|
||||
|
||||
[[3,[],0,[]],[2,8,[[5]],[2,6,[0,7,0,1]]]]
|
||||
[[2,[[3,4,9,9],[],[6,6,5,3],9],0],[],[9],[[],[8,2,2,[9,6,0,5],[0]],5,6]]
|
||||
|
||||
[[[],8,5],[10,[[8],6]]]
|
||||
[[[8,5],2,5],[],[]]
|
||||
|
||||
[[10,10,[0,0,[4,1,10,5,6]],0,[[7,2],5]],[],[[[10,9],[1,2],[8,1]],6,2,10],[[[10,7],8,[1,9,6,6,10],5,5]]]
|
||||
[[[[10,10,2],[6,6,6]],[5,5,[4,8,10,5,9]],5,[],[[2,6],4,7,[8,5,6],[2,3,9,2,1]]],[[5],7],[1,[2,3,[1,6,8,8,4]],9]]
|
||||
|
||||
[[9],[3],[2,[[],7,4,4,[7,2]],[1,[4,5,6,3]],5,[[7],9,9]]]
|
||||
[[6],[[5,[8,7]],[[4,4,8,2],9]],[1,7,4,[[5],4,[2],10],10],[6,10,10,[]]]
|
||||
|
||||
[[10,4,[[5,0],[2,0,2,4,7],[8,3,7,1],8],[],6],[[4,[10,9]],1,10],[[[1,5,6,2,7],3],[[7,0,2,3],1],[[]]],[[5,[2,1,8],[2,3,9]],[[9,1],[3,3,1,2],[10,6,3,5,2]]],[]]
|
||||
[[[1,6],[6,2,[3,8,10],[],[7]]],[],[8,[9,[9,1,2,4,10]],8,[],0],[]]
|
||||
|
||||
[[[[0],[0,10,7,8],10,9],3]]
|
||||
[[8,1],[[[2,8,1,1],[],0]],[[],10,3,7]]
|
||||
|
||||
[[[1]],[[5,[3,3,0,8],[8,8,5,5,8],7,6],[6,[2,10,3,9],[4],[5,6,1,8,7],[0,9]],[[0,2,2],1,1,5,8],10],[2,3,[6,[9,9,8,1],[],2],7,5],[0,0,1,[],[9]]]
|
||||
[[9,5],[8,[[10]]],[[[7]],8,2],[3,4],[9,[],[[4,4],3,[3],[9],[5]],[2,[7,3],[0,0],[10,8,2]],10]]
|
||||
|
||||
[[[[3,1,7,9],2,[0,0,1,4]],8],[[[7,4],9],[7,9,[],2,10],10],[[[0,2,2],4,6,3,6],2,4],[[8,[4,1,9,3],8,7],[[1],[1,0,6],9,9,5],4],[]]
|
||||
[[7,2,[[6,5],[6,1],[3,5,5,3,3],9],[[0,7,2],[5,0,2,10,4],[8,3],[],10],0],[]]
|
||||
|
||||
[[2,9,1,10]]
|
||||
[[],[9,10],[8,[[10,10,7,0],[10,2,1,9,3],1,[6,8,8]]],[],[[[10,2]],[[6,0,9,6,4],7],7]]
|
||||
|
||||
[[5,4,8,4]]
|
||||
[[],[[6]],[[8,2,0,[]],[],2],[6,1,[10,2,5],[[],[10],[8,0]]],[[6,2],7,[8,[1]],[]]]
|
||||
|
||||
[[[5,6,[1,8],10],[9,[2,3,5,6,10],0,[4,3,5]],2],[],[1,9,1,9,[[],[1],4,10,[2,1,9,5,5]]],[3,2,[],6],[[],[],3,6,2]]
|
||||
[[1,[[3],10,2,6]],[],[[10,7],2,[],[[],5,6,[2,10]]],[[[9,2],9],[[],4,[10,4,3],10,1],[[4,1,10],[0,3],7],[2,5,7,[0,9,8,5]]]]
|
||||
|
||||
[[[],8,[],3],[8,[4,[3,0],[6,6],7,[0,3,5,6]],10,[[10,8,1,1,1]],[]],[4],[4,7],[10,[],1,[9,[0,2],4,2,2],[[5],[1,2,3,7],0,7]]]
|
||||
[[[10,4,[10,2]]],[[[7,5,8],4,[2,1]],4,9]]
|
||||
|
||||
[[0],[],[2,[[1,6,3,5,4],7],4,9]]
|
||||
[[[2,[6,10,2,10],1,8,[]],10,[7,[],2],[[],5,1,[],4],1],[3,[[10,5,7],[1,5,8,3,9],[7,10,0,5,8]],[[0,4,7,2,1],[6,2,1],[3],0]],[0,2,3]]
|
||||
|
||||
[[9,10,3],[[3,[2,8,3],6,2,8],[0,[7]],0],[1,8,[[5,2]],[[7,6,6,5]]]]
|
||||
[[[]],[10,10,9],[[[2],8],10,[]],[[],[7,[7,9,0],[],0],[2]],[[],[[10],[9,9,2,1,4]],7,4]]
|
||||
|
||||
[[2,4],[[1,7,3,5],8]]
|
||||
[[],[5],[5,9],[2,3,[8,3,[0],2,6]]]
|
||||
|
||||
[[[[0,3],[9,2,5,9,4],[5,2,9,8],[5],9],[9,7,[2,4,8]],8,3,[[6],[2]]]]
|
||||
[[7],[[],10,1,[[8,5,8],[8],[5],[1,2],6]],[9,[[2,2],10,[],4],[],[[3],9,[0,10,8,9]],5]]
|
||||
|
||||
[[[[]]],[8,6],[[]],[],[[6,2,5]]]
|
||||
[[[2,10,[7,6,2]],[10,2],0,10],[[0,6],1,5,7],[10,[]]]
|
||||
|
||||
[[],[7,1,[]],[9,3,9],[6],[0,4]]
|
||||
[[],[[[4,1,3],[10,9,8,7,9],7,[1,2],[8,0,2,5]],[6],6],[]]
|
||||
|
||||
[[],[[],[8],[[0,4],8,[7,8,3,9,9]],[],[[],[6,6,10],0]],[[1,1,[],[10,2,8,7]],[[9,6],[9,6,2,10],2,10,10]],[[8,[5,5,7]],[3,8],3],[[[6,0,2,2],[],8],[0,[7,5,4],4,[4],[1]],[8,6],5,3]]
|
||||
[[[10,3],[[1,0,7,3],6,[1,1,2,10],5,[6,7,4]],[],[5]],[],[],[3,4,[[3,7,9,3,0],6,4]],[0,3,0]]
|
||||
|
||||
[[],[],[4,[10,7,[2,9,5]],[],[9,1],10]]
|
||||
[[[],[2,[1,9],[]]],[],[],[],[6,9,[[6,8],5,2,[4,3,4,6,6]],[[5,2,3,8]],[[3,8],4,5,[4,2,4,1]]]]
|
||||
|
||||
[[7,[5,[4],4],1,[[2,5,8,2],0,[9,4]],1],[[9,4,8,[0],5]],[],[8,[5,[2,5,8,6,8],3,1]],[]]
|
||||
[[[0,[9,6,2,7,9]],[8,[1,1,8]],4,[3],8],[[5,[8,6],3,1,5],4,8,[],[[1,1]]]]
|
||||
|
||||
[[],[[3,3],[[8,8],10,2],9,4],[0],[3]]
|
||||
[[3],[],[8],[]]
|
||||
|
||||
[[[5,[8,5]],[9,2]],[[[4,9],[3,1],[2,7,5],[2,9,2]],0],[[2,10,2,[],[4,4,4]]],[[7,[1,2,5],[],9],[8,3,[3,8,0,1,10],0,5],1,7],[[[8,0,6,2],[],4,[10]],3,[],4,8]]
|
||||
[[[[9,8,4,2,4],[0,2,0],5],[7,[4,7,10],[]],[[4,0],2],[8,[2,0,10,4],[7,6]]],[],[1,[[1,4,9,8,6],4]]]
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
629
Days/Day14.cs
629
Days/Day14.cs
@@ -1,582 +1,151 @@
|
||||
using System.Drawing;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
using Color = Spectre.Console.Color;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public enum CellType
|
||||
{
|
||||
Air = 0,
|
||||
Rock,
|
||||
Sand
|
||||
}
|
||||
|
||||
public class MapPath
|
||||
{
|
||||
public IEnumerable<Point> Points => _points;
|
||||
|
||||
private readonly IList<Point> _points;
|
||||
|
||||
public MapPath()
|
||||
{
|
||||
_points = new List<Point>();
|
||||
}
|
||||
|
||||
public MapPath(IEnumerable<Point> points)
|
||||
{
|
||||
_points = new List<Point>(points);
|
||||
}
|
||||
|
||||
public void AddPoint(Point point)
|
||||
{
|
||||
_points.Add(point);
|
||||
}
|
||||
|
||||
public void DrawPath(CellType[,] map, int xOffset, int yOffset)
|
||||
{
|
||||
if (!_points.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw each point
|
||||
var previousPoint = _points.First();
|
||||
|
||||
foreach (var point in _points.Skip(1))
|
||||
{
|
||||
// Draw horizontally
|
||||
if (previousPoint.X != point.X)
|
||||
{
|
||||
var xStart = Math.Min(previousPoint.X, point.X);
|
||||
var xEnd = Math.Max(previousPoint.X, point.X);
|
||||
|
||||
for (int x = xStart; x <= xEnd; x++)
|
||||
{
|
||||
map[x + xOffset, point.Y + yOffset] = CellType.Rock;
|
||||
}
|
||||
}
|
||||
// Draw vertically
|
||||
else
|
||||
{
|
||||
var yStart = Math.Min(previousPoint.Y, point.Y);
|
||||
var yEnd = Math.Max(previousPoint.Y, point.Y);
|
||||
|
||||
for (int y = yStart; y <= yEnd; y++)
|
||||
{
|
||||
map[point.X + xOffset, y + yOffset] = CellType.Rock;
|
||||
}
|
||||
}
|
||||
|
||||
// Use current point for next point drawing
|
||||
previousPoint = point;
|
||||
}
|
||||
}
|
||||
|
||||
public void DrawPath(IDictionary<Point, CellType> map)
|
||||
{
|
||||
if (!_points.Any())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Draw each point
|
||||
var previousPoint = _points.First();
|
||||
|
||||
foreach (var point in _points.Skip(1))
|
||||
{
|
||||
// Draw horizontally
|
||||
if (previousPoint.X != point.X)
|
||||
{
|
||||
var xStart = Math.Min(previousPoint.X, point.X);
|
||||
var xEnd = Math.Max(previousPoint.X, point.X);
|
||||
|
||||
for (int x = xStart; x <= xEnd; x++)
|
||||
{
|
||||
map[point with { X = x }] = CellType.Rock;
|
||||
}
|
||||
}
|
||||
// Draw vertically
|
||||
else
|
||||
{
|
||||
var yStart = Math.Min(previousPoint.Y, point.Y);
|
||||
var yEnd = Math.Max(previousPoint.Y, point.Y);
|
||||
|
||||
for (int y = yStart; y <= yEnd; y++)
|
||||
{
|
||||
map[point with { Y = y }] = CellType.Rock;
|
||||
}
|
||||
}
|
||||
|
||||
// Use current point for next point drawing
|
||||
previousPoint = point;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public class Day14 : Day
|
||||
{
|
||||
public override int Number => 14;
|
||||
public override string Name => "Regolith Reservoir";
|
||||
public override string Name => "Restroom Redoubt";
|
||||
|
||||
private readonly Point _sandSource = new(500, 0);
|
||||
private Point _offsetSandSource;
|
||||
private const int Height = 103;
|
||||
private const int HeightCenter = Height / 2;
|
||||
|
||||
private const int Width = 101;
|
||||
private const int WidthCenter = Width / 2;
|
||||
|
||||
private const int Iterations = 100;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var map = GenerateMap();
|
||||
var robots = ParseRobots();
|
||||
|
||||
// Draw canvas
|
||||
var canvas = GenerateCanvas(map);
|
||||
canvas.SetPixel(_offsetSandSource.X, _offsetSandSource.Y, Color.IndianRed1);
|
||||
|
||||
// Simulate sand fall
|
||||
int sandBlocksCount = 0;
|
||||
while (GenerateSand(map, canvas, _offsetSandSource))
|
||||
for (var i = 0; i < Iterations; i++)
|
||||
{
|
||||
sandBlocksCount++;
|
||||
foreach (var robot in robots)
|
||||
{
|
||||
robot.Position = new Point(
|
||||
Math.Abs((Width + robot.Position.X + robot.Velocity.X) % Width),
|
||||
Math.Abs((Height + robot.Position.Y + robot.Velocity.Y) % Height)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// Compute safety factor
|
||||
var safetyFactor =
|
||||
robots.Count(r => r.Position is { X: < WidthCenter, Y: < HeightCenter }) *
|
||||
robots.Count(r => r.Position is { X: > WidthCenter, Y: < HeightCenter }) *
|
||||
robots.Count(r => r.Position is { X: < WidthCenter, Y: > HeightCenter }) *
|
||||
robots.Count(r => r.Position is { X: > WidthCenter, Y: > HeightCenter });
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.Write(canvas);
|
||||
|
||||
AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Safety factor: [yellow]{safetyFactor}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var map = GenerateDictionaryMap();
|
||||
var robots = ParseRobots();
|
||||
|
||||
// Compute ground level
|
||||
var yMax = map.Keys.Max(p => p.Y);
|
||||
var groundLevel = yMax + 2;
|
||||
var canvas = new Canvas(Width, Height);
|
||||
|
||||
// Simulate sand fall
|
||||
int sandBlocksCount = 0;
|
||||
while (GenerateSand(map, _sandSource, groundLevel))
|
||||
for (var i = 0; i < int.MaxValue; i++)
|
||||
{
|
||||
sandBlocksCount++;
|
||||
}
|
||||
for (var x = 0; x < Width; x++)
|
||||
{
|
||||
for (var y = 0; y < Height; y++)
|
||||
{
|
||||
canvas.SetPixel(x, y, Color.Grey23);
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var robot in robots)
|
||||
{
|
||||
robot.Position = new Point(
|
||||
Math.Abs((Width + robot.Position.X + robot.Velocity.X) % Width),
|
||||
Math.Abs((Height + robot.Position.Y + robot.Velocity.Y) % Height)
|
||||
);
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.Write(GenerateCanvas(map, _sandSource));
|
||||
canvas.SetPixel(robot.Position.X, robot.Position.Y, Color.Green1);
|
||||
}
|
||||
|
||||
AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
|
||||
// Display grid
|
||||
if ((i + 1 - 46) % 101 == 0)
|
||||
{
|
||||
AnsiConsole.Write(canvas);
|
||||
AnsiConsole.WriteLine();
|
||||
|
||||
AnsiConsole.Write($"Seconds elapsed: {i + 1}");
|
||||
|
||||
var key = Console.ReadKey(true).Key;
|
||||
|
||||
if (key is ConsoleKey.Enter)
|
||||
{
|
||||
AnsiConsole.WriteLine();
|
||||
AnsiConsole.WriteLine();
|
||||
AnsiConsole.MarkupLine($"[green]Image at instant: [yellow]t={i + 1}s[/][/]");
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
AnsiConsole.Clear();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static bool GenerateSand(CellType[,] map, Canvas canvas, in Point sandSource)
|
||||
private List<Robot> ParseRobots()
|
||||
{
|
||||
// Stop if source is blocked
|
||||
if (map[sandSource.X, sandSource.Y] == CellType.Sand)
|
||||
var robots = new List<Robot>();
|
||||
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
return false;
|
||||
var positionX = int.Parse(line[(line.IndexOf('=') + 1)..line.IndexOf(',')]);
|
||||
var positionY = int.Parse(line[(line.IndexOf(',') + 1)..line.IndexOf(' ')]);
|
||||
|
||||
var velocityX = int.Parse(line[(line.LastIndexOf('=') + 1)..line.LastIndexOf(',')]);
|
||||
var velocityY = int.Parse(line[(line.LastIndexOf(',') + 1)..]);
|
||||
|
||||
robots.Add(new Robot(new Point(positionX, positionY), new Point(velocityX, velocityY)));
|
||||
}
|
||||
|
||||
var width = map.GetLength(0);
|
||||
var height = map.GetLength(1);
|
||||
|
||||
var sandPosition = new Point(sandSource.X, sandSource.Y);
|
||||
|
||||
// Make sand fall till we don't go outbound
|
||||
while (sandPosition.X >= 0 && sandPosition.X < width && sandPosition.Y >= 0 && sandPosition.Y < height)
|
||||
{
|
||||
// Fall outbound below
|
||||
if (sandPosition.Y + 1 >= height)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Try below
|
||||
if (map[sandPosition.X, sandPosition.Y + 1] == CellType.Air)
|
||||
{
|
||||
sandPosition.Y += 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Fall outbound on the left
|
||||
if (sandPosition.X - 1 < 0)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Try on the left
|
||||
if (map[sandPosition.X - 1, sandPosition.Y + 1] == CellType.Air)
|
||||
{
|
||||
sandPosition.X -= 1;
|
||||
sandPosition.Y += 1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Fall outbound on the right
|
||||
if (sandPosition.X + 1 >= width)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Lastly try on the right
|
||||
if (map[sandPosition.X + 1, sandPosition.Y + 1] == CellType.Air)
|
||||
{
|
||||
sandPosition.X += 1;
|
||||
sandPosition.Y += 1;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Can't go anywhere, stop
|
||||
break;
|
||||
}
|
||||
|
||||
map[sandPosition.X, sandPosition.Y] = CellType.Sand;
|
||||
canvas.SetPixel(sandPosition.X, sandPosition.Y, Color.SandyBrown);
|
||||
|
||||
return true;
|
||||
return robots;
|
||||
}
|
||||
|
||||
private static bool GenerateSand(IDictionary<Point, CellType> map, in Point sandSource, int groundY)
|
||||
private class Robot(Point position, Point velocity)
|
||||
{
|
||||
// Stop if source is blocked
|
||||
if (map.GetValueOrDefault(sandSource, CellType.Air) == CellType.Sand)
|
||||
public Point Position { get; set; } = position;
|
||||
public Point Velocity { get; } = velocity;
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return false;
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
var sandPosition = new Point(sandSource.X, sandSource.Y);
|
||||
|
||||
// Make sand fall till we don't go outbound
|
||||
while (true)
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
// Sand is touching ground, stop here
|
||||
if (sandPosition.Y + 1 >= groundY)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
// Try below
|
||||
var below = sandPosition with { Y = sandPosition.Y + 1 };
|
||||
if (map.GetValueOrDefault(below, CellType.Air) == CellType.Air)
|
||||
{
|
||||
sandPosition = below;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try on the left
|
||||
var left = new Point(sandPosition.X - 1, sandPosition.Y + 1);
|
||||
if (map.GetValueOrDefault(left, CellType.Air) == CellType.Air)
|
||||
{
|
||||
sandPosition = left;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Lastly try on the right
|
||||
var right = new Point(sandPosition.X + 1, sandPosition.Y + 1);
|
||||
if (map.GetValueOrDefault(right, CellType.Air) == CellType.Air)
|
||||
{
|
||||
sandPosition = right;
|
||||
continue;
|
||||
}
|
||||
|
||||
// Can't go anywhere, stop
|
||||
break;
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
map[sandPosition] = CellType.Sand;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private static Canvas GenerateCanvas(CellType[,] map)
|
||||
{
|
||||
var width = map.GetLength(0);
|
||||
var height = map.GetLength(1);
|
||||
|
||||
var canvas = new Canvas(width, height);
|
||||
|
||||
for (int x = 0; x < width; x++)
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
for (int y = 0; y < height; y++)
|
||||
{
|
||||
canvas.SetPixel(x, y, ColorCellType(map[x, y]));
|
||||
}
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
return canvas;
|
||||
}
|
||||
|
||||
private static Canvas GenerateCanvas(IDictionary<Point, CellType> map, in Point sandSource)
|
||||
{
|
||||
// Compute dimensions
|
||||
var xMin = map.Keys.Min(p => p.X);
|
||||
var xMax = map.Keys.Max(p => p.X);
|
||||
|
||||
var yMin = map.Keys.Min(p => p.Y);
|
||||
var yMax = map.Keys.Max(p => p.Y);
|
||||
|
||||
var width = xMax - xMin + 1;
|
||||
var height = yMax - yMin + 1;
|
||||
|
||||
var canvas = new Canvas(width, height);
|
||||
|
||||
// Fill background
|
||||
for (int x = xMin; x <= xMax; x++)
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
for (int y = yMin; y <= yMax; y++)
|
||||
{
|
||||
canvas.SetPixel(x - xMin, y - yMin, Color.Grey23);
|
||||
}
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
// Fill canvas
|
||||
foreach (var (point, cellType) in map)
|
||||
{
|
||||
canvas.SetPixel(point.X - xMin, point.Y - yMin, ColorCellType(cellType));
|
||||
}
|
||||
|
||||
canvas.SetPixel(sandSource.X - xMin, sandSource.Y - yMin, Color.IndianRed1);
|
||||
|
||||
return canvas;
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
|
||||
private CellType[,] GenerateMap()
|
||||
{
|
||||
var paths = Input.ReadAllLines()
|
||||
.Select(line => new MapPath(line.Split(" -> ")
|
||||
.Select(p => p.Split(','))
|
||||
.Select(s => new Point(int.Parse(s[0]), int.Parse(s[1])))))
|
||||
.ToList();
|
||||
|
||||
// Compute xMin, xMax, yMin, yMax
|
||||
int xMin = paths.SelectMany(p => p.Points).Min(p => p.X);
|
||||
int xMax = paths.SelectMany(p => p.Points).Max(p => p.X);
|
||||
|
||||
int yMax = paths.SelectMany(p => p.Points).Max(p => p.Y);
|
||||
|
||||
// Construct 2D map
|
||||
var width = xMax - xMin + 1;
|
||||
var height = yMax + 1;
|
||||
var map = new CellType[width, height];
|
||||
|
||||
// Fill rocks
|
||||
paths.ForEach(p => p.DrawPath(map, -xMin, 0));
|
||||
|
||||
// Compute new sand source
|
||||
_offsetSandSource = _sandSource;
|
||||
_offsetSandSource.Offset(-xMin, 0);
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
private static Color ColorCellType(CellType cellType)
|
||||
{
|
||||
return cellType switch
|
||||
{
|
||||
CellType.Air => Color.Grey23,
|
||||
CellType.Rock => Color.LightSlateGrey,
|
||||
CellType.Sand => Color.SandyBrown,
|
||||
_ => throw new Exception("Invalid CellType")
|
||||
};
|
||||
}
|
||||
|
||||
private static IDictionary<Point, CellType> GenerateDictionaryMap()
|
||||
{
|
||||
var paths = Input.ReadAllLines()
|
||||
.Select(line => new MapPath(line.Split(" -> ")
|
||||
.Select(p => p.Split(','))
|
||||
.Select(s => new Point(int.Parse(s[0]), int.Parse(s[1])))))
|
||||
.ToList();
|
||||
|
||||
// Construct 2D map
|
||||
var map = new Dictionary<Point, CellType>();
|
||||
|
||||
// Fill rocks
|
||||
paths.ForEach(p => p.DrawPath(map));
|
||||
|
||||
return map;
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
521,171 -> 525,171
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
503,109 -> 507,109
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
488,38 -> 493,38
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
482,93 -> 496,93 -> 496,92
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
497,29 -> 502,29
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
501,32 -> 506,32
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
503,115 -> 507,115
|
||||
524,173 -> 528,173
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
486,47 -> 490,47
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
495,50 -> 499,50
|
||||
492,41 -> 496,41
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
522,177 -> 522,178 -> 536,178 -> 536,177
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
503,121 -> 507,121
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
515,121 -> 519,121
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
498,35 -> 503,35
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
503,171 -> 507,171
|
||||
509,121 -> 513,121
|
||||
494,12 -> 494,13 -> 507,13 -> 507,12
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
500,112 -> 504,112
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
512,173 -> 516,173
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
502,38 -> 507,38
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
506,169 -> 510,169
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
491,121 -> 495,121
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
518,173 -> 522,173
|
||||
501,50 -> 505,50
|
||||
497,115 -> 501,115
|
||||
498,47 -> 502,47
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
518,169 -> 522,169
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
489,44 -> 493,44
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
509,167 -> 513,167
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
487,133 -> 487,134 -> 501,134
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
512,118 -> 516,118
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
512,165 -> 516,165
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
491,35 -> 496,35
|
||||
500,173 -> 504,173
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
483,50 -> 487,50
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
500,118 -> 504,118
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
492,47 -> 496,47
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
495,38 -> 500,38
|
||||
494,12 -> 494,13 -> 507,13 -> 507,12
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
494,118 -> 498,118
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
509,115 -> 513,115
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
506,173 -> 510,173
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
505,35 -> 510,35
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
506,118 -> 510,118
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
503,150 -> 503,154 -> 501,154 -> 501,162 -> 513,162 -> 513,154 -> 507,154 -> 507,150
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
509,171 -> 513,171
|
||||
494,12 -> 494,13 -> 507,13 -> 507,12
|
||||
509,38 -> 514,38
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
495,44 -> 499,44
|
||||
482,93 -> 496,93 -> 496,92
|
||||
515,171 -> 519,171
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
481,79 -> 481,81 -> 478,81 -> 478,89 -> 490,89 -> 490,81 -> 485,81 -> 485,79
|
||||
522,177 -> 522,178 -> 536,178 -> 536,177
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
497,147 -> 497,137 -> 497,147 -> 499,147 -> 499,146 -> 499,147 -> 501,147 -> 501,142 -> 501,147 -> 503,147 -> 503,144 -> 503,147 -> 505,147 -> 505,140 -> 505,147
|
||||
515,167 -> 519,167
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
506,112 -> 510,112
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
522,177 -> 522,178 -> 536,178 -> 536,177
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
488,124 -> 488,126 -> 485,126 -> 485,129 -> 496,129 -> 496,126 -> 491,126 -> 491,124
|
||||
487,133 -> 487,134 -> 501,134
|
||||
497,121 -> 501,121
|
||||
476,63 -> 476,58 -> 476,63 -> 478,63 -> 478,55 -> 478,63 -> 480,63 -> 480,56 -> 480,63 -> 482,63 -> 482,57 -> 482,63 -> 484,63 -> 484,55 -> 484,63 -> 486,63 -> 486,55 -> 486,63
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
489,50 -> 493,50
|
||||
465,76 -> 465,71 -> 465,76 -> 467,76 -> 467,72 -> 467,76 -> 469,76 -> 469,68 -> 469,76 -> 471,76 -> 471,73 -> 471,76 -> 473,76 -> 473,71 -> 473,76 -> 475,76 -> 475,70 -> 475,76 -> 477,76 -> 477,71 -> 477,76 -> 479,76 -> 479,73 -> 479,76 -> 481,76 -> 481,74 -> 481,76 -> 483,76 -> 483,72 -> 483,76
|
||||
512,169 -> 516,169
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
494,32 -> 499,32
|
||||
490,16 -> 490,20 -> 484,20 -> 484,26 -> 499,26 -> 499,20 -> 494,20 -> 494,16
|
||||
488,106 -> 488,97 -> 488,106 -> 490,106 -> 490,100 -> 490,106 -> 492,106 -> 492,101 -> 492,106 -> 494,106 -> 494,105 -> 494,106 -> 496,106 -> 496,96 -> 496,106 -> 498,106 -> 498,102 -> 498,106 -> 500,106 -> 500,101 -> 500,106 -> 502,106 -> 502,102 -> 502,106 -> 504,106 -> 504,100 -> 504,106
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
405
Days/Day15.cs
405
Days/Day15.cs
@@ -1,292 +1,193 @@
|
||||
using System.Collections.Concurrent;
|
||||
using System.Drawing;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class SensorBeaconPair
|
||||
{
|
||||
public Point SensorPosition { get; }
|
||||
public Point BeaconPosition { get; }
|
||||
|
||||
public int SensorRange =>
|
||||
Math.Abs(SensorPosition.X - BeaconPosition.X) + Math.Abs(SensorPosition.Y - BeaconPosition.Y);
|
||||
|
||||
public SensorBeaconPair(in Point sensorPosition, in Point beaconPosition)
|
||||
{
|
||||
SensorPosition = sensorPosition;
|
||||
BeaconPosition = beaconPosition;
|
||||
}
|
||||
}
|
||||
|
||||
public class CoverRange
|
||||
{
|
||||
public int Start { get; }
|
||||
public int End { get; }
|
||||
public int Covered => End - Start + 1;
|
||||
|
||||
public CoverRange(int start, int end)
|
||||
{
|
||||
Start = start;
|
||||
End = end;
|
||||
}
|
||||
|
||||
public CoverRange(CoverRange coverRange)
|
||||
{
|
||||
Start = coverRange.Start;
|
||||
End = coverRange.End;
|
||||
}
|
||||
|
||||
public CoverRange Subtract(CoverRange other)
|
||||
{
|
||||
// Overlap on left
|
||||
int newStart;
|
||||
if (other.Start <= Start && other.End >= Start)
|
||||
{
|
||||
newStart = other.End + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
newStart = Start;
|
||||
}
|
||||
|
||||
// Overlap on right
|
||||
int newEnd;
|
||||
if (other.Start <= End && other.End >= End)
|
||||
{
|
||||
newEnd = other.Start - 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
newEnd = End;
|
||||
}
|
||||
|
||||
return new CoverRange(newStart, newEnd);
|
||||
}
|
||||
|
||||
public static CoverRange operator -(CoverRange left, CoverRange right)
|
||||
{
|
||||
return left.Subtract(right);
|
||||
}
|
||||
}
|
||||
|
||||
public class Day15 : Day
|
||||
{
|
||||
public override int Number => 15;
|
||||
public override string Name => "Beacon Exclusion Zone";
|
||||
public override string Name => "Warehouse Woes";
|
||||
|
||||
private const int Size = 50;
|
||||
|
||||
private const char Wall = '#';
|
||||
private const char Box = 'O';
|
||||
private const char Empty = '.';
|
||||
|
||||
private const char InstructionLeft = '<';
|
||||
private const char InstructionRight = '>';
|
||||
private const char InstructionUp = '^';
|
||||
private const char InstructionDown = 'v';
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
const int targetY = 2_000_000;
|
||||
var (map, position, instructions) = ParseMap();
|
||||
|
||||
// Parse pairs
|
||||
var pairs = ParsePairs();
|
||||
|
||||
var ranges = new List<CoverRange>(pairs.Count);
|
||||
|
||||
// Get which columns are included on line targetY, remove the ones which already contains a beacon
|
||||
var beaconsOnTargetY = new HashSet<int>();
|
||||
foreach (var sensorBeaconPair in pairs)
|
||||
foreach (var instruction in instructions)
|
||||
{
|
||||
// Get covered columns on y line
|
||||
var xCenter = sensorBeaconPair.SensorPosition.X;
|
||||
var coveredColumns = sensorBeaconPair.SensorRange - Math.Abs(sensorBeaconPair.SensorPosition.Y - targetY);
|
||||
|
||||
if (coveredColumns > 0)
|
||||
var direction = instruction switch
|
||||
{
|
||||
ranges.Add(new CoverRange(xCenter - coveredColumns, xCenter + coveredColumns));
|
||||
InstructionLeft => new Point(-1, 0),
|
||||
InstructionRight => new Point(1, 0),
|
||||
InstructionUp => new Point(0, -1),
|
||||
InstructionDown => new Point(0, 1),
|
||||
_ => throw new ArgumentException($"Invalid instruction: {instruction}")
|
||||
};
|
||||
|
||||
// Check if the beacon is on targetY
|
||||
if (sensorBeaconPair.BeaconPosition.Y == targetY)
|
||||
var destination = position + direction;
|
||||
|
||||
// Destination is free, just move
|
||||
if (map[destination.X, destination.Y] is not (Wall or Box))
|
||||
{
|
||||
position = destination;
|
||||
}
|
||||
// Destination is a box, check if there is a free space further up and move accordingly
|
||||
else if (map[destination.X, destination.Y] is Box)
|
||||
{
|
||||
var pushTarget = destination + direction;
|
||||
|
||||
while (map[pushTarget.X, pushTarget.Y] is Box)
|
||||
{
|
||||
beaconsOnTargetY.Add(sensorBeaconPair.BeaconPosition.X);
|
||||
pushTarget += direction;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Remove overlapped ranges => inner.Start >= outer.Start && inner.End <= outer.End));
|
||||
ranges.RemoveAll(inner =>
|
||||
ranges.Where(outer => outer != inner).Any(outer => inner.Start >= outer.Start && inner.End <= outer.End));
|
||||
|
||||
// Compute unique number of x columns
|
||||
long totalCovered = 0;
|
||||
for (int i = 0; i < ranges.Count; i++)
|
||||
{
|
||||
var range = ranges[i];
|
||||
var coverRange = range;
|
||||
|
||||
// Add number of covered columns and then subtract common ones
|
||||
for (int j = i + 1; j < ranges.Count; j++)
|
||||
{
|
||||
var exclude = ranges[j];
|
||||
|
||||
coverRange -= exclude;
|
||||
}
|
||||
|
||||
totalCovered += coverRange.Covered;
|
||||
}
|
||||
|
||||
// Remove lines which contains a beacon
|
||||
totalCovered -= beaconsOnTargetY.Count;
|
||||
|
||||
// Print total covered columns on line Y
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Number of positions that cannot contain a beacon: [yellow]{totalCovered}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
const int xMin = 0;
|
||||
const int xMax = 4_000_000;
|
||||
const int yMin = 0;
|
||||
const int yMax = 4_000_000;
|
||||
|
||||
bool IsOutbound(Point point) => point.X is < xMin or > xMax || point.Y is < yMin or > yMax;
|
||||
|
||||
// Parse pairs
|
||||
var pairs = ParsePairs();
|
||||
|
||||
// Find all points that are just outside a sensor range
|
||||
var possiblePoints = new ConcurrentBag<Point>();
|
||||
|
||||
Parallel.For(0, pairs.Count, i =>
|
||||
{
|
||||
var pair = pairs[i];
|
||||
|
||||
var sensor = pair.SensorPosition;
|
||||
var distance = pair.SensorRange + 1;
|
||||
|
||||
for (int x = -distance; x <= distance; x++)
|
||||
{
|
||||
var y = distance - Math.Abs(x);
|
||||
var positivePoint = new Point(sensor.X + x, sensor.Y + y);
|
||||
var negativePoint = new Point(sensor.X + x, sensor.Y - y);
|
||||
|
||||
// If both points are outbound, just skip
|
||||
var positiveIsOutbound = IsOutbound(positivePoint);
|
||||
var negativeIsOutbound = IsOutbound(negativePoint);
|
||||
|
||||
if (positiveIsOutbound && negativeIsOutbound)
|
||||
// Cannot move anything since there is a wall
|
||||
if (map[pushTarget.X, pushTarget.Y] is Wall)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Check if this point is just outside at least one other sensor range
|
||||
for (int otherIndex = 0; otherIndex < pairs.Count; otherIndex++)
|
||||
// Move robot and boxes (only need to move first and last box of a chain)
|
||||
position = destination;
|
||||
|
||||
map[destination.X, destination.Y] = Empty;
|
||||
map[pushTarget.X, pushTarget.Y] = Box;
|
||||
}
|
||||
// Else destination is a wall, do nothing
|
||||
}
|
||||
|
||||
var coordinatesSum = 0;
|
||||
|
||||
// Count gps coordinates
|
||||
for (var x = 0; x < Size; x++)
|
||||
{
|
||||
for (var y = 0; y < Size; y++)
|
||||
{
|
||||
if (map[x, y] is Box)
|
||||
{
|
||||
if (otherIndex == i)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
coordinatesSum += 100 * y + x;
|
||||
|
||||
var otherPair = pairs[otherIndex];
|
||||
|
||||
var otherSensor = otherPair.SensorPosition;
|
||||
var otherDistance = otherPair.SensorRange + 1;
|
||||
|
||||
if (!positiveIsOutbound)
|
||||
{
|
||||
var distancePositive = Math.Abs(positivePoint.X - otherSensor.X) +
|
||||
Math.Abs(positivePoint.Y - otherSensor.Y);
|
||||
|
||||
if (distancePositive == otherDistance)
|
||||
{
|
||||
possiblePoints.Add(positivePoint);
|
||||
}
|
||||
}
|
||||
|
||||
if (!negativeIsOutbound)
|
||||
{
|
||||
var distanceNegative = Math.Abs(negativePoint.X - negativePoint.X) +
|
||||
Math.Abs(negativePoint.Y - negativePoint.Y);
|
||||
|
||||
if (distanceNegative == otherDistance)
|
||||
{
|
||||
possiblePoints.Add(negativePoint);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Keep the only outside detection point
|
||||
var finalPoint = possiblePoints.First(f =>
|
||||
pairs.All(p => Math.Abs(f.X - p.SensorPosition.X) + Math.Abs(f.Y - p.SensorPosition.Y) > p.SensorRange));
|
||||
|
||||
var tuningFrequency = finalPoint.X * (long) 4_000_000 + finalPoint.Y;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Tuning frequency: [yellow]{tuningFrequency}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Sum of boxes GPS coordinates: [yellow]{coordinatesSum}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private static IList<SensorBeaconPair> ParsePairs()
|
||||
private static void DisplayGrid(char[,] map)
|
||||
{
|
||||
var pairs = new List<SensorBeaconPair>();
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
for (var y = 0; y < Size; y++)
|
||||
{
|
||||
var span = line.AsSpan();
|
||||
for (var x = 0; x < Size; x++)
|
||||
{
|
||||
AnsiConsole.Write(map[x, y]);
|
||||
}
|
||||
|
||||
// Parse sensor position
|
||||
int sensorXStart = span.IndexOf('=') + 1;
|
||||
int sensorXEnd = span.IndexOf(',');
|
||||
|
||||
var sensorX = int.Parse(span[sensorXStart..sensorXEnd]);
|
||||
span = span[sensorXEnd..];
|
||||
|
||||
int sensorYStart = span.IndexOf('=') + 1;
|
||||
int sensorYEnd = span.IndexOf(':');
|
||||
|
||||
var sensorY = int.Parse(span[sensorYStart..sensorYEnd]);
|
||||
span = span[sensorYEnd..];
|
||||
|
||||
// Parse beacon
|
||||
int beaconXStart = span.IndexOf('=') + 1;
|
||||
int beaconXEnd = span.IndexOf(',');
|
||||
|
||||
var beaconX = int.Parse(span[beaconXStart..beaconXEnd]);
|
||||
span = span[beaconXEnd..];
|
||||
|
||||
int beaconYStart = span.IndexOf('=') + 1;
|
||||
|
||||
var beaconY = int.Parse(span[beaconYStart..]);
|
||||
|
||||
pairs.Add(new SensorBeaconPair(new Point(sensorX, sensorY), new Point(beaconX, beaconY)));
|
||||
AnsiConsole.WriteLine();
|
||||
}
|
||||
|
||||
return pairs;
|
||||
AnsiConsole.WriteLine();
|
||||
}
|
||||
|
||||
#region Input
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
Sensor at x=1384790, y=3850432: closest beacon is at x=2674241, y=4192888
|
||||
Sensor at x=2825953, y=288046: closest beacon is at x=2154954, y=-342775
|
||||
Sensor at x=3553843, y=2822363: closest beacon is at x=3444765, y=2347460
|
||||
Sensor at x=2495377, y=3130491: closest beacon is at x=2761496, y=2831113
|
||||
Sensor at x=1329263, y=1778185: closest beacon is at x=2729595, y=2000000
|
||||
Sensor at x=2882039, y=2206085: closest beacon is at x=2729595, y=2000000
|
||||
Sensor at x=3903141, y=2510440: closest beacon is at x=4006219, y=3011198
|
||||
Sensor at x=3403454, y=3996578: closest beacon is at x=3754119, y=4475047
|
||||
Sensor at x=3630476, y=1048796: closest beacon is at x=3444765, y=2347460
|
||||
Sensor at x=16252, y=2089672: closest beacon is at x=-276514, y=2995794
|
||||
Sensor at x=428672, y=1150723: closest beacon is at x=-281319, y=668868
|
||||
Sensor at x=2939101, y=3624676: closest beacon is at x=2674241, y=4192888
|
||||
Sensor at x=3166958, y=2890076: closest beacon is at x=2761496, y=2831113
|
||||
Sensor at x=3758241, y=3546895: closest beacon is at x=4006219, y=3011198
|
||||
Sensor at x=218942, y=3011070: closest beacon is at x=-276514, y=2995794
|
||||
Sensor at x=52656, y=3484635: closest beacon is at x=-276514, y=2995794
|
||||
Sensor at x=2057106, y=405314: closest beacon is at x=2154954, y=-342775
|
||||
Sensor at x=1966905, y=2495701: closest beacon is at x=2761496, y=2831113
|
||||
Sensor at x=511976, y=2696731: closest beacon is at x=-276514, y=2995794
|
||||
Sensor at x=3094465, y=2478570: closest beacon is at x=3444765, y=2347460
|
||||
Sensor at x=806671, y=228252: closest beacon is at x=-281319, y=668868
|
||||
Sensor at x=3011731, y=1976307: closest beacon is at x=2729595, y=2000000
|
||||
""";
|
||||
}
|
||||
|
||||
#endregion
|
||||
private (char[,] Map, Point Start, List<char> Instructions) ParseMap()
|
||||
{
|
||||
var readingMap = true;
|
||||
|
||||
var map = new char[Size, Size];
|
||||
|
||||
Point start = default;
|
||||
|
||||
var instructions = new List<char>();
|
||||
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
if (line.IsWhiteSpace())
|
||||
{
|
||||
readingMap = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (readingMap)
|
||||
{
|
||||
var x = 0;
|
||||
foreach (var symbol in line)
|
||||
{
|
||||
map[x, y] = Empty;
|
||||
|
||||
if (symbol is Wall or Box)
|
||||
{
|
||||
map[x, y] = symbol;
|
||||
}
|
||||
else if (symbol is '@')
|
||||
{
|
||||
start = new Point(x, y);
|
||||
}
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var instruction in line)
|
||||
{
|
||||
instructions.Add(instruction);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (map, start, instructions);
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
}
|
||||
289
Days/Day16.cs
Normal file
289
Days/Day16.cs
Normal file
@@ -0,0 +1,289 @@
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day16 : Day
|
||||
{
|
||||
public override int Number => 16;
|
||||
public override string Name => "Reindeer Maze";
|
||||
|
||||
private const int Size = 141;
|
||||
|
||||
private const char Wall = '#';
|
||||
private const char Empty = '.';
|
||||
private const char Start = 'S';
|
||||
private const char End = 'E';
|
||||
|
||||
private static readonly Point DirectionUp = new(0, -1);
|
||||
private static readonly Point DirectionDown = new(0, 1);
|
||||
private static readonly Point DirectionLeft = new(-1, 0);
|
||||
private static readonly Point DirectionRight = new(1, 0);
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (maze, start, end) = ParseMaze();
|
||||
|
||||
var visited = new Dictionary<(Point Position, Point Direction), int>();
|
||||
|
||||
var minimumScore = int.MaxValue;
|
||||
|
||||
var toVisit = new Queue<(Point Position, Point Direction, int Score)>();
|
||||
|
||||
toVisit.Enqueue((start, DirectionRight, 0));
|
||||
|
||||
while (toVisit.Count > 0)
|
||||
{
|
||||
var (position, direction, score) = toVisit.Dequeue();
|
||||
|
||||
if (visited.TryGetValue((position, direction), out var savedScore) && savedScore <= score)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
visited[(position, direction)] = score;
|
||||
|
||||
// Reached end
|
||||
if (position == end)
|
||||
{
|
||||
if (score < minimumScore)
|
||||
{
|
||||
minimumScore = score;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try forward if there is no wall
|
||||
var destination = position + direction;
|
||||
|
||||
if (maze[destination.X, destination.Y] is not Wall)
|
||||
{
|
||||
toVisit.Enqueue((destination, direction, score + 1));
|
||||
}
|
||||
|
||||
// Also try changing direction
|
||||
toVisit.Enqueue((position, NextDirection(direction), score + 1000));
|
||||
toVisit.Enqueue((position, PreviousDirection(direction), score + 1000));
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Lowest score: [yellow]{minimumScore}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var (maze, start, end) = ParseMaze();
|
||||
|
||||
var visited = new Dictionary<(Point Position, Point Direction), int>();
|
||||
|
||||
var minimumScore = int.MaxValue;
|
||||
|
||||
var toVisit = new Queue<(Point Position, Point Direction, int Score)>();
|
||||
|
||||
toVisit.Enqueue((start, DirectionRight, 0));
|
||||
|
||||
// First we need to find minimum score
|
||||
while (toVisit.Count > 0)
|
||||
{
|
||||
var (position, direction, score) = toVisit.Dequeue();
|
||||
|
||||
if (visited.TryGetValue((position, direction), out var savedScore) && savedScore <= score)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
visited[(position, direction)] = score;
|
||||
|
||||
// Reached end
|
||||
if (position == end)
|
||||
{
|
||||
if (score < minimumScore)
|
||||
{
|
||||
minimumScore = score;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try forward if there is no wall
|
||||
var destination = position + direction;
|
||||
|
||||
if (maze[destination.X, destination.Y] is not Wall)
|
||||
{
|
||||
toVisit.Enqueue((destination, direction, score + 1));
|
||||
}
|
||||
|
||||
// Also try changing direction
|
||||
toVisit.Enqueue((position, NextDirection(direction), score + 1000));
|
||||
toVisit.Enqueue((position, PreviousDirection(direction), score + 1000));
|
||||
}
|
||||
|
||||
// Now that we have minimum score, we need to find all the paths that lead to this score
|
||||
var toVisitPath = new Stack<(Point Position, Point Direction, int Score, List<Point> Path)>();
|
||||
toVisitPath.Push((start, DirectionRight, 0, []));
|
||||
|
||||
var minimumScorePaths = new List<List<Point>>();
|
||||
|
||||
while (toVisitPath.Count > 0)
|
||||
{
|
||||
var (position, direction, score, path) = toVisitPath.Pop();
|
||||
|
||||
if (score > minimumScore)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (visited.TryGetValue((position, direction), out var savedScore) && savedScore < score)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
path.Add(position);
|
||||
|
||||
// Reached end
|
||||
if (position == end)
|
||||
{
|
||||
minimumScorePaths.Add(path);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
// Try forward if there is no wall
|
||||
var destination = position + direction;
|
||||
|
||||
if (maze[destination.X, destination.Y] is not Wall)
|
||||
{
|
||||
toVisitPath.Push((destination, direction, score + 1, path));
|
||||
}
|
||||
|
||||
// Also try changing direction
|
||||
toVisitPath.Push((position, NextDirection(direction), score + 1000, path.ToList()));
|
||||
toVisitPath.Push((position, PreviousDirection(direction), score + 1000, path.ToList()));
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Unique positions in optimal paths: [yellow]{minimumScorePaths.SelectMany(l => l).ToHashSet().Count}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private (char[,] Maze, Point Start, Point end) ParseMaze()
|
||||
{
|
||||
var maze = new char[Size, Size];
|
||||
Point start = default;
|
||||
Point end = default;
|
||||
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var x = 0;
|
||||
foreach (var symbol in line)
|
||||
{
|
||||
if (symbol is Start)
|
||||
{
|
||||
start = new Point(x, y);
|
||||
|
||||
maze[x, y] = Empty;
|
||||
}
|
||||
else if (symbol is End)
|
||||
{
|
||||
end = new Point(x, y);
|
||||
|
||||
maze[x, y] = Empty;
|
||||
}
|
||||
else
|
||||
{
|
||||
maze[x, y] = symbol;
|
||||
}
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
return (maze, start, end);
|
||||
}
|
||||
|
||||
private static Point NextDirection(Point direction)
|
||||
{
|
||||
if (direction == DirectionUp)
|
||||
{
|
||||
return DirectionRight;
|
||||
}
|
||||
|
||||
if (direction == DirectionRight)
|
||||
{
|
||||
return DirectionDown;
|
||||
}
|
||||
|
||||
if (direction == DirectionDown)
|
||||
{
|
||||
return DirectionLeft;
|
||||
}
|
||||
|
||||
if (direction == DirectionLeft)
|
||||
{
|
||||
return DirectionUp;
|
||||
}
|
||||
|
||||
throw new ArgumentException("Invalid direction", nameof(direction));
|
||||
}
|
||||
|
||||
private static Point PreviousDirection(Point direction)
|
||||
{
|
||||
if (direction == DirectionUp)
|
||||
{
|
||||
return DirectionLeft;
|
||||
}
|
||||
|
||||
if (direction == DirectionLeft)
|
||||
{
|
||||
return DirectionDown;
|
||||
}
|
||||
|
||||
if (direction == DirectionDown)
|
||||
{
|
||||
return DirectionRight;
|
||||
}
|
||||
|
||||
if (direction == DirectionRight)
|
||||
{
|
||||
return DirectionUp;
|
||||
}
|
||||
|
||||
throw new ArgumentException("Invalid direction", nameof(direction));
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
}
|
||||
247
Days/Day17.cs
Normal file
247
Days/Day17.cs
Normal file
@@ -0,0 +1,247 @@
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day17 : Day
|
||||
{
|
||||
public override int Number => 17;
|
||||
public override string Name => "Chronospatial Computer";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (registerA, registerB, registerC, program) = ParseState();
|
||||
|
||||
var toOutput = new List<int>();
|
||||
var instructionPointer = 0;
|
||||
|
||||
while (instructionPointer < program.Length)
|
||||
{
|
||||
var opCode = program[instructionPointer];
|
||||
|
||||
var isComboOperand = opCode switch
|
||||
{
|
||||
0 => true,
|
||||
1 => false,
|
||||
2 => true,
|
||||
3 => false,
|
||||
4 => false,
|
||||
5 => true,
|
||||
6 => true,
|
||||
7 => true,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(opCode))
|
||||
};
|
||||
|
||||
var operand = (isComboOperand, program[instructionPointer + 1]) switch
|
||||
{
|
||||
(false, var literalValue) => literalValue,
|
||||
(true, 0) => 0,
|
||||
(true, 1) => 1,
|
||||
(true, 2) => 2,
|
||||
(true, 3) => 3,
|
||||
(true, 4) => registerA,
|
||||
(true, 5) => registerB,
|
||||
(true, 6) => registerC,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
switch (opCode)
|
||||
{
|
||||
// adv
|
||||
case 0:
|
||||
registerA = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
|
||||
// bxl
|
||||
case 1:
|
||||
registerB = registerB ^ operand;
|
||||
break;
|
||||
|
||||
// bst
|
||||
case 2:
|
||||
registerB = operand % 8;
|
||||
break;
|
||||
|
||||
// jnz
|
||||
case 3:
|
||||
if (registerA is not 0)
|
||||
{
|
||||
instructionPointer = operand - 2;
|
||||
}
|
||||
break;
|
||||
|
||||
// bxc
|
||||
case 4:
|
||||
registerB = registerB ^ registerC;
|
||||
break;
|
||||
|
||||
// out
|
||||
case 5:
|
||||
toOutput.Add(operand % 8);
|
||||
break;
|
||||
|
||||
// bdv
|
||||
case 6:
|
||||
registerB = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
|
||||
// cdv
|
||||
case 7:
|
||||
registerC = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
}
|
||||
|
||||
instructionPointer += 2;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Output: [yellow]{string.Join(',', toOutput)}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var (_, originalRegisterB, originalRegisterC, program) = ParseState();
|
||||
var toOutput = new List<int>();
|
||||
var instructionPointer = 0;
|
||||
|
||||
var finalRegisterA = 0;
|
||||
|
||||
AnsiConsole.Status().Start("Computing (0)...", ctx =>
|
||||
{
|
||||
for (var initialRegisterA = 0; initialRegisterA < int.MaxValue; initialRegisterA++)
|
||||
{
|
||||
// Reset state
|
||||
var registerA = initialRegisterA;
|
||||
var registerB = originalRegisterB;
|
||||
var registerC = originalRegisterC;
|
||||
|
||||
toOutput.Clear();
|
||||
instructionPointer = 0;
|
||||
|
||||
while (instructionPointer < program.Length)
|
||||
{
|
||||
var opCode = program[instructionPointer];
|
||||
|
||||
var isComboOperand = opCode switch
|
||||
{
|
||||
0 => true,
|
||||
1 => false,
|
||||
2 => true,
|
||||
3 => false,
|
||||
4 => false,
|
||||
5 => true,
|
||||
6 => true,
|
||||
7 => true,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(opCode))
|
||||
};
|
||||
|
||||
var operand = (isComboOperand, program[instructionPointer + 1]) switch
|
||||
{
|
||||
(false, var literalValue) => literalValue,
|
||||
(true, 0) => 0,
|
||||
(true, 1) => 1,
|
||||
(true, 2) => 2,
|
||||
(true, 3) => 3,
|
||||
(true, 4) => registerA,
|
||||
(true, 5) => registerB,
|
||||
(true, 6) => registerC,
|
||||
_ => throw new ArgumentOutOfRangeException()
|
||||
};
|
||||
|
||||
switch (opCode)
|
||||
{
|
||||
// adv
|
||||
case 0:
|
||||
registerA = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
|
||||
// bxl
|
||||
case 1:
|
||||
registerB = registerB ^ operand;
|
||||
break;
|
||||
|
||||
// bst
|
||||
case 2:
|
||||
registerB = operand % 8;
|
||||
break;
|
||||
|
||||
// jnz
|
||||
case 3:
|
||||
if (registerA is not 0)
|
||||
{
|
||||
instructionPointer = operand - 2;
|
||||
}
|
||||
break;
|
||||
|
||||
// bxc
|
||||
case 4:
|
||||
registerB = registerB ^ registerC;
|
||||
break;
|
||||
|
||||
// out
|
||||
case 5:
|
||||
toOutput.Add(operand % 8);
|
||||
break;
|
||||
|
||||
// bdv
|
||||
case 6:
|
||||
registerB = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
|
||||
// cdv
|
||||
case 7:
|
||||
registerC = (int)(registerA / Math.Pow(2, operand));
|
||||
break;
|
||||
}
|
||||
|
||||
instructionPointer += 2;
|
||||
}
|
||||
|
||||
if (initialRegisterA % 1000 == 0)
|
||||
{
|
||||
ctx.Status($"Computing ({initialRegisterA})...");
|
||||
}
|
||||
|
||||
// Check if output is the program itself
|
||||
if (toOutput.SequenceEqual(program))
|
||||
{
|
||||
finalRegisterA = initialRegisterA;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Lowest possible value for register A to output itself: [yellow]{finalRegisterA}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private (int RegisterA, int RegisterN, int RegisterC, int[] Program) ParseState()
|
||||
{
|
||||
var lineIterator = Input.AsSpan().EnumerateLines();
|
||||
|
||||
lineIterator.MoveNext();
|
||||
var registerA = int.Parse(lineIterator.Current[(lineIterator.Current.IndexOf(':') + 2)..]);
|
||||
|
||||
lineIterator.MoveNext();
|
||||
var registerB = int.Parse(lineIterator.Current[(lineIterator.Current.IndexOf(':') + 2)..]);
|
||||
|
||||
lineIterator.MoveNext();
|
||||
var registerC = int.Parse(lineIterator.Current[(lineIterator.Current.IndexOf(':') + 2)..]);
|
||||
|
||||
lineIterator.MoveNext();
|
||||
lineIterator.MoveNext();
|
||||
|
||||
var program = lineIterator.Current[(lineIterator.Current.IndexOf(':') + 2)..]
|
||||
.ToString()
|
||||
.Split(',')
|
||||
.Select(int.Parse)
|
||||
.ToArray();
|
||||
|
||||
return (registerA, registerB, registerC, program);
|
||||
}
|
||||
}
|
||||
204
Days/Day18.cs
Normal file
204
Days/Day18.cs
Normal file
@@ -0,0 +1,204 @@
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day18 : Day
|
||||
{
|
||||
public override int Number => 18;
|
||||
public override string Name => "RAM Run";
|
||||
|
||||
private const int Size = 71;
|
||||
|
||||
private const char Corrupted = '#';
|
||||
private const char Empty = ' ';
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var grid = ParseGrid(1024);
|
||||
|
||||
var visited = new Dictionary<Point, int>();
|
||||
var toVisit = new Queue<(Point Position, int Score)>();
|
||||
|
||||
var end = new Point(Size - 1, Size - 1);
|
||||
|
||||
var minimumScore = int.MaxValue;
|
||||
|
||||
toVisit.Enqueue((new Point(0, 0), 0));
|
||||
|
||||
while (toVisit.Count > 0)
|
||||
{
|
||||
var (position, score) = toVisit.Dequeue();
|
||||
|
||||
// Cannot go out of bounds
|
||||
if (position is { X: < 0 or >= Size } or { Y: < 0 or >= Size })
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cannot go onto a corrupted space
|
||||
if (grid[position.X, position.Y] is Corrupted)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (visited.TryGetValue(position, out var savedScore) && savedScore <= score)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
visited[position] = score;
|
||||
|
||||
// End
|
||||
if (position == end)
|
||||
{
|
||||
if (score < minimumScore)
|
||||
{
|
||||
minimumScore = score;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
toVisit.Enqueue((position + (1, 0), score + 1));
|
||||
toVisit.Enqueue((position + (-1, 0), score + 1));
|
||||
toVisit.Enqueue((position + (0, 1), score + 1));
|
||||
toVisit.Enqueue((position + (0, -1), score + 1));
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Minimum number of steps to reach the exit: [yellow]{minimumScore}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
(int X, int Y)[] bytesToFall = Input.ReadAllLines()
|
||||
.Select(line => line.Split(','))
|
||||
.Select(split => (int.Parse(split[0]), int.Parse(split[1])))
|
||||
.ToArray();
|
||||
|
||||
var nextByteIndex = 1024;
|
||||
var grid = ParseGrid(1024);
|
||||
|
||||
while (true)
|
||||
{
|
||||
var nextByte = bytesToFall[nextByteIndex];
|
||||
|
||||
grid[nextByte.X, nextByte.Y] = Corrupted;
|
||||
|
||||
if (!IsGridCompletable())
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
nextByteIndex++;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Grid will be blocked at byte n°{nextByteIndex} at position: [yellow]{bytesToFall[nextByteIndex]}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
bool IsGridCompletable()
|
||||
{
|
||||
var visited = new HashSet<Point>();
|
||||
var toVisit = new Queue<Point>();
|
||||
|
||||
var end = new Point(Size - 1, Size - 1);
|
||||
|
||||
toVisit.Enqueue(new Point(0, 0));
|
||||
|
||||
while (toVisit.Count > 0)
|
||||
{
|
||||
var position = toVisit.Dequeue();
|
||||
|
||||
// Cannot go out of bounds
|
||||
if (position is { X: < 0 or >= Size } or { Y: < 0 or >= Size })
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// Cannot go onto a corrupted space
|
||||
if (grid[position.X, position.Y] is Corrupted)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!visited.Add(position))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
// End
|
||||
if (position == end)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
toVisit.Enqueue(position + (1, 0));
|
||||
toVisit.Enqueue(position + (-1, 0));
|
||||
toVisit.Enqueue(position + (0, 1));
|
||||
toVisit.Enqueue(position + (0, -1));
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private char[,] ParseGrid(int limit)
|
||||
{
|
||||
var grid = new char[Size, Size];
|
||||
|
||||
var counter = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
if (counter >= limit)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
var x = int.Parse(line[..line.IndexOf(',')]);
|
||||
var y = int.Parse(line[(line.IndexOf(',') + 1)..]);
|
||||
|
||||
grid[x, y] = Corrupted;
|
||||
|
||||
counter++;
|
||||
}
|
||||
|
||||
return grid;
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
}
|
||||
}
|
||||
179
Days/Day19.cs
Normal file
179
Days/Day19.cs
Normal file
@@ -0,0 +1,179 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day19 : Day
|
||||
{
|
||||
public override int Number => 19;
|
||||
public override string Name => "Linen Layout";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (towels, patterns) = ParseInput();
|
||||
var impossiblePatterns = new HashSet<string>();
|
||||
|
||||
var possiblePatterns = 0;
|
||||
|
||||
foreach (var pattern in patterns)
|
||||
{
|
||||
// Check if it's possible to make this pattern
|
||||
if (CheckPattern(pattern))
|
||||
{
|
||||
possiblePatterns++;
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Number of designs that are possible: [yellow]{possiblePatterns}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
bool CheckPattern(ReadOnlySpan<char> pattern)
|
||||
{
|
||||
// Console.WriteLine($"Checking '{pattern}'");
|
||||
|
||||
if (pattern.Length is 0)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (impossiblePatterns.Contains(pattern.ToString()))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
var prefix = pattern[0];
|
||||
|
||||
if (!towels.TryGetValue(prefix, out var towelsList))
|
||||
{
|
||||
impossiblePatterns.Add(pattern.ToString());
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
foreach (var towel in towelsList)
|
||||
{
|
||||
if (pattern.StartsWith(towel) && CheckPattern(pattern[towel.Length..]))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
impossiblePatterns.Add(pattern.ToString());
|
||||
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var (towels, patterns) = ParseInput();
|
||||
var impossiblePatterns = new HashSet<string>();
|
||||
var knownPatterns = new Dictionary<string, long>();
|
||||
|
||||
var possibleCombinations = 0L;
|
||||
|
||||
foreach (var pattern in patterns)
|
||||
{
|
||||
// Check if it's possible to make this pattern
|
||||
possibleCombinations += CheckPattern(pattern);
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Number of combinations that are possible: [yellow]{possibleCombinations}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
long CheckPattern(ReadOnlySpan<char> pattern)
|
||||
{
|
||||
if (pattern.Length is 0)
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (impossiblePatterns.Contains(pattern.ToString()))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (knownPatterns.TryGetValue(pattern.ToString(), out var count))
|
||||
{
|
||||
return count;
|
||||
}
|
||||
|
||||
var prefix = pattern[0];
|
||||
|
||||
if (!towels.TryGetValue(prefix, out var towelsList))
|
||||
{
|
||||
impossiblePatterns.Add(pattern.ToString());
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
var possibilities = 0L;
|
||||
|
||||
foreach (var towel in towelsList)
|
||||
{
|
||||
if (pattern.StartsWith(towel))
|
||||
{
|
||||
possibilities += CheckPattern(pattern[towel.Length..]);
|
||||
}
|
||||
}
|
||||
|
||||
if (possibilities is 0)
|
||||
{
|
||||
impossiblePatterns.Add(pattern.ToString());
|
||||
}
|
||||
else
|
||||
{
|
||||
knownPatterns.Add(pattern.ToString(), possibilities);
|
||||
}
|
||||
|
||||
return possibilities;
|
||||
}
|
||||
}
|
||||
|
||||
private (FrozenDictionary<char, List<string>> Towels, List<string> Patterns) ParseInput()
|
||||
{
|
||||
var towels = new Dictionary<char, List<string>>();
|
||||
var patterns = new List<string>();
|
||||
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
if (towels.Count is 0)
|
||||
{
|
||||
var split = line.Split(", ");
|
||||
|
||||
foreach (var range in split)
|
||||
{
|
||||
var towel = line[range].Trim();
|
||||
|
||||
var prefix = towel[0];
|
||||
|
||||
if (!towels.TryGetValue(prefix, out var towelsList))
|
||||
{
|
||||
towelsList = [];
|
||||
towels[prefix] = towelsList;
|
||||
}
|
||||
|
||||
towelsList.Add(towel.ToString());
|
||||
}
|
||||
}
|
||||
else if (!line.IsWhiteSpace())
|
||||
{
|
||||
var pattern = line.Trim();
|
||||
|
||||
patterns.Add(pattern.ToString());
|
||||
}
|
||||
}
|
||||
|
||||
return (towels.ToFrozenDictionary(), patterns);
|
||||
}
|
||||
}
|
||||
2693
Days/Day2.cs
2693
Days/Day2.cs
File diff suppressed because it is too large
Load Diff
288
Days/Day20.cs
Normal file
288
Days/Day20.cs
Normal file
@@ -0,0 +1,288 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day20 : Day
|
||||
{
|
||||
public override int Number => 20;
|
||||
public override string Name => "Race Condition";
|
||||
|
||||
private const int Size = 141;
|
||||
private const char Wall = '#';
|
||||
private const char Empty = '.';
|
||||
|
||||
private readonly List<Point> _cheatOffsets =
|
||||
[
|
||||
(2, 0),
|
||||
(1, 1),
|
||||
(0, 2),
|
||||
(-1, 1),
|
||||
(-2, 0),
|
||||
(-1, -1),
|
||||
(0, -2),
|
||||
(1, -1)
|
||||
];
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (map, start, end) = ParseMap();
|
||||
|
||||
// Find track path
|
||||
var trackPath = new List<Point>();
|
||||
var distanceFromStart = new Dictionary<Point, int>();
|
||||
|
||||
var position = start;
|
||||
|
||||
var distance = 0;
|
||||
while (position != end)
|
||||
{
|
||||
trackPath.Add(position);
|
||||
distanceFromStart[position] = distance;
|
||||
|
||||
// Find next track position
|
||||
distance++;
|
||||
var up = position + new Point(0, -1);
|
||||
if (up is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[up.X, up.Y] is not Wall && !distanceFromStart.ContainsKey(up))
|
||||
{
|
||||
position = up;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var down = position + new Point(0, 1);
|
||||
if (down is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[down.X, down.Y] is not Wall && !distanceFromStart.ContainsKey(down))
|
||||
{
|
||||
position = down;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var left = position + new Point(-1, 0);
|
||||
if (left is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[left.X, left.Y] is not Wall && !distanceFromStart.ContainsKey(left))
|
||||
{
|
||||
position = left;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var right = position + new Point(1, 0);
|
||||
if (right is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[right.X, right.Y] is not Wall && !distanceFromStart.ContainsKey(right))
|
||||
{
|
||||
position = right;
|
||||
}
|
||||
}
|
||||
|
||||
// Also add end
|
||||
trackPath.Add(position);
|
||||
distanceFromStart[position] = distance;
|
||||
|
||||
var cheats = new Dictionary<(Point StartPosition, Point EndPosition), int>();
|
||||
|
||||
// Now return to start and try all possible combination of cheats for each track position
|
||||
foreach (var trackPosition in trackPath)
|
||||
{
|
||||
var originDistance = distanceFromStart[trackPosition];
|
||||
|
||||
foreach (var cheatOffset in _cheatOffsets)
|
||||
{
|
||||
var cheatDestination = trackPosition + cheatOffset;
|
||||
|
||||
if (cheatDestination.X is < 0 or >= Size || cheatDestination.Y is < 0 or >= Size)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (map[cheatDestination.X, cheatDestination.Y] is Wall)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var destinationDistance = distanceFromStart[cheatDestination];
|
||||
var savedDistance = destinationDistance - originDistance - 2;
|
||||
|
||||
// Only take into account real shortcuts, not those that do not save time
|
||||
if (savedDistance < 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
cheats.Add((trackPosition, cheatDestination), savedDistance);
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Number of cheats that save at least 100 picoseconds: [yellow]{cheats.Count(c => c.Value >= 100)}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var (map, start, end) = ParseMap();
|
||||
|
||||
// Find track path
|
||||
var trackPath = new List<Point>();
|
||||
var distanceFromStart = new Dictionary<Point, int>();
|
||||
|
||||
var position = start;
|
||||
|
||||
var distance = 0;
|
||||
while (position != end)
|
||||
{
|
||||
trackPath.Add(position);
|
||||
distanceFromStart[position] = distance;
|
||||
|
||||
// Find next track position
|
||||
distance++;
|
||||
var up = position + new Point(0, -1);
|
||||
if (up is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[up.X, up.Y] is not Wall && !distanceFromStart.ContainsKey(up))
|
||||
{
|
||||
position = up;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var down = position + new Point(0, 1);
|
||||
if (down is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[down.X, down.Y] is not Wall && !distanceFromStart.ContainsKey(down))
|
||||
{
|
||||
position = down;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var left = position + new Point(-1, 0);
|
||||
if (left is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[left.X, left.Y] is not Wall && !distanceFromStart.ContainsKey(left))
|
||||
{
|
||||
position = left;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
var right = position + new Point(1, 0);
|
||||
if (right is { X: >= 0 and < Size, Y: >= 0 and < Size } && map[right.X, right.Y] is not Wall && !distanceFromStart.ContainsKey(right))
|
||||
{
|
||||
position = right;
|
||||
}
|
||||
}
|
||||
|
||||
// Also add end
|
||||
trackPath.Add(position);
|
||||
distanceFromStart[position] = distance;
|
||||
|
||||
var cheats = new Dictionary<(Point StartPosition, Point EndPosition), int>();
|
||||
|
||||
// Now return to start and try all possible combination of cheats for each track position
|
||||
foreach (var trackPosition in trackPath)
|
||||
{
|
||||
var originDistance = distanceFromStart[trackPosition];
|
||||
|
||||
foreach (var cheatDestination in trackPath.Where(destination => trackPosition.DistanceTo(destination) <= 20))
|
||||
{
|
||||
var cheatLength = trackPosition.DistanceTo(cheatDestination);
|
||||
|
||||
var destinationDistance = distanceFromStart[cheatDestination];
|
||||
var savedDistance = destinationDistance - originDistance - cheatLength;
|
||||
|
||||
// Only take into account real shortcuts, not those that do not save time
|
||||
if (savedDistance < 1)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (cheats.TryGetValue((trackPosition, cheatDestination), out var otherSavedDistance))
|
||||
{
|
||||
if (savedDistance <= otherSavedDistance)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
cheats[(trackPosition, cheatDestination)] = savedDistance;
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Number of cheats that save at least 100 picoseconds: [yellow]{cheats.Count(c => c.Value >= 100)}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private (char[,] Map, Point Start, Point End) ParseMap()
|
||||
{
|
||||
var map = new char[Size, Size];
|
||||
Point start = default;
|
||||
Point end = default;
|
||||
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var x = 0;
|
||||
|
||||
foreach (var symbol in line)
|
||||
{
|
||||
if (symbol == 'S')
|
||||
{
|
||||
start = new Point(x, y);
|
||||
}
|
||||
else if (symbol == 'E')
|
||||
{
|
||||
end = new Point(x, y);
|
||||
}
|
||||
|
||||
if (symbol is Wall)
|
||||
{
|
||||
map[x, y] = Wall;
|
||||
}
|
||||
else
|
||||
{
|
||||
map[x, y] = Empty;
|
||||
}
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
return (map, start, end);
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
|
||||
public int DistanceTo(Point other)
|
||||
{
|
||||
var distance = other - this;
|
||||
|
||||
return Math.Abs(distance.X) + Math.Abs(distance.Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
183
Days/Day21.cs
Normal file
183
Days/Day21.cs
Normal file
@@ -0,0 +1,183 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day21 : Day
|
||||
{
|
||||
public override int Number => 21;
|
||||
public override string Name => "Keypad Conundrum";
|
||||
|
||||
private const char Up = '^';
|
||||
private const char Right = '>';
|
||||
private const char Down = 'v';
|
||||
private const char Left = '<';
|
||||
private const char Enter = 'A';
|
||||
|
||||
private readonly Dictionary<char, Point> _numpadPositions = new()
|
||||
{
|
||||
{ '7', (0, 0) },
|
||||
{ '8', (1, 0) },
|
||||
{ '9', (2, 0) },
|
||||
{ '4', (0, 1) },
|
||||
{ '5', (1, 1) },
|
||||
{ '6', (2, 1) },
|
||||
{ '1', (0, 2) },
|
||||
{ '2', (1, 2) },
|
||||
{ '3', (2, 2) },
|
||||
{ '0', (1, 3) },
|
||||
{ Enter, (2, 3) }
|
||||
};
|
||||
|
||||
private readonly Dictionary<char, Point> _keypadPositions = new()
|
||||
{
|
||||
{ Up, (1, 0) },
|
||||
{ Enter, (2, 0) },
|
||||
{ Left, (0, 1) },
|
||||
{ Down, (1, 1) },
|
||||
{ Right, (2, 1) }
|
||||
};
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var codes = ParseCodes();
|
||||
var complexitiesSum = 0;
|
||||
|
||||
foreach (var code in codes)
|
||||
{
|
||||
// Get first keypad sequence
|
||||
var firstKeypadSequence = new StringBuilder();
|
||||
var currentInput = Enter;
|
||||
|
||||
foreach (var digit in code)
|
||||
{
|
||||
firstKeypadSequence.Append(GetNumpadMoveSequence(currentInput, digit));
|
||||
|
||||
currentInput = digit;
|
||||
}
|
||||
|
||||
// Get second keypad sequence
|
||||
var secondKeypadSequence = new StringBuilder();
|
||||
currentInput = Enter;
|
||||
|
||||
foreach (var input in firstKeypadSequence.ToString())
|
||||
{
|
||||
secondKeypadSequence.Append(GetKeypadMoveSequence(currentInput, input));
|
||||
|
||||
currentInput = input;
|
||||
}
|
||||
|
||||
// Get third and last keypad sequence
|
||||
var thirdKeypadSequence = new StringBuilder();
|
||||
currentInput = Enter;
|
||||
|
||||
foreach (var input in secondKeypadSequence.ToString())
|
||||
{
|
||||
thirdKeypadSequence.Append(GetKeypadMoveSequence(currentInput, input));
|
||||
|
||||
currentInput = input;
|
||||
}
|
||||
|
||||
complexitiesSum += thirdKeypadSequence.Length * int.Parse(code.AsSpan()[..^1]);
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Sum of complexities: [yellow]{complexitiesSum}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private string GetNumpadMoveSequence(char origin, char destination)
|
||||
{
|
||||
var originPosition = _numpadPositions[origin];
|
||||
var destinationPosition = _numpadPositions[destination];
|
||||
|
||||
var move = destinationPosition - originPosition;
|
||||
|
||||
var moveRight = move.X > 0;
|
||||
var moveDown = move.Y > 0;
|
||||
|
||||
var sequence = string.Concat(
|
||||
new string(moveRight ? Right : Left, Math.Abs(move.X)),
|
||||
new string(moveDown ? Down : Up, Math.Abs(move.Y)),
|
||||
Enter.ToString() // Always end on Enter to press key
|
||||
);
|
||||
|
||||
return sequence;
|
||||
}
|
||||
|
||||
private string GetKeypadMoveSequence(char origin, char destination)
|
||||
{
|
||||
var originPosition = _keypadPositions[origin];
|
||||
var destinationPosition = _keypadPositions[destination];
|
||||
|
||||
var move = destinationPosition - originPosition;
|
||||
|
||||
var moveRight = move.X > 0;
|
||||
var moveDown = move.Y > 0;
|
||||
|
||||
var sequence = string.Concat(
|
||||
new string(moveDown ? Down : Up, Math.Abs(move.Y)),
|
||||
new string(moveRight ? Right : Left, Math.Abs(move.X)),
|
||||
Enter.ToString() // Always end on Enter to press key
|
||||
);
|
||||
|
||||
return sequence;
|
||||
}
|
||||
|
||||
private List<string> ParseCodes()
|
||||
{
|
||||
var codes = new List<string>();
|
||||
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
codes.Add(line.ToString());
|
||||
}
|
||||
|
||||
return codes;
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
|
||||
public static implicit operator Point((int X, int Y) point)
|
||||
=> new(point.X, point.Y);
|
||||
|
||||
public int DistanceTo(Point other)
|
||||
{
|
||||
var distance = other - this;
|
||||
|
||||
return Math.Abs(distance.X) + Math.Abs(distance.Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
162
Days/Day22.cs
Normal file
162
Days/Day22.cs
Normal file
@@ -0,0 +1,162 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day22 : Day
|
||||
{
|
||||
public override int Number => 22;
|
||||
public override string Name => "Monkey Market";
|
||||
|
||||
private const int Iterations = 2000;
|
||||
private const int PruneValue = 16777216;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var secretsSum = 0L;
|
||||
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var secret = long.Parse(line);
|
||||
|
||||
for (var i = 0; i < Iterations; i++)
|
||||
{
|
||||
var result = secret * 64;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
|
||||
result = secret / 32;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
|
||||
result = secret * 2048;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
}
|
||||
|
||||
secretsSum += secret;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Sum of {Iterations}th secret numbers: [yellow]{secretsSum}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var maximumBananas = 0L;
|
||||
|
||||
var initialSecrets = Input.ReadAllLines().Select(l => long.Parse(l)).ToArray();
|
||||
var matchSequences = GenerateSequences().ToArray();
|
||||
|
||||
AnsiConsole.Progress().Start(progress =>
|
||||
{
|
||||
var progressTask = progress.AddTask("Finding best sequence", maxValue: matchSequences.Length);
|
||||
|
||||
Parallel.ForEach(matchSequences, matchSequence =>
|
||||
{
|
||||
Span<long> sequence = stackalloc long[4];
|
||||
var currentBananas = 0L;
|
||||
|
||||
for (var initialSecretIndex = 0; initialSecretIndex < initialSecrets.Length; initialSecretIndex++)
|
||||
{
|
||||
var secret = initialSecrets[initialSecretIndex];
|
||||
|
||||
for (var i = 0; i < Iterations; i++)
|
||||
{
|
||||
var previousSecret = secret;
|
||||
|
||||
// Compute new secret
|
||||
var result = secret * 64;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
|
||||
result = secret / 32;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
|
||||
result = secret * 2048;
|
||||
secret = (secret ^ result) % PruneValue;
|
||||
|
||||
var lastDigit = secret % 10;
|
||||
var previousSecretLastDigit = previousSecret % 10;
|
||||
|
||||
// Update sequence
|
||||
sequence[0] = sequence[1];
|
||||
sequence[1] = sequence[2];
|
||||
sequence[2] = sequence[3];
|
||||
sequence[3] = lastDigit - previousSecretLastDigit;
|
||||
|
||||
// Check if sequence match
|
||||
if (sequence[0] == matchSequence.Item1
|
||||
&& sequence[1] == matchSequence.Item2
|
||||
&& sequence[2] == matchSequence.Item3
|
||||
&& sequence[3] == matchSequence.Item4
|
||||
&& i >= 3)
|
||||
{
|
||||
currentBananas += lastDigit;
|
||||
|
||||
// Go to next monkey
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Stop early if it's not possible to beat current maximum
|
||||
if (maximumBananas - currentBananas >= ((initialSecrets.Length - initialSecretIndex - 1) * 9))
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
ExchangeIfGreaterThan(ref maximumBananas, currentBananas);
|
||||
|
||||
progressTask.Increment(1);
|
||||
});
|
||||
});
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Maximum amount of bananas: [yellow]{maximumBananas}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
IEnumerable<(long, long, long, long)> GenerateSequences()
|
||||
{
|
||||
for (var a = -9L; a <= 9; a++)
|
||||
{
|
||||
for (var b = -9L; b <= 9; b++)
|
||||
{
|
||||
for (var c = -9L; c <= 9; c++)
|
||||
{
|
||||
for (var d = -9L; d <= 9; d++)
|
||||
{
|
||||
yield return (a, b, c, d);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Source: https://stackoverflow.com/a/13323172
|
||||
private static void ExchangeIfGreaterThan(ref long location, long value)
|
||||
{
|
||||
// Read
|
||||
var current = Interlocked.Read(ref location);
|
||||
|
||||
// Compare
|
||||
while (current < value)
|
||||
{
|
||||
// Set
|
||||
var previous = Interlocked.CompareExchange(ref location, value, current);
|
||||
|
||||
// If another thread has set a greater value, we can break
|
||||
// or if previous value is current value, then no other thread has it changed in between
|
||||
if (previous == current || previous >= value) // note: most common case first
|
||||
break;
|
||||
|
||||
// For all other cases, we need another run (read value, compare, set)
|
||||
current = Interlocked.Read(ref location);
|
||||
}
|
||||
}
|
||||
}
|
||||
172
Days/Day23.cs
Normal file
172
Days/Day23.cs
Normal file
@@ -0,0 +1,172 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using System.Text;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day23 : Day
|
||||
{
|
||||
public override int Number => 23;
|
||||
public override string Name => "LAN Party";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var computerLinks = new Dictionary<string, HashSet<string>>();
|
||||
|
||||
// Parse all links
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var firstComputer = line[..2].ToString();
|
||||
var secondComputer = line[3..].ToString();
|
||||
|
||||
if (!computerLinks.TryGetValue(firstComputer, out var firstLinks))
|
||||
{
|
||||
firstLinks = [];
|
||||
computerLinks[firstComputer] = firstLinks;
|
||||
}
|
||||
firstLinks.Add(secondComputer);
|
||||
|
||||
if (!computerLinks.TryGetValue(secondComputer, out var secondLinks))
|
||||
{
|
||||
secondLinks = [];
|
||||
computerLinks[secondComputer] = secondLinks;
|
||||
}
|
||||
secondLinks.Add(firstComputer);
|
||||
}
|
||||
|
||||
var sets = new HashSet<ComputerSet>();
|
||||
|
||||
foreach (var (firstComputer, firstLinks) in computerLinks)
|
||||
{
|
||||
foreach (var secondComputer in firstLinks)
|
||||
{
|
||||
var thirdComputers = computerLinks[secondComputer].Intersect(firstLinks);
|
||||
|
||||
foreach (var thirdComputer in thirdComputers)
|
||||
{
|
||||
sets.Add(new ComputerSet(firstComputer, secondComputer, thirdComputer));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var finalCount = sets.Count(set => set.First.StartsWith('t') || set.Second.StartsWith('t') || set.Third.StartsWith('t'));
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Amount of sets that contain at least one computer that starts with t: [yellow]{finalCount}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var computerLinks = new Dictionary<string, HashSet<string>>();
|
||||
|
||||
// Parse all links
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var firstComputer = line[..2].ToString();
|
||||
var secondComputer = line[3..].ToString();
|
||||
|
||||
if (!computerLinks.TryGetValue(firstComputer, out var firstLinks))
|
||||
{
|
||||
firstLinks = [];
|
||||
computerLinks[firstComputer] = firstLinks;
|
||||
}
|
||||
firstLinks.Add(secondComputer);
|
||||
|
||||
if (!computerLinks.TryGetValue(secondComputer, out var secondLinks))
|
||||
{
|
||||
secondLinks = [];
|
||||
computerLinks[secondComputer] = secondLinks;
|
||||
}
|
||||
secondLinks.Add(firstComputer);
|
||||
}
|
||||
|
||||
List<string> largestSet = [];
|
||||
|
||||
AnsiConsole.Status().Start("Starting check...", status =>
|
||||
{
|
||||
var size = 4;
|
||||
while (true)
|
||||
{
|
||||
var ended = true;
|
||||
|
||||
status.Status($"Checking set size: {size}");
|
||||
|
||||
var i = 0;
|
||||
foreach (var (firstComputer, firstLinks) in computerLinks)
|
||||
{
|
||||
status.Status($"Checking set size: {size} ({i++}/{computerLinks.Count})");
|
||||
|
||||
if (GenerateLargestSet(firstLinks, size, [ firstComputer ]) is { } largest)
|
||||
{
|
||||
largestSet = largest;
|
||||
size++;
|
||||
ended = false;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (ended)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var password = string.Join(',', largestSet.Order());
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Password to enter lan party: [yellow]{password}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
List<string>? GenerateLargestSet(HashSet<string> set, int targetSize, List<string> selected)
|
||||
{
|
||||
if (selected.Count == targetSize)
|
||||
{
|
||||
return selected;
|
||||
}
|
||||
|
||||
if (set.Count is 0 || (set.Count < (targetSize - selected.Count)))
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
// Next depth
|
||||
foreach (var computer in set)
|
||||
{
|
||||
var nextSet = set.Intersect(computerLinks[computer]).ToHashSet();
|
||||
var nextSelected = selected.Append(computer).ToList();
|
||||
|
||||
if (GenerateLargestSet(nextSet, targetSize, nextSelected) is { } largest)
|
||||
{
|
||||
return largest;
|
||||
}
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
private record ComputerSet(string First, string Second, string Third) : IEquatable<ComputerSet>
|
||||
{
|
||||
public virtual bool Equals(ComputerSet? other)
|
||||
{
|
||||
return other is not null &&
|
||||
(First == other.First || First == other.Second || First == other.Third) &&
|
||||
(Second == other.First || Second == other.Second || Second == other.Third) &&
|
||||
(Third == other.First || Third == other.Second || Third == other.Third);
|
||||
}
|
||||
|
||||
public override int GetHashCode()
|
||||
{
|
||||
return First.GetHashCode() * Second.GetHashCode() * Third.GetHashCode();
|
||||
}
|
||||
}
|
||||
}
|
||||
370
Days/Day24.cs
Normal file
370
Days/Day24.cs
Normal file
@@ -0,0 +1,370 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using System.Text;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.VisualBasic;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day24 : Day
|
||||
{
|
||||
public override int Number => 24;
|
||||
public override string Name => "Crossed Wires";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (signals, gates, zGates) = ParseInput();
|
||||
|
||||
while (zGates.Count > 0)
|
||||
{
|
||||
foreach (var (inputLeft, inputRight, output, logicOperator) in gates)
|
||||
{
|
||||
if (!signals.TryGetValue(inputLeft, out var inputLeftValue) ||
|
||||
!signals.TryGetValue(inputRight, out var inputRightValue))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
signals[output] = Compute(inputLeftValue, inputRightValue, logicOperator);
|
||||
|
||||
if (output.StartsWith('z'))
|
||||
{
|
||||
zGates.Remove(output);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var zOutputValue = signals
|
||||
.Where(s => s.Key.StartsWith('z'))
|
||||
.Select(s => new { Index = int.Parse(s.Key[1..]), Value = (long)s.Value })
|
||||
.Sum(s => s.Value << s.Index);
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Value output on z signal: [yellow]{zOutputValue}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var (initialSignals, initialGates, initialZGates) = ParseInput();
|
||||
|
||||
var xInputValue = initialSignals
|
||||
.Where(s => s.Key.StartsWith('x'))
|
||||
.Select(s => new { Index = int.Parse(s.Key[1..]), Value = (long)s.Value })
|
||||
.Sum(s => s.Value << s.Index);
|
||||
|
||||
var yInputValue = initialSignals
|
||||
.Where(s => s.Key.StartsWith('y'))
|
||||
.Select(s => new { Index = int.Parse(s.Key[1..]), Value = (long)s.Value })
|
||||
.Sum(s => s.Value << s.Index);
|
||||
|
||||
// Find wires that need to be changed
|
||||
const long initialZValue = 58740594706150L;
|
||||
var targetZValue = xInputValue + yInputValue;
|
||||
|
||||
var difference = targetZValue ^ initialZValue;
|
||||
var possibleChange = new HashSet<string>();
|
||||
|
||||
for (var i = 0; i < sizeof(long) * 8; i++)
|
||||
{
|
||||
if (((1 << i) & difference) != 0)
|
||||
{
|
||||
possibleChange.Add($"z{i:D2}");
|
||||
}
|
||||
}
|
||||
|
||||
// Find all dependencies
|
||||
int initialSize;
|
||||
do
|
||||
{
|
||||
initialSize = possibleChange.Count;
|
||||
|
||||
foreach (var gate in initialGates)
|
||||
{
|
||||
if (possibleChange.Contains(gate.Output))
|
||||
{
|
||||
possibleChange.Add(gate.InputLeft);
|
||||
possibleChange.Add(gate.InputRight);
|
||||
}
|
||||
}
|
||||
} while (possibleChange.Count != initialSize);
|
||||
|
||||
var gatesToSwapIndices = initialGates
|
||||
.Index()
|
||||
.ToList()
|
||||
.Where(t => possibleChange.Contains(t.Item.Output))
|
||||
.Select(t => t.Index)
|
||||
.ToList();
|
||||
|
||||
// Try out all possible permutations of concerned outputs
|
||||
List<string> changedOutputs = [];
|
||||
|
||||
for (var a = 0; a < gatesToSwapIndices.Count - 7; a++)
|
||||
{
|
||||
for (var b = a + 1; b < gatesToSwapIndices.Count - 6; b++)
|
||||
{
|
||||
for (var c = b + 1; c < gatesToSwapIndices.Count - 5; c++)
|
||||
{
|
||||
for (var d = c + 1; d < gatesToSwapIndices.Count - 4; d++)
|
||||
{
|
||||
for (var e = d + 1; e < gatesToSwapIndices.Count - 3; e++)
|
||||
{
|
||||
for (var f = e + 1; f < gatesToSwapIndices.Count - 2; f++)
|
||||
{
|
||||
for (var g = f + 1; g < gatesToSwapIndices.Count - 1; g++)
|
||||
{
|
||||
for (var h = g + 1; h < gatesToSwapIndices.Count; h++)
|
||||
{
|
||||
Console.WriteLine($"h: {h}");
|
||||
|
||||
ForAllPermutation([
|
||||
gatesToSwapIndices[a],
|
||||
gatesToSwapIndices[b],
|
||||
gatesToSwapIndices[c],
|
||||
gatesToSwapIndices[d],
|
||||
gatesToSwapIndices[e],
|
||||
gatesToSwapIndices[f],
|
||||
gatesToSwapIndices[g],
|
||||
gatesToSwapIndices[h]], permutations =>
|
||||
{
|
||||
if (CheckPermutations(permutations) is { } modifiedOutputs)
|
||||
{
|
||||
changedOutputs = modifiedOutputs;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var swappedOutputs = string.Join(',', changedOutputs.Order());
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Swapped outputs: [yellow]{swappedOutputs}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
List<string>? CheckPermutations(int[] permutations)
|
||||
{
|
||||
var gates = initialGates.ToArray();
|
||||
var zGates = initialZGates.ToHashSet();
|
||||
var signals = initialSignals.ToDictionary();
|
||||
|
||||
SwapOutput(ref gates[permutations[0]], ref gates[permutations[1]]);
|
||||
SwapOutput(ref gates[permutations[2]], ref gates[permutations[3]]);
|
||||
SwapOutput(ref gates[permutations[4]], ref gates[permutations[5]]);
|
||||
SwapOutput(ref gates[permutations[6]], ref gates[permutations[7]]);
|
||||
|
||||
var zOutputValue = 0L;
|
||||
while (zGates.Count > 0)
|
||||
{
|
||||
// Avoid locks when result is not reachable (infinite loop)
|
||||
var resultsCount = signals.Count;
|
||||
|
||||
foreach (var (inputLeft, inputRight, output, logicOperator) in gates)
|
||||
{
|
||||
if (signals.ContainsKey(output))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!signals.TryGetValue(inputLeft, out var inputLeftValue) ||
|
||||
!signals.TryGetValue(inputRight, out var inputRightValue))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var computed = Compute(inputLeftValue, inputRightValue, logicOperator);
|
||||
signals[output] = computed;
|
||||
|
||||
if (output.StartsWith('z'))
|
||||
{
|
||||
zGates.Remove(output);
|
||||
|
||||
zOutputValue += (long)computed << int.Parse(output[1..]);
|
||||
}
|
||||
}
|
||||
|
||||
// No new signal value computed, it's an infinite loop
|
||||
if (signals.Count == resultsCount)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
if (xInputValue + yInputValue == zOutputValue)
|
||||
{
|
||||
return permutations.Select(i => gates[i].Output).ToList();
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
void SwapOutput(ref LogicGate first, ref LogicGate second)
|
||||
{
|
||||
var temp = first.Output;
|
||||
|
||||
first = first with { Output = second.Output };
|
||||
second = second with { Output = temp };
|
||||
}
|
||||
}
|
||||
|
||||
private int Compute(int inputLeftValue, int inputRightValue, Operator logicOperator) => logicOperator switch
|
||||
{
|
||||
Operator.And => inputLeftValue & inputRightValue,
|
||||
Operator.Or => inputLeftValue | inputRightValue,
|
||||
Operator.Xor => inputLeftValue ^ inputRightValue,
|
||||
_ => throw new ArgumentOutOfRangeException(nameof(logicOperator), logicOperator, null)
|
||||
};
|
||||
|
||||
private (Dictionary<string, int> Signals, List<LogicGate> Gates, HashSet<string> ZGates) ParseInput()
|
||||
{
|
||||
var readingSignals = true;
|
||||
|
||||
var signals = new Dictionary<string, int>();
|
||||
var gates = new List<LogicGate>();
|
||||
var zGates = new HashSet<string>();
|
||||
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
if (line.IsWhiteSpace())
|
||||
{
|
||||
readingSignals = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (readingSignals)
|
||||
{
|
||||
var signalName = line[..line.IndexOf(':')];
|
||||
var signalValue = int.Parse(line[(line.IndexOf(':') + 2)..]);
|
||||
|
||||
signals[signalName.ToString()] = signalValue;
|
||||
}
|
||||
else
|
||||
{
|
||||
var split = line.Split(' ');
|
||||
split.MoveNext();
|
||||
|
||||
var inputLeft = line[split.Current];
|
||||
split.MoveNext();
|
||||
|
||||
var logicOperator = Enum.Parse<Operator>(line[split.Current], true);
|
||||
split.MoveNext();
|
||||
|
||||
var inputRight = line[split.Current];
|
||||
split.MoveNext();
|
||||
split.MoveNext();
|
||||
|
||||
var output = line[split.Current];
|
||||
|
||||
gates.Add(new LogicGate(inputLeft.ToString(), inputRight.ToString(), output.ToString(), logicOperator));
|
||||
|
||||
if (output.StartsWith('z'))
|
||||
{
|
||||
zGates.Add(output.ToString());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return (signals, gates, zGates);
|
||||
}
|
||||
|
||||
private record LogicGate(string InputLeft, string InputRight, string Output, Operator LogicOperator);
|
||||
|
||||
private enum Operator
|
||||
{
|
||||
And,
|
||||
Or,
|
||||
Xor
|
||||
}
|
||||
|
||||
// Source: https://stackoverflow.com/a/36634935
|
||||
|
||||
/// <summary>
|
||||
/// Heap's algorithm to find all permutations. Non recursive, more efficient.
|
||||
/// </summary>
|
||||
/// <param name="items">Items to permute in each possible ways</param>
|
||||
/// <param name="funcExecuteAndTellIfShouldStop"></param>
|
||||
/// <returns>Return true if cancelled</returns>
|
||||
private static bool ForAllPermutation<T>(T[] items, Func<T[], bool> funcExecuteAndTellIfShouldStop)
|
||||
{
|
||||
int countOfItem = items.Length;
|
||||
|
||||
if (countOfItem <= 1)
|
||||
{
|
||||
return funcExecuteAndTellIfShouldStop(items);
|
||||
}
|
||||
|
||||
var indexes = new int[countOfItem];
|
||||
|
||||
// Unnecessary. Thanks to NetManage for the advise
|
||||
// for (int i = 0; i < countOfItem; i++)
|
||||
// {
|
||||
// indexes[i] = 0;
|
||||
// }
|
||||
|
||||
if (funcExecuteAndTellIfShouldStop(items))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
for (int i = 1; i < countOfItem;)
|
||||
{
|
||||
if (indexes[i] < i)
|
||||
{
|
||||
// On the web there is an implementation with a multiplication which should be less efficient.
|
||||
if ((i & 1) == 1) // if (i % 2 == 1) ... more efficient ??? At least the same.
|
||||
{
|
||||
Swap(ref items[i], ref items[indexes[i]]);
|
||||
}
|
||||
else
|
||||
{
|
||||
Swap(ref items[i], ref items[0]);
|
||||
}
|
||||
|
||||
if (funcExecuteAndTellIfShouldStop(items))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
indexes[i]++;
|
||||
i = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
indexes[i++] = 0;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Swap 2 elements of same type
|
||||
/// </summary>
|
||||
/// <typeparam name="T"></typeparam>
|
||||
/// <param name="a"></param>
|
||||
/// <param name="b"></param>
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
private static void Swap<T>(ref T a, ref T b)
|
||||
{
|
||||
T temp = a;
|
||||
a = b;
|
||||
b = temp;
|
||||
}
|
||||
}
|
||||
111
Days/Day25.cs
Normal file
111
Days/Day25.cs
Normal file
@@ -0,0 +1,111 @@
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using System.Runtime.CompilerServices;
|
||||
using System.Runtime.Intrinsics.X86;
|
||||
using System.Text;
|
||||
using Microsoft.CodeAnalysis;
|
||||
using Microsoft.VisualBasic;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day25 : Day
|
||||
{
|
||||
public override int Number => 25;
|
||||
public override string Name => "Code Chronicle";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var (locks, keys) = ParseInput();
|
||||
|
||||
var workingPairs = 0;
|
||||
|
||||
foreach (var lockToTest in locks)
|
||||
{
|
||||
foreach (var key in keys)
|
||||
{
|
||||
if (lockToTest.Height1 + key.Height1 < 6 &&
|
||||
lockToTest.Height2 + key.Height2 < 6 &&
|
||||
lockToTest.Height3 + key.Height3 < 6 &&
|
||||
lockToTest.Height4 + key.Height4 < 6 &&
|
||||
lockToTest.Height5 + key.Height5 < 6)
|
||||
{
|
||||
workingPairs++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Amont of unique key/lock pairs that fit: [yellow]{workingPairs}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
private (List<Lock> Locks, List<Key> Keys) ParseInput()
|
||||
{
|
||||
var locks = new List<Lock>();
|
||||
var keys = new List<Key>();
|
||||
|
||||
Span<int> itemHeights = stackalloc int[5];
|
||||
|
||||
var input = Input.AsSpan();
|
||||
foreach (var itemRange in input.Split($"{Environment.NewLine}{Environment.NewLine}"))
|
||||
{
|
||||
var item = input[itemRange];
|
||||
var lines = item.EnumerateLines();
|
||||
|
||||
var isKey = false;
|
||||
|
||||
// Reset item heights
|
||||
itemHeights[0] = -1;
|
||||
itemHeights[1] = -1;
|
||||
itemHeights[2] = -1;
|
||||
itemHeights[3] = -1;
|
||||
itemHeights[4] = -1;
|
||||
|
||||
for (var height = 0; height <= 6; height++)
|
||||
{
|
||||
lines.MoveNext();
|
||||
var line = lines.Current;
|
||||
|
||||
if (height is 0)
|
||||
{
|
||||
isKey = line is ".....";
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
for (var i = 0; i < 5; i++)
|
||||
{
|
||||
if (isKey && line[i] is '#' && itemHeights[i] is -1)
|
||||
{
|
||||
itemHeights[i] = 6 - height;
|
||||
}
|
||||
else if (!isKey && line[i] is '.' && itemHeights[i] is -1)
|
||||
{
|
||||
itemHeights[i] = height - 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (isKey)
|
||||
{
|
||||
keys.Add(new Key(itemHeights[0], itemHeights[1], itemHeights[2], itemHeights[3], itemHeights[4]));
|
||||
}
|
||||
else
|
||||
{
|
||||
locks.Add(new Lock(itemHeights[0], itemHeights[1], itemHeights[2], itemHeights[3], itemHeights[4]));
|
||||
}
|
||||
}
|
||||
|
||||
return (locks, keys);
|
||||
}
|
||||
|
||||
private readonly record struct Lock(int Height1, int Height2, int Height3, int Height4, int Height5);
|
||||
private readonly record struct Key(int Height1, int Height2, int Height3, int Height4, int Height5);
|
||||
}
|
||||
410
Days/Day3.cs
410
Days/Day3.cs
@@ -5,365 +5,105 @@ namespace AdventOfCode.Days;
|
||||
public class Day3 : Day
|
||||
{
|
||||
public override int Number => 3;
|
||||
public override string Name => "Rucksack Reorganization";
|
||||
public override string Name => "Mull It Over";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
long sum = 0;
|
||||
var result = 0;
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
var input = Input.AsSpan();
|
||||
var mulStart = input.IndexOf("mul(");
|
||||
|
||||
while (mulStart != -1)
|
||||
{
|
||||
var middle = line.Length / 2;
|
||||
var firstCompartment = line[..middle];
|
||||
var secondCompartment = line[middle..];
|
||||
input = input[(mulStart + 4)..];
|
||||
|
||||
var common = firstCompartment.Intersect(secondCompartment).First();
|
||||
// Start of a mul operation, search the ending parenthesis and make sure it's before the next mul
|
||||
var mulEnd = input.IndexOf(")");
|
||||
var nextMulStart = input.IndexOf("mul(");
|
||||
|
||||
sum += CharToPriority(common);
|
||||
if (mulEnd != -1 && (nextMulStart == -1 || mulEnd < nextMulStart))
|
||||
{
|
||||
var operands = input[..mulEnd];
|
||||
var separator = operands.IndexOf(",");
|
||||
|
||||
if (separator != -1
|
||||
&& int.TryParse(operands[..separator], out var left)
|
||||
&& int.TryParse(operands[(separator + 1)..], out var right))
|
||||
{
|
||||
result += left * right;
|
||||
}
|
||||
}
|
||||
|
||||
mulStart = nextMulStart;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
long sum = 0;
|
||||
var result = 0;
|
||||
|
||||
foreach (var group in Input.ReadAllLines().Chunk(3))
|
||||
var input = Input.AsSpan();
|
||||
var mulStart = input.IndexOf("mul(");
|
||||
|
||||
while (mulStart != -1)
|
||||
{
|
||||
var firstBag = group[0];
|
||||
var secondBag = group[1];
|
||||
var thirdBag = group[2];
|
||||
// Check if there is a "don't()" before next mul
|
||||
var dontStart = input.IndexOf("don't()");
|
||||
|
||||
var common = firstBag.Intersect(secondBag).Intersect(thirdBag).First();
|
||||
if (dontStart < mulStart)
|
||||
{
|
||||
// Search for next "do()"
|
||||
input = input[(dontStart + 7)..];
|
||||
|
||||
sum += CharToPriority(common);
|
||||
var doStart = input.IndexOf("do()");
|
||||
|
||||
if (doStart == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
|
||||
input = input[(doStart + 4)..];
|
||||
|
||||
// Update next mult position
|
||||
mulStart = input.IndexOf("mul(");
|
||||
|
||||
if (mulStart == -1)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
input = input[(mulStart + 4)..];
|
||||
|
||||
// Start of a mul operation, search the ending parenthesis and make sure it's before the next mul
|
||||
var mulEnd = input.IndexOf(")");
|
||||
var nextMulStart = input.IndexOf("mul(");
|
||||
|
||||
if (mulEnd != -1 && (nextMulStart == -1 || mulEnd < nextMulStart))
|
||||
{
|
||||
var operands = input[..mulEnd];
|
||||
var separator = operands.IndexOf(",");
|
||||
|
||||
if (separator != -1
|
||||
&& int.TryParse(operands[..separator], out var left)
|
||||
&& int.TryParse(operands[(separator + 1)..], out var right))
|
||||
{
|
||||
result += left * right;
|
||||
}
|
||||
}
|
||||
|
||||
mulStart = nextMulStart;
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private static int CharToPriority(char c)
|
||||
{
|
||||
if (char.IsLower(c))
|
||||
{
|
||||
return c - 'a' + 1;
|
||||
}
|
||||
|
||||
return c - 'A' + 27;
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
DsPhSBQQQhqmBDhPDsFwjwsLjlRjlttvjvvtRb
|
||||
rNJMNNbrHrtjHLHjvwtg
|
||||
fNbNzZdrZnMnMPnQShFPDmnqFm
|
||||
QWVCFfQffgQCVZzVVpHsHJBqtpspJFRHqq
|
||||
mwDbmnnGNlNcwNDDNRbnNDlJTpBJBtJGtPTLsBGqTqqsqp
|
||||
MlSdnScRnnmmDjSdNSdCzvggWzrgzjvfvrgVzW
|
||||
gsMljbrjlZlWcWMJrWwTwbmwQbmmLDQQLhwL
|
||||
CdgpzdgpgnfThHfFRwhfRf
|
||||
SptgpSpnCNpVSGNPvPGSddcMWjMrjqBsJcWqMcBWcVlZ
|
||||
JcJLQQFWhQJPJpWcwjHvMQvnnlMvzBHd
|
||||
tCtGZrmVRmVGTVTtCfRTCHHNNvdNzmdMvMlNzvwdvw
|
||||
CTGGRftfSGtGTGDLbFchSgSWWWcM
|
||||
QcMFQrvrQbvtczbVbjbMzZzRpqmDDmqqnNzCDCDC
|
||||
SHHfPJssGLPSdHThLhHdRmqNmNssnNmNCNnpjmsn
|
||||
LhLJfTdLJwfgPTdfGccrtjcMrccwvcrrFr
|
||||
jFLLLqDGjbtqLCChpMMhMBvpwMTmffpZ
|
||||
ZnJHRncHHgnrsrZffTdMdMBfmMvfvR
|
||||
NWWPnZrVHrZPCDDQtzDCPLCq
|
||||
jpFjvBZhDFHZdwcmslcslBLLNl
|
||||
dVtTVVCzzfrrMPNLLcnVcPLRns
|
||||
CrzWzTqdWtGCzJtbJCrMjjDFHZQjZSpvFGFgHhHp
|
||||
JjJqMctnhtDZDQtf
|
||||
TrFFlrrCCHPwHwlPHFPzDhsffQQDsVfWwVJQJB
|
||||
HHHGdFlHldTpCCFFlLHdCRJccMnqvqMgnNjjMjjvLMLcSv
|
||||
cMfFcMFcrqgJLFZdrTDdthPGsGmtGs
|
||||
WwjNwnjjBQzVVQHwRDnmtPGhPPsPnnTGld
|
||||
bWHBjWVzpbRzbmScqgZMFcqf
|
||||
RJjPTBJhTNNjfPhRBdqtlgdbGldwtCPgdb
|
||||
ZmrHHmzpvSvvpzvmvDVCGlWVwCWtGtWCddggqf
|
||||
QQpzFrHHQnzHvfTcNshcLRNFJhcR
|
||||
QrPQDrppBQmCmFQm
|
||||
TzqzsLfmsfSTfqzVLftNdJJNJGCwwGdgCwSGNC
|
||||
TVHTfzWsfftsZstnbvrbWbrbppPbrmmP
|
||||
BQrfqrLtJnttqqtQBJDDtBnDzRgldhVVpJlgzpzhpzsgslhV
|
||||
TTNcPZCvZjmPFZjvPHLlWdNLghVhzzlllpVd
|
||||
jcFPbTcZTFcmcjMjjFjbLwbnDBtfqbtBwfwSBnrbGw
|
||||
SZJNJtrNzjjNCzlBBmqmQDBBmDBBjB
|
||||
PGPbGwhLsnvwnVbGPVMZsDsTBBgcZgBBDBfDBf
|
||||
pnnhhvphGVpvRPnJlSFRNNJHZHSdSR
|
||||
hbmDDmwnnVGbhmjNrrWwLNLsWBrw
|
||||
dMrgvcQqdjlBLlfW
|
||||
HzzPSrcHqFHQgzpPcMpQqrtmbbbRhHHVGnZDnVHhVbVZ
|
||||
RwtvdPRvSlTQmHHBQBRL
|
||||
FjVSjrsFVnFQnTHmnT
|
||||
VCVVMrWWjVGgbcNVGCCVdlvfdqfvwbSzwqfwZzwv
|
||||
fmPDwJPDFRmRgPdwwwDNwgwPzhSQzVSzVTQdzHZzHhzQMQzQ
|
||||
sWtGCWtpcqqpNnQjjzhVTTVQczhj
|
||||
tWBGntsCNlqrWswDRfFrbFrPDbPf
|
||||
dmzmjcbQjjQztFNqsqBcMJqNPF
|
||||
nlTWnClWwQDTVnTrsMsCRBPZRJRJqRJq
|
||||
wTrhwpVVvgvlDpTvVWVDdLfzgbLtbzSQLSzzjzLz
|
||||
RWZdHvRdBRGbbvCjJnbn
|
||||
pqqpSwzpSSbCwPwjlwjl
|
||||
gDzzqSVzqrThpDBtRtCZdQRQLrQQ
|
||||
GRqTGqtmTVdGHHVVNNlhPlMqbNqNDbqW
|
||||
LzQSdFnfznfwBcLcnFppBBDDMPMPhDbhlwbWPlbWMjrD
|
||||
QznFnLZFvVvHRgsddG
|
||||
BBHBfBHFdSltmWJvqtNtHq
|
||||
TQDrrVMzVDnWnNZDJc
|
||||
gWzprTCrCMQzGGjjhwFwdffjfl
|
||||
LLLSSSzBBlBLsszncCBZSPSMMMpdWTdrmmnfVGVmMfmrmm
|
||||
DghttvwhHRvjJthNJwhVtDHGpddMWdMmrMmfGdppjWTfpq
|
||||
gbJRthQDDRvwtDhQhDFPcVcbPczLzPBScBBF
|
||||
sZsZpTtLCsbspZtTwrCwrwtDmNNdJmmqSJfqmfNGNmHqGdqb
|
||||
nQvjTcjQglFVlllMFMVFqWfNqnNHHHdfSfHqfSJq
|
||||
hFvvgFcFVzphpTrrwZDp
|
||||
qJqfhsBpfSpchpqcrqwCDvvCDQndmpwDtnRQ
|
||||
jWHPZWWjZsCmCWRDmQ
|
||||
PPzMGHlzMNsPLPlZsllgsNrhNVBqhFVBbBSqFFBFrV
|
||||
RnRsFFdSzmgwvQsqwc
|
||||
lbgHGMBHlWWWlfWGGBtGwqDpDwmcpMrrqrQDZrMZ
|
||||
GGJLBVJbVGjGtHVfJtWGHBLLPdzdCghnRnRnSShgNnhnddhj
|
||||
VgzLFjjwhhSwFhVZgRhRgHHCCvdZdrqqCTvBCrqvvr
|
||||
ncnNbGMcPpvHFrssdBHM
|
||||
cnctcNNbQGWFJctftgVmzShzzwwVwgmwfR
|
||||
pFWmSSFGQlvTbwWTwH
|
||||
jdBgNhRgMftNBhPbhHnZHlTTZcwZ
|
||||
lfBNRjCtCfMjsBfCjgfNBRMppGpJqsJQGrrmmJDpGmDDFG
|
||||
GznngnhzccVdgjbbVjVjVbVLwwQJmQMrLTZhJmZLQTJWmm
|
||||
pDBSslPCFPCpvCqvpPBQTlQLrdlJWrLJLmrlrr
|
||||
psSsBptpCBdjtcjNVcGG
|
||||
sssppsmchwspFLtvHhQJMtFb
|
||||
rRLDqRVLNSMvFSSV
|
||||
WDrLnzrDqzRqRzzfLgRnzrnsssZZZsZBgCwwmBppwBspZc
|
||||
MtPbwvzzVtzfsqGGVpdSjsLd
|
||||
DnNRCDJBnHJDHDnrDTRcnNZpZSsSLqjpdqqqSMqdddTj
|
||||
CFRFRFHgDRnRgMtfFvvwzwvwvzWv
|
||||
PNpFPncvvchPpNjpFhvPhPLmBwMgDRRwRgMDhBmLzBDD
|
||||
trHSrdTtslWrSWmfzgmMnfBzmn
|
||||
JsrQsJHHlsVqTjjpbbNnQNNpGG
|
||||
sVQCdsmGlnlCmnGmQQhGCJJNvNjpgqhqhvPgpgPqjpcpcW
|
||||
DMSfSbHLHbSDBBzLNvccWRcddvPjNj
|
||||
FSwHfTFdFsmJlnTTmV
|
||||
FctwtTTCScvShFqtwScrcTSCJQGNndGHWJNQHWHZdgJrJgGN
|
||||
jspLlfPlpfsDjBspfllWgdWHQggZHngHNGdsWJ
|
||||
lRMpBlPmSFRTcvZv
|
||||
TVZpRRVvFRVpTZRfFhFvvzGVwrwwwdDBMwQrgcDtMtDDwZrL
|
||||
jsNsWqWjNQCNWbjPMcBLPgBtrdMwdrdL
|
||||
SJSsmqlSNljbmlNjsbQVffzGRvzmmVhQpVGz
|
||||
BFFMvcwMwwpFFfpbDMqPVgLVgmLDPR
|
||||
JtSsSzJssQJJWjRZzgLnDgqLPZgzbg
|
||||
dsdtWQWdRGjTRNQNQvGfHCCFpvfGwlCfCp
|
||||
zzWGqWnqnwWCvCrHffHRpBpBBRSJzRFFDhSQFR
|
||||
VPVsZMNTLsMvPsmBJhllFpFBTJFQpl
|
||||
sZtsNsZtdZgjbwggjnbvqr
|
||||
QpTvrphmDvvddfcJJHTTncMlMG
|
||||
bRZZPRwjgzzlSSjGlnlSJS
|
||||
BZzBzssWgwzzwNBsgsPBgszmQptqrrGdvdWmqdhhFQDpQF
|
||||
FfMtzSqlDlzfMhPFhPtffNRsCgSgCCGspRpRGSsgsg
|
||||
WTcWLTTVnWmrVdLrcHmNGNCZwCCggpgDRwpCnR
|
||||
JcdWJHTJWdJdjJccrLvlFltFQQvPFDMjqqlP
|
||||
NfjFNNZPDQVJVWpCbQpJ
|
||||
lcmdzlmzBtRSTlTTcncsVSbhpLWpWgsWghgsVS
|
||||
mBTRRmGccRtBwDbrGPbrMMrF
|
||||
VVQqlsGrVsMWBNFNMQHF
|
||||
TfzZfDgjgnLGjjztTncCFwwNmdvNcwwNBvHNFwvd
|
||||
jzjDgZzjntGJZzCnhrrSlPVsJslpslPq
|
||||
dVhpjGPdjHhqHgtHJJ
|
||||
sFzrzllQswDwFbcmBlgvZTCgvqTCfgHQJtqT
|
||||
nDbBsFzzrrtFrlwzPdSVMWMVVMSnGNLd
|
||||
wqJCjqChmwMLmMmprNgG
|
||||
DNTtdsdWcHdNspGQggnrgLnQpc
|
||||
SZvFftdddDsDTtttTDJNCCwJJZzbbCjwwVPj
|
||||
VstwZCwslBZQDBjfDDBDfS
|
||||
rvHnmMRrTzmMrmhRppbhDfpjfbjbctjD
|
||||
rPFLRLmFvvLvHvTCtqsVVwldGZGPGV
|
||||
SNZDJGfvwgMgfgmLmLcmBqgWgQWr
|
||||
hPnPTnVGsPRqLWpTmQqQ
|
||||
tsbnFhhjhSdGJNCjSf
|
||||
QSbGgBjfTCMWFNPFFtDghPrP
|
||||
JqHqJVzZzwJJHLlqQptDhPrctpPDtnLF
|
||||
zZmwJwdwdvHddVJvZqdzHlfGBbsCmMTsWCBCjsGGBbMQ
|
||||
gVmLtpWrFTFBLtpcFNbvhNNnTnvnQRlQQv
|
||||
GHjjqsMqwZZJdqGfZjfZGjQDDhvQNzznzRzRwDNbvgzv
|
||||
sZGPgssMqHZpPptmCcpCrP
|
||||
CZCNNLmwzwCGMZQMQsFNWplvpsJBWpFHBp
|
||||
SPbSbDRRbnDqggnbVbVrbRWHJFTlBBcTvWvsPvFpHTcl
|
||||
tVgSvqVbnqDdgQzMQMGMmzthCw
|
||||
mpbPQlblbwSlfSPGBpBGPpBFgMMtLFSHMLVVDVdtHLNctF
|
||||
WnhZsrJhTnWrgZdZgHNLcLtt
|
||||
hjCsCWRhjzhTjnWnQBbmPQQPLBGfqjwQ
|
||||
BFrzdtmRmpFtFwwmjjzNQllPshqHvjNh
|
||||
fWCLLCMJnCDbgfMJhPsPHvqvqVsssQ
|
||||
WbLnCZnvprpmZrGd
|
||||
gjMzTGBjWFBCCSSrBC
|
||||
bddJJndbdJfwPPthrrSSSsFSSg
|
||||
NJHbZbbvvWGgjWgT
|
||||
dpfphMggHdQcwftMMgdtzWGfGWnDBnmvnVJVvfmn
|
||||
CqPFTZPSNCTsZZZRLzGmcGVzDLGvLWBWJm
|
||||
TCrTNSScPlplpHrQrQ
|
||||
lqrCvhWFvMGWgfHPgLfjfdgG
|
||||
zjmbjSnzRzVVRmzBRtwjVQnNLfdPgfLdfTtNLPHTNNpppf
|
||||
mbSZRzQRBnnzbQJbmjmSbmVhlslZMrclWFrrqWCWsFhchF
|
||||
mpfNshshflNthWfJCBBdmnQbQBZQdn
|
||||
VFVRccgGTqTrHTbWBFjJBCFFJCCQ
|
||||
PvTDHqHqPPGVqqhwfNlWlDhMltlh
|
||||
HmLLgWVjJwhwWLgjjhmVHLLLlSzBlBlSvBvBFGvtdStJSSvq
|
||||
TRRrPMsfQTbRRCZRnTMRZZTCcvSccqBqBBlzdFvBqFsGBcts
|
||||
bRNPbRCZMCrQNfPLdhVpLDVgDhNHWV
|
||||
sPJFDsSsVLgHjLHPbj
|
||||
vCnRQhhRQdVQZlZdbHNMlqNNjgjbpbBL
|
||||
ChhCCCWTWnnmvmGtztStzScwrcVcFW
|
||||
NRBTNDBglSSgDwCClQQSFFHdLLsFbPFFLt
|
||||
McpmWccMWHZPcLstbt
|
||||
MWnWphVMvvzJzpWJWmVphjrDDBBTRwRDDDRRCnPDnqgg
|
||||
hsnnhhLljLPTmZwvdZdZjmmz
|
||||
RQNNDpNMSZwvsmqstN
|
||||
QFMFRDVDsHSpRpHSMRHfGGGTLhCChBGhBhBFBJ
|
||||
TTbltCvClzvzCZtwtwLTtQQQgjNgmjgQRRRQSjQLjR
|
||||
HPpnZHcJsdnnfsdVHHSSqghhmqBSSqSmBfNj
|
||||
VMJJdnMPrMGVrzvCZwZWCzCt
|
||||
CcQnBBCfBvRzDlsS
|
||||
PdbPPCbhGGpDSDlDDhvDJl
|
||||
HmHWPWdbHnCwCHCr
|
||||
JHlmJcMWHQcPmlmJMmMZPfwTTRDfgdDBfRtgQgdfBw
|
||||
zVvFrqGjzWGVrqvjvNFpspvVBgNNddtTgghhRTwgdDwwwBfT
|
||||
bVFrrvsvjWGVsCsqpSHZmMPJlJnCcLcPZZ
|
||||
QrrQZFZnRtnFRTrnlFTtRZwpGGwzGszhjzbsGzzhmjjhhmhf
|
||||
SgvpDSJSgPBSDPDNgpggmsMhMmffsMmzfJmzHHMj
|
||||
WNVcCPgSSDCddSdWCpNBclCQQFRQQlnTLFLRZQnLtt
|
||||
tgvqWqzvntdlzNzzHrbPrMhHMhhrVrjPmC
|
||||
FGTGGRGTffcJRpQcJJwmjhPLhjnCQPrLPVQrMr
|
||||
SppRSDRwFnJJwwswTDdtzBzqWWzZDldNgtvl
|
||||
sjzPjLphMSrlppSp
|
||||
fbGqgwTqgVTFFcgGTTGcQvfHQZRlSrSlSmMNMBRNNNrZmm
|
||||
MVcFGTFtqjsJLjjtCd
|
||||
jVJqTRHjjtDjZnVJVVjnNdwfCFPZmPgCCgCZGCFFrrFg
|
||||
LSLBMBWsbBBCgfdrFd
|
||||
ShbbzdzQRNNNVhDN
|
||||
JwbSRqmSwRwcpmbSSVfhNBTVGGRnNNzRNh
|
||||
ZPfQPjZZrffQZszhzTnVGBvntsNz
|
||||
rLjggjQgQgFdPQjLFQZgwLMbWccLSwWHqHfSqpwc
|
||||
cBhzNpztzHNrpHSHQrhZjZqdJRRgPqjhjqqP
|
||||
bQwsMTswwVjdZMVRJM
|
||||
vGWCTDCTQvvtlvQQ
|
||||
mHVmTTsmzRmRHffmmfMGBzSPMhSWWdDWDSGB
|
||||
VNcnNbtqqJbcbvgvWhShDBDPhjgPhSjB
|
||||
FrrbCnqJcbCJcFFbnqJlppCTfQmfmZQTLVswRLZp
|
||||
rWWppSStfRBLfHPdHHDzlldZ
|
||||
QrTnQmmVCqvrvJvzJZPHvzHsDs
|
||||
qgMMmrTTCcnQQmCNQNQmgTpwRWRtwtpcBWwjSRSSpttW
|
||||
SzWQwwqVbQzwGSfVwffVwbqhFGFFMgGLGMlNMcnNgcvlMg
|
||||
ddZHHsrCdBssDsHmChFLNNnMvmNnnnFncL
|
||||
rpJJdHZJdZHQSRJbSfVhww
|
||||
jLtFhNwNNvHnjFVvQLQLHhfbGDMPfffpllpttZMPPZZb
|
||||
VmrqszVmgCWWggbPGclPlZbcZCbf
|
||||
JdrTmVTVsqsRJHvQnnhwhBLH
|
||||
vpdBvsvdVvSPhvQFCgrRmhjqqRgWcWWgmf
|
||||
tJDGbZHbjRHNrrBj
|
||||
DnMnzGJJwtzVSzzBzTBSTF
|
||||
hZMDbQhMhlMDJrDrPMJRRqGJSvFvSwFSVdvGvwSFqq
|
||||
HjjzcRTnpGVSGGFWHH
|
||||
pssmjctLzpsRRnhlQbPfPrgDbZls
|
||||
FJMhPhnTMGmBFdnmlrfqfCcwlwCwCv
|
||||
pjHLsLbjjRHsHsjDjVsgDRjzCnfCfzqrqvwgflcvcvvgqz
|
||||
njtpHZnLLQGhTtTWSSSh
|
||||
NMddMTDrrjNnrnMWMrlnPwNwftBtGvptGjBHgBgpfCCSfgvf
|
||||
mqRqLFZRVFbtgBSCbGWWHp
|
||||
LZZRmQhVLLFzZdTQPndPNTTnQW
|
||||
CprQrcpqhHhpppchpphdcdpLMRMGsVGGsMsLbZbtbfMRmtbG
|
||||
DzlgTjwPTlSSSCDSlggNmMRtbsstsMfbwtVssMmt
|
||||
TNCNSBNJJTNPJjCTBDzjlJrvvcQrrhphWBqHhHdqrnrr
|
||||
ScbcbglMPRSmvclTlzMTdhVHhhjfdsdhrVDzfjrD
|
||||
LJGtpQwpQBBCttJLGqtqGHhPfDdHwjjhrVrhdrdshr
|
||||
WCpZQCGqtqQWtQWplZPcvMmgmvPccbvT
|
||||
tGWqthqGVdzBWwdd
|
||||
BZvZHFFHZrHZvZNRRHHZNHrMMTzRMTdTzbgDVMVssTDTwg
|
||||
JnNmrHHNrCGBPPnGGc
|
||||
wvFvZBmppBdSLcvshcLrgl
|
||||
bTQqJJHJzJjDQjQtzRVJztDHslgNNVLcgSrsSsWrSslWgrgL
|
||||
TqHHjQnbHTbbmZBBcFMpmBwn
|
||||
ZFCqSlCPdCRTLWWTQQLLQS
|
||||
GjggHcvsggHVTVBLnlcpBQ
|
||||
hvGhlrtjmjrHHhjsMPFNPdtqMPqqRfCf
|
||||
cgRwVfVzrgqqwZctTztFMFMTCdPmmF
|
||||
bWJsSJHpTDRDTWMC
|
||||
sHHNbshnlJhJjBsjsbnBHbZcqrZZQwqvvZcrwwvRcZnr
|
||||
ttgVBtMbttngmHJVpzlzZlppzw
|
||||
cPcsRPmPPQfGcccRQSSZzzvzlflzZHvJppzJzT
|
||||
sQPSCPPWccWWWqsQqRCQFNRMmnbnjjNbgDdBjhBrdbdDbd
|
||||
gSsZDSgdQZgWSgddwLDLLfCDBqvlhBlClqtqjhvBhB
|
||||
RMcsVMcsbVsrPrmJcPHHVvfjjCnvvfCqhlqvqqqq
|
||||
NFMRRpHPgzszGppG
|
||||
WmmZZNJCgCBZCzPvmBCmjWjjqFtFqjFjbVwqwjtt
|
||||
ppDMpdMfSfSSNtlwqbqwwq
|
||||
dTGDhdnfLMLhfDDpQvZNZgmrmrQJgrLQ
|
||||
jrqRqfNNhrVvcTVdpTscpd
|
||||
tGWBlLggWGddTspZZd
|
||||
JJzWtQgQsDbBgDWsgbFrPrRJNMJMPqMNfHjH
|
||||
GdvVbbWsWdvWGDvWZcbFBTBZCzCjwzrhPBJjzF
|
||||
nQPfSHnglfpnMSngnMgJTprJCCwwrwCwpTpCFj
|
||||
SQQHSttRqggmlVsNcvWdRvbWPN
|
||||
WLNLCWLsSJgHFrSHrM
|
||||
gDbzRTcmbzPPgPPdtBctfHfrMMQfGFJrhQnMfGJR
|
||||
dmmzzqZdDqqTLLwjgZgNljws
|
||||
TCqsDHssmDsDGVGlVcMccGDV
|
||||
FLntWWnnFzFgzzbtbznLBtlfjGZmcfFGVNFGlVZcMNlN
|
||||
PpbLLmpgbRzqpCHwChQqwh
|
||||
lVBPVgflgBVVrVTTwgwBPmgflDQjnnGvqjGDDFjGlGnvqHHJ
|
||||
ScCLzdCZdbLSbFdFqvDDdGMQGQ
|
||||
bchNCLRWSbzCbNRzbWRmsrhQwVVwBhmQpPwpgV
|
||||
GmfHCCPqWqHLWLCfRJpbrrbQphwZbZ
|
||||
STVDQzNnzMzNdstMDzzNtZwFhrlwVJJrJlFFJRFwFR
|
||||
DzSvzstnszMnjQcqggjPqQBcqq
|
||||
BzNwLTqwTjrBrljWpBlrQpBpsCGGCtpssCMttDtHsttMDCHp
|
||||
mnrJVmRhhvJVcHtsGHMCnZCPZM
|
||||
bvSmVbRhbgmmSJflzNLrzqzfWfqBWr
|
||||
qsZLqqFNhfrGnJFv
|
||||
DVjVmWlcjVjdDTDlbbTDTzmrCnMmJGnHnmCHfJGfvnfM
|
||||
lVRdDglTlTgVlVjbWWVzVjvNZqSBsLZNtqRsLBqLqQtL
|
||||
ffRRfLVHZHfJHVJcMrMZZwwTzGBBzBTBjGTwrwdSCj
|
||||
qmWbWQbqnbvWhbQPGnGNnpvwSzltpBldtSdzllptCSjTTt
|
||||
vWsbnbWnNvQQQQvsRRLfJRRVGfDcfV
|
||||
PpqrvswPvvvPsNqmDLDttCCcHHZVrCtW
|
||||
hgSddBhghQMdbhbwhgSdQgCCctZcDtLntLttCVLtSLCc
|
||||
dGzdQMFzQMdgGGlGJMzBgBwRqNNfmmTsvfRfJTpwjmpP
|
||||
pcphpdrWDmTgHWMtRWqHRVVH
|
||||
SbGcGGQnvNQGvsjBtVHBLjvqVPVB
|
||||
lzbQCzbZllSzQslpCJpJJDggcggfDT
|
||||
ffrTlhrVrfCsDVTsWzGBBZcBRBqRBWtGtZcq
|
||||
QNFmFHrHNSSmSLJdJrNGZLbGjbcBjBGjqcbgjc
|
||||
ddQvPnHddnQJHSHSFPdnFfDDTfDMMCrwMlPTwDCsrC
|
||||
NBnrNHQHBscvhfBM
|
||||
bbGtgWWWqZFmnZGZbmVCdMzvvShfzfGcdcfMSS
|
||||
WqbjnmbnjWgmFFgtWVbWZwNTNLjNprNwQLDwrTrHQr
|
||||
lwwlcjlzQRBcBccbdLCVnNVWJJzfLndd
|
||||
pZDMtZpSDMZpMZMsPtHVNJVfRCRddVndnJLSJd
|
||||
mDTZvTqtDDHttRPcqhQlwgGlghbqBh
|
||||
DTspTqssqTbdmCMwVmnmlfCD
|
||||
PLPWjjrSjvPzqZvjvRqjLtPwnnHCmWVcncMnnwmncHcHll
|
||||
RFztFjjqjQFQTbdTbQ
|
||||
hTFSVSdhMMVMFjjgbthcbzczcg
|
||||
DvwCJVJWWJDRnfmbDmccfmmgfb
|
||||
QrJvPGWWnpVMqdZsZpqM
|
||||
gRLcHbgnfpgpJjlqqp
|
||||
SFwrTHFBqlZtBPZq
|
||||
HTzDwmSvCvCmsmmvTSwvFwcfRRNRLcQRWNssNNbRWLWL
|
||||
PpMgDMDnsWSnjBQnrjbn
|
||||
LFcVVGChCFdhdVFZVpVCdVbvQbRrbvBBbBjQSJZrrJrR
|
||||
FNwGNCCFHcVTHcFdHHHTDzMzfsgzwpPWMmPflmtt
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
1147
Days/Day4.cs
1147
Days/Day4.cs
File diff suppressed because it is too large
Load Diff
663
Days/Day5.cs
663
Days/Day5.cs
@@ -5,592 +5,117 @@ namespace AdventOfCode.Days;
|
||||
public class Day5 : Day
|
||||
{
|
||||
public override int Number => 5;
|
||||
public override string Name => "Supply Stacks";
|
||||
|
||||
private IDictionary<int, Stack<char>>? _stacks;
|
||||
public override string Name => "Print Queue";
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
_stacks = InitStacks();
|
||||
var result = 0;
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
var precedences = new HashSet<int>?[100];
|
||||
|
||||
var readingPrecedences = true;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var split = line.Split(' ');
|
||||
var moveCount = int.Parse(split[1]);
|
||||
var fromStack = _stacks[int.Parse(split[3])];
|
||||
var toStack = _stacks[int.Parse(split[5])];
|
||||
|
||||
for (int i = 0; i < moveCount; i++)
|
||||
if (line.IsWhiteSpace())
|
||||
{
|
||||
toStack.Push(fromStack.Pop());
|
||||
readingPrecedences = false;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (readingPrecedences)
|
||||
{
|
||||
var split = line.Split('|');
|
||||
split.MoveNext();
|
||||
|
||||
var ruleTarget = int.Parse(line[split.Current]);
|
||||
|
||||
split.MoveNext();
|
||||
|
||||
var ruleNumber = int.Parse(line[split.Current]);
|
||||
|
||||
if (precedences[ruleTarget] is not { } precedenceSet)
|
||||
{
|
||||
precedenceSet = [ ruleNumber ];
|
||||
precedences[ruleTarget] = precedenceSet;
|
||||
}
|
||||
else
|
||||
{
|
||||
precedenceSet.Add(ruleNumber);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result += CheckLine(line);
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
for (int i = 1; i <= 9; i++)
|
||||
AnsiConsole.MarkupLine($"[green]Sum of middle page numbers: [yellow]{result}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
int CheckLine(ReadOnlySpan<char> line)
|
||||
{
|
||||
Span<int> positions = stackalloc int[100];
|
||||
|
||||
// Read line to get positions
|
||||
var position = 1;
|
||||
foreach (var range in line.Split(','))
|
||||
{
|
||||
AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
|
||||
var number = int.Parse(line[range]);
|
||||
|
||||
positions[number] = position;
|
||||
|
||||
position++;
|
||||
}
|
||||
AnsiConsole.WriteLine();
|
||||
|
||||
var middlePosition = (position - 1) / 2;
|
||||
var middleNumber = 0;
|
||||
|
||||
var index = 0;
|
||||
// Check if positions respect precedence rules
|
||||
foreach (var range in line.Split(','))
|
||||
{
|
||||
var number = int.Parse(line[range]);
|
||||
|
||||
// Fetch middle number
|
||||
if (index == middlePosition)
|
||||
{
|
||||
middleNumber = number;
|
||||
}
|
||||
index++;
|
||||
|
||||
if (precedences[number] is not { } precedenceSet)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var numberPosition = positions[number];
|
||||
|
||||
// Check all precedence rules for numbers in the list
|
||||
foreach (var nextNumber in precedenceSet)
|
||||
{
|
||||
var nextNumberPosition = positions[nextNumber];
|
||||
|
||||
if (nextNumberPosition != 0 && numberPosition >= nextNumberPosition)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return middleNumber;
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
_stacks = InitStacks();
|
||||
|
||||
foreach (var line in Input.ReadAllLines())
|
||||
{
|
||||
var split = line.Split(' ');
|
||||
var moveCount = int.Parse(split[1]);
|
||||
var fromStack = _stacks[int.Parse(split[3])];
|
||||
var toStack = _stacks[int.Parse(split[5])];
|
||||
|
||||
// Push items in reverse order and remove them from the other stack
|
||||
var items = fromStack.Take(moveCount).Reverse().ToArray();
|
||||
foreach (var item in items)
|
||||
{
|
||||
toStack.Push(item);
|
||||
fromStack.Pop();
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
for (int i = 1; i <= 9; i++)
|
||||
{
|
||||
AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
|
||||
}
|
||||
AnsiConsole.WriteLine();
|
||||
}
|
||||
// if (display)
|
||||
// {
|
||||
// AnsiConsole.MarkupLine($"[green]Number of safe reports: [yellow]{xmasCount}[/][/]");
|
||||
// }
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
private static IDictionary<int, Stack<char>> InitStacks()
|
||||
{
|
||||
var stacks = new Dictionary<int, Stack<char>>
|
||||
{
|
||||
[1] = new("SLFZDBRH".Reverse()),
|
||||
[2] = new("RZMBT".Reverse()),
|
||||
[3] = new("SNHCLZ".Reverse()),
|
||||
[4] = new("JFCS".Reverse()),
|
||||
[5] = new("BZRWHGP".Reverse()),
|
||||
[6] = new("TMNDGZJV".Reverse()),
|
||||
[7] = new("QPSFWNLG".Reverse()),
|
||||
[8] = new("RZM".Reverse()),
|
||||
[9] = new("TRVGLCM".Reverse())
|
||||
};
|
||||
|
||||
return stacks;
|
||||
}
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
move 6 from 1 to 7
|
||||
move 2 from 2 to 4
|
||||
move 2 from 7 to 4
|
||||
move 6 from 4 to 3
|
||||
move 1 from 5 to 1
|
||||
move 3 from 8 to 3
|
||||
move 15 from 3 to 4
|
||||
move 6 from 5 to 9
|
||||
move 14 from 4 to 2
|
||||
move 3 from 2 to 7
|
||||
move 1 from 2 to 7
|
||||
move 9 from 9 to 1
|
||||
move 3 from 2 to 1
|
||||
move 7 from 6 to 7
|
||||
move 1 from 6 to 8
|
||||
move 2 from 9 to 1
|
||||
move 9 from 2 to 3
|
||||
move 8 from 3 to 9
|
||||
move 1 from 1 to 4
|
||||
move 1 from 8 to 6
|
||||
move 1 from 6 to 2
|
||||
move 5 from 9 to 8
|
||||
move 2 from 9 to 1
|
||||
move 1 from 4 to 2
|
||||
move 17 from 1 to 9
|
||||
move 1 from 3 to 1
|
||||
move 3 from 2 to 3
|
||||
move 2 from 4 to 5
|
||||
move 12 from 7 to 3
|
||||
move 16 from 9 to 2
|
||||
move 5 from 7 to 5
|
||||
move 2 from 1 to 2
|
||||
move 1 from 3 to 6
|
||||
move 1 from 4 to 6
|
||||
move 1 from 7 to 3
|
||||
move 1 from 6 to 3
|
||||
move 7 from 3 to 4
|
||||
move 5 from 8 to 3
|
||||
move 1 from 6 to 7
|
||||
move 7 from 3 to 4
|
||||
move 6 from 3 to 1
|
||||
move 2 from 4 to 8
|
||||
move 1 from 5 to 2
|
||||
move 10 from 4 to 5
|
||||
move 3 from 5 to 2
|
||||
move 2 from 8 to 9
|
||||
move 5 from 2 to 8
|
||||
move 1 from 3 to 5
|
||||
move 2 from 5 to 8
|
||||
move 12 from 5 to 7
|
||||
move 1 from 4 to 2
|
||||
move 5 from 9 to 4
|
||||
move 1 from 2 to 5
|
||||
move 6 from 1 to 3
|
||||
move 6 from 3 to 5
|
||||
move 10 from 7 to 4
|
||||
move 2 from 7 to 3
|
||||
move 4 from 7 to 6
|
||||
move 1 from 9 to 5
|
||||
move 12 from 2 to 1
|
||||
move 1 from 8 to 7
|
||||
move 3 from 7 to 4
|
||||
move 4 from 4 to 8
|
||||
move 7 from 5 to 3
|
||||
move 1 from 2 to 4
|
||||
move 10 from 1 to 5
|
||||
move 2 from 1 to 2
|
||||
move 4 from 6 to 7
|
||||
move 8 from 8 to 3
|
||||
move 5 from 4 to 9
|
||||
move 12 from 3 to 8
|
||||
move 4 from 3 to 8
|
||||
move 2 from 9 to 2
|
||||
move 3 from 5 to 4
|
||||
move 1 from 3 to 5
|
||||
move 1 from 7 to 6
|
||||
move 14 from 4 to 6
|
||||
move 6 from 5 to 9
|
||||
move 8 from 2 to 8
|
||||
move 3 from 5 to 7
|
||||
move 21 from 8 to 4
|
||||
move 16 from 4 to 9
|
||||
move 8 from 6 to 2
|
||||
move 4 from 6 to 1
|
||||
move 1 from 4 to 6
|
||||
move 2 from 4 to 8
|
||||
move 3 from 1 to 8
|
||||
move 2 from 4 to 6
|
||||
move 1 from 6 to 2
|
||||
move 3 from 8 to 4
|
||||
move 2 from 2 to 5
|
||||
move 2 from 5 to 7
|
||||
move 1 from 8 to 9
|
||||
move 1 from 4 to 9
|
||||
move 1 from 1 to 6
|
||||
move 3 from 6 to 3
|
||||
move 3 from 2 to 3
|
||||
move 1 from 4 to 6
|
||||
move 3 from 6 to 7
|
||||
move 10 from 9 to 7
|
||||
move 1 from 4 to 7
|
||||
move 6 from 8 to 3
|
||||
move 1 from 6 to 8
|
||||
move 2 from 2 to 5
|
||||
move 1 from 2 to 1
|
||||
move 1 from 8 to 9
|
||||
move 1 from 2 to 8
|
||||
move 1 from 1 to 9
|
||||
move 7 from 9 to 1
|
||||
move 1 from 8 to 5
|
||||
move 7 from 1 to 7
|
||||
move 3 from 5 to 8
|
||||
move 3 from 7 to 2
|
||||
move 1 from 8 to 4
|
||||
move 1 from 2 to 4
|
||||
move 2 from 4 to 6
|
||||
move 5 from 3 to 1
|
||||
move 9 from 7 to 2
|
||||
move 6 from 3 to 8
|
||||
move 8 from 2 to 7
|
||||
move 2 from 6 to 4
|
||||
move 2 from 1 to 7
|
||||
move 2 from 1 to 4
|
||||
move 24 from 7 to 4
|
||||
move 4 from 8 to 9
|
||||
move 2 from 7 to 5
|
||||
move 1 from 5 to 2
|
||||
move 1 from 3 to 8
|
||||
move 4 from 2 to 8
|
||||
move 13 from 9 to 2
|
||||
move 2 from 8 to 6
|
||||
move 3 from 9 to 6
|
||||
move 26 from 4 to 2
|
||||
move 1 from 5 to 7
|
||||
move 2 from 6 to 2
|
||||
move 2 from 4 to 1
|
||||
move 7 from 2 to 1
|
||||
move 15 from 2 to 6
|
||||
move 8 from 2 to 8
|
||||
move 4 from 6 to 8
|
||||
move 9 from 2 to 9
|
||||
move 13 from 6 to 7
|
||||
move 6 from 1 to 9
|
||||
move 2 from 2 to 4
|
||||
move 4 from 1 to 6
|
||||
move 3 from 8 to 3
|
||||
move 1 from 4 to 9
|
||||
move 2 from 6 to 7
|
||||
move 1 from 4 to 3
|
||||
move 3 from 3 to 2
|
||||
move 14 from 7 to 4
|
||||
move 5 from 9 to 5
|
||||
move 9 from 8 to 5
|
||||
move 7 from 9 to 6
|
||||
move 2 from 5 to 6
|
||||
move 2 from 9 to 2
|
||||
move 10 from 5 to 1
|
||||
move 1 from 3 to 1
|
||||
move 2 from 8 to 1
|
||||
move 1 from 9 to 2
|
||||
move 1 from 7 to 5
|
||||
move 4 from 2 to 1
|
||||
move 1 from 9 to 8
|
||||
move 3 from 4 to 1
|
||||
move 1 from 8 to 6
|
||||
move 12 from 1 to 5
|
||||
move 1 from 1 to 6
|
||||
move 1 from 7 to 5
|
||||
move 4 from 6 to 9
|
||||
move 2 from 2 to 4
|
||||
move 1 from 9 to 6
|
||||
move 1 from 1 to 5
|
||||
move 2 from 9 to 7
|
||||
move 10 from 6 to 5
|
||||
move 1 from 6 to 7
|
||||
move 20 from 5 to 1
|
||||
move 1 from 7 to 9
|
||||
move 2 from 9 to 1
|
||||
move 3 from 5 to 1
|
||||
move 2 from 8 to 4
|
||||
move 2 from 8 to 7
|
||||
move 1 from 5 to 9
|
||||
move 1 from 8 to 4
|
||||
move 22 from 1 to 7
|
||||
move 5 from 4 to 8
|
||||
move 1 from 5 to 9
|
||||
move 19 from 7 to 4
|
||||
move 2 from 9 to 1
|
||||
move 1 from 5 to 9
|
||||
move 10 from 1 to 8
|
||||
move 1 from 9 to 1
|
||||
move 1 from 8 to 3
|
||||
move 8 from 4 to 7
|
||||
move 1 from 5 to 6
|
||||
move 3 from 4 to 5
|
||||
move 1 from 5 to 9
|
||||
move 11 from 7 to 4
|
||||
move 4 from 4 to 9
|
||||
move 1 from 6 to 2
|
||||
move 1 from 3 to 9
|
||||
move 5 from 9 to 4
|
||||
move 5 from 7 to 9
|
||||
move 23 from 4 to 2
|
||||
move 17 from 2 to 7
|
||||
move 2 from 2 to 8
|
||||
move 4 from 4 to 7
|
||||
move 1 from 4 to 5
|
||||
move 2 from 5 to 2
|
||||
move 5 from 8 to 9
|
||||
move 5 from 2 to 7
|
||||
move 9 from 7 to 5
|
||||
move 11 from 9 to 2
|
||||
move 1 from 4 to 3
|
||||
move 5 from 8 to 7
|
||||
move 3 from 8 to 5
|
||||
move 2 from 1 to 3
|
||||
move 2 from 3 to 9
|
||||
move 1 from 5 to 8
|
||||
move 5 from 7 to 5
|
||||
move 15 from 5 to 4
|
||||
move 2 from 8 to 1
|
||||
move 2 from 5 to 1
|
||||
move 4 from 4 to 1
|
||||
move 1 from 8 to 7
|
||||
move 8 from 2 to 1
|
||||
move 4 from 2 to 8
|
||||
move 2 from 7 to 4
|
||||
move 5 from 8 to 6
|
||||
move 5 from 7 to 9
|
||||
move 4 from 6 to 5
|
||||
move 7 from 4 to 8
|
||||
move 1 from 6 to 1
|
||||
move 1 from 3 to 1
|
||||
move 2 from 5 to 1
|
||||
move 7 from 1 to 5
|
||||
move 5 from 1 to 3
|
||||
move 4 from 7 to 9
|
||||
move 4 from 3 to 9
|
||||
move 2 from 9 to 7
|
||||
move 6 from 9 to 2
|
||||
move 1 from 4 to 1
|
||||
move 1 from 3 to 5
|
||||
move 1 from 2 to 5
|
||||
move 5 from 9 to 4
|
||||
move 4 from 4 to 6
|
||||
move 1 from 8 to 9
|
||||
move 8 from 4 to 3
|
||||
move 7 from 7 to 3
|
||||
move 5 from 1 to 3
|
||||
move 11 from 5 to 9
|
||||
move 1 from 7 to 6
|
||||
move 2 from 3 to 5
|
||||
move 1 from 3 to 1
|
||||
move 3 from 6 to 2
|
||||
move 2 from 5 to 1
|
||||
move 2 from 1 to 2
|
||||
move 3 from 1 to 5
|
||||
move 5 from 9 to 2
|
||||
move 2 from 6 to 8
|
||||
move 2 from 3 to 8
|
||||
move 4 from 9 to 7
|
||||
move 3 from 5 to 2
|
||||
move 2 from 1 to 8
|
||||
move 1 from 9 to 8
|
||||
move 1 from 9 to 2
|
||||
move 4 from 7 to 9
|
||||
move 11 from 8 to 7
|
||||
move 1 from 8 to 2
|
||||
move 6 from 9 to 7
|
||||
move 3 from 7 to 1
|
||||
move 13 from 2 to 7
|
||||
move 24 from 7 to 1
|
||||
move 2 from 2 to 6
|
||||
move 1 from 8 to 3
|
||||
move 1 from 9 to 3
|
||||
move 5 from 2 to 4
|
||||
move 1 from 2 to 5
|
||||
move 1 from 6 to 2
|
||||
move 1 from 6 to 3
|
||||
move 1 from 2 to 4
|
||||
move 3 from 7 to 3
|
||||
move 2 from 1 to 7
|
||||
move 2 from 3 to 8
|
||||
move 2 from 7 to 8
|
||||
move 9 from 3 to 2
|
||||
move 3 from 4 to 8
|
||||
move 1 from 5 to 1
|
||||
move 9 from 2 to 1
|
||||
move 3 from 4 to 9
|
||||
move 1 from 7 to 8
|
||||
move 6 from 3 to 9
|
||||
move 2 from 1 to 5
|
||||
move 15 from 1 to 3
|
||||
move 13 from 3 to 9
|
||||
move 11 from 1 to 4
|
||||
move 5 from 4 to 1
|
||||
move 6 from 3 to 6
|
||||
move 4 from 4 to 8
|
||||
move 6 from 1 to 4
|
||||
move 1 from 5 to 2
|
||||
move 1 from 2 to 1
|
||||
move 3 from 4 to 2
|
||||
move 2 from 8 to 5
|
||||
move 2 from 4 to 2
|
||||
move 9 from 9 to 3
|
||||
move 9 from 3 to 5
|
||||
move 2 from 9 to 4
|
||||
move 5 from 2 to 6
|
||||
move 1 from 1 to 8
|
||||
move 1 from 4 to 1
|
||||
move 10 from 9 to 2
|
||||
move 9 from 2 to 4
|
||||
move 10 from 4 to 1
|
||||
move 3 from 1 to 3
|
||||
move 4 from 1 to 2
|
||||
move 5 from 2 to 4
|
||||
move 2 from 5 to 2
|
||||
move 4 from 1 to 7
|
||||
move 10 from 5 to 4
|
||||
move 2 from 2 to 4
|
||||
move 1 from 9 to 2
|
||||
move 2 from 3 to 5
|
||||
move 1 from 3 to 5
|
||||
move 3 from 6 to 7
|
||||
move 8 from 4 to 9
|
||||
move 6 from 6 to 1
|
||||
move 4 from 9 to 5
|
||||
move 2 from 9 to 1
|
||||
move 1 from 2 to 6
|
||||
move 6 from 5 to 2
|
||||
move 3 from 7 to 9
|
||||
move 4 from 8 to 2
|
||||
move 1 from 7 to 9
|
||||
move 1 from 5 to 3
|
||||
move 2 from 7 to 4
|
||||
move 1 from 7 to 1
|
||||
move 14 from 1 to 9
|
||||
move 1 from 1 to 9
|
||||
move 1 from 3 to 8
|
||||
move 3 from 2 to 5
|
||||
move 2 from 4 to 2
|
||||
move 6 from 8 to 1
|
||||
move 1 from 2 to 1
|
||||
move 5 from 1 to 9
|
||||
move 1 from 1 to 7
|
||||
move 2 from 8 to 5
|
||||
move 1 from 5 to 4
|
||||
move 1 from 6 to 1
|
||||
move 8 from 2 to 7
|
||||
move 2 from 6 to 1
|
||||
move 9 from 9 to 5
|
||||
move 11 from 4 to 8
|
||||
move 4 from 7 to 4
|
||||
move 6 from 4 to 6
|
||||
move 1 from 7 to 4
|
||||
move 6 from 6 to 7
|
||||
move 1 from 5 to 9
|
||||
move 6 from 8 to 9
|
||||
move 8 from 9 to 5
|
||||
move 1 from 4 to 5
|
||||
move 15 from 9 to 3
|
||||
move 3 from 1 to 4
|
||||
move 6 from 7 to 2
|
||||
move 3 from 4 to 9
|
||||
move 2 from 7 to 3
|
||||
move 1 from 7 to 3
|
||||
move 1 from 7 to 2
|
||||
move 2 from 8 to 1
|
||||
move 3 from 8 to 5
|
||||
move 2 from 1 to 7
|
||||
move 8 from 3 to 6
|
||||
move 3 from 6 to 5
|
||||
move 1 from 6 to 1
|
||||
move 10 from 5 to 7
|
||||
move 6 from 5 to 4
|
||||
move 4 from 2 to 4
|
||||
move 6 from 5 to 1
|
||||
move 6 from 1 to 8
|
||||
move 2 from 9 to 2
|
||||
move 2 from 9 to 7
|
||||
move 6 from 3 to 7
|
||||
move 1 from 3 to 5
|
||||
move 1 from 1 to 9
|
||||
move 2 from 8 to 1
|
||||
move 2 from 5 to 4
|
||||
move 3 from 3 to 7
|
||||
move 10 from 4 to 6
|
||||
move 1 from 9 to 7
|
||||
move 12 from 7 to 3
|
||||
move 12 from 3 to 8
|
||||
move 2 from 1 to 5
|
||||
move 1 from 1 to 3
|
||||
move 13 from 8 to 1
|
||||
move 7 from 7 to 1
|
||||
move 13 from 6 to 9
|
||||
move 1 from 7 to 4
|
||||
move 6 from 5 to 3
|
||||
move 3 from 4 to 3
|
||||
move 6 from 3 to 1
|
||||
move 10 from 9 to 4
|
||||
move 2 from 7 to 6
|
||||
move 8 from 1 to 9
|
||||
move 3 from 2 to 9
|
||||
move 1 from 3 to 5
|
||||
move 1 from 3 to 5
|
||||
move 1 from 1 to 4
|
||||
move 6 from 9 to 3
|
||||
move 2 from 6 to 7
|
||||
move 4 from 9 to 5
|
||||
move 4 from 1 to 6
|
||||
move 1 from 2 to 4
|
||||
move 6 from 1 to 4
|
||||
move 3 from 9 to 3
|
||||
move 3 from 6 to 8
|
||||
move 3 from 8 to 7
|
||||
move 5 from 5 to 1
|
||||
move 1 from 3 to 9
|
||||
move 1 from 9 to 5
|
||||
move 1 from 3 to 2
|
||||
move 2 from 5 to 1
|
||||
move 1 from 6 to 9
|
||||
move 1 from 6 to 3
|
||||
move 2 from 9 to 7
|
||||
move 2 from 8 to 1
|
||||
move 1 from 3 to 2
|
||||
move 1 from 2 to 5
|
||||
move 1 from 7 to 1
|
||||
move 7 from 7 to 9
|
||||
move 12 from 1 to 9
|
||||
move 1 from 5 to 2
|
||||
move 1 from 7 to 1
|
||||
move 13 from 4 to 7
|
||||
move 1 from 9 to 4
|
||||
move 5 from 7 to 3
|
||||
move 4 from 9 to 1
|
||||
move 8 from 7 to 9
|
||||
move 3 from 2 to 3
|
||||
move 4 from 3 to 7
|
||||
move 5 from 4 to 6
|
||||
move 3 from 9 to 4
|
||||
move 10 from 1 to 5
|
||||
move 3 from 4 to 7
|
||||
move 16 from 9 to 2
|
||||
move 3 from 9 to 2
|
||||
move 6 from 5 to 3
|
||||
move 4 from 6 to 2
|
||||
move 1 from 4 to 6
|
||||
move 2 from 6 to 8
|
||||
move 1 from 5 to 2
|
||||
move 1 from 5 to 8
|
||||
move 7 from 7 to 2
|
||||
move 16 from 2 to 1
|
||||
move 1 from 5 to 1
|
||||
move 10 from 2 to 8
|
||||
move 14 from 8 to 5
|
||||
move 2 from 2 to 6
|
||||
move 1 from 2 to 5
|
||||
move 2 from 2 to 1
|
||||
move 8 from 1 to 7
|
||||
move 4 from 1 to 7
|
||||
move 2 from 1 to 7
|
||||
move 5 from 3 to 2
|
||||
move 1 from 1 to 6
|
||||
move 2 from 2 to 5
|
||||
move 4 from 1 to 7
|
||||
move 1 from 2 to 8
|
||||
move 1 from 2 to 8
|
||||
move 3 from 6 to 7
|
||||
move 10 from 7 to 5
|
||||
move 1 from 2 to 8
|
||||
move 27 from 5 to 9
|
||||
move 1 from 5 to 6
|
||||
move 1 from 6 to 4
|
||||
move 1 from 4 to 3
|
||||
move 3 from 3 to 7
|
||||
move 4 from 3 to 6
|
||||
move 2 from 6 to 4
|
||||
move 3 from 8 to 1
|
||||
move 2 from 6 to 1
|
||||
move 12 from 7 to 8
|
||||
move 2 from 3 to 9
|
||||
move 1 from 9 to 2
|
||||
move 1 from 2 to 8
|
||||
move 2 from 1 to 2
|
||||
move 6 from 3 to 8
|
||||
move 1 from 7 to 4
|
||||
move 15 from 9 to 5
|
||||
move 7 from 9 to 4
|
||||
move 1 from 2 to 1
|
||||
move 16 from 8 to 2
|
||||
move 8 from 5 to 2
|
||||
move 24 from 2 to 9
|
||||
move 3 from 1 to 2
|
||||
move 24 from 9 to 1
|
||||
move 5 from 5 to 9
|
||||
move 3 from 4 to 1
|
||||
move 1 from 7 to 6
|
||||
move 1 from 6 to 3
|
||||
move 1 from 3 to 2
|
||||
move 3 from 2 to 3
|
||||
move 1 from 5 to 6
|
||||
move 1 from 2 to 7
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
193
Days/Day6.cs
193
Days/Day6.cs
@@ -1,3 +1,4 @@
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
@@ -5,75 +6,189 @@ namespace AdventOfCode.Days;
|
||||
public class Day6 : Day
|
||||
{
|
||||
public override int Number => 6;
|
||||
public override string Name => "Tuning Trouble";
|
||||
public override string Name => "Guard Gallivant";
|
||||
|
||||
private const int GridSize = 130;
|
||||
|
||||
private static readonly Point DirectionUp = new(0, -1);
|
||||
private static readonly Point DirectionDown = new(0, 1);
|
||||
private static readonly Point DirectionLeft = new(-1, 0);
|
||||
private static readonly Point DirectionRight = new(1, 0);
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
int position = 0;
|
||||
HashSet<Point> visited = [];
|
||||
var direction = DirectionUp;
|
||||
|
||||
// Store the last 4 characters in a stream (kind of like a sliding window)
|
||||
var charStream = new Queue<char>();
|
||||
charStream.Enqueue(Input[0]);
|
||||
charStream.Enqueue(Input[1]);
|
||||
charStream.Enqueue(Input[2]);
|
||||
var (obstaclesGrid, position) = ReadInputGrid();
|
||||
|
||||
for (int i = 3; i < Input.Length; i++)
|
||||
visited.Add(position);
|
||||
|
||||
// Move the guard till it leaves the grid
|
||||
while (true)
|
||||
{
|
||||
charStream.Enqueue(Input[i]);
|
||||
var destination = position + direction;
|
||||
|
||||
// Check if all 4 chars are different
|
||||
if (charStream.ToHashSet().Count == charStream.Count)
|
||||
if (destination.X is < 0 or >= GridSize ||
|
||||
destination.Y is < 0 or >= GridSize)
|
||||
{
|
||||
position = i + 1;
|
||||
break;
|
||||
}
|
||||
|
||||
charStream.Dequeue();
|
||||
// Check if it's possible to move or if there is an obstacle
|
||||
if (obstaclesGrid[destination.X, destination.Y])
|
||||
{
|
||||
direction = NextDirection(direction);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
position = destination;
|
||||
|
||||
visited.Add(position);
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Position of start-of-packet marker is: [yellow]{position}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Amount of distinct positions: [yellow]{visited.Count}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
const int length = 14;
|
||||
int position = 0;
|
||||
var possibleLoops = 0;
|
||||
var (initialGrid, startPosition) = ReadInputGrid();
|
||||
|
||||
// Store the last 14 characters in a stream (kind of like a sliding window)
|
||||
var charStream = new Queue<char>();
|
||||
for (int i = 0; i < length - 1; i++)
|
||||
for (var y = 0; y < GridSize; y++)
|
||||
{
|
||||
charStream.Enqueue(Input[i]);
|
||||
}
|
||||
|
||||
for (int i = length - 1; i < Input.Length; i++)
|
||||
{
|
||||
charStream.Enqueue(Input[i]);
|
||||
|
||||
// Check if all 14 chars are different
|
||||
if (charStream.ToHashSet().Count == charStream.Count)
|
||||
for (var x = 0; x < GridSize; x++)
|
||||
{
|
||||
position = i + 1;
|
||||
break;
|
||||
}
|
||||
// Store obstacle state
|
||||
var initialState = initialGrid[x, y];
|
||||
|
||||
charStream.Dequeue();
|
||||
// Check if grid is a loop after adding an obstacle there
|
||||
initialGrid[x, y] = true;
|
||||
|
||||
if (IsLoop(initialGrid, startPosition))
|
||||
{
|
||||
possibleLoops++;
|
||||
}
|
||||
|
||||
// Restore obstacle state
|
||||
initialGrid[x, y] = initialState;
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Position of start-of-message marker is: [yellow]{position}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Amount of possible loop positions: [yellow]{possibleLoops}[/][/]");
|
||||
}
|
||||
|
||||
return;
|
||||
|
||||
bool IsLoop(bool[,] obstaclesGrid, Point position)
|
||||
{
|
||||
HashSet<(Point position, Point direction)> visited = [];
|
||||
var direction = DirectionUp;
|
||||
|
||||
visited.Add((position, direction));
|
||||
|
||||
// Move the guard till it loops or leaves the grid
|
||||
while (true)
|
||||
{
|
||||
var destination = position + direction;
|
||||
|
||||
if (visited.Contains((destination, direction)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
if (destination.X is < 0 or >= GridSize || destination.Y is < 0 or >= GridSize)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
// Check if it's possible to move or if there is an obstacle
|
||||
if (obstaclesGrid[destination.X, destination.Y])
|
||||
{
|
||||
direction = NextDirection(direction);
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
position = destination;
|
||||
|
||||
visited.Add((position, direction));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#region Input
|
||||
private (bool[,] ObstaclesGrid, Point Start) ReadInputGrid()
|
||||
{
|
||||
var grid = new bool[GridSize, GridSize];
|
||||
Point start = default;
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
rgffbnnqvqhhmtmzzmmpmllcggsdswwvvwzzpptbppgngsnncwcnwcwnwgwrwrrnqnlqlccwggrcgrccjgcgwghgffjgjgrgmmsrrhchfcfdccjwwzdzcdcbcjjtfjjltlvvtstvttszsvsmmfccwcjwwzmzhhjvjpvjpppcwppdtdvtdvtvztzvzffdfqqgbgffrgrpgphhbcctssncsnncfcppvnpvnvfnfvnnfggtpplggwsggldllzvzrznncbbjpplbbrrnsrssmrsrhhmqmnqqhpqqnrqnrrtrnnrwrwhhpjhphlhvvgbgzztqtvvmssdshhqnhnjjvhjhqqbrqrrmrlrdllvrlvlccfvcffhfssgvsswhwqqfwfwhhcffjmmjrrbgrgjgrrvsrvvwmwsmmszzvmzvmmwmtthvvfbfllpjpwpwjpwpnpjpqqwtqtwwqpwqqrsqqcpqqssrgsrrjwwqmwmgwgrggmvmgmfgmffjfhjfjttcztccmtmmccnznhhcgcffmnfmmqjjhwwtccbzbhhwnhnsnmsnmnqqchhhnggbzbjzjzszsfsjfjvffnlffvrvddbhhqccdnnzwnznjnpnmppthhqddjhddqjqlqplqqjpjwppqttswsvwvfwflfplffnbfbwfwhhlhtlhtltzzmlmslmlwwgzwzrrwhhlnnrfnnmpppjpgpbbhpbhppbrppbhhzgzczqcqvqggwppcnnhnznvznzhhcpctptpjtppdhhprhrcrpcprpplrprzrnrfnrnlrlvrrfqqnnsqsqrssnrnvvvghvvbzzqppjsjnnrprwrrmqqtfqfwwrdrsddprddbdzbdbndbdjdljjrtjrrnzrzjrzzpssftfmfbflbbcpcsppwrppntnhthlthtbbsmsbmsmggpssnhnjjtsjjwssdjdwwppcbpcclmccwzzrggmgmnnwjnnqppjttvllmhhvcctptbpbdpdhdqqgggbnnqcchlhssltstllvqlvqvdvjdvvqvsvfvhfhlfftqffztzdttfvvzmvzznvnsnjjvqjvjljplpvvzlzhzghgddbbzbmbnztgthrnpsqhhdvprtpdftmqfvgjzgdvqwmvgwbczvbschqfhdvqcfnmbgmtqmlmsqcbfhshrzzbrtpgnwwtzgnjghzrlwhntprqhvshjcfvlnchccbtnswfnmpccdppqrqrhngvlwrpplbnpgzbzwtzwrsptmsmlndcfmbnqgvnqvzwpvrtfsrwfvfwdvplrfdddwcnwhzchmwfjsfvbtbrjchmgqwfvvmpzhqcbzhrcmjrzmgrtnzrcqdqdqnpwjctlhrjcphbbcvhvqnhtwjrvrbzfzfzzplshvrcchvtgtjcnhlzsttwdhcmdvrdlgsngvtzqsjrcptwwbgvfbsvgnmfhmvgqtfzbhhmdznjlsghhnlwzhvplfvlqzbrsjhdvrshjbnfqgpscbpzmnmmcsdbtwbwmsvfjwdvtctslcqfssrhczdptlrjbfzjctqrcbppcfcbqqzhhftdjchtscwgwcnpvrrjvnnwrqtrqmbgdfcpqhddnvdnmlmqcgsndwbcfvfrzsrflsnqrpmszqrdlshlcsfrmnsqmtrvjwqcllftscwrtmvcjsmrlqvdfjzgfdtswqzldqgjvhczpqrfbclnbwcjprjncvhgfmjhgfgnvfzfnvbbstgsgtspdhtfsncttlwmllbbvqftjtshfjlqtjwlvrbwmzfhdmcbhtqdzqtzmdljqprwhqwcvbtfqbpjwztgqrvlrqdwmqrqzvptsgjdqnqdfwfpjdglwgpdrcfrrzmpjmtbwwrqqcsnmphcqtthlnlzlfftrjmtjwwqrldcfjjclzrsqvltsfchfggcwbzbtpqcjfvgpwnwwqrdbdvjplgsgctdhqvttmtpmmjfcqdslhjgtdppbmzbrfbrrjncfdhlmjgdwjrmbgpcgctghbvphpgfvvfvtplqrhnjjhqntjvbsggvrvjgrwptcgqgrmjtprvhnvjsdsfqrqrrltlhvfsjsqpbwndbsnjzplcfqtfbdqdzdvnljcsmjnrmwwjzqwsjbdlclsmccbqwnlpltqhqhmthhrdjwlqwrbltghsvblqntvjqzpmmpqwrrwvhmtfqzhrmjfglwfpthhgbhdmrtprtqgqbdcfqlbbvmzmchzglmpzdvhpqchhclbcvrcmhtzqfzrplbvmdhghsttzgdjbgmmtvlqjsstgwlwchhwmflwbgljgszghvfdsngbtbcnhzmmdmsjqfbcsmgpjwjqgwqdlrgznnmhphbrzcgnqczpcbljjmhnnrmzlpqbswwcjpjqcrtdmgprpmmbprwlmpzcmwlnbzqjsgftrncvmjmjwvqgszsrmrczhjnwlghgndhbthwlhfbncrwqfgnshrmdfhwmfvllhvbmmllwfbgrnrttpzffzvcfjfbrmdqfcfrdqsltpbbttnqnbncfhwghfbgwrltbhwmmlpczsvvdnwhchgfplnjsttsqvsznwvlwzgfnhfrrgplsfwrwnbfhblwtjpldjmzrglhppgsjsgzssbbgrrbdmpwhgjjmlfnpdbvtntcwrvltgfnrgwttvvjhqljjvvnmztwgzcclgbjnjspzwnpgtgvhhhqbzrnvmdcljcdncvpnpdhrhqwvlhllbsrmjbzlgczwjsrvqrqfqmtjrnpbtdhsrfbhrgtgnrmlgcwcmrvrdfcqbfcqczjchgrjpzqfqqmcpvnvbrssfrfsrjmlngplqqsnclgvpfhjbzdppjftlgbmcgdbrvqrclvtdnzhhcmzlrdrgbrqrlvfcnvznnqwswvhdpbbjmsqzcrmjngzmdftjzsjvgfdtcvdwhnwwjlcgcmflzzpzpgzrvmptbjgrdjbzscrglhcjppdjdshnvvbsnnddtbwsdrpnbnlrtppcrzbbjrfzhbwgmjqtmgjvmrjgfdndlmqvhgwprsjnhcmrnfdfdzggjjzcccnsnwwbjzmsfjjfhclptfcwqjhnphpwzszjmsrtnbqpqsvcfcvrrgclwlbrqngdcdlzrdfpvbgtznjzdvjngrgswhjnrpgswtqflpgvnpbsvcrtgtzcbhdjpbjwnpdzcmprtzlppbqvpzrrlbssmwhhvqqpmwggnzwcfdnzccjrrncnvjqgbpstctwpqvhdsbcsjrpbzbdlwwvjngtbnvpthppglgsnrbwnvpzldhsgwqhclgwrdsvcfdclvdsbrhcfnbgrtqswstnjfmfrdgphpvgjfqzcwnpcghdhtflgdnhhnnnwrpnmppszgqdcqjqpnccfsqjsmwtqvzwfqvtwtthwswmcqqcqjwcgwgzgmnpzbfpzrqbvqhbhtsvvbppbmqzfnsmwppzvsctgcncztsqdfhnlwjjtvwcchvnphwpnpzqsjhlrcmnbthtqlfclnsfdtpwfzljdpfszvhgzdpzhbjtphbfbmwgfrfplntfqhgpbjzghmblzzhdcbptngqwrtfmvtbhphpvdwpswbscrwzhnvqfwlbwwqqgstgmbqlllspbhbpjmmrfhmjwzdnsdwmpvlrspgzmdjwqwcjpbgwspsghjdvrbbsbtgwptqdvvdhbhqbdhpbzdsdwsjdbjnztdqqrdhwhtpvcbblbmjgmbpqghdsfthzjffrdvldfsnpcsmnzwzcqlnvcrcbqnfcdrfbffrvhqsbqjnnbzsqvqqdqwmsvbqvtgmnnlthpngfsljqnrdhhzpmwsnqvrgdnvlbgnndfcpjfgmzqssvnnrwbmslcqpnhnnwzggsjvqcsqpfzjcmcppntmsdtfggzdncqbfjsqvbzgnnlsdbgjqffsmvnbqlsrjwdmcjbrsrpchnnhdtlcdhfdltmlvtrwjpzphtbhzzrlrwbbhhpntgbcfmphnbrjdhrhvmvhfglrncngjdsvbfrqtqzsgvlzjqzcqnwdcfgvnpsqpphwfsdvpgnchjnnjhsqgvlqcvhzzzcrsqcvrbsbjbdbgddlbb
|
||||
""";
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
var x = 0;
|
||||
|
||||
#endregion
|
||||
foreach (var symbol in line)
|
||||
{
|
||||
if (symbol == '^')
|
||||
{
|
||||
start = new Point(x, y);
|
||||
|
||||
grid[x, y] = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
grid[x, y] = symbol switch
|
||||
{
|
||||
'#' => true,
|
||||
_ => false
|
||||
};
|
||||
}
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
return (grid, start);
|
||||
}
|
||||
|
||||
private static Point NextDirection(Point direction)
|
||||
{
|
||||
if (direction == DirectionUp)
|
||||
{
|
||||
return DirectionRight;
|
||||
}
|
||||
|
||||
if (direction == DirectionRight)
|
||||
{
|
||||
return DirectionDown;
|
||||
}
|
||||
|
||||
if (direction == DirectionDown)
|
||||
{
|
||||
return DirectionLeft;
|
||||
}
|
||||
|
||||
if (direction == DirectionLeft)
|
||||
{
|
||||
return DirectionUp;
|
||||
}
|
||||
|
||||
throw new ArgumentException("Invalid direction", nameof(direction));
|
||||
}
|
||||
|
||||
private readonly record struct Point(int X, int Y) : IAdditionOperators<Point, Point, Point>
|
||||
{
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
}
|
||||
}
|
||||
1299
Days/Day7.cs
1299
Days/Day7.cs
File diff suppressed because it is too large
Load Diff
375
Days/Day8.cs
375
Days/Day8.cs
@@ -1,314 +1,169 @@
|
||||
using Spectre.Console;
|
||||
using System.Collections.Frozen;
|
||||
using System.Numerics;
|
||||
using Spectre.Console;
|
||||
|
||||
namespace AdventOfCode.Days;
|
||||
|
||||
public class Day8 : Day
|
||||
{
|
||||
public override int Number => 8;
|
||||
public override string Name => "Treetop Tree House";
|
||||
public override string Name => "Resonant Collinearity";
|
||||
|
||||
private const int GridSize = 50;
|
||||
|
||||
public override void RunPart1(bool display = true)
|
||||
{
|
||||
var grid = CreateGrid();
|
||||
HashSet<Point> antinodePositions = [];
|
||||
|
||||
var valid = new HashSet<(int, int)>();
|
||||
var frequencyAntennas = ParseAntennas();
|
||||
|
||||
// Check each line from left to right
|
||||
for (int i = 0; i < grid.GetLength(0); i++)
|
||||
// Find antinodes for each frequency
|
||||
foreach (var (_, antennas) in frequencyAntennas)
|
||||
{
|
||||
int previousTreeSize = -1;
|
||||
|
||||
for (int j = 0; j < grid.GetLength(1); j++)
|
||||
// Take antennas by pair to find antinodes
|
||||
foreach (var firstAntenna in antennas)
|
||||
{
|
||||
var size = grid[i, j];
|
||||
|
||||
// The tree on the left is blocking the view, stop searching on this line
|
||||
if (size <= previousTreeSize)
|
||||
foreach (var secondAntenna in antennas.Where(a => a != firstAntenna))
|
||||
{
|
||||
continue;
|
||||
}
|
||||
var firstAntinode = firstAntenna + (firstAntenna - secondAntenna);
|
||||
var secondAntinode = secondAntenna + (secondAntenna - firstAntenna);
|
||||
|
||||
valid.Add((i, j));
|
||||
previousTreeSize = size;
|
||||
if (firstAntinode is { X: >= 0 and < GridSize, Y: >= 0 and < GridSize })
|
||||
{
|
||||
antinodePositions.Add(firstAntinode);
|
||||
}
|
||||
|
||||
if (secondAntinode is { X: >= 0 and < GridSize, Y: >= 0 and < GridSize })
|
||||
{
|
||||
antinodePositions.Add(secondAntinode);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Check each line from right to left
|
||||
for (int i = 0; i < grid.GetLength(0); i++)
|
||||
{
|
||||
int previousTreeSize = -1;
|
||||
|
||||
for (int j = grid.GetLength(1) - 1; j >= 0; j--)
|
||||
{
|
||||
var size = grid[i, j];
|
||||
|
||||
// The tree on the left is blocking the view, don't take it
|
||||
if (size <= previousTreeSize)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
valid.Add((i, j));
|
||||
previousTreeSize = size;
|
||||
}
|
||||
}
|
||||
|
||||
// Check each column from top to bottom
|
||||
for (int j = 0; j < grid.GetLength(1); j++)
|
||||
{
|
||||
int previousTreeSize = -1;
|
||||
|
||||
for (int i = 0; i < grid.GetLength(0); i++)
|
||||
{
|
||||
var size = grid[i, j];
|
||||
|
||||
// The tree on the top is blocking the view, stop searching on this column
|
||||
if (size <= previousTreeSize)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
valid.Add((i, j));
|
||||
previousTreeSize = size;
|
||||
}
|
||||
}
|
||||
|
||||
// Check each column from bottom to top
|
||||
for (int j = 0; j < grid.GetLength(1); j++)
|
||||
{
|
||||
int previousTreeSize = -1;
|
||||
|
||||
for (int i = grid.GetLength(0) - 1; i >= 0; i--)
|
||||
{
|
||||
var size = grid[i, j];
|
||||
|
||||
// The tree on bottom is blocking the view, stop searching on this column
|
||||
if (size <= previousTreeSize)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
valid.Add((i, j));
|
||||
previousTreeSize = size;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Total viewable trees: [yellow]{valid.Count}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Unique antinode positions count: [yellow]{antinodePositions.Count}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
public override void RunPart2(bool display = true)
|
||||
{
|
||||
var grid = CreateGrid();
|
||||
HashSet<Point> antinodePositions = [];
|
||||
|
||||
var maxScenicScore = 0;
|
||||
var frequencyAntennas = ParseAntennas();
|
||||
|
||||
// Compute scenic score for each tree
|
||||
for (int i = 0; i < grid.GetLength(0); i++)
|
||||
// Find antinodes for each frequency
|
||||
foreach (var (_, antennas) in frequencyAntennas)
|
||||
{
|
||||
for (int j = 0; j < grid.GetLength(1); j++)
|
||||
// Take antennas by pair to find antinodes
|
||||
foreach (var firstAntenna in antennas)
|
||||
{
|
||||
var size = grid[i, j];
|
||||
var score = ComputeScenicScore(grid, i, j, size);
|
||||
|
||||
if (score > maxScenicScore)
|
||||
foreach (var secondAntenna in antennas.Where(a => a != firstAntenna))
|
||||
{
|
||||
maxScenicScore = score;
|
||||
// Always add antinodes on antennas if a pair is formed
|
||||
antinodePositions.Add(firstAntenna);
|
||||
antinodePositions.Add(secondAntenna);
|
||||
|
||||
// Compute potential antinode positions
|
||||
var firstAntinodeOffset = firstAntenna - secondAntenna;
|
||||
var secondAntinodeOffset = secondAntenna - firstAntenna;
|
||||
|
||||
for (var i = 1; ; i++)
|
||||
{
|
||||
var firstAntinode = firstAntenna + (i * firstAntinodeOffset);
|
||||
|
||||
if (firstAntinode is { X: >= 0 and < GridSize, Y: >= 0 and < GridSize })
|
||||
{
|
||||
antinodePositions.Add(firstAntinode);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
for (var i = 1; ; i++)
|
||||
{
|
||||
var secondAntinode = secondAntenna + (i * secondAntinodeOffset);
|
||||
|
||||
if (secondAntinode is { X: >= 0 and < GridSize, Y: >= 0 and < GridSize })
|
||||
{
|
||||
antinodePositions.Add(secondAntinode);
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (display)
|
||||
{
|
||||
AnsiConsole.MarkupLine($"[green]Max scenic score: [yellow]{maxScenicScore}[/][/]");
|
||||
AnsiConsole.MarkupLine($"[green]Unique antinode positions count: [yellow]{antinodePositions.Count}[/][/]");
|
||||
}
|
||||
}
|
||||
|
||||
private int ComputeScenicScore(int[,] grid, int i, int j, int size)
|
||||
private FrozenDictionary<char, List<Point>> ParseAntennas()
|
||||
{
|
||||
var visibleTreeCountLeft = 0;
|
||||
var visibleTreeCountRight = 0;
|
||||
var visibleTreeCountTop = 0;
|
||||
var visibleTreeCountBottom = 0;
|
||||
var antennas = new Dictionary<char, List<Point>>();
|
||||
|
||||
// Look on left
|
||||
for (int x = j - 1; x >= 0; x--)
|
||||
var y = 0;
|
||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
||||
{
|
||||
visibleTreeCountLeft++;
|
||||
var nextTreeSize = grid[i, x];
|
||||
var x = 0;
|
||||
|
||||
// Blocking the view
|
||||
if (nextTreeSize >= size)
|
||||
foreach (var frequency in line)
|
||||
{
|
||||
break;
|
||||
if (frequency is '.')
|
||||
{
|
||||
x++;
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!antennas.TryGetValue(frequency, out var list))
|
||||
{
|
||||
list = [];
|
||||
antennas[frequency] = list;
|
||||
}
|
||||
|
||||
list.Add(new Point(x, y));
|
||||
|
||||
x++;
|
||||
}
|
||||
|
||||
y++;
|
||||
}
|
||||
|
||||
// Look on right
|
||||
for (int x = j + 1; x < grid.GetLength(1); x++)
|
||||
{
|
||||
visibleTreeCountRight++;
|
||||
var nextTreeSize = grid[i, x];
|
||||
|
||||
// Blocking the view
|
||||
if (nextTreeSize >= size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Look on top
|
||||
for (int y = i - 1; y >= 0; y--)
|
||||
{
|
||||
visibleTreeCountTop++;
|
||||
var nextTreeSize = grid[y, j];
|
||||
|
||||
// Blocking the view
|
||||
if (nextTreeSize >= size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// Look on bottom
|
||||
for (int y = i + 1; y < grid.GetLength(0); y++)
|
||||
{
|
||||
visibleTreeCountBottom++;
|
||||
var nextTreeSize = grid[y, j];
|
||||
|
||||
// Blocking the view
|
||||
if (nextTreeSize >= size)
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return visibleTreeCountLeft * visibleTreeCountRight * visibleTreeCountTop * visibleTreeCountBottom;
|
||||
return antennas.ToFrozenDictionary();
|
||||
}
|
||||
|
||||
private int[,] CreateGrid()
|
||||
private readonly record struct Point(int X, int Y)
|
||||
: IAdditionOperators<Point, Point, Point>,
|
||||
ISubtractionOperators<Point, Point, Point>,
|
||||
IMultiplyOperators<Point, int, Point>
|
||||
{
|
||||
var lines = Input.Split('\n').Select(s => s.Trim()).ToArray();
|
||||
|
||||
var grid = new int[lines.Length, lines[0].Length];
|
||||
|
||||
for (int i = 0; i < grid.GetLength(0); i++)
|
||||
public static Point operator +(Point left, Point right)
|
||||
{
|
||||
for (int j = 0; j < grid.GetLength(1); j++)
|
||||
{
|
||||
grid[i, j] = int.Parse(lines[i][j].ToString());
|
||||
}
|
||||
return new Point(left.X + right.X, left.Y + right.Y);
|
||||
}
|
||||
|
||||
return grid;
|
||||
public static Point operator -(Point left, Point right)
|
||||
{
|
||||
return new Point(left.X - right.X, left.Y - right.Y);
|
||||
}
|
||||
|
||||
public static Point operator *(Point left, int right)
|
||||
{
|
||||
return new Point(left.X * right, left.Y * right);
|
||||
}
|
||||
|
||||
public static Point operator *(int left, Point right)
|
||||
{
|
||||
return new Point(right.X * left, right.Y * left);
|
||||
}
|
||||
}
|
||||
|
||||
#region Input
|
||||
|
||||
public const string Input =
|
||||
"""
|
||||
220102001303332210111144403232401113333122342344231242454143210203320302212443030013122003001101100
|
||||
002012111323310331302003042221132010432132445255133124455255223004414440440003301012203200022100210
|
||||
200201202011003110423331304200331011531224544245554512113213335525210302033141324322321031312102110
|
||||
100020212221032131124244103404003222433224521422334123232422124515312313433224100204010121132311000
|
||||
200113321032110240111004030043155443522233113242534443312241445211112450323031312112213000023232100
|
||||
000123222130133422212242344055134444215311551422533215421415442551425225432130430124043210211111310
|
||||
220013001310041302023441034332322423241253523413533421512551432233114553552003013120121302130121320
|
||||
103122021001324130041021443134551553414353255343356623553131221454542451225451442032131420112320101
|
||||
012123121220242033212021343121244143344324534625253522262464534215422121222134240012234133102111220
|
||||
330310331223230000003152443554413335326665536266322522652335566553114314142351411020403401413302112
|
||||
033203120011110011132251145135331144533354253453463224233644324632453434135523253300131220303213123
|
||||
320111230330142103134512313345346434643654336344264466663434525446644113511452351451422214014013322
|
||||
001132233321313303345535112443242622242446334234425332545346556362543355243332135453212444110331303
|
||||
112033313244310423153325243233225655536462366623456645652435535435325433454445524512423111021132122
|
||||
313313043314211444453212142362452645555543222645663664243443432442223333565131234141351344321344102
|
||||
131230133213133211232332525334634543566623665537334334547734623265434432455254451425235432443212211
|
||||
033344041000113254352455455346236225633465644343664557364344535543336532242444234311533433344140212
|
||||
213210413044552341333323656654354424366446744766744473434577534775255332236334522521333331002022121
|
||||
223112203001555435245233523555243667443447767433564533557556755677732432236462355155425414244240300
|
||||
031112340101154335334634566542526467535374465476634474475365364377737233444423444335143215320411041
|
||||
010203132113252122424352345322745777347553756767766736766655557657446763326426264545545441510322304
|
||||
321034434351253424555342636457546533636345766763737363536656637564757633453436366225532223151301123
|
||||
140333103113245552456543556436376775537436555564765867677377566536736367466446544545111231522432042
|
||||
344202325543255413523362252766476773354345756567775846446585764655346457333656245566142114252141442
|
||||
300442033331415536626644654454735373634646576484854768867856765345656633644236246242335514321313432
|
||||
422444251112412665556253554536437336675554766648744646768865576456545754676632532244262315154431312
|
||||
202304543452455552253665657746647784558765457564785778845788767784833536336745445354462312521531440
|
||||
443202253112536253525354345435633886668445868754667447674764886554756567546737654246334325241222041
|
||||
444423415155442365223265743454556684558776766888858567565767784775755635475565754224462452335222241
|
||||
344303321125225553466564654375755674684544768955877976656855558645744675543644552655335222244234041
|
||||
300235531322254555657355344757787845684787759755989576658884775746464854347454745445252251123331200
|
||||
202355355135453623555734775437867546864765789685787875887555685885564677653753475626332543431524440
|
||||
123112125155234436477477667347767767746589595765887578895688659457644647637353775542533353231324344
|
||||
410231223354354564265577744565557576558859695696978987776856795557766747576576743622336235154122541
|
||||
144345221145432366464547578854445477995896778965569886979678656986544557875776343376245336222211154
|
||||
041355524153432432536456778856655655586558689789676558987567866689878584574356765462664355555422315
|
||||
043213424536224446535754387584686658555998969679778967988975666897764557557733673744622262412325233
|
||||
101514245332544663477377677875765977975768579996797978899567698975768865784644537776543454651544223
|
||||
055515332353232236436447686544477656596959996666689896787797795969665874555543664764442344265232243
|
||||
222545542226664544634434558757485778565956766669899769668998978795896868888674777634532432531545351
|
||||
434314333334362377634654477865886799965779778887799678789966958767788684856666356767346645644343444
|
||||
052335546342344533746576644847456965678786776877897777697767787998596844688878543443425354265524523
|
||||
245321436235332754756734464668569895557967788998689969678678888859577664555777765333674636253522234
|
||||
222511135542326767344777655475586999669889777967697967976779776769789666884457455657536456246131555
|
||||
254433214252433545454764655656756765598866789679798998989699886966798756574757563674433652342254411
|
||||
252443455634345774563668584548569877777679776897897977978768868758769758655687433345452443435424512
|
||||
312151563634655557774676587765775678576967989777779888989698876657887877756744456665655635556644123
|
||||
255315424526333665355778666668586665799969869877998777889777988668875966868565465457776522236513141
|
||||
141324353246555364776377784867669969887687879788978777778977696768597689744655653757436644265454325
|
||||
354554356562633675467576477485995977969979699799889979879876989688558895876557644555777244452335314
|
||||
235324556262356365436555887646778779897999678779989989789867689977685966845857674434347554655643252
|
||||
413432246554227346473675665849975567696667989798798778788967877675576875667875866434546262246521543
|
||||
552324452542255347547654567456656665796776679978889979999797899897878689747764654756336634422352455
|
||||
132142446224635664776385465487598668797987978789877989998967699965559668558447437465553652345225512
|
||||
535121326642222474774354544766768756799778998798789898877898889965958696446887843476762526426515244
|
||||
345151122435326774546477755588766796667978679897798799788798667756596585444845757774352236466242124
|
||||
324135422245435777577646446776855665599676997689997887788889876766665986567668467764463526524522524
|
||||
325343515546653536653454765454579566578777977788879878787979966579696677474785343347473444324354355
|
||||
411221244324436736446567757755797766577698989699898679769679676797557885877546755664674522365314215
|
||||
011225512566433343766434774658485575577887896689896789789788897667989867646846655537445534555245154
|
||||
353122224246523453336574684477667558859686788676888887889677967668868867745484457553323245424151214
|
||||
025211533334552466553436874465855779555988968677869768998666855765958765844553645533522566662215435
|
||||
011144555564545656657564766665457958988879979779789696768889888785895588848586367454333255641115431
|
||||
312135513646235366335766645784546897755855986679986669787888667577687576776674647476324553225412153
|
||||
401131435555652456777737485558685475567889776796686996966887777867565457675674635564364663332115334
|
||||
111542111546535443776533554556858445867565786988765999858788986988467667765674337645225253433114412
|
||||
324152522543244453747533764587454556659676798855686758699569787576577568846344576564242526335344431
|
||||
123513525116652325364735577676854466795879775965858579978758766786788576585574533555234644544424444
|
||||
201422231514666656435556464744556487779676697575668797755696587875664885475643663462362633532152224
|
||||
443133412441244332664735557756557478667877999697777576977768645754645558333564346654626425334525344
|
||||
431015242443666335263335435575686474856864565688697865686896558787678553436564534565256645251434512
|
||||
010022255222133364253766673665475577467776484765858776654564844676776444447654375652434614143215022
|
||||
112002141144134663334274465647734767886457477454887888474577867446657475453544742245245225443332224
|
||||
331232153352336525225567445365565486747774487468877475878758554778586376763333443326544225345123013
|
||||
320123541455416433363426343365775545857885758565575848877877686547673556675754423464442514232324111
|
||||
042432343324232554524246554574474345666464658776446546567878767443577744556362465553665411142432422
|
||||
142111123322431534522545253754364545474457775847846786887674646573467346333352524442333115335223141
|
||||
344133332441235422454233333556736343777476764657687856476465776533456554442553426542432524345343333
|
||||
200031013552112555654336435633347655674473538755855765665344475745556736546535462654344221551230302
|
||||
304022204315531423544354645467655764773637456746376536645753764476654735362436623665431353330033320
|
||||
001214000225135351445433524663673656735567443667544556374445736766637732424362445435124235202421144
|
||||
133240444115255522316642262344554645657446334644647444534543345455733253453543223511253231133210321
|
||||
324313341004114352115254632235242543363566666546735757746734646346355536356645334223223155213043334
|
||||
322012103401425423541123244634634342577565467364645454366476547536536356344363313411143511003322321
|
||||
030233343013121433455142565364335554237444577544465747334546363663525346435245514412331312412441220
|
||||
210201421410133422542335534522343332455655473755663556635632662655563553445642432325453033042340112
|
||||
012224401212432145413124536446542562653225343456763356434464356455233544345355532151231212104022112
|
||||
312232323430402414252325451525553345425256326265324326656464322435443535213233315511433100124021321
|
||||
010230232102113031224241215434543254266544664634225463436365465636465234441113521431122331212121101
|
||||
212212302203143433332245352152333246623456656325435343642442543354454522241344343333411433411331230
|
||||
011102200023414304323524211214225553365332454633645434256444354263245252314454334421304444012133303
|
||||
120113010124021413002342554241434235565233233626345455655236425423152444344321441224210011210001020
|
||||
101033322321412021400115241224135351431466535533654236552223322311141154321444212340220200110122301
|
||||
011220031300131001424314223221135334414132553352224226351421342145342332444324224232200001102210233
|
||||
121312303322224212003013214154522352135431322413434142221234334123523122531033230010321012211132201
|
||||
012020110022314203102101331443513341244141113213442111455332441213534235144341443443042312110221221
|
||||
100013222332201123334301101412554224524144445454322353452424512151232340130231214403422202221333120
|
||||
211200011012011223124042241233103554151124335225451435512351451314113131210120200021021301331230211
|
||||
222211000301233212310103403144201411351211113145331241322345244155131304344032001313100223022021012
|
||||
""";
|
||||
|
||||
#endregion
|
||||
}
|
||||
2248
Days/Day9.cs
2248
Days/Day9.cs
File diff suppressed because it is too large
Load Diff
1000
Inputs/Day1.txt
Normal file
1000
Inputs/Day1.txt
Normal file
File diff suppressed because it is too large
Load Diff
60
Inputs/Day10.txt
Normal file
60
Inputs/Day10.txt
Normal file
@@ -0,0 +1,60 @@
|
||||
670107898789217654342123456782345678011256767898765465432101
|
||||
789234567654308210256034105891089019100349897767874376569101
|
||||
658341234530989300107845234521078323270110588758901287478272
|
||||
345450347621895418916976367652569454589223679643210896564383
|
||||
430569678934786917014989898743458765678334534554034787665898
|
||||
521678432825677806323876321212345107895450128765125693456721
|
||||
437876501910543215214985400303434234784966549834296502107610
|
||||
108978967865676784305673212345125105672877838126787411098523
|
||||
232169054654985895676894501876056216781236923035498321015432
|
||||
147054103023984104389087662943237645890321015676325677896761
|
||||
058943212110873201243179879850198732765430234588714986234890
|
||||
167687601101164012652234568766784321887342101899603215105659
|
||||
678996511231054873701221978955693870996456701234514504378778
|
||||
982123490543123964823400876554212987345980896785603673069867
|
||||
765010587650123455916512345443403456287671015498512982154956
|
||||
876523018567656996507845678932212310196542564321027854323241
|
||||
985452109898743887765930987821054321203433473452567761018130
|
||||
784343216789212701894321076543065010012128982867658956789021
|
||||
891238345323105611256232565332170321234089801998943441034330
|
||||
760189653410134320347183423469981236985178767870832332125545
|
||||
654308754589823412398094012578876547876589454561221089076556
|
||||
569210345676210503480189017665014566981074305432012670988987
|
||||
778123216784345676503276328984323475212565213456587521267981
|
||||
898014505891256985214965410810012984303456432347895430345670
|
||||
785210676540787694345898325723678778984234541056498741234321
|
||||
654321987034896001256763676554569560128105650110345657876434
|
||||
321039654126789123347854985438765430439876763431233054965235
|
||||
490318743256770104098923821129654321540569892343212123452196
|
||||
581401232149863265121012530034341013691456701456504567861087
|
||||
672310345038054396432343448101231012782347650987623438932387
|
||||
965498786521178987503453559874342103452878943298510129873498
|
||||
878945697810265089612354567565213478501987801123456018784567
|
||||
969034398924354108743543658106904569612016772010567105695436
|
||||
450123454589443298874632109237876548743125983400198234306721
|
||||
343210545476554581965549434312361039654334876510256543217810
|
||||
012654556321055670123678323403456128761242108981347789878934
|
||||
101763217898765432252101410589567545650543567432098236712125
|
||||
249890106789854501343234521673498432787694656548123145601016
|
||||
432187678768763312854145636762876501098781067439054006432567
|
||||
243014569659643210965098745891985411239872358928765419647898
|
||||
156103012346501349876787876740694320540965443210474328756787
|
||||
067612101236432358565678945056543217601453456754389845643896
|
||||
198787656345678967632365432127680108912322589863265434512387
|
||||
234594565676589874541050121218998012301011267770172123001989
|
||||
109683410789490163698210930300107321694120178089085012123476
|
||||
658762125610301252784327845451256430783243569172196781018565
|
||||
567891034521212341075456786965344567654652410234505492109410
|
||||
656900347234301056789845697874498698676701322343012343478326
|
||||
543211298165692345698926543289567789589887011452321034567567
|
||||
432104347076780434767810432101125654434996320961478933003498
|
||||
218765456987101229896321101911036763221745467870567122112567
|
||||
309894365896234310785410110876545894100876786987651033678985
|
||||
456789223345985401656789212567030345210965495698776544543234
|
||||
787650110276576564565094303498121236321234324308989434350198
|
||||
896343023183465433004185478767870387123456710217375621060167
|
||||
125432134092174332113276769365968791001249854567434789871256
|
||||
034334547894089211223498853478959601098345983098723348964343
|
||||
301227656323456200124567942562344512367896572129810254328321
|
||||
212018965214387103438901231001123201456087561234722167219450
|
||||
323127656103898234567872102121010126545123450165621098308761
|
||||
1
Inputs/Day11.txt
Normal file
1
Inputs/Day11.txt
Normal file
@@ -0,0 +1 @@
|
||||
0 7 6618216 26481 885 42 202642 8791
|
||||
140
Inputs/Day12.txt
Normal file
140
Inputs/Day12.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
MMNNPPPPGGGGAGGPPPPPPPPPZZZZZZZLLLLLLLEEEEEEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAMMMMNNMMMMMMMMMMMMMMMMAARRRRRRRRRRRRRRRRRRHHHHHHHHHHHHHAAAAAAAAAAAA
|
||||
MNNNPNPPGGGGGGGPPPPPPPEPZZZZZZZLLLLLLLWWEEEEEEEEEEEEEAPAAAAAAAAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMAMMAARRRRRRRRRRRRRRRRQRHHHHHHQHHHHHHHWAAAAAAAAAA
|
||||
NNNNNNNPGGGGGGGGPPPPPPPZZZZZZZZZLLLLLLLEEEEEEEEEEEEEEPPPPAAAAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMMMAAAAAAAAAVRRRRRRRRRQQQQHHQQHQQQHQHHHHWWWWAAAAAAA
|
||||
NNNNNNNNGGGGGGGPPPPPPPPPZZZZZZLLLLLLLLLLEEEMEEEEEEEEEEPPPPAAAAAAAAAAAMMMMMMMMMMMMMMMMMMMMMMMMAAAAAAVVVVRRRRRRRQQQQXQQQQQQQQQQQQHHHWWWWWAAAAA
|
||||
NNNNNNNYYGGGGGGPPPPPPPPPZZZZZZZLLLLLLLLMMMMMEEEEEEEEEPPPPPPAAAAAHAAAAMMMMMMMMMMMMMMMMMMMMMMMMMMAVVVVVVVRRRRRQQQQQQQQQQQQQQQQQQQHHWWWWAAAAAAA
|
||||
NNNNNNNXYYYCCCIPPPWZPPPPPZZZZZZLLLLLLLSSMMSSEEEEEEEPPPPPPPPPPAAHHAAAAHMMMMMMMMMMWWMMMMMMMMMMMMMMMDDVVVVRRRRRRQQQQQQQQQQQQQQQQQQHHWWWWWAWAAAA
|
||||
NNNNNNXXYCCCCCIPPPPZZPPPZZZZZZZZLSLSSSSMMMSSEEEEEEEPPPPPPPPPPPAAHHAAAHHMMMMMMMMMMWMTTMMMMMMMMMMDDDDVVVVRRIIMRMMMQQQHTTQQQQQQQQQQQWWWWWWWWWWA
|
||||
NNNXXXXXXCCCCCCXPZPZZZPZZZZZZZZZZSSSSSSSSSSSEEEEEEEEPPPPPUUXXXHAHHHAHHHMMTMMMTMMMMTTTMMMMMMMMMDDDDDVIIIRIIMMMIMZQQQHTHQQQQQQQQQQAAWWWWWWWWAA
|
||||
NNNNXXXXCCCCCCCZZZZZZZZZZZZZZZSSSSSSSSSSSSSSSSEEFFPPPPPUUUXXXHHHHHHHHHHHTTMMMTMMMMTTTTTMMMMMMDDDIDDVIIIIIIIMMMMMQQQHHHQQQQQQQQQQAAAWWWWWAWAA
|
||||
NNNNNXXXXCCCCCAVVZZZZZZZZZZZUUUSSSSSSSSSSSSSSFEFFFFPPPPUUUXXXXHHHHHHHHHHHTMTTTTTMMTTTTTTMMMDMDDIIIVVIIIIIIIMMMMMMQQHHQQQQQQQQGGGQAAAWWWAAAAA
|
||||
NNNNNXXXCCCCCVVVVVVZZZZZZZZUUUUSSSSSSSSSSSSSFFFFFFFPPPUUUUXUXHHHHHHHHHHHHTTTTTTTMMTTTTTTMMDDDDDDIIIIIIIIIIIMMMMMMQIHAQQQQQQQQQQQQAAAAAWAAAAA
|
||||
NNNNNNXCCCCCCCVVVVZZZZZZZZZUUUUSSSSSSSSSSSSSSFFFFFFPPPUUUUUUXHHHHHHHHHHHHHTTTTTTTTTTTTTTTTTDDDAAAAIAIIIIMMMMWMMDDGGGAQQQQQQQQQQQQQAAAAAAAAAA
|
||||
NNNNNNNCCCCCCCCVVZZZZZZZUZZUUUUSSSSSSSSSSSFFFFFFFFFFPPUUUUUUUHHHHHHHHHHTTTTTTTTTTTTTTTTTTTDDVVAAAAAAIIIIIIIMMTTDDGGGAQQQQQQQQQQWWWUUUAUUUAAA
|
||||
NNNNNNNNCCCCCCCCVVZZZZZZUUZUUUUSSSSSSSSSSSSSFFFFFFFFPPUUUUUUHHHHHHHHHHHHHHTTTTTTTTTTTTTTTTTDVVXAAAAAIIIIIIIMTTTTTTTGGQQQQQQQQQQWWWUUUUUAAAAA
|
||||
NNNNNNNNNNNCCCCCCCZZZZZZUQUUUUUUUSSSSSSSSXSSOFFFFFFFFPPPPUOOHHHHHHHHHHHTTTTTTTTTTTTTTTTTTTTDVVVAAAAAAIIIIIIMTTGTTGGGGQQQQQQQQQQWWWUUUUUUAAAA
|
||||
NNNNNNNNNNCCCCCCCCZZZZZUUQUUUUUUUSSSSSSSSSSOOOOFPFPFPPPPPPPPPPHHHHLHHHHTTTTTMMMTTTTTTTUTTTTDDVVVVAAAAIIIIIIMTTTTTGGGGQGGGQQCQQWWWWUUUUUUUUUA
|
||||
NNNNNNNNNNNNCCCCCBBMZZZUUUUUUUUUUSSSSSSSSOOOOBBPPPPFPPPPPPPPPPXHHHHHHHHTTPTTMMMTTTTUTUUUUUUUVVVVVVVAAAIIIIIITTTTTGGGGGGGGQFFWWWWWWUUUUUUUUUU
|
||||
NNNNNNNNTNCCCCCCBUBBHCCCUUKUUUUUSSSSSSSSOOOOOBBPPPPPPBPPPPPPPPHHHSSSSHPPPPPMMMMMTTTUUUUUUUUOUVVVVVVAAIIIIIIITTTTGGGGGGGGGFFFWWWWUUUUUUUUUUUU
|
||||
NNNNNNNWCCCCCCCBBBBBBCCCCCUUUUUUSSSSSRRRROROOOBBBBBBBBBBPPBBBBHSSSSSSSPPPPPMMMMMTTUUUUUUUUUUUVVVVVVVVVVVVXIITTTGGGGGGGFFFFFFSSKWUUUUUUUUUUUU
|
||||
NNNNNWWWWCCCCCCCBBBBHCCCCCUUUUUUUSSTGRRRRRRRRBBBVBBBBPPPPPBBBBSSSSSSSSPPPPPPMMMMMTTUUUUUUUUUUVVVVVVVVVVVVXXUUGGGGGGGGGFFFFFNSSKKJUUUUUUUUUUU
|
||||
MMMWWDWWIWWCCCCBBBBBBCCCCCCCCCCCCCGGGGRRRRRRRVVVVBBXXXXXPPBBSSSSSSSSSPPPPPPPMMMMMUTUUUUUUUUUUUUVVVVVXXXXXXXUUGGGGGGGGGFFFFFSSKKKJUUUUUUUUUUU
|
||||
MMMMWWWWWWWCCCCBQBBBBCCCCCCCCGGCGGGQGGRRRRRRRVZZZZZXXXXXBBBSSSSSSSPSPPPPPPPPPMMMMUUUUUUUUUUUUUUFVVVVXXXXXXXUUUUGGXGGGGGFFFFAAAKKJUUUUUUUUUUU
|
||||
MWWWWWWWWWCCCCCCQBQBCCCCCCCCCCGCGGGGGGRRRRRVVVVVZZZXXXXXZBBSSSSSSSPPPPPPPPPPPMMMMMUUUUUUUUULFFUFFVXXXXXXXXXUUUUGXXGGGEFFFKKKKAKKKKKUUUUUUUUU
|
||||
WWWYWWWWWWKCCCQCQQQCCCCCCCCCCGGGGGGGGGGGGGGVVVVVVZZXXXXXZZBBSBBSSSPPPPPPPPPEEMMMMMGUUUUUUUULFFFFVVXXXXXXXXXUUUUUBBUUGEFFFKKKKKKKKKUUUUUUUUUU
|
||||
WWWWWWWWWWWQQQQQQQQCCCCCCCCCCGGGGGGGGGGGGGGVVVVVVVZXXXXXKKKBBBBSSSSUUPPPPPPEMMSMMGGVAAAUUQFFFFFFVVVVVXXXXXUUUUBBBUUREEEMMKKKKKKKKKKKUUUUUUUU
|
||||
RWWWWWWWWWWQQQCQQQCCCCCCCGGGGGGGGGGGGGGGGGVVVVVVVVVXXXXXKKKKKBBBBBSSUPPPPPSMMMSSMMGVVVVVVQFFFFFFFFVVVXXXXXUUBUBBBBBREEEMMMMKKKKKKKKKUHUUUUUU
|
||||
WWWWWWWWWWWQCCCQQQQCCCCCCCCCGGGGGGGGGGGGGGGVVVVRVVRXXXXXKKKKBBBBBBBBPPPPPPSSSSSSMMMVVVVVVVFFFFFFFFFFFXXHXUUBBBBBBBRRREMMMMMKKKKKKKKKKHHHUUUU
|
||||
WWWWWWWWWWWCCCCQQQCCCCCCCCCIGIIGGGGGGWGGGGVRRRRRRRRXXXXXKKKKKKKBPBBPPPPPPSSSSSSSSMVVVVVVVVVVFFFFFFFFFHHHUUBBBBBBBRRRMMSMMMKKKKKKKKKKKUHUUUUU
|
||||
WWWWWWWWWWWWCCCCCCCCCCCCCCIIIIGGGGGGGWGGGVVRRRRRRRXXXXXXKKKKKBBBPPBPPRPPPPPSSSSSSVVVVVVVVVVVAFFFFFFFFFHHHHIBBBBBRRRRMMMMMMSKKKKKKKKVVUUUUUUU
|
||||
WWBBWWAWWUUUCCCCCCIQQCCCCIIIIRRRRRRRWWWGGVRRXXXXXXXXXXXXKKKKBBBBPPPPPPPPPPPPSSSVVVVVVVVVVVVVAFFFFFFFFFHHHBBBBBHHHRRRMMMMMMMKKKKKKKKVUUUUUUUU
|
||||
WWWAAAAWUUCCCCCCCIIICCCCCIIIIRRRRRRRWWGGVVVVXXXXXXXXXXXOBKBBBBBPPPPPPPPPPPPPPPPPLVVVVVVYVVVEFFFFFFHHHFFHHHHHBBBBHHHMMMMMMMMMKKKKKUUUUUUUUUUU
|
||||
WWWAAAAUUUUCCCCCCIIIIIIIIIIIURRRRRRRRRGGXXXXXXXXXXXXXXXRBBBBBBBBPQPPPPPPPPPUPPXEEVEVVVVVVVEFFFFFFFHHFFHHHHHHHHBHHMMMMMMMMMMMKKKKKKKKUUUUUUUU
|
||||
WWWAAAAUAUUCCCCCCLLIIIIIIIIUURRRRRRRRRGGXXXXXXXXXXXXXXXRRBBBBBBBPPPPPPPPPPPUPVEEEEEVVVVEVEEEEEFFFFHHHHHHHHHHHHHHHHMMMMMMMMMKKKKKKKKUUUUUUUUU
|
||||
WWAAAAAAAAUEEEOOOLIIIHIIIIIIURRRRRRRRRXXXXXXXXXXXRXXXXXXRBBBBBBBBPPPPBPPPBEBBBEEEEEVVVEEEEEEEEEEFHHHQHHHHHHHHHHHHHMMMMMMMMMMMKKKKKUUUUUUUUUU
|
||||
OOAAAAAAAAUOOOOOOLLLLIIIIIIIURRRRRRRRRXXLLLLXXXXXRXXXXXXRRMBBBBPBPPPPBBTPBBBBEEEEEEEEVEEEEEEEEEEFQQQQHHHHHHHHHMMMMMMMMMMMMMMMMMKKKKUUUUUUUUU
|
||||
OACCAAAAAGAOOOOOOELLLLIYIIRRRRRRRRRRRRXLLLLLXXXXXRRRRXXXRRRBBBBJKKPPPBBBBBBBBBEEEEEEEVEEEEEEEEEEEQQQQQHHHHHHHHHMMMMMMMMMMMMMMMMKKKUUUUUUUUUU
|
||||
AAAAAAAAAAAOOOOOEEELLLIYYVRRRRRRUUUUXXXLLLLLXXXXXRRRRXXXRMRBBBBJKJUBBBBBBBBBBBCEEEECEEEEEEEEEEEEQQQQQQHHHHHHHHHMMMMMMMMMMMMMMMWDDDWUUUUUUUUU
|
||||
AAAAAAAAAAAOOOOOUULLLYYYRRRRRRRRUUUUXXXXLLLLXXXXXXXXXXXXXMMCCBLJJJUBBBBBBBBBBQCCCCCCEEEEEEEEEEEEEFQQQHHHHHHHHMMMMMMMMMMMMMMMMWWWWWWWUUUUUUUU
|
||||
AAAAAAAAAAROOOOORRRRRRRRRRRYYDUUUUXXXXXXXLLLXXXXXXXXXXXXXCCCCCJJJJUUUUUBBBBCCCCCCCCCCEEEEEEEEEEEEEQQQEEHHHHHHHMMMMMMMMMDDDDDMWWWWWWUUUUUUUUU
|
||||
ZZAAAAAXAAROOOOORRRRRRRRRRRDDDUOUUAAXXXXWWLLLLRRXXXXXXXXXCCCCJJJJJJJJJJBBBLLLLLCCCCCEEEEEEEEEEEEEEEEEEEHEEEHHHMMMMMMMDDDDDDWWWWWWWWWWUWUUUUU
|
||||
ZZZAAAAOOOOOOOOORRRRRRRRRRRYDUUOUUUAXXXXXAAAALRRXXXXXXXXXCCCCCCCJJJJJLLLLLLLLLCCCCCCEEEEEEEESEEEEEEEEEEEEEHHHMMHMMMMDDDDDDDWWWWWWWWWWWWWWUUU
|
||||
ZZZAAAUOOOOOOOOORRRRQYYYYYYYYOUOUUAAAAAAAAAAALRRXXXXXXXXXCCCCCCJJJJJJLLLLLLLLLCCCCCCCCEEWWEEEEEEEEEEEEEEEEEHHHHHMHHHQQQQQQQQWQWWWWWWWWWWWWUU
|
||||
ZZAAXAUOOOOOOOOORRRREYYYYYOOOOOOOOAAAAAAAAAAAARAAAAAZXXXCCCCCCCJJJJJJJLLLLLLLLCCCCCCCCEEWWWEEEEIEEEEEEQQHHHHHHHHHHHQQQQQQQQQQQWWWWWWWWWWWWUU
|
||||
ZZAAXAUOOOOOOOOORRRROOYYREOOOOIOOOAAAAAAAAAAAARAAAAAZZZYYCCCCCCJCJJJJLLLLLLLLLCCCCCCCCCWWWEEEEIIEEEEEEEQQHHQHHHHHHQQQQQQQQQQQQWWWWWWWWWWWWUU
|
||||
ZZAAUUUOOOOOOOUUEEEEEEEEREOOOOIOOOAAAAAAAAAAAAAAAAAAZZZYYYYCCCCCCCCLLLLLLLLLLLLLCCCCPCWWWWEEEEIIIIEEEEEQQQQQHHAQQQQQQQQQQQQQQQWWWWWWWWWWWUUU
|
||||
PPPPPYUOOOOOOOEEEEEEEZEEEEOOOIIIIOAAAAAAAAAAAAAAAAAYYYYYYYYCCCCCCCCLLLLLLLLLLLLLCCCPPCWWWWWEEEIIIIEEEEQQQQQQQJJJJQQQQQQQQQQQQQQQQWWWWWWWUUUU
|
||||
PPPZYYYOOOOOOOOOOOEEEEEEEEIIIIIIIIAAAAAAQQAQAAAAAYAYYYYYYYYCCCCCCCLLLLLLLLJJLFLFFCTFFWWWWBBEEIIIIIKQQEQQQQQQJJJJJQQQQQQQQQQQQQQQQQWWWWWWUUUU
|
||||
PPPZYYYYYYYYYOOOOOEEEEEEEIIJIIIIIIACAAQQQQQQQAAYYYYYYYUYYYYCCCCCCCCLLLLLLLFFJFMFCCFFFSBBBBBBIIIIIIIQQQQQQQQQQQJJJJQQQQQQQQQQQQQQQQQWWKWWWUUU
|
||||
PPPYYCYYYYYYYOOOOOOEEEEEEIIIIIICCCCCCCCCCQQQQQYYYYYYYYYYYYYCYCCCCCCCLOOOLLFFFFFFFCFFFSSBBBBBIIBIIIBBQQQQQQQQQQQJJJQQQQQQQQQQQQQQQQQWLWWWWUUU
|
||||
PPYYYYYYYYYYYOOOOOOEEEEEEEIIIIICCCCCCCCCCQQQQQQQQYYYYYYYYYYYYCCCCCCOOOOOLHHFFFFFFFFFFFSSBBBBBBBIBBBQQQQQQQQQQQQQJJJQNQQQQQQQQQQQQQHHHHWWWWUU
|
||||
PYYYYYYYYYYYYOOOOOOEEEEEEEIICCCCCCCCCCCCCQQQQQQQQYYYYYYYYYYCCCICKITOOOOOHHHFFFFFFFFFFFFFBBBBBBBBBQQQQQQQQQQQQQJQJJJOQQQQOQQQQQQQQQQHHHHWWWHH
|
||||
PYYYYYYYYYYYYOOOOOOEEEEEIIIICCCCCCCCCCCCCQQQQQQQQYYYYYYYYZYSCCIIKIIOOOOOHHFFFFFFFFFFFFFFFFBBBBBBBBQQQQQQQQQQQQJJJJOOOQQQOQQQQQQQQQHHHHHHWWHH
|
||||
PYYYYYYYYYYYYOOOOOOEEIIIIIIICCCCCCCCCCCCCQQQQQQYYYYYYYYYYYYIIIIIIIIOOOOOHHFFFFFFFFFFFFFFFBBBBBBBBBQCQQQQQQQQXXXJJKKOOQQQQQQQQQQQQQHHHHHHHHHH
|
||||
PPPPYYYYYYYYYOOOOOOIEIIIIZZZCCCCCCCCCCCCCQQQQQQQPYYYYYYYYBYBIIIIIIIOOOOOIHHFFFFFFFFFFFFFFBBBBBBBBBBQQQQQQQQQXXXKKKKKKKKKKKQQQQQHHHHHHHHHHHHH
|
||||
PPPYYYYYYYYYYOOOOOOIIIIIIZZZCCCCCCCCCCCCCQQQQQQPPPYYYYYYYBBBIIIIIIIOOOJJIIFFFFFFFFFFFRFFFBBBBBBBBBBBQQQQQQQQXXXKKKKKKKKKKKQQQQQHHHHHHHHHHHHH
|
||||
PPPPPYYYYYYYYOOOOOOIIIIIIZZZCCCCCCCCCCCCCMQQQQQQQYYYYYYYYYYBBIIIIIIOOOOOOFFFFFFFFFFRRRFBBBBBBBBBBBBBBBQQQQQQQXKKKKKKKKKKKKQQQKQKHHHHHHHHHHHH
|
||||
PPPPPYYYYYYYYIIIIIIIIIIIIIZZCCCCCCCCCCCCCCCCCCCCCGGYYYYYBBBBIIIIEEIIOOOOODFFFFFFVBBRRRRBBBBBBBBBBBBBWBQQQQQQQQIIIKKKIKKKKKKKKKKKDDDDDDHHHHHH
|
||||
PPPPYYYYYYYYYIIIICIIIIIIIIIZCCCCCCCCCCCCCCCCCCCCCGGYYBBBBBBIIIEEEEEEOOOOOFFFFFFBBBBBRRBBBBBBBBBBBBBBWWWWQQQQPQIIIIIIIKKKKKKKKKKKKKDDDDHHHHHH
|
||||
PPPYYYYYYYYYYICIICCIIIIIIIZCCCCCCCCZZZCCCCCCCCCCCYYYYBBBBBBBIIEEEEEEOOOOOEEFFFFCBBBBRRBBBBBBBBBWWWWWWWWWQWWIIIIIIIIIPIKKKKKKKKKKKKDDDDDHHHHH
|
||||
PPPPYYYYYYYZYZCCCCIIIIIIIIZZCCCCCCCZZZCCCCCCCAQQAGLYBBBBBBBBBBEEEEEEOOOOOEEEFFWBBBBBBBBBBBBBBBBBWWWWWWWWWWIIIIIIIIIIIIIKKKKKKKKKKDDDDDDDDHHH
|
||||
PPPPYYJJYZZZZZCCCCIIIIIIIIIFZZZZZZZZZZCCCCCCCAAAAGGGGGGBBBBBBBEEEEEEOOOOOEEEEFWWBBBBBKKBKKBBBBBWWWWWWWWWWWWIIIIIIIIIIIKKKKKKKKKKKDDDDDDHHHHH
|
||||
PPZPPYJJYZZZZZZCCCCIIIIIFIIFFBFFZZZZAACCCCCCCAGAGGGGGGGGGBBBBEEEEEEEOOOOOEEEEWWHZZZBBWKKKKKBBWWWWWWWWWWAWWWWIIIIIFIIIIKKKKKKKPKKKDDDDNDHHHHH
|
||||
ZPPPPPZZZZZZZZZCCCCCCUIIFIIFFFFOOZZZAAACCCCCAAGGGGGGGGGGBBBBBEEEEEEEOOOOOEEEXHHHZWWWWWKWWKKWWWWWWWWWWWAAAWWWIIIIIFFIKKKFFFKPKPKKKKDDDDHHHHHH
|
||||
ZZZPZZZZZZZZZZZCIIRCUUUIFFFFFFFOFBZAAAACCCCCAAGGGGGGGGGGGGBEEEBEEEEEDEDDEEEEXHHHHHHWWWWWKKKKWWWWWWWWWWAAARRWIIIIFFFIFKFFFFPPPPKKKKKPHHHHHHHH
|
||||
ZZZZZZZZZZZZZZZIIIIIUUUFFFFFFFFFFZZZNANCCCCCAGGGGGGGGGGGGGBBBBBEEDDDDDDDDEEEEEHHHHHWWWWWWKWWWGWWWWWWWWAAARRRIIIIFFFFFFFFFFFPPPKPKKKPPPHHHHHH
|
||||
ZZZZZFZZZZZSSZZRIIIIUUUFFFFFFFFFFFFFNNNCCCCCGGGGGGGGGGGGGBBBBBBBDDDDDDDDDDEEEEHHHHWWWWWWWWWWWWWWWWWWAAAAARRRIIIIIFFGFFFFFFFFPPPPKPPPPPPHHHHH
|
||||
FFFFFFZZZZZZSSSIIIIIUUUUUUUFFFFFFFWNNNNNNANGGGGGGGGGGGGGBBBBBBBBDDDDDDDDDDDDEHHHHHWWWWWWWWWWWWWWWWWWAAARRRRRIRIIFFFFFFFFFFFWPPPPPPPPPPPHHHHH
|
||||
GFFFFFLZZZXZSSSSSSSIUUUUUUUFFFFFFFFFNNNNNNNNNGGGGGGGGGBBBBBBBDBDDDDDDDDDDDDDHHHHHHWWWWWWWWWWWWJJJWAAAARRRRRRRRRIFFFFFFFFFFFWWPPPPPPPPPPPHHHH
|
||||
GFFFFFFFFZFQFSSSSSSUUUUUUUUUFFFFFLFYNNNNNNNNGGGGGGGGGGBBBBBBBDBDDDDDDDDDDDDDHHHHHHHWWWWWWWWWWWWWJAAAARRRRRRRRRRQFFFFFFFFFFFFWPPWWPPPPPPPHHHH
|
||||
GGFFFFFFFFFFFSSSSSSUUUUUUUUUUFFFZNNNNNNNNNNNUUUGGGGGHIIBBBBBDDDDDDDDDDDDDDDDHHHHHHHWWWWWWWWWWWWUAAAAAAIRRRRRRRQQFFQRFFFFFFFFWWWWWPPPPPPUIISS
|
||||
FFFFFFFFFFFFIFSSIIIIUUUUUUUUFFFFINNNNNNNNNNNNNUGGGGIIIIIIIIIDDDDDDDDDDDDDDDHHHHHHHHWWWWWWWWWWWWWCACCCQQQRRRQQQQQQFFRCFFRRFFWWWWWWPPPPPPUUIIS
|
||||
QQQFFFFFFFFFIFIIIIIIUIUUUUUUUIIIIIINNNNNNNNBNNUUGGGIIIIIIIIIDDDDDDDDDDDDDOEHEHHHHHHWWWWWWWWWWSWCCAACQQQQQQQQQQQQQQQRRRRRRRRWWWWWWPPPPPPPPIIS
|
||||
QQQQFQFFFFFFFFPIIIIIIIUUUUIIIIIIIIINNNNNNNNNNUUUUUIIIIIIIIIIAADDLDDDDDDDDOEEEHHHHHWWWWWWWWWWHHCCCCCCQQQQQQQQQQTTQQRRRRRRRRRWWWWPPPPPPPPPIIIS
|
||||
KQQQQQFFFFFFFFFIIIIIIIUUUUIIIIIIIIINNNNNNNNNNUUUUUUIIIIIIIIIADDDLDDDDXXEEEEEEHHHHHHHWWRQQQHHHHCCCCCQQQQQQQQQQTTTTTRRRRRRRRRRPPPPWPPPPPPIIIII
|
||||
KKKQSSSSFFFFFFFIIIIIIIUIIIIIIIIVIIIVVVNNNNNNNNUNUUUIIIIIIIIDDDDDLDXDDXXEEEEEEEHHHHHHWRRQQQHHHHCCCCCQQQQQQQQQQTTTTRRRRRRRRRSSSPPPPPPPPIIIIIII
|
||||
SKVSSKSSALLLNLLRIIIIIIIIIIIIIIIVVVVVNNNNNNNNNNNNUUUIIIIIWWDDDDDDDDXXXXXEEEEEEEEHHHHHHRRQQQHHHHHHHCCCQQQQQQQQQTTTTRYRRRRRRRSSSSSSPPPPPIIIIIII
|
||||
SSSSSSSSLLLLLLLRIIIIIIIIIIIIIIIVVVVVVVNVNNNNNNNUUUUIIIIIDDDDDDDDDDDXDXXEEEEEEEESAHHHHRRQQQQQHHHHHHHHHHHQQQQQQTTTTYYYRRRRRRSSSLLLPPPIIIIIIIIW
|
||||
SSSSSSSSLLLLLLLLIIIIIIIIIIIIIVVVVVVVVVVVNNNNNNNNNUUIIILDDDDDDDDDDDDDDDDEEEEEESSSSQQIFFFFFFFFUHZHHHHHNNHQQTQTTTTTTYYYYRRVLLLLLLLLBIIIIIIIIIIW
|
||||
WWWSSSSSLLLLLLLLINNIIIIIIIIIVYVVVVVVVVVVNNNNNNNNUUUUUUUBBDVDDGDDDDDEEEDEEEEESSSSSQQQFFFFFFFFQZZZZHHHHNNNTTTTTTTTYYYYYRRLLLLLLLLLBBIIIIIIIIIW
|
||||
WWSSSSSSSSLLLLLNISNIIIIIIIIIVVVVVVVVVVVVVNNANNNNNUUUUUULLMLDDGGDDDDEEEEEESSSSSSSQQQQFFFFFFFFQQZZHHHNNNNTTTTTTTTHHYSYYYYLLLLLLLLLBIIIIIIIIIII
|
||||
WWWSSSSSSSSSSSNNNNNNIIIIIVVVVVVVVVVVVVVVAAAANNNNNUUUUUUULLLDDDLLDDDDEEEEESSSSSSSSSQQFFFFFFFFFFFZZZHNNNNTTTTTTTTHYYYYYYYLLLLLLLLLBIIIIIIIIIIX
|
||||
WWWSSSSSSSSSSSNNNNNIIIIIIVVVVVVVVVVVVVVVAAANNNNTTTUUUUULLLLLLLLNDDDDMEESSSSSSSSSSQQQFFFFFFFFFFFZJJJJNNNNNTTTTFFFFYYYYYYLLLLLLLLLLLBIXIIIIIXX
|
||||
WZWZSSSSSSSSSSNNNNNNIIIIIVIVVVVVVVVVVVVVAAAAANNTUUUULLLLLLLLLLLLQDLDEEESSSSSSSSSSQQQFFFFFFFFFFFJJJJNNNFFNTTTTFFFFKKYYYYRLLLLLLLLTTTIIHHIIMMX
|
||||
ZZZZSSSSSSSSNNNNNNNNIIIIIIIIVVVVVVVVVVVVAAAAETTTQUUUULLLLLLLLLLLLWLLEEESSSSSSSSSSQQQFFFFFFFFFFFJJJJJJJFFFFFFFFFFKKKYYYRRRLLLLLTTTTTHHHHIMMMM
|
||||
ZZZZSSSSSCCCNNNNNNNNNIIIIIIIVIVVVVVVVVAAAAAEETTTQQUUULLLLLLLLLLLLLLLEESSSSSSSSSSSQSQFFFFFFFFFFFFFFFJJWFFFFFFFFFFKKKKYRRRRRLLLLTSTTTTHHHHMMMM
|
||||
ZZZZSSSCCCCCYNNNNNNNNIIIIIIIIIVVVVVVAAAAAEEEETTQQQUUULLLLLLLLLLLLLLLEEQSSSSSSSSSSSSQFFFFFFFFFFFFFFFJJFFFFFFFFFFKKKKKKRRRRRLLLLTTTUTTTHMMMMMM
|
||||
ZZKKCCCCCCCCCCNNNNNNIIIIIIIIIIIIRVVVVAAAAAEEEEEEEQUQLLQLLLLSSSSLLQQLQQQSSSSSSSSSSSSCFFFFFFFFFFFFFFFTJTFFFFFFFFPFKKKKKKRRRLLLLLLLTUTTTHHMMMMM
|
||||
KKKKCCCCCCCCCCNNNNNNIIIIIIIIIIIIIIAAAAAEEEEEEEEEEQQQQQQLLLLLESSSSQQLQQQSSSSSSSSSSSSSFFFFFFFFFFFFFFFTTTTFFFFFFFFFFKKKRRRRRRLLLLLLTTTTTTHHMMMM
|
||||
UKKKCCCCCCCCCNNRYYIIIIIIIIIIIIIIIIAAAAAEOEEEEEEEEEQQQLLLLLLLESSSQQQQQQQQSSSVSSSSSSSJFFFFFFFFFFFFFFFTTFFFFFFFFFFFKKKKKRRRRRLLLLLLLLTTTTHHMMMM
|
||||
UKKCCCCCCCCCCCNCYYIIIIIIIIIIIIIIIIAABAAAEEEEEEEEEQQQQQLLLLLLEEQQQQQQQQQQSSVVSSSSSSSSFFFFFFFFFFFFNNNNTNNFFFFFFZKKKKKKKRRRRLLLLLLLLLTTTTHHMMMM
|
||||
UKKCCCCCCCCCCCCCYYIIIIYYYYYIIIIIAAABBBBEEEEEEEEEQQQQSSLLLESSEQKQQQQQQQQQSVVVVSSSSPPSFFFFFFFFFFFFNNNNANNNFFFFFFKKKKKKKIIRILBULLLLLLTTMMMMMMMM
|
||||
UKKKCCCCCCCCCCYYYYYIIIYHYYYYYYIAAAABBBBBEEEEEEQQQQQQSSSSSSSSEQQQQQQQQQQQQQVVQPPPPPSSSYFFFFFFFFFFNNNNNNNNNNFFFFKKKKKKKIIIIIUUUULUTTTTTTMMMMMM
|
||||
UUKKKCCCCCCCCYYYYYYIYIIHHHYAAAIAAAABBBBBBEEEEEEESSSSSSSSLLSSQQQQQQQQQQQQQQQQQPPPPPSYYYYJFFFFFFFFNNNNNNNGNMMMFFKKKKKKIIIIIIUUUUUUUTTTTMMMMMMM
|
||||
UKKCCCCPCCCSSYYYYYYYYYYHHFAACAAAAAAABBBBBEEEDDSSSSSSSSSSLSSSHVQQQQQQQQQQQQQQQQQPPPYYYYEEEEEJJJJNENENNNNNNMMMMFKKKKKKIIIIUUUUUUUUUTUTMMMMGMMM
|
||||
UKKKKKCCCCCYYYYYYYYYYYYHHHAAAAAAABBBBBBBBEEBSSSSSSSSSSSSSSSHHVQQQQQQQQQQQQQQQQQPPPYYYYYEEEEEEEEEENENNNNNNMMMMMKKKKKKIEEIIUUUUUUUUUUUDMMMGMMZ
|
||||
UKKKKKKKCCCAAAYYYYYYYYYHHHTAAAAAAAABBBBBBBBBBBBSSSSSSSSSSSSVVVQQQQQQQQQQQQQQQXXPPYYYYYYHEEEEEMEEEEEENNNNNMMMMKKKKKIIIEEEEUUUUUUUUUUUMMMMMMMZ
|
||||
KKKKKKKKTTCCCYYYYYYYYYHHHAAAAAAAAAJJBBBBBBBBBBBBSSSSSSSSSSSSVVQQQQQQQQQQQMQDQXXPYYYYYYEEEEEEEEEEEEEENNNNMMMMMMMMKKEIEEEEEEEPUUUUUMMMMMMMMZZZ
|
||||
KKKKKKKTTTMMKBYYYYYYYYHHHHHAAAAAAAJJBBBBBBBBBBSSSSSSSSSSSSSVVVVVQQQWQQQQMMXDQXXPYYYYYYYYEEEEEEEEEEEENNMMMMMMMMMKKKEEEEEEEEEEUUZUIMMMMMMMMZZZ
|
||||
KKKKKKTTTTTMKKYYYYHHHHHHHHHUAAAAAAJJBBBBBWWBBSSSSSSSSSSSSSVVVVVVQTQWQMMMMMXXQXXXXYYYYYEEEEEEEEEEEEEENNNNMMMMMMMKRKEEEEEEEEEEUZZZMMMMZMMMZZZZ
|
||||
KKTTTTTTTTTTKKYYKKKKKHBHHHHZLAAAAAAJJBBBNWWWRWWSSSSSSSSVVVVVVVVVVVVVQMMMMXXXXXXXPXXYYYYYEEEEEEEEEEENNNNNMWMMMMSSRRREEEEEEEEZZZZZZMMMZMMMMZZZ
|
||||
KKTTTTTTTTTTKKKKKTKKKHBHHNZZLLLAAAJJJJBJWWIWWWWWSSSSSSSVVVVVVVVVVVVMMMMMMXXXXXXXXXXXYYYYEEEEEEEEEEEEEWWWMWWMMMSSRSSSEEEEEEEEZZZZZZMZZZMZZZZZ
|
||||
TTTTTTTTTTTTJTTTTTTKKKKHHHZZZZLAAAAAAJJJJWWWWMMMMSSSSSVVVVVVVVVVVVVMMMMXXXXXXXXXXXXXYYYYYYEEEEEEEOWWNWWWWWWWWMSSSSSQESEEEEEEZZZZZZZZZZZZZZII
|
||||
TTTTTTTTTTTTTTTTTTTKKKKKHHZZZAAAAAAJJJJJWWWWWMMMMSSSSSSVVVVVVVVVVVVVMMMMXXXXXXXXXXXXYYYYYIIIIEIHEOWWWWWWWWWMMMSSSSSSSSSEEEEEYYZZZZZZZZZZZIII
|
||||
TTTTTTTTTTTTLTTTTTTKKKKKKKKKAAAAAAAAAJJJJJWWWMMMMSSSSSSSVVVVVVVVVVVVVMMXXXXXXXXXXXXXXYYYIIIIIIIWWWWWWWWWWWWMMMSSSSSSSSSEEEDEYYYYZZZIIIIIZIII
|
||||
TTTTTTTTTTTTTTTTTTTKKKKKKKKAAAAAAAAAJJJJWWWWWMMMMSSSVSSVVVVVVVNVVNNNVMMXXXXXXXXXCXYXXYYIIIIIIIIIWWWWWWWWWWWWMMMSSSSSSSSEEYDYYZZZZZIIIIIIIIII
|
||||
TTTTTTTTTTTTTTTTTTTTTKKKKKKAAAAAAAAAWWWWWWWWWMMMMCVVVVVVVVVVVNNNNNNNXNNXXXXXXXXXYYYYYYYIIIIIIIIIGWWWWWWWWWWWMMSSSSSSSSSYYYYYYKKZZIIIIIIIIIII
|
||||
TTTTTTTTTTTTTTTTTTTTTKKKKKKKKAAAAAAAWWWWWWWWWMMMMCVVVTVVVVVVVNNNNNNNNNNKKXXXXXXXYYYYYYIIIIIIIIIIWWWWWWWWWWWWSSSSSSSSSSSZZYYYYYYZJIIIIIIIIIII
|
||||
TTTTTTTTJTTTTTTTTTTTTTYKKKKKKAAAAAAAWWWWWWWWWMMMMWVVVTVVVNVVNNNNNNNNNNNNKXXXXXYYYYYYYYYYIIIIIIIIWWWWWWWWWWWWSSBSSSSSSZSZZZYZYYZZIIIIIIIIIIII
|
||||
ZTZTTTTTTTTYYTTTTTTTAAYKKKKKKAAAAAAWWWWWWWWWWMMMMMMMMMMMMMVVNNNNNNNNNNKKKXXXKKYYYYYYYYYIIIIIIIIIIIWWWWWWWWWWSASSSSQSZZZZZZYZYZZZZIIIIIIIIIII
|
||||
ZTZTTTAYYYYYYTTTTTTTTYYYYTTAAAAAAAAWWWWWWWWWWMMMMMMMMMMMMMNNNNNNNNNNNNNKKKKKKKKYYYYYYYYKIIIIIIIIIIWWWWWWWWNWAASSSSSSZZZZZZYZZZZZZIIIIDIIIIII
|
||||
ZZZZTHAAAYYAYYTTTTTTTTYYYYYUUAAAAAAUWWWWWWWWWMMMMMMMMMMMMMNNNNNNNNNNNNNKKKKKKKKYYYYYYYKKKIIIIIIIIIWWWWWGNNNNNNSQSSZZZZZZZZZZZZZZZZIIDDIIIIII
|
||||
ZZZZZZAAAAYAYYYYTTTTTTYYUUUUUUAUUUUUWWWWWWWWWMMMMMMMMMMMMMNNCNNNNNNNNKKKKKIIIKIIIYYYYYYYKIIIIIIIIWWWWWWWNNNNNNPPSSPPZZZZZZZZZZZZZZZDDDIIIIII
|
||||
ZZZZZAAAAAAAAAYTTTTTYYYYYUUUUUAUUUDUWWWWWDWWWMMMMMMMMMMMMMNNNNNNNNNNNKKKKIIIIIIIIIRYYYYKKIIIIIIIINWUWIWNNNNNNNNPPPPPZZZZZZZZZZZZZZDDDDDIIIII
|
||||
ZZZZZAAAAAAAAAAANTTTTYYYYYUUUUUUUDNNNNDDDDWWDMMMMMMMMMMMMMTTNNNNNNNNNKKKKIIIIIIIIIIIYYKKKKIIIIIINNNNIIIINNNNNNPPPPPPPPZZZZZZZZZZZZDDDDDDIIII
|
||||
ZZZZZAAAAAAAAAAAAJJTTYYYYUUUUUUUAAAAAAAAADDDDMMMMMMMMMMMMMTTNXXXNNNNRKKKKKIIIIIIIIIIJYYKKKKIIIINNNNNXXXIINNJJNPPPPPPPZZZZZZZZZZZZDDDDDDDDIII
|
||||
ZZZZZAAAAAAAAAAAAYYYYYYYYUYYUUUUAAAAAAAAAAADDMMMMMTTTTTTTTTMMXXXXNNNRRKKRROIIIIIIIBBYYYKGKIIIINNNNNNXXXXNNJJJNPPPPPPPZZZZZZZZZZZDDDDDDDDDDII
|
||||
ZZZZZAAAAAAAAAAAAAYYYYYYYYYYUUULAAAAAAAAAAADRMMMMMMTTXXTXTTTPPXVVNNNRRRKRIIIIIIIIIBGGGGGGKIIIBNNNNNXXXXXXNNJXNPPPPPPPPPPPPSSZSSZSDDDDDDDDDII
|
||||
ZZZZZAAAAAAAAAAAAAAAYYYYYYYLLLLLUDNNNNNAAAADURRRRMMTTTXXXTMTBPPPPPRRRRRRRRIIIIIIIIBGGGGGKKKIIBBNNNXXXXXXXXXXXPPPPPPPPPPPSYSSSSSSSUDSDSDDIIII
|
||||
ZZZZAAAAAAAAAAAAAAAAYYYYYYYYLLLLLDNNNNNAAAADURRRRRMTTXXXTTTPPPPPPPVRRRRRRRRLIIIIIIIGGGGGKKNYIBBNNNNEXXXXXXXXXPPPPPPPPPPSSSSSSSSSSUDSSSIIIIII
|
||||
ZZZZZAAAAAAAAAAAAAAXYYYYYYYYYLNNNNNNNNNAAAARRRRRRRRRXXXXXTTPPPPPPRRRRRRRRRRLLIIIIIIGGGGKKNNYNNNLNNNXXXXXXXXXXPPPPPPPPPPPPSSSSSSZZZZZIIIIIIII
|
||||
ZZZZZAAAAAAAAAABBBAXYYYYYYYYLLNNNNNNNNNAAAAAAARRRRRRRXXXXPPPPPPPPRRRRRRRRRRLLIIIINIGGGSKSXNNNNNNNKKXXXXXXXXXXPPPPPPPPPPPKSSSSSSZZZZZZIIIIIII
|
||||
ZZZZZZZZEAAAABBBBYYYYYYYYYYLLLNNNNNNNNNAAAAAAARRRRRXXXXXXXPPPPPPPRRRRRLMRRLLLLLIINNGGSSSSSNNNNNNKKKXXXXXXXXXXPPPPPPPPPPSKSSSSSSZZZHHHLIIZIIU
|
||||
ZZZZZZZZEEEEAABBYYYYYYYYYLLLLLNNNNNNNNNAAAAAAARRRRRXXXXXXXXPPPPPPRRRRRLLLLLLLLLLLLLLLLSSSANNNNNNNKKXXXXXXXXXPPPPPPPPPPPSSSSSSSSZZHHHHHHIHHIH
|
||||
ZZZZZZZEEEEEEBBBYYYYYYYYYLLYRLNNNNNNNNJAAAAAAARRXXRXXXXXXXXXPPPPPRRRRRRRLLLLLLLLLLLLOSSSSANNNNKKKKKKKKXXXXXPPPQQPPPPPIISSSISSSSSZHHHHHHHHHHH
|
||||
ZZZZZZEEEEEEGGBBYYYYYYYYYYYYRRNNNNNNAAAAAAAAAAXXXXXXXXXXXXXXXXPPPPRRRRRRRLLLLLLLLLLLLRRNNNNNNNNKKKKKKXXXXKKPPPQQQPPPPIIIIWISSBSSSSSHHHHHHHHH
|
||||
ZZZZZZEEEEEEGYYYYYYYYYYYYYYYRRNNNNNNAAAAAAAJRXXXXXXXXXXXXXXXXXPPPRRRRRLRRLLLLLLLLLLLLLLKNNNNNNNNKKKKKKKKXKPPPQQQQQQQPIIIIIIIIBSSSHHHHHHHHHHH
|
||||
ZZZEEEIEEEGGGGGYYYYYYYYYYYYYRYYRRJJJAAAAAAAWXXXXXXXXXXXXXXXXXXXPPRRRRRLLRLLLLLLLLLLLLLKKNNNNNNNNKKKKKKKKKKKQQLQQQQQQPIIIIIIIIBBBSHHHHHHHHHHH
|
||||
ZZZZZEEEEEGGGGGYYYYYYYKKKKYYYYYRRRJJAAAAAAAAAAXXXXXXXXXXXXXXXXJPRRRRROOLLLLLLLLLLLLLKKKKKNNSNNKKKKKKKKKKKEEQQQQQQQQQQIIIIIIIIIIIIHHHHHHHHHHH
|
||||
ZZZZZEEEEEZZGGGGYGYYYYKKKKKKKKRRRRJJAAAAAAAAAAQNNXXXXXXXXXXXBXJPBRRROOOOOQQQQLLLLLLKKKKKKNNNNNKKKKKKKEEEKEEEQQQQQQQQQIIIIIIIIIIIIIIHHHHHHHHH
|
||||
ZZZZZZZEZZZZZZGGGGGGGYKKKKKKKRRRRJJJJJJJAAAAAAQNNXXXXXXXXXXXBBBBBBBOOOOOOOOQLLLLLLQKKKKKKKKKKKKKKKKKKKEEEEEEQEQQQQQIIIIIIIIIIIIIIIHHHHHHHHHH
|
||||
ZNZZZZZZZZZZZZZGGGGGGKKNKKKKKKRRRRJNNNNNAAAAAANNNNXXXXXXXBXBBBBBBBAOOOOOOOOQLLLLLQQQKKKKKKKKBKKKKBKKKEEEEEEEEEEQQQQIIIIIIIIIIIIIIIHHHHHHHHHH
|
||||
NNZZZZZZZZZZZZZZGGGGKKKKKKKKKKKKNNNNNNNNAAAAAANNNNSSSSSBXBBBBBBBBBOOOOOOOQQQQQLLQQQQQKKBKKKBBBBBBBBKEEEEEEEEEEEQQQQIIIIIIIIIIIIIDIHHHHHHHHHH
|
||||
NNNNZZZZZZZZZZZZGGGGKKKKKKKKKKKNNNNNNNNNNNNNNNNNNNSSSSBBBBBBBBBBBBOOOOOOOQQQQQQQQQQQQKKBKKKBBBBBBBBBMEEEEEEEEEEQQQQIIIIIIIIIIIIIDHHHHHHHHHHQ
|
||||
NNNNZZZZZZZZZGGGGGGGKKKKKKKKKKKNNNNNNNNNNNNNNNNNNNSSSSBBBBBBBBBBBBIOOOOOOOQQQQQQQQQQKKKBBBBBBBBBBLBEEEEEEEEEEEEQQQQIIIIIIIIIIIIIDHHHHHHHHHHH
|
||||
NNNNNNNNZZZZZGGGGGKKKKKKKKKKKKKNNNNNNNNNNNNNNNNNNXSSSSBBBBBBBBBBBBIOOOOOOOOOQQQQQQQQQBBBBBBBBBBBBEEEEEEEEEEDEQQQPQQFSSIIIIIIISIIDDHHHHEHHHDD
|
||||
NNNNNNNNNZZZGGGGGGGKGKQKKKKKKKXNNNNNNNNNNNNNNNRNSXSSSBBBBBBBBBBBBBIIIIIOOOLQQQQQQQQQOBBBBBBBBBBBBEEEEEEEEEEDEFQQPQFFSSIIIIIISSSSDDDHHEHHHHDD
|
||||
NNNNNNNNNZNNGGGGGGGGGKKKKKKKKXXNNNNNNNNNNNNNNNSSSXXSSSBBSBBBBBBBBBBBBIIOOOQQQQQQQQQQQBBBBBBBBBBBBBEEEEEEDDDDFFQQQFFFSSSSSSSIISSSSSDDDHHHDHDD
|
||||
QNNNNNNNNNNGGGGGGGGGGKGGKKKKKKXXNNNNNNNNNNNNSSSSSXSZSSZBBBBBBBBBBBBBBIIIOIQQQQQQQQQQKBBBBBBBBBBBBBBDDEEDDDDDFQQFFFSSSSSSSSSSSSSSSSDDDDDDDDDD
|
||||
NNNNNNNNNNNNNGGGGGGGGGGGKKIKKXXXXNNNNNNNSNSSSSSSSSSZSZZZZZBBBBBBBBBBBBIIOIIIQQQQQQABBBBBBBBBBBBBBBBBDDEEDDDFFFFFFFSFSSSSSSSSSSSSSDDDDDDDDDDD
|
||||
NNNNNNNNNPNGGGGGGGGGGGGGGKKXXXXXXNNNNSSSSSSSSSSSSSSZZZZZZZBBBBBBBBBBBIIIIIQQQQQQQQQBBBBBBBBBBBBBBBDDDDDDDDDFFFFFFFFFSSSSSSSSSSSSDDDDDDDDDDDD
|
||||
1279
Inputs/Day13.txt
Normal file
1279
Inputs/Day13.txt
Normal file
File diff suppressed because it is too large
Load Diff
500
Inputs/Day14.txt
Normal file
500
Inputs/Day14.txt
Normal file
@@ -0,0 +1,500 @@
|
||||
p=84,26 v=99,-23
|
||||
p=98,17 v=-41,-46
|
||||
p=3,84 v=-17,-23
|
||||
p=92,66 v=36,-4
|
||||
p=16,102 v=95,-60
|
||||
p=14,90 v=-71,-62
|
||||
p=26,29 v=91,-20
|
||||
p=74,36 v=67,30
|
||||
p=59,66 v=86,-4
|
||||
p=32,47 v=-79,7
|
||||
p=82,42 v=3,-84
|
||||
p=61,16 v=28,34
|
||||
p=82,9 v=-84,-78
|
||||
p=5,71 v=16,84
|
||||
p=15,79 v=-48,75
|
||||
p=76,92 v=-32,68
|
||||
p=43,93 v=54,78
|
||||
p=22,73 v=-49,68
|
||||
p=79,13 v=-78,-55
|
||||
p=61,17 v=1,90
|
||||
p=71,58 v=-73,16
|
||||
p=60,63 v=-31,87
|
||||
p=8,41 v=-17,-96
|
||||
p=13,51 v=-16,-51
|
||||
p=86,15 v=12,-65
|
||||
p=35,71 v=57,3
|
||||
p=77,81 v=89,86
|
||||
p=100,37 v=93,-84
|
||||
p=31,38 v=22,20
|
||||
p=9,98 v=99,-47
|
||||
p=29,21 v=72,-76
|
||||
p=67,99 v=76,-25
|
||||
p=62,67 v=54,78
|
||||
p=80,79 v=-1,91
|
||||
p=74,7 v=51,-42
|
||||
p=31,57 v=30,70
|
||||
p=7,74 v=57,-75
|
||||
p=49,29 v=-9,34
|
||||
p=27,70 v=-45,-54
|
||||
p=96,30 v=47,-77
|
||||
p=7,22 v=-65,52
|
||||
p=50,53 v=15,-1
|
||||
p=37,44 v=46,-96
|
||||
p=85,87 v=-10,-25
|
||||
p=91,8 v=47,-56
|
||||
p=96,11 v=-50,-67
|
||||
p=75,85 v=80,90
|
||||
p=51,72 v=41,79
|
||||
p=81,67 v=-93,-25
|
||||
p=78,51 v=65,-99
|
||||
p=94,21 v=15,38
|
||||
p=41,63 v=-77,89
|
||||
p=98,11 v=-52,31
|
||||
p=97,53 v=67,12
|
||||
p=10,93 v=78,-74
|
||||
p=13,23 v=53,40
|
||||
p=73,39 v=-11,58
|
||||
p=82,54 v=45,-39
|
||||
p=4,14 v=-52,60
|
||||
p=69,85 v=-93,86
|
||||
p=88,27 v=-98,-64
|
||||
p=54,88 v=50,-27
|
||||
p=53,84 v=-82,-15
|
||||
p=47,51 v=24,61
|
||||
p=100,94 v=-54,-52
|
||||
p=91,23 v=1,-66
|
||||
p=95,45 v=-42,7
|
||||
p=76,92 v=80,53
|
||||
p=29,0 v=13,-29
|
||||
p=38,46 v=40,2
|
||||
p=29,19 v=-24,-59
|
||||
p=4,53 v=-74,11
|
||||
p=77,87 v=45,-13
|
||||
p=75,12 v=-82,-52
|
||||
p=95,84 v=38,93
|
||||
p=52,52 v=20,17
|
||||
p=16,0 v=-83,51
|
||||
p=68,21 v=98,-72
|
||||
p=9,54 v=-76,20
|
||||
p=27,9 v=9,-55
|
||||
p=32,44 v=-11,-96
|
||||
p=90,59 v=67,6
|
||||
p=68,52 v=65,30
|
||||
p=71,44 v=-3,11
|
||||
p=6,14 v=16,44
|
||||
p=10,0 v=18,-40
|
||||
p=85,41 v=17,90
|
||||
p=15,4 v=-59,57
|
||||
p=44,65 v=2,97
|
||||
p=15,78 v=53,-48
|
||||
p=34,12 v=46,53
|
||||
p=43,45 v=86,-83
|
||||
p=76,52 v=-92,-81
|
||||
p=11,80 v=97,-24
|
||||
p=37,3 v=48,63
|
||||
p=1,54 v=49,-5
|
||||
p=45,61 v=-5,81
|
||||
p=71,63 v=87,95
|
||||
p=72,40 v=-83,32
|
||||
p=10,9 v=-83,47
|
||||
p=3,23 v=-10,-73
|
||||
p=84,1 v=85,52
|
||||
p=52,24 v=-18,36
|
||||
p=76,37 v=21,-84
|
||||
p=49,26 v=20,11
|
||||
p=66,54 v=30,-4
|
||||
p=24,66 v=-61,79
|
||||
p=34,22 v=41,-90
|
||||
p=43,6 v=-52,-66
|
||||
p=15,30 v=68,6
|
||||
p=72,74 v=-55,93
|
||||
p=35,25 v=24,-66
|
||||
p=80,21 v=56,36
|
||||
p=43,67 v=59,95
|
||||
p=61,39 v=-69,-88
|
||||
p=61,93 v=-66,65
|
||||
p=18,94 v=97,74
|
||||
p=4,43 v=13,-75
|
||||
p=13,62 v=-74,-91
|
||||
p=61,27 v=32,-59
|
||||
p=28,88 v=55,-19
|
||||
p=52,55 v=-94,-60
|
||||
p=83,37 v=46,97
|
||||
p=2,72 v=-52,-77
|
||||
p=35,31 v=-33,23
|
||||
p=75,73 v=30,-12
|
||||
p=55,7 v=87,-70
|
||||
p=48,52 v=-41,-22
|
||||
p=50,15 v=39,-54
|
||||
p=35,69 v=63,-92
|
||||
p=40,55 v=-20,-84
|
||||
p=51,27 v=61,-67
|
||||
p=24,29 v=62,21
|
||||
p=12,14 v=86,45
|
||||
p=57,29 v=-99,-66
|
||||
p=82,74 v=16,26
|
||||
p=2,40 v=-32,-69
|
||||
p=23,14 v=-81,49
|
||||
p=89,70 v=-32,99
|
||||
p=4,27 v=60,-67
|
||||
p=34,10 v=-77,-57
|
||||
p=40,73 v=88,73
|
||||
p=26,38 v=-90,21
|
||||
p=31,25 v=45,15
|
||||
p=93,8 v=-65,54
|
||||
p=61,25 v=-69,-79
|
||||
p=13,63 v=19,27
|
||||
p=58,13 v=15,-42
|
||||
p=29,1 v=3,65
|
||||
p=65,59 v=41,15
|
||||
p=86,69 v=-89,-14
|
||||
p=23,63 v=-87,-79
|
||||
p=14,7 v=81,-54
|
||||
p=3,92 v=-96,61
|
||||
p=78,24 v=-34,-70
|
||||
p=48,30 v=-22,10
|
||||
p=59,79 v=85,66
|
||||
p=91,7 v=5,-60
|
||||
p=61,25 v=-20,41
|
||||
p=5,90 v=60,87
|
||||
p=68,9 v=-24,25
|
||||
p=27,55 v=42,9
|
||||
p=48,41 v=37,-78
|
||||
p=43,44 v=80,-68
|
||||
p=73,20 v=30,-49
|
||||
p=13,62 v=-19,-3
|
||||
p=46,11 v=24,50
|
||||
p=17,90 v=86,75
|
||||
p=77,18 v=-84,79
|
||||
p=5,52 v=4,-30
|
||||
p=28,63 v=34,41
|
||||
p=72,83 v=87,-15
|
||||
p=11,16 v=51,-60
|
||||
p=4,33 v=-63,-71
|
||||
p=70,77 v=34,-25
|
||||
p=37,46 v=22,-20
|
||||
p=87,49 v=-25,2
|
||||
p=89,16 v=45,-59
|
||||
p=9,82 v=-33,97
|
||||
p=66,27 v=87,-72
|
||||
p=64,97 v=-38,-40
|
||||
p=51,90 v=-73,76
|
||||
p=25,57 v=-68,-95
|
||||
p=41,13 v=8,-48
|
||||
p=39,13 v=59,29
|
||||
p=42,51 v=13,9
|
||||
p=70,102 v=-14,-54
|
||||
p=41,69 v=2,83
|
||||
p=74,7 v=-10,39
|
||||
p=91,63 v=32,-99
|
||||
p=6,22 v=-70,-55
|
||||
p=78,5 v=-12,37
|
||||
p=54,76 v=-46,-84
|
||||
p=17,19 v=-4,-62
|
||||
p=70,101 v=76,58
|
||||
p=71,94 v=41,74
|
||||
p=16,91 v=18,-32
|
||||
p=10,90 v=95,-53
|
||||
p=97,61 v=71,5
|
||||
p=63,49 v=-73,-70
|
||||
p=85,27 v=-76,-56
|
||||
p=98,11 v=47,47
|
||||
p=58,7 v=-5,46
|
||||
p=5,48 v=-6,-94
|
||||
p=4,90 v=-87,-16
|
||||
p=55,84 v=-3,-29
|
||||
p=74,1 v=95,-35
|
||||
p=3,43 v=35,28
|
||||
p=11,29 v=91,40
|
||||
p=10,11 v=38,31
|
||||
p=61,44 v=-19,10
|
||||
p=87,52 v=76,96
|
||||
p=3,92 v=27,67
|
||||
p=68,64 v=87,-6
|
||||
p=74,88 v=87,-34
|
||||
p=24,52 v=43,-61
|
||||
p=91,10 v=-65,-63
|
||||
p=65,98 v=49,-21
|
||||
p=88,66 v=-71,-46
|
||||
p=21,84 v=-26,93
|
||||
p=7,69 v=84,81
|
||||
p=43,21 v=6,-9
|
||||
p=43,64 v=-73,-19
|
||||
p=35,47 v=79,-88
|
||||
p=54,21 v=39,-62
|
||||
p=20,63 v=-33,27
|
||||
p=21,51 v=99,10
|
||||
p=16,82 v=-72,-31
|
||||
p=23,10 v=-2,-45
|
||||
p=37,33 v=-22,21
|
||||
p=41,74 v=-9,88
|
||||
p=31,96 v=-15,65
|
||||
p=37,12 v=46,55
|
||||
p=72,54 v=-54,-52
|
||||
p=9,58 v=-28,-87
|
||||
p=0,13 v=-96,-50
|
||||
p=65,70 v=18,11
|
||||
p=32,38 v=90,-84
|
||||
p=97,67 v=40,-3
|
||||
p=45,17 v=90,57
|
||||
p=36,85 v=2,83
|
||||
p=29,39 v=63,78
|
||||
p=51,99 v=-7,-40
|
||||
p=18,93 v=18,-30
|
||||
p=75,93 v=-12,65
|
||||
p=1,85 v=27,-20
|
||||
p=17,84 v=97,72
|
||||
p=3,68 v=-74,96
|
||||
p=72,22 v=-49,52
|
||||
p=18,65 v=-50,1
|
||||
p=71,16 v=63,-59
|
||||
p=36,44 v=-20,85
|
||||
p=77,21 v=-27,96
|
||||
p=70,54 v=95,-70
|
||||
p=20,5 v=-44,-9
|
||||
p=97,64 v=55,94
|
||||
p=49,82 v=35,-16
|
||||
p=63,54 v=2,-51
|
||||
p=88,101 v=1,65
|
||||
p=1,3 v=-89,-34
|
||||
p=29,97 v=-24,-42
|
||||
p=45,46 v=-66,14
|
||||
p=51,33 v=68,35
|
||||
p=91,29 v=-78,-35
|
||||
p=10,56 v=-83,31
|
||||
p=11,94 v=-41,-15
|
||||
p=63,76 v=19,90
|
||||
p=84,84 v=21,84
|
||||
p=24,41 v=-79,25
|
||||
p=94,82 v=23,85
|
||||
p=60,52 v=-48,-4
|
||||
p=47,36 v=66,-51
|
||||
p=0,49 v=-6,-90
|
||||
p=40,23 v=-99,-63
|
||||
p=21,79 v=-64,-40
|
||||
p=71,18 v=-14,-67
|
||||
p=53,44 v=-51,7
|
||||
p=71,40 v=83,51
|
||||
p=96,87 v=93,-29
|
||||
p=46,64 v=22,88
|
||||
p=3,53 v=44,-52
|
||||
p=54,57 v=74,-95
|
||||
p=61,63 v=-95,-12
|
||||
p=96,82 v=3,-17
|
||||
p=41,96 v=5,89
|
||||
p=7,46 v=-19,20
|
||||
p=2,7 v=55,33
|
||||
p=27,15 v=29,33
|
||||
p=54,64 v=-7,2
|
||||
p=84,58 v=-93,59
|
||||
p=80,24 v=56,5
|
||||
p=23,13 v=66,-56
|
||||
p=93,100 v=-89,45
|
||||
p=89,82 v=91,69
|
||||
p=55,90 v=96,-5
|
||||
p=43,41 v=16,-93
|
||||
p=54,70 v=28,-85
|
||||
p=50,64 v=-33,-22
|
||||
p=99,35 v=71,17
|
||||
p=23,77 v=11,-3
|
||||
p=78,99 v=43,-38
|
||||
p=3,80 v=-57,8
|
||||
p=22,75 v=-48,-18
|
||||
p=3,94 v=-98,-33
|
||||
p=72,89 v=-90,39
|
||||
p=87,84 v=67,61
|
||||
p=28,0 v=22,55
|
||||
p=65,55 v=82,70
|
||||
p=55,48 v=17,-96
|
||||
p=11,37 v=-33,52
|
||||
p=63,63 v=-94,9
|
||||
p=0,10 v=-78,59
|
||||
p=91,17 v=23,-58
|
||||
p=56,77 v=72,81
|
||||
p=99,47 v=14,19
|
||||
p=15,18 v=31,24
|
||||
p=47,9 v=56,-13
|
||||
p=38,11 v=-9,-50
|
||||
p=93,2 v=-76,47
|
||||
p=97,52 v=-45,-32
|
||||
p=51,44 v=-65,68
|
||||
p=15,2 v=-83,72
|
||||
p=15,99 v=97,54
|
||||
p=85,81 v=45,78
|
||||
p=11,57 v=3,-13
|
||||
p=91,30 v=11,56
|
||||
p=42,90 v=-75,73
|
||||
p=24,7 v=99,-68
|
||||
p=55,58 v=83,-7
|
||||
p=35,4 v=15,31
|
||||
p=21,39 v=42,27
|
||||
p=62,9 v=6,-48
|
||||
p=59,99 v=-20,46
|
||||
p=93,71 v=1,96
|
||||
p=31,3 v=77,-47
|
||||
p=98,11 v=25,-52
|
||||
p=28,41 v=92,22
|
||||
p=90,64 v=93,81
|
||||
p=64,93 v=-71,-28
|
||||
p=31,65 v=-74,-47
|
||||
p=62,44 v=21,30
|
||||
p=35,22 v=-76,5
|
||||
p=69,2 v=-4,47
|
||||
p=34,28 v=52,32
|
||||
p=3,37 v=-17,21
|
||||
p=43,92 v=90,-50
|
||||
p=16,59 v=29,-1
|
||||
p=41,6 v=57,-50
|
||||
p=93,58 v=-74,-16
|
||||
p=88,60 v=-2,-10
|
||||
p=62,19 v=-51,37
|
||||
p=30,80 v=79,83
|
||||
p=75,14 v=-84,79
|
||||
p=77,10 v=-34,-71
|
||||
p=92,60 v=21,13
|
||||
p=21,25 v=-26,-67
|
||||
p=88,101 v=57,80
|
||||
p=60,93 v=14,-99
|
||||
p=55,33 v=61,-77
|
||||
p=76,51 v=-60,67
|
||||
p=23,31 v=-48,25
|
||||
p=47,28 v=71,18
|
||||
p=6,10 v=-6,55
|
||||
p=74,29 v=-51,-56
|
||||
p=43,49 v=-66,15
|
||||
p=53,15 v=17,46
|
||||
p=34,89 v=-90,-28
|
||||
p=53,12 v=26,-53
|
||||
p=68,96 v=32,68
|
||||
p=10,50 v=-6,5
|
||||
p=30,7 v=69,80
|
||||
p=2,69 v=60,84
|
||||
p=78,74 v=32,-12
|
||||
p=83,87 v=-8,-31
|
||||
p=86,86 v=48,-45
|
||||
p=19,6 v=7,-48
|
||||
p=53,32 v=-55,-89
|
||||
p=32,35 v=-23,-39
|
||||
p=95,23 v=-87,43
|
||||
p=56,82 v=50,-22
|
||||
p=28,101 v=99,-36
|
||||
p=8,77 v=5,-13
|
||||
p=74,21 v=-27,-90
|
||||
p=68,59 v=98,-6
|
||||
p=83,93 v=21,76
|
||||
p=80,24 v=-91,-78
|
||||
p=7,78 v=47,-8
|
||||
p=19,81 v=90,-14
|
||||
p=96,20 v=-30,44
|
||||
p=70,54 v=-14,10
|
||||
p=93,25 v=-65,33
|
||||
p=51,76 v=26,90
|
||||
p=79,25 v=45,-69
|
||||
p=89,6 v=-47,-54
|
||||
p=32,78 v=62,18
|
||||
p=98,32 v=57,23
|
||||
p=34,30 v=-22,-91
|
||||
p=37,94 v=-72,86
|
||||
p=81,94 v=-45,63
|
||||
p=20,37 v=-24,29
|
||||
p=2,63 v=-26,-19
|
||||
p=4,29 v=-72,-68
|
||||
p=18,95 v=45,71
|
||||
p=64,84 v=28,-25
|
||||
p=8,32 v=84,-93
|
||||
p=15,3 v=-6,-41
|
||||
p=42,53 v=81,-92
|
||||
p=20,73 v=79,72
|
||||
p=43,3 v=28,-38
|
||||
p=86,85 v=-21,72
|
||||
p=97,29 v=69,36
|
||||
p=23,74 v=-55,72
|
||||
p=83,87 v=45,-26
|
||||
p=70,0 v=-93,57
|
||||
p=61,0 v=-25,74
|
||||
p=22,0 v=-35,56
|
||||
p=12,8 v=-70,34
|
||||
p=27,24 v=66,-74
|
||||
p=27,87 v=29,78
|
||||
p=36,98 v=68,72
|
||||
p=26,40 v=40,-82
|
||||
p=38,34 v=-80,6
|
||||
p=34,83 v=33,74
|
||||
p=23,24 v=9,27
|
||||
p=46,96 v=96,-43
|
||||
p=80,41 v=52,19
|
||||
p=33,10 v=37,-47
|
||||
p=47,15 v=74,73
|
||||
p=25,102 v=-3,-72
|
||||
p=73,63 v=-71,-1
|
||||
p=27,78 v=-2,83
|
||||
p=28,8 v=18,55
|
||||
p=95,102 v=-39,-42
|
||||
p=65,69 v=-38,-16
|
||||
p=54,17 v=-18,48
|
||||
p=63,64 v=96,96
|
||||
p=3,32 v=-37,33
|
||||
p=96,84 v=36,61
|
||||
p=67,9 v=67,-54
|
||||
p=88,54 v=-74,-52
|
||||
p=70,52 v=52,14
|
||||
p=97,81 v=-55,-56
|
||||
p=4,11 v=40,54
|
||||
p=51,9 v=-16,-97
|
||||
p=59,88 v=85,75
|
||||
p=58,24 v=72,-67
|
||||
p=73,59 v=76,-93
|
||||
p=34,40 v=81,2
|
||||
p=38,22 v=94,52
|
||||
p=77,27 v=78,39
|
||||
p=65,50 v=28,16
|
||||
p=63,14 v=-38,-48
|
||||
p=13,70 v=-24,75
|
||||
p=60,16 v=12,-9
|
||||
p=43,65 v=92,50
|
||||
p=66,31 v=-24,-65
|
||||
p=67,32 v=10,4
|
||||
p=20,27 v=-27,97
|
||||
p=87,35 v=-52,38
|
||||
p=69,86 v=80,-41
|
||||
p=55,81 v=4,-15
|
||||
p=11,102 v=-28,54
|
||||
p=34,74 v=52,-16
|
||||
p=74,90 v=19,77
|
||||
p=100,71 v=-63,-17
|
||||
p=16,27 v=-52,30
|
||||
p=77,75 v=-59,-50
|
||||
p=18,76 v=27,81
|
||||
p=65,99 v=42,-45
|
||||
p=30,15 v=-79,48
|
||||
p=4,95 v=80,-31
|
||||
p=81,87 v=83,15
|
||||
p=22,31 v=33,34
|
||||
p=46,77 v=-43,-42
|
||||
p=36,37 v=-99,27
|
||||
p=35,86 v=29,20
|
||||
p=54,16 v=-9,-77
|
||||
p=58,5 v=-38,-34
|
||||
p=40,26 v=4,-53
|
||||
p=31,36 v=56,-5
|
||||
p=46,101 v=-5,97
|
||||
p=99,97 v=47,88
|
||||
p=52,42 v=94,-81
|
||||
p=92,100 v=95,65
|
||||
p=86,19 v=-78,-48
|
||||
p=75,100 v=-23,63
|
||||
p=74,38 v=98,-99
|
||||
p=61,92 v=-42,-40
|
||||
p=70,98 v=8,63
|
||||
p=4,82 v=-74,-32
|
||||
p=79,1 v=63,-33
|
||||
p=5,49 v=-17,11
|
||||
p=55,39 v=-82,-68
|
||||
p=91,98 v=-96,64
|
||||
p=55,82 v=24,77
|
||||
p=54,48 v=83,13
|
||||
p=0,23 v=-19,-74
|
||||
p=25,50 v=48,36
|
||||
p=99,21 v=36,-68
|
||||
p=26,33 v=9,9
|
||||
71
Inputs/Day15.txt
Normal file
71
Inputs/Day15.txt
Normal file
@@ -0,0 +1,71 @@
|
||||
##################################################
|
||||
##...OO.O.#.O..........OO..#.#..O.O.O.....O......#
|
||||
#O.O#.OO.O#..O.....O..#..O........OO...O...#.....#
|
||||
#O#..O........O.O.O.O......O.O##...#.O....O.O#.O.#
|
||||
#...O.O...O..O..O..O.O..OO.O....O....OO.......##.#
|
||||
#O...O......#O.#...O.O.....#O.....O....#.........#
|
||||
#..OOO.....#.O.O#.........O#.OO.O.OO......OO...#.#
|
||||
#OO.O...#.O.....O#O....O#.........O........O#OO#.#
|
||||
#.#OO......O...O.O.#...........OO......O.#.OO....#
|
||||
#.#O..O.O..O...O.O......OO.......OO#..O.OO#OO....#
|
||||
#.O......#..OO.O...........O........O.O#.OO......#
|
||||
#O..#..#...#...............O.#......OOO.OO.....OO#
|
||||
##..OO.....#O##...O.O...##......#OOO..OO...O..O..#
|
||||
#..OO..O..#O...O.O..O.#.O#O##.O..O..O..OO.#O.#.O.#
|
||||
#...O..........OO........#...OO..O...O....O.OOO.O#
|
||||
#...O.......O...OO.#O....O....O.O.O.O.#.O#..OO...#
|
||||
##..O...O.O.......#O.OO.OO.OOO...O.OO....O..#....#
|
||||
#O..#...O.......O#OO.O...OO...O...#....O.OO.OO..##
|
||||
#...O..OO.#O.....O.OO..OOO.O........OO.O...#OOO.##
|
||||
#.#......#..OO..OO.O.O.........O..#...O........O.#
|
||||
#O...O..O.......O.O..#.OO.OO....#O....O....O...#.#
|
||||
#.##O.#...O.#.......#O.O..O.OOO.......O..O..O..O##
|
||||
#...OO.O..O......##...#.#.....O#O...O..O......#O.#
|
||||
#..O#OO.O.OO..#O........OO..##..O...O......OO.O..#
|
||||
#O..O.O.......OO.OO.....@O#.....#.O..#O........O.#
|
||||
#...........O#.....O....OO..OO...O..OO...O..OO..O#
|
||||
#O#...OOO................O.###.O...O.......O.....#
|
||||
#.OO.O...OO#O..O#..OO.OO...O.......OO.O.....O...O#
|
||||
#.O..#.O......OO..O.......#.OO.##OOOO..O....#.#O.#
|
||||
#.............O...O..O.OO#OO.O#..OO.OO#O.##.....##
|
||||
#..#O.OO.O.#..O#......O#.O....O.OO.O..O...O....###
|
||||
#O.O.O.O...OOO..O..O..........O#.OO..#...#O.###..#
|
||||
#..O#.#O.OO.....#OO.O....O..#......O.#O##..#...O##
|
||||
###.O.....O.....O.#OO.....O........O.OO#....O....#
|
||||
#O..#O.O.O.....O#.O..O.O#O...#.............O...#.#
|
||||
#..............#O.#.#....O.OO...O...O......#...#.#
|
||||
#OOOO...O.#..O..O#.#O....OOO........O.....O...#..#
|
||||
#OOO.O.#.OO..O.#.O..O.O........#..O...#O.....O.O.#
|
||||
#.....##.O.#OO.OO#.OO..OO.OO...OO...O....O#.#O..##
|
||||
#O.O.O.O..O.....O......OOO...O..O...O#OO...O..O..#
|
||||
#OO..OO..O......#....OO..#.O...OO..O....#O..#....#
|
||||
#OO....OO..OOOO....O.OO.....O.O#.....#O....O.OOOO#
|
||||
#........O.....#O..#O......O....O.#.O#..##..O..OO#
|
||||
#.#....#...O.O.O....O.......OO#.OOO#.#....#..#...#
|
||||
##O.O.#.....#O.......O.OO.#O...#OOO.O.#....OOO...#
|
||||
#..O.O#.O..OO..O.........O......O..OO.OO.OO......#
|
||||
#.O.....#.#O.O...OO................O.O.#O..#...O.#
|
||||
#...O......O.OO..OO..OO....#O.O..#O..O#....O...#O#
|
||||
#OO.O....O#..O.#.OOO.#............O.O.OO.O#.O.#O##
|
||||
##################################################
|
||||
|
||||
v>>^vv>>>^v>v^^>vv^><^vv^^^<^^<^>>^<>><^^>v>vvv<>v><>>v<v<<^^^vv<v^^><vvv<v<<<<^>^>>><><^>^>^^^>>^^^<<v^v^>^^<>^v<^v<<>^^vv<^>v>v<<>v^<<>^><<>>vv>^<>vv>v>>><<^>^^>v<>>v^<^<^>vvv<>^v<^<<<^>^^v<vv<^><vv<>>^<^^v<^<<^<^^>vv^<>^<>>><^<<^v<v<>vvvv<^<^v<>>v<><vvvv^v^<v<<v>^^>^^v^vv<<^^v>v<^vv>^vv><vv<<>v>v<>vv<<<><v>vv<^<><^><<<>^><<<<^>v^v<>vv^^<v^>>>v>^><v>v^^<v<^v>v>><^^<>>v<>v>>^<<v<^vvvv<vvv>^<v^<vvv<v^>^^>>v^^^<<^<<>^^<>><v>^>>^>>^>>vv>v^<v>vv<><<>><<<>v>>vv^^>v<vvv<v>>><<><><v^^>^v<^<>v<<^><><^^>^>^^vv<^vv><v^^><<<<<<<<v<^<<^v^^^><>v>^^^<><^v>v<^v><<<<<><^vv>^v>v^<<>v^>v<^>^<>^<v^v^>v^v^<^<><>>^<<^vv<>>vv^v^^<^<v<v^v^><>^^<>^><>^^v<^v<<v^^<>^v<v^^v^v>v^>><^^<><>>^v><v>><<>v>>>>v<<<^v^^v<<<<^v<><^<^^<v<>>^^>>>v>v>>><^<vv^<<^vvv>^<>^v<<^^>v^<^<v>v><vv^<v>>^^<>^v^^^<>v^v>v^><><v<v>v<^v>^vv<>><>>^>v^^<v<<^^><<^<^^^v><<^><>>v<<<v<<>><v<><<v>><<<^^^^v^v>v<vv><^^>>^^v>v<<<^<<>^v>>>v^v^v<<v^v<<><><><^<v^>v<><<>><>^^^><v^>^v<v<vv>v^<^^>><^^^vv^>v^<<v^>^^v^v>>v><<<>vv^><>v<>>>v^^^vv<v<<>>>>v<><^
|
||||
<vvv>v>v>>^v^<<<>>><>><<<^v^v>^^<v><vv>>^v<^<<>>^^^^v^><^^^v>v^vv^v<>>v>>>><v>^vv<<v<v<>>vvv^<>vvvv^>><<>^^<<^><><^<>v<^<<<v^>>^>^<<^^>>>^^v^vv>^><vvv^vv>><><>>^<v>>^v<>>><>v^v<vvvv<v^vvv^^^<^<^>v<>^v>><v>^^>^<v^<<v>v^>^v^^>vv<v^<><^<^<^<^>v<<<>>>v^v<^v<<<>^<<v^<>>>v><>>v<>>^><^>>v<^>v>v<><vv^<^^vv><^^v<v>vvvv<v<<^<>^>^^>^>>>vv>vv>v<^>v>^<<>^v<<<<v>^^vv>^v<^v>^>>^^^><v^>^>>^v<>v^<^v><>v><<<><<v<^^^^vv>^v><<<vv<<vv>^^v>><v<^vv<^<>v<vv^^v^vv<>v^^v<^^><<>^^>>v>v^>v<<vvv><^>v<<>v<<v<<><>^^^><^^^<<>v>v<<><<><^<v<<<>>v^<<v><<><^>^v>>>>><>v<<v>^^^>^>^v^v>><>>>>vvv^<v><^>^<^>v<^>^v>^<^^<vv<<v^<^^><<>v^<>^vv>^<>v>vv>v^^^<v^><^v^^^vv>vv>v^>^<<v><^vvv>v<vv<<^^>v^>v><>v^^^^<^v^v^<><vv<^<<vv>v>v^>>^<v>v>^<vv>>v<><^^<><vv>><<v<>^<>v<^>vvv<<>v<v^v>>^>><v^>^^><>vvv^^^v>^^<v>>><>v>^<^^^>vv<<<^>vv<^<^<>vvv<>^v^^>^^<^^^v^<v<^><>v<^^>^^>>v^v<><^v<>><>^<<<<v^v<^>v>>v><vv<v^<v^^v><vv^vv>>>^>^v>^^^vvvvvv>^vv>v>v<>^^><><^>^<>>^^^v^<<v<<v<v<<vv^^^vv>v^<^<<<^<vv<><>><<<vv><<<^^<<><<><>^<<vv<v^<v>><^v^^v><^v>>vv
|
||||
^<<<>>v>>^^v<>><^><^^>v>>^^^<>^>>^>v>>^>><^><^>v<v>v^v>v^v>vvv<<^>>vv>^<vv^v^^^v<^^v<^>v>v<>^<<v<<<>>^>^^v>>v<<vvv<^<^^>^<^>><^v^v><<>v>>><<>v^<^><v<v<vv^v<<><v>vv^v^v^v>^>v<^><><<v<v>^><v<^<v<^>>><^>v>^><<<vvv<vv<^v>v>^<vv^>>>v^<v^<<^>^<<<>>v<v<v>^^v>v<^>>>v^^^<<^<^v><^><^>vv>>^>>>v>^<^<v<v>vv><^^>>^<<^>><<<v^<<<v>v<^<v>^^v<<>v>vv^<vv>^v<>v^v>>^>^^><>v><v>v^>>>>>vv^><^>v<^^vv^^>>><<<><^<v<<>^><>>>v>>^<<<<>^v^v><^v^^^<<v<v<^>>^<^<<<v^<<<>v^<>^v>v^>^<>^>^<v<><^^<<<v<<v>><>^<^<^>^v^v><<>>>v>^vv^v<>>>><v<>v^<v<<vv<v<>>v>vv><>><<v^<>^<>v^<<<vv^>>>v^^v^vv><vv^^v<^<>>^<v^>v>><>><v<^v<>v^>>><>^^>v><><>^^v^vv<^v><v<>^^v>>v>^vv<<v^^<><v><v^<><v<^vv>v<^^^^^v<>>vv^^v<^>v<v>v^v<>><><v>>v<^<^^<<v^>>>v<v^v<v>><<v^<>v<^>^^<v^>v^<v<v>v>><v>v>vv>^^v^<<>>v>>>^<v>^<><vv>><v<>vv<vv>v^v<^>vv<^>>v><^^>^><>>vv<><<<v<v>^<^^^v^v>^vv><>>>><v<>^>^<<^^^^>v^^vv<vv^^v>^^<^<^<>>^^>v><^>v>><^<^<vv^><^><<>v^v^>>^><<><v^^>>vv<v^<<^v>^<v<v><v<vv^>>v<>>v<^v<vv^v<v<<<>><><v>>^<vv<^<<><>>>><^v><^>^v<v<v^v^>^><<>^^<v>><><^^
|
||||
>^>vv^v<>>><^^^<v<v^<v^^<>^^^^^^<>^><><^<v>v><<v<v<^v<<<^v^^v>>v>^v<<><^^v^v^v^v^v><^>>>^v><v^^^v<^v^^<<^<<><vv<>vvv^^<vv>>v^<^^>>v>vvv>^^v^^<^>><v^^v<^^>v>^<<v^><<>v^^^^<^<>^^>>v<^^^>vv>>>>>v>^<<>vv^<><v^<>>v^>vv^vvvv><^^<>v>v<vv>v><v>vv<v<v^^v<^><><vv>v><>^^vv^<v>v><<^vvv<>>^v<><>>^<<^v^<><<v<>v><>^vvvv^^v<<^^^<><<<>^^^>v^^<<>^<>^<><v^>v>>^<<<^^<>^v>^><<<^v<><v>^^>>^><<>^^v^><^v>^^<>>v<v^<<^v^v><<<<><^v<>>v^v<><v>^^vv>^^<>>^<v^<^^^<v>^v<><>>^^>v^v>v^><v>v<<^>>><^<<>^<vvvv^^><^v^>v>>v>^>^>^<^<><<^^<<<v^v<<<v^>^><v<^^<<^v><><><^vv^>vv<><<^^<<<v^v<>>^^><v<^<v^v>v>v^v<^>v>>>>><^^>>^v<<vv>^>v>v<><><<<v<>^>vv^<^^>>>><<<<>>v>v<<<^^<^>vv<^<v^>>><vv>>><>vv<v>v^^^><<>>>>^vv><^v^<<><v<<v^<vv<v<^v>vv^v<<>v<^vv><<v^>^^^^^<><^<><v>^<vv<^<^<^^<>>^<>^v^<<v^>^<^<v<^>><<><>vvv>vv>vvv<v^>><^^>^>v^^<v>^><v><^><>^><>^>>^vv<><^v^^<^>^v<^^^<>><>>^^vv^<>^v^>><<^^v<>^v^v^^v>^vv<^v^><^<v<<>>^^>>><^<<>><>v>^vv^^vv<><>>v><<^v><v><vvv>vv<>^vv<<v<>^vv>^<vv>v>>vvvv^><<<<vvv^>^<v^<<v<^vv>^<><v^^vv>>v>v>^>v^v>>><>vv
|
||||
^v>v<^<vv^>^vv^>>^>>v<<<<^v^<<<>>^^><<>>v>>><^<vv<v>^>>^<^><v>vv<^v^>^^<>^<<v>><>vv<<vv>v<^^<<<><<><>^>>v<>><^<v>^v>v<vvvv<>>>><>vv<v>>^>>>>>^vv^v^v><^^<<<v^^vv<><>^<^^>><>vvv^>v^<v^<v^^<<^<<v>^>^^<>>v^^<>v<>^>>^<>><^^v<<>^vv^<v>^^>><<<<>vvv><<v>>^v^<^^<>>><>v>^>v<>^><>^><vv>^>><^^<>v>v<>v><v><>v<<v>^v><<>^>v>^vv><^>><v^vv<v^^v<v^>^<^v^<^v><<^v<<<^><<<<<^v^<vvv<><^>>>>>>v>vv>v<^^<^>>^^^vvv^v^^vv>^<>v>><><<<>>v^^>^<^><v<>^v><<v>^<<^><<<v>vv>^>>v<><^v^vv<v>v^<v><^>^<>^^v>v>vv<><<^<<^<<^>vv^>^>v>><v>^<>^^^^v<v^>v^v><<^>^v^<v^>>>^><<^vvvv<vv><^v>^<v^v^<<^<^<>>^^>>><^^><><^^vv<v<v<><^<>^<vvv<v<^>^><^vv<v>^<vv<<<^vvv^>>^>><<>><<<vv>><><<v^<^v<<<<>>v^<^^<v<>^^vv>>^^^>^^^^^^v>^^<<<>v>^<^v>^^^^>>v><<v>^v><v<<>>>^<<<>>v<>vv>><<><<v<>vv^><^<><v<^><>>^>vv^>v^v^>><>vv><v^<v^>^<>^>v^<>v<<v^v<><<><>>>^>v<<^<v^<<^^v^v^><^<><<>>>^v<^>>^^v<<<>>>^^v^><>>v<<<<>v>^^>v><v>>>v<<<<^^^<^>>^^v>^>v^<>^^^<v><<v>^<<v<v^^<^vv>^v<>^^^>^^<>vv^^>vv>^<<><><^^^<>^<v^^>><v^>>v>v<^^vvv<^>><<<<^>^^v<v><<v<<^><v>v>v>^v><^^<
|
||||
^>>>^^^v^v^vv<v<vv^>v<^><>^>><^<vv>^vv>^^><v>v^v>>vv<^^<^<<v>^v^<>v>vv^v^^>v^^^^^^<>^^vv<<^vv^v<v<>v^^vv<>^^^^^><>v<v>vv><<v^>^^<>v<>>v<^v<vv^<^^<<^>v<v<>vv><v>^v><v<vvv^v^>v<^<vv<<v^<<v<><v><v^<>vv<^^v>>><<<>v^^>>^<><>>><^<v>>vv^v>^><vv^>v<<<>^v^^><<<^>v<vv^>v<><vv>vvv><><>>>^<<vv>>^v>><>v^^<<<^vv><^^>^vv><<<^>>^<v^^>>^>>^<^^>><><v^^<><><^^^^v^<^^vv<<>v^^v>>v^<<^^v^v^^<>v^<<<v<>>^><><^v^^vvv^>^><<^vv>^^^>><>vv^^>v^^^<v<>>^><^>>v><^<<^>>>>^v<<<>^>^<>v^>^^>>^^^^>v<vvv<vv^<v^v>v^<<>v^v><<><v<v^>vv>^<<<<v><<<v>^>v^<>v<>^<^^>>v^vvv>^<<>^vv<vvv>>^>>><>vv^^>vv>^>><^>v^>^<vv>><<^^^<v^^^<>v<><<<^^^>><><^vvv<^v^^v<<v<<v<>><<>>v^v><v^<^>><^^v>^^>>><vv<v<^>v^^v<^<^>v>>^<v^v<v^^>^v><><<^^^><^>>v^>v^^<>>><>><<^^v^>v>^>^<v^vv^vv<>^vv>>^>vv<^v>^^v<>v><>vv^<v^>>v^><vv<^<v^<<<<^^vvv^>^<>>><vv^^vv<^v<v^>v><^^^><v<<^v>v^v>vv<>^><>^v^>^>v<vvvv<v^^v<v>^^<<><>>><v><><v><^>>^^^>vv^<>v><<^^>v^vv^v<v>>v><>^vv<>v<v><^>^>>v^><>^<>^>>^<v^v^>^>><v><<v^^<v^^>^>v><^^^<v<<>vv^><v^^^<v^^<<^<vvv<v<>^>^>^vv>v<>>><^vv^v^
|
||||
^v>^vv<^<v><^<^><><v^<^<<^^v<v^<>^<v<<>^>v^v>v<v^<^^<<>^><^v^>v>^vv^vv><><>^^v<<v>>v<<>>^^^v^<^^><>^<^><vv<v^>^>>^v<>v^^<v<^^v>^v>^>>>^vv^^<^><^^<^>^>v>v<^<><vvv^>><>v<>^>v>>>v^<^^<>^v^^<<^>v<>v<><^v^<^>v>><^^><v<^^^>>v>vv<>vv^^<>v^v>^v<<<>^>>^<>^<vv><^>><^>v>^vv^^<><v^<^>>v>^^v<^v>^^>^<<vv>v><v^>>>v>>v^v<^<v<>>^v^^>^^<>><><>><<^<^>^v^<>>^vvv><^v><<>><>^vvv<>v><v<<>^v^v<v<vv<>>>v^<<vv<^>vv<^v<^^<>>>><^v>v>vvvv^>v<^^><><v<v^^<<>><>>>><vvv^v>^v^^^<>v>^v^^<v>><<vv><vv><v<^>>^^v>^<<<v<vv<<^^>>v>>vv>^>>v<^>>>><<^>v<^v^<<v<^^v<>v^<^^^v>^^^^<<><v>^^^vv<>>vv^v>vv<<<<^v>vv>><<^<<>^^<v^>>v><<>v<<^^><<vv>^vv^>v^v^>^>>>v<>^^^vv<^v>^v<><<v<^<<^vv^vv>v<<>^>^>>>v^<^>>v>v<<^v^><v<<^>^><v^^>^<^vv<^><v<v<^>^<<<<<^^^<v<>v><<<v>>>^<vv<v<v^^^>v<v<^>^v<^>vv<vv^<v^>^v<^<<<^<^<^><>^^v<v<^^>><>>>>v^>^<v<v>^^<v>^^^^^<^>v>^^<<^^<v^<>>v><v>>^>>v<^^>^^<vv><<>^<>^><^<v<<>^<<<<^>^>>^<<^>>v^><v<>>^vv^>^<>v<<>^<^^v^><v<>v<>^v^v<v>v>^>v>v>>>^>>^<v<><<>^>>^v^><^^^v>>>>v^<<vvvvvv<>^<^>>^^v^^>>^<<vvv^<vv^>^<^v<v><vv<^v<><
|
||||
>^vvv^><v^<<<<><><<v<^^<>v><v^<>v^>^<><vv><<^<v^v<v>^^><>>>v<v^>v^v<^<><vvvv<^>>>><<^vv<^^>v<^^v<>>^^v^^><^^^<<vv>>vv^v>>>>^^^>v^v>^^^<<^<vv^v>^^>^v>>v<^vv>^>>vvv>v^<<^v>^>>^<>><<vv<<v^^^<^v<>>v^v^v>>^>v^^^^<<>v><^<<<^>^v>>v<>v^>>>>^vv><>><^^^><^>>v<^^<v<^<v<>><^>>vvv>vv^^^<^><><vv^>v>^v^^<<<v^<>^<>>^^>v^vv^>^>v>^<^><v>v>^><>^<^<v<><v<^><^^^vv^^>><^><v<v^<v<v<>><<^v>>>v<>>>>^<v>^vv<<>v>v^^vv^v<>>>v>^^>>^^>v<^^<^v>^v<<v><<>^>^v^<<v>>>^v<>^v^<<^<>v<v^<^vv<>>v>v><^v>>v>v^^<v<v<>v>><vv^vv^<vvvv<<>>>>>>^v^><<<<v<>^v^<v^v>><<^<<^v^^v><<>v>^>v>>^<>^<>^^><v<v>><>^vv<>vv^<^>^>v>v<^^>>^<^v^<vv^^<v^><^<<<^vv<vv>v<vv^<v>>^^<<>vv<v<^v>vv<v>^^^<^>^^v<^^^>^v<>vvv>^>><<v^^>v>v<v>v<><^^^>>><>^^><v<<<^^>>vv<><><<^^<<v>v>^>v>^^>^vvv<vv<v>v>v^>v<<>><<v>>v<v>><^^<^^v<>^<vvv^><>><><v^>>^<^<><>>v>vvv^<<>vv<^><^<<v<<<>vv^<v<v>v>>^vvv<^^<^v<<><<>^^v^<^v^<<^<^>vv>vv^^v>^v<v<^v>^<<^vv^<<<vv<v><>v^><<^>v>^^^<>v<v^vv>v>v^><v>v<^>>>^<^<<^<v<><v<^>^>^v<^<^^>vv^><>^^^<>>v^>^^^^v<v^><^<>^>v>^><^<^v>>v^<<^v^v^^<<v<>v>v
|
||||
>v^v^<>^<v><^>v>v>^^v^><v^<vv>>^v^<<>v<<^^<>v<<<<^>>vv<^><>><vvv>>v><>^><<<^><>>>v^>^vv^v<v^^<<^v>^v><^vv^>v>v<<<^^vvv>v<^v>^<<<^>^<v<><>v<vvv^><^^<vv^><^v<<>^v^v^^^^>>>><<<<<^^<^<^<v<<<>>v^>>v^v<<v^<^^vv<^<v>^<>v^v^>^>>>^<^<><^^^vv^v<^^^<^^>vv^v<^<<^^<v<^<^^^>v^vv><<^<>>^>^>^>><^vv<^v^^<v<<v>>v^v<^^^>v^<v<v^<v<<^<v^>v^<^>><<v<^<vv><>v<<<>>vvvv>v>v^vv^<<<^v<^vv^v>v^^>><^v>v><^>vvv>vvv^<>v^><>^<<^v>>><<<<^<v^<vv<v<<v>^^^><^v^<^<<><v<^^<><^>^^<vvvv^v<^^^^<^>v>>vv^<^v^vvv<^<<vv^>^<<<v^><>^^v>^<v^^^v<^^^^>>>v^^^v<<^<>vv>><<>>^<<vv^v^<^>>v>^><<<<^v^^<v^><v>v^^<<<>vvvv<<^v^>>>^v<v<^><v><^v<^<v^<<v<v^<^^v^<v><<^>v^^<><^<>vv>>>>>^<<^<v>v<>^v>^<<>v^<><vv>vv>^v^>><<>v<^vv^v>^v><^vvv>v<v>^>>v<<^^^<^v>^^><^^vv<^<^v<^^^^>>v>v<^>>>>><>vvv^<^vvv^<v<^<>vvv>^>^<^v^<<^>^v<<>vv>v^^<<>>v<>^^^^<>^>vvv><<^v>^vv>v<v^<v^<^<><<<>vv<^><vv<v^v<^^^>v<>>^vvv^vv^^>v>>v^^>vv><>^^v>>^vv<><v<v<^><^><<><^v<v<>v>^>vvv<^<>>^^<<^>>>^>v<><><^^><>>>^^vvvv<>^<v><v<<^<^^v<>>>>><^^<>vv<v^>><<v<^<v^v^<><<v^v>>>^^vvvvv<^<v><<<vv
|
||||
<<v^><<><^vv^^>^<>^<<v<>^<^^>><>v>>vv<^^>vvv<<>>v^<>^<<>v^vvv>vv^^>^><>><<v<<^>>>>^v^>v<<<v>v<<v>^>v>>^<<v^><^^>>v^v^^v^v<v^^<^vv>v<^^<><v^>><<<>^<v^^<<v<>v<^vv<^v^^^<^<v>v<<^^v<<>^<<^v>><^<v^^><^^><>^>v^v^^v>>>v^^><><><v^v^^^v<vv>^v<^v^>>^vv>v^<v<^v<v<v^^^>v<^<^<^^<^><><vv>vvvvv<>>^<vvvvvv><<>>^<<><>>^v>vvv<v<<^>>v<vv<v<^>^<vv>v<^^<v>v^>^v>>><vv<<>>>>>>>^<<>^vv^<v^<<v<^>v>^>v<>^<^v^><<>v>^<v^^^<>>>^^v^<v^^^^vv<v^^^>v^>v<><>^^<>^<>><v><><^<^<^v^<<^vvv^v><^^>>v^^vvvv><^v>>>^><v<>^vv>^>^<vv>>>v><><>>^vv^v<>^v<^<<v>>>><vv>>v^^>^^><<^<><>^<<v<>v^v^vvv^>v^>>>^v><<>^^v<v<v^><<>>>>^>>vv>><v<^>>^<>><>^<v>v^^^>vvv<<>v>^>^>^>v>^v>>v>^>v<>v^>^>>>v>>^><>^>>><^^><>^^v^<v>v^>v^v>>v<>v><>^<>^>^>>v>v>^<<<^^^>^<<^<<<<^><^vv>>>^><^<<<v>>^>v<>^vv^<^v^<<>^^v<<<vv<>^v>^<v<<>v<vv<^<^v<>^<<><<v<v><>^<<>v^^vv>><v<vv>^><<^<v^<v><<vvv>^^^<^^v>^>>^><>v^^><v^v^v^<<>vv>v^v>^><^>^>^^<^v^v<v>v>>^^^^>^<<^<^vv<^<v>v^>^>>vv>^<<<<^v^^vv>v^^<vv>>^<<v^v^vv<^>><v>>v><<^>v>^^v^vv<<>vvv><<v>v<><v^>>^>v<><v<<v^><<>v<<vv^><v<<
|
||||
<<^<v>>vv>v^v<>^>^>v<v><v<<<vv<>v<^^^^^^<<^^v>>>>^<^<><v^<vv>^>>>^^<>>^>><<^<<<<<>><v^>^><v<<>>>^v^<><^^^v>vv><<>><^v<<v>^^vvv>v^v^v<>><v^<^^<><v<><><<<<<<>><>v^<>v^^^>>vv^<>><^><^^v^v^^^^>^^><<v^^<<^>v^v^<vv<v<>v>v<^<><^><>>v><>v^vv<<<><>>vvv^^vv^v>>>>v<^vv>>vv<>>v^<>v^^^^<<^>^^>^>^^v<v<<><vv^v^<v^><v><<^^<^^v>^^^v<^^<>vv>vv>v^v>v<>^v>^<<v>>^<v<><<>v^^>>>^>^^<<vv<^^<^>>>><^vv><<v>v<>>v^v>^vv^>^^vv><^<>>v^<v<vv<^>^<>v><v<vv>><v>^<vv<^><<<^>^<^>^^^vv^v>><^<><^vvv>>>^<v>^>vv>>^<^v><>^>>^>><^<^^>><vv^^^v><^<^^<>>v<<^^>>><vvvvvv<vv^<>>><vv^><<^vv<^v><v><^^><^v<v^><<v<<v^vv^>^<>>>v><<<^><^<^<><>^>^>>v^v^^v^<^^v^>v^<^><>>^>^<><v>>>v^>^>>vvvv^>^>>v<^>vv<<>^v<><^<>>><>^<<vv^>^>>^v>v<<^^vv<^v<<v^v>v<^<><>v>v<<<<<^^vvv^^><>>vvv<^^v^>vvvv>^vvv^>v<v<<<v><^><<v<<^^<^<<vv<<v><<^vv>>>vv>>>^^v^vvv^<<<vvv^v^>^>^<^v<^^>^^v><v<v>^^v^vv><^<>^^^v><^v^v>^vv<^>><>^^^>^<^v>vvv><v^v^><<^<^<^^v>>v^vvv>v^v>>>>v^><v>v<<>^^>><>>^^v^<v^^^v>>^><^^<^vvvv^>v<<vv<<^>^><v>>>v^<^>>><^<^^^^>^<vvv<^><>>>v>^v<^<^v<<^<<^v>v^
|
||||
^>^><<<>><<<<>>vvvv^vv^^^v>><>^^>v<^^v<^>^v^<<^><^v<>v<v>>>^>>>v<^<>>>^<v<^<>vv><>v<v<v<v>v>v<v^vv^<>^<vvv<^^v<^>>>^vvv><v<>^<><>vvv<<<>^v>v>^^v<<^vvvv<v^<<>^<>><v>>><>^^>^v^^>^<>v^>^<>v^>v>>vv<<><^v<^vv>vv>^<>vvvv>>>>^^>v^v<^^<^<v<>^^^v<>><^^><^><>v^>^<>v^v^<v^><<^>>>^vv>>><>v<>>^v>^^<v<^<^^^^><^v<<^<v<v>>v^<<>v>>^<^^v>vvv<<v^>v><^>^>^>v>>^<>^^<>><>^vv><v<^v>v<vv>v^v<^><v^<<vvv>^^>^^^vv^<^>^v><^<^<<v>v><<^<<vv^>><<^^<v<^><>><^><<<<vvv^vv<>v^><<^^^<<<><<v^^<<<vv<v<>>>v<<v<<^v<<<v^<^^<v^>>^><<^^v>v>>>vv><v^vv<vv^^>v^^v^><vvvvv>^<^^<<>v<v^>>>^>>vv<^<<<^<^>>^v>^<>^>vv><>><<^<<v>>^<v<>v>^>^<v^v<<v>vv^<<^>^^<vv^<<><<>>>v><<vv<^^v<v<>v><v>v^^<<<v^vv><<<<^^<v<v>v^<>><><vv>>^>vv>^<>>v<>v^^<vv><>>^v>v><<>^^>vv^^v^^vvv><v><^v<v^<<v<><>v^>vv^^^^<^>^<v>^^>>>>><>>vv><>^><vv^^<v<<>v^<^^^>^>vv>>v<vvvv>^<v<>^^^^v><<^v^<<<<^>>><^<^^^<>^<>^^v>v^<^^vvv^^<vv<v>^>vv^>^v<^vv<>><<<^vvvv^>>v^^>^>><<>^v>vv>^^v<<<><v^^>^><<<^<v<^^v^^<^>^v<^<v>^>v>v<<><v>>>vv<<<v>^v>><v>>^^><<vvv><<>><^<<>^<vv^<>v<^<<^<v^<v>vv<<
|
||||
^v>v^<v>^vv^<vv^<vvv<^>^<<<><^<>v>vv<<>>v>^^v<^>>v<^^^^^v>><<v<^v^><>v<>v<<^<<vv<^vv^>^vv^^<^<>v<>^^>><^v>>^v<^^^^<^<><<v>^<^>><>><vv><<<<^^v<v<^v<^>v<<^><^v^<<<^^v>>v<v>><v>v^<<>v^<<^^^>>>vv^v<v<^v<vv<<>^><<vvvv^v^^v^>^^>>><^v>>>^<v>^><<>v<^vvv^<^^<<^<vvvv>^^v^^^<><<v<<^v^v^><v^^><>v^vv>^v<<v^^v^v<v>v^<<vv^<<<>>v>vv<vv^v<>^>><><v><^^^^v^v>^<^>^^^<<>><<<v<v<^>>^v>v<><<v<^^vv<>^vvv>v^^^vv^<v><<^>vv>>>^v<^^><v<^<vv^^^><>>^v^<^v<><v><v>v^>>^<v<^<v>><>v>v><^^v>v<v^vvv^v^<^<^>^><^><<>>v<^^^>>^^^<>^^>v><^<>v^><^<>v^>>^^^<vv<vvvvv^^>v^<vv>v<><><<^><v^v<>^><v<<^vv>v><^<<>><^>^v<v>^^<<>^v<v><vv>^<^>><^^v^>^v^^<^<^<>>>^v^<<<<v>^>v<vvvv>><<v>^vv<<<<v>>>vv>>>^^><><v>^^<^v^<v^^^>v>v>>>^><<^>^v<<<<^<vv>v<v<<^>^<<^^>v^v^><^v^^v>v>>^vvv<<v>>vvv^^^>v^^>^v<^<<^<>>>><^<^><>^>^<<<v<<>v>^v^>>>v^vv>^vvv<>vv>^>^^>v^^^<^>>^vv><<><^>v>^<^>><><v>><^v<<<vv<>vv>><^^^^v>^<><v<^>>>>vv<>v>>v^><>v^vv^vv^>><^^^<>v<>vv<<v<>^<^^^<>^vv><<<>>v<><<^>>vv<>^>>>^v^>v<>v><<^^v^<<>v^v<>^>v<^>^>^vvvv^>^<<<>>>><^>>^>^^v>^vvv<vv><
|
||||
>>v><^>>>v<>><^><v^v<>><<vv>>v<v>v<>^>^<<>v>><>v<<v><v^<<v><^^>vv^>v^v><>^>^v>v<<^<v<v<v^vv>^^>>>vv>>v<^v^^^<^<>>^>^<<^^>v<><^><v^>>><vv^^v>>>>>>^<v<<^v<v><v<v<v>>v>^><^><<v^>>>>^v<<<>><<v^^^v>>vv^<<^>><^v>vv>>^v<<><>>v>>>><vv><v><v^<>^>^vv^<<><<v^^><>^>v<vv<vv^vv^<^<<^<^vv<<<^>>><^^v^<v^^v^>^v><>^<>^^v>^>vv>><>^<^>^>^><>^^^<><<<^v^<vv<^<^^v^>v<vvv^>^>>>>^v>>>^>^^<v<^>>^><>v<>v>^<vv<^v<>v^^^>v<<<>^<<<vv^v^>vvv^<v^v^><><^vv^v<^^<v<^v^vv^<>>^<^<>><<<>v><^^^v^^>^<>>^<v^<<><v><>v>^v><v>^v<^^v<>v><v><^<v^^^v^>^^<<v>v<^v>v>v^vv>^<vv>^vv><^>vv>v>>v^>^<v^v>v<<>v><><>vv^>v>^vvvv>^v<v<^v^>^>v>>v^>v<v>v>v^^^>v>>>v>v^vv<<>^>><^<^v>v^<v>^<v^^^<v<><v^>v<^v<>^><^>^v<v<<>>>>v^<>^>vv^^vv>v>^>>^>^<^^><^v^<v<v^<^><^vv<vv^v>^v<><>vvv<>^^^>v><^<<vv><vvv>>v>><<^vvv<v^>><<<v^>^<^<vv>^vvv<<>^<<>^<^><><>>>>^>^>^^><<<^<^v^<<<>><>>><<v><^v><vv^v>>v^<<>^v<>^^<>v<>>^<<>^<<<>vv<^^v<^^<<>^v^><^^vv^<v><<<^><>>vv><^<>>vvvvv^<^<<^>>v<<^^v>><>^><<<vv^^v^^<>>v<v^<^^^^^^v><^<^>><^>>v>^>>vv^>^<^><v^^>^^>><vv^^<vv^<vvv<><v>
|
||||
vv^^v^<^>>v><^^><v<<v^^<vv>^v>v^>v^v<>>>><^<^v>v>>><>vvvv<<<><>^^v^^>v>>^><v^>^>^^>><v<^<>v^v<^<vv>v>^^v^^v<^v^>v><><>>^>vv^^<<v<^^^<^v<vv^vv^^<>>v<>vv>^<>^v>>v^><<^^v<^><<v^^^^<>>^^<<^>^<v>^v^^>>^^>^^^><><<<<<>^^<^v^^><^<>v^>>v^^>^<^<><>>^v<v<<<^^v><<v>^<<<<^<><v<^v<<<>^>>v^v<^v<<^>^^<>^v<<v^><vv^><>>^^>v^<>>v>^<v^>v<><>>>v><v>v><><>>^>vv<v^>^<<><>>^<<^^<<vv>v^<vv>><v^^>v>>^<>^>v<>>>^vv<<<<<^^>^<<<><<><^^^<v>v<><<<^v><^^^v<^<vv<^>>^^<><v^^<^^^v<v<<<<v^<<v^<v<><^^<^vv^^v<^<<><^^^^>v<vv<v>^<<<v>v^^>>v<v^>><>>>>>><v><v>^^<>><v^^><<vvvvvv>>>v^<v>v><><>v>v<><<v<<>v>v<>>>^^<<^v>v^v>v<>v><>vv^><vv^>vv>>>vvv<>^<v>^><<><<^<^^<>v<>^<v<><<<<><<><vv>v<vv<^v^<^^<<v>v<v<<^^<<>>vv^v>v^>^>v>>^<^^^<^<v^v^^v^^v^<<>^v<^vv<^<<>>^>>>v><^v^<v>v>^^^^<^v>><^<><^>^<^vvvv><>v^vv>vv^<v<v^^v^>v^<>v^>^^^^<^<<>^v<<>^^>>v<^><>^<<<^^^>>vv^^^><<v^<^v<v^^v<><vvv^^v^>^v<<>v^v^<><v^<v^^>v>^<<^<v^>^^<^^v^>v<v^^<<v>^v<>v^^>><^v<^>^v<v<>^>>^>v^vv^<v>^v^>>v^^<^v^^^<<vv^<><>^vvvv<>v<v^v^v^>>^<v>><>><vv<<>>v<>^<^>^^>^vv^<<<<>
|
||||
vv<^vv<^^^v>^>><>><^v><><v^>^^v^><>v>^v>^^v<>>>^^^>>^v^v>^<v>^^<>^<>>^<v>><^^v<><v^>^<v>>^^^vv<^^v<<^vvv^<^vv<<<^v^v<v><v<^<<<<v^<^^vvv^^<v^vv>vv>v<<^v<vv<<<<v>^vv>^^^^<<v^>^v^<><<><v^><<>>>><^><<^<v^v^<<^v<<>^>v>^^^>vvv^<v<<>>v>>>^vv>>^<<^><<^^<<v^v^<v<<<<^<v<><vvv^^^>^^><<v^v^v^^v^<v<^<vvv>>^^vv>>>v^^>>><>^<<^<><<v>>^^^v<^^<v<<v<<v^v<^^v><vv>^<>v<<^^^^>^<^^^v>^<<><><vv^^<<>>>^<vv>v^>vvv<<^>><^^<<<><<<><>>^<<v<v<^^>v>>^^v>^>^^v<^<<<v>v><^>^^^^>^^<>^<<<<>^^^vv<^<^^<v<<v^^<<<v<v<^>v^<>>>>^^<v>v<v^<<<<v<<>v<v>^v>^vvvv><vv>v>^<^<>^<>v^<v>>v^>v<^><<v^^v>^<<v<v^^^<><^>v><>v<v>>v<><>v^^^vv<>v>v^^<^<<^>>^<v<>>^<^>v^^^<>>^<vvv<v>v>>^vv>^^v>><><<<>^vvv<vv^>^v^vv>v><v><v><v><vv>v<<>>><<>>^v^>^v><v^>v<^v<v<vv>><^<<<v<^<^<><<^<<>^>vv^v^>^>v>>><^v<v^vv^>^^<v>vvv^^<<^<v<vv<^<<v<>vvv<^<v^v>v>>>vvvv^>>^v>^^>>>^v>v^^vv^v^^>><v<^<<><>^<<v^v>vvvv<^<^vvv>v^<<><>^><^vv<^^^><>v<^>v<v<v<v<v<>v>^<<>v<vv>>vv<>^^v>>>>^>>vv>v<<v<><^^^<<>>vv><<^<^><>^<v<>v<v>>>^^>v<^><^<<><<^v^>^<^<^>v^vvv^v<><^>vvv>^v<^^>>v<<v><
|
||||
v^v<^^>>>^>>>>v^>>^>vv><>^vv^v>vv^v>v<^^<<^<^<<>>^>^<^<vv^^>^<>vv>vv<<<>v^<^v>^^<v<<>v><v<v>>>><v>v^^v>^^v^v<<<<^v<^^^><vvv<v>^^v<><vv><^v<<<v><v<>^v<^v<><^<v<^<>><^>><^<v<v<^>>>>^><vv><^>>^^v><>v^vv<<^<>><^^<vvv>><>>>>v><><>^^<<^^^v<><<>^>v>>><^^<<<<<<vv^>>v^^vv<v>>v<<<v><>v^>vv<>>v<^v^>>>v<>^^><^^vvv^^<^<>><<<v^^v>vvvv^<<<vv^^^>>^><v>>>>><<^<^v^<<^v^>^>vv><^^><<<v<^^^v>vvv<<vvv>^>^<^^<v><<^<^vv<><>><^><v>^>^<^vvv^<<<v<>v^<v<^v<v<v<><<v^^<><<<v^v>^>>^v^^<<<^<v>v^^v<><v<>v>>v<>><>v<>^<v^<^<>v<^>vvv<^v^><<<><^v^^>>v<<v^>^<>^^>><^vv^^^^vv><<vvvv<>^>v^<^v<>vvv<<>^<v>v^v^v<>>^^vv<v^>v>v<<^>>><<^v^vv^>v>><>>^v<>>^^v<<>^^^<<^^^<^>^<<>>>^vv<v>><v^v<<vv<^v^>><>vvvvv^<^>>^v><>>^^<>^v<^v<<><<>v><<^^vv<<>vvvv<v>v^>>>>v^^<><^<>^><v^>v^v<<>>vvv<^v^v^<v<^><>>v<<v>^>v^^^vvv>>^>v>v><<<>^^vv^^v^>vvv^<^>>v>v<vv>v>^^<^^^v<v>^<^<v^><<<>>^<<v>><<<>>>>>v<^v<>vvv<<><<^<^^<><^<<vvv^<<^^>^>^^^<^<vv<v<<<<vv^^>v>v<v<^<<>vv<^v>v>v^<>v>>>v<v^^<^<<v^v<<^^>^^><v><>>><<v<<>>>>^><><<<>^<><>v^>>^><><<<<>^><<v>>vvvv>^v<
|
||||
<^vv<><<>v<<^^>^>>>>^<^>><>vvv><<v>vv^v><^>><^vv<vv^^>v>vv^^>^<v<^<<^^v><^>v<<v>^^vv^<<^vvv<>>^>>vv<>^vv<v^^^^>>^^<><vv>^><v<>>^^v^^>><<<>><<<v^<>^<^^^<>^><>^v<v<^<><^<^>>^v>v^<^<>v^v>vv<^vv^v<v<v>>^^^<v<<vv>v><><<^<><vvvv<vv<v^^vvvv<^>v<v^><v<>><v<vv^^<^^>><^vvv^<><>^>>><>v><>^>vv>^<>v<v<><>>>v<^<v>vv^^v<^<v><v>v<^<vv>>v<vv<>vv><^>><^^>><vvv<<><v<v<<<^v^^vv>>v>v^><<>v^>v<vv>v<><v^>v^<v<^v^<<v<<>v^<vv^>^<^v>>v>>^^<^v^><v^>><^^v<<<vvv<>v>^<><>vv^^<^^>v^>>^<vv^><<<v<>>^vv<><^>^^^v^>v>>v<^^<v<^v^>^<^>v^^v>v^v^<>v<<vv^v^v<<v>^>^^^<vvv<v^^>vvv<^>v>vv><<v><v^>v<v<^<>^<>>^><><v<<<^><v<<><^>vvvv>^vvvv^<>vv^<<^><^<v>^v^v^<vvvvv>v<v<<<^<v>><^>vv><^>v>><>^v^>^<>>v<v<<>^vv>v^^^<^vv^><<>v<v^v^^<<>^^>vv><<v><><^v^>>v>^>^<v^^<<^^^><<v><^v<^<>v^>vv^<^^>^<vvvv>^v<v<>v>><^^<v^<><^<<><>^v<<vv^vv^<^vv^v><v^<>v^<^<>vv>vvv>^vv^>^<><<^^^^>v>>^<>v>v^^<^>>v<<<^v>>>>>^<><<<vvv<v<v<v><v^^^^<^<<>vv<^<v<><v>^>>^v^<<>v^<v^<v^^><><<^vv<<<<^<^^^<<v<<^>^^>>vv>^^>^vvv>v^>^<<>vv>v<v><^^vv^v><<v>^^vv><^v<v>^v>v^<^vv^v^vv
|
||||
v<><<^^^v>^v^><^<><><>>^>^>v^<<>v<><^<>>v^^v<<vvv^^><^^>>v>^>^<^<^^^^<>vv<>^>^vv^^>^>v>^v<v>><v^>^<v<^><^>^vv<><>>v<<<^v<>vv<v>vv^>>vvv^<><^>>^^>>^>vvv>v><^><<^v<^>>v^^vvv^^<^v>v^vvv^>v>>>vv>v><^><><<^>><^v<<^>v<>^vv>>^^^^v<vvv<><>v>><v<v<><<<<^^^v^v>^v>vvv>><vvv>><^>^<>vv^^<>v^>^^<>>^vv><^^>vv^v<>^>>^v^<^<>^vv>^v^>>><^<>v<>^v<^>><<>><>v>>>^v^^^<^^<>>^^^<v>^v>^^vv>><v<^^^^>>vvv>vv>>>v<^v^v^^><^<>><v<v<>vv<>v^v<v<vv><><<<^vv^^^<^><<^^^^v>>^<v<^><><v^><<<v>>v<><><>v^<<>v^>><v<>>^>^^^<><>^>>>v^>v<v>>>v<^v^^>^^^^>>v^>>><<<>>><>>>^>v^v^v>v^v^<>>>vvv^vv^<vv><>^v<>v^^<<^><v<^<^<<vv^vv>^<>^<^>>v^v>>v^<<v>^>^^<^^^>^v>^^>vv<vvv^>>vv<v<v<>^v>v^v^<<vvv<v<<>>v^>vv^^^v<vv<<<><<^vv<>>^>^<>vv<^>>>><>^><v>^v<<^v>v<<v><^<v^v^^>>^<^^^>>v>v>v<^v><<><v<^>v<<^><><>><v>^^vv<^v<><<>^^v>^^^v^v^<<^v^<>^<^<^vv^^v><<^vv^<v<<^^<>v<<v<>^^<<v>^><^>^><^^><>>>^v<^<>^^>><<^v<^<<<<><vv>>v^>^v^v<>>^^<<v^><^^>>v>^><>^^^<^>>vv^><<<^<>>^v>>v<<>>^>^^><v>^^<v^^v>^<>v^vv><^^^^v>^>><>v<>v>^v^^^^^v^>^^v<<>>^<<<>v<<vv^^><><^<<v<v
|
||||
vvv><<^^<^>><^^^v^>v^>^v<v>>v<<<>>^<<>><vv<<<v^>^v><<<^<>>>>>^v<v><>><>^>>>>>>v<<^^^^v^vv<^^^>v^v<>^vvv^^v<><^v<^v<vv^v>>>^^^<^<v^>vv>>><^>>>v>^<><><<<>>^^^><v^<v>v<v>v<>>^><>><<vvvvv><vv<>v<><^>v>>v><>>>v^^>^><<<^<>^^^<<<<>vv<^vv<>>^><^><>v<vv^^^>^>^<<v<^v<>v>>^>^^>vv<>^v<^^<><<>^^<>^>^^^^^^<^^<<vv<^^^><<<<v<^v>>^^>^v^^^>vvvv<^v^<^<^^<^v>^^^^>^<>v>><<<vvv<<>^<><v><^^>v<v><v^<^vvv<<v<>>v^<<<vv^>>^>><^<^><<^v^^<v>>>>^<vv^<<^<<v^^^^v^<<^<><v^>><>><<<><vv<<<<^>^<<v<><><^>^>>v^^><^<^v^<>^vv<<v>^<<vv>^<^^<v^v^^^<<>v>vv>^>>v^<<v^v>^<^<>^<v><v<vv><vv><>^<v^v<^>vv^^vv>v>><^>>><<^^^vv^<^^<v^^<<^<^<><^<v>>^v>^<>^v><>^v^><>>^<<vv>vv<>vv<<<<^^vv<^<v^^><v>>^^>v^vv>^<<^v<^vv>v^^^^v^^v^vvvv>^><<^^>v^<^v<>>^^<>^v^<<<^>><>^vv^<v^^>v><v<<<^v><<>v<<v<^<vvv<^^^<>v><vv<<^>>>v^^v^<<vv<<>^><v^<^>v<^vvv<<v<v>^<<<><>>^<<<>v^vv^<^^^^>>>v^v<^vvvv>^<v>^^^^>vv^^v>vvvvv^<<<v<<v>^v^v<v>^<<<>^>^><^>>v^<v<>v^<><^<^vv>vv<v^vv^>>v<v<<><<<<<<>>>v^>^^>>^v<>v<v<>v^<><>^^^>v>v><<<<^<v^><<><v<><>>^v>>>v^v^^v<>><<vv^>><><v<^>
|
||||
141
Inputs/Day16.txt
Normal file
141
Inputs/Day16.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
#############################################################################################################################################
|
||||
#.........#...........#.................#.......#.............#.....#.#...#...........#.....#.....#...#.......#.....#...........#.......#..E#
|
||||
#.#######.#.#.#######.###.#########.###.#######.#.#.#.###.#.#.###.#.#.#.#.#.#####.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.###.#.#####.###.#
|
||||
#.#.....#.#.#.#.....#...............#.#.#.....#...#...#.#.#.......#...#.#.#.....#.#.#...#.....#.#.#.#...#.#.....#.#.........................#
|
||||
#.#.###.#.#.#.###.#######.###########.#.#.###.#.#######.#.#.#########.#.#.#.#####.###.#####.###.#.#.#####.#######.#.#.#.#.#.#.#.###.#.#.#.###
|
||||
#...#.#.#...#...#...#.....#...........#.#...#.#.#.......#.#.........#.#.#.#.#.....#...#.........#.#.....#.......#.#.#.#.....#.......#...#...#
|
||||
#.#.#.#.#######.###.#.###.#.#########.#.###.#.#.#####.#.#.#.###.###.###.#.#.#.#.#.#.###.###.#####.#.#######.###.#.#.#####.#.#########.###.#.#
|
||||
#.#...#.......#...#...#...#...#.#.....#...#.#.#.....#.#.#...#...#...#...#...#...#.#.#...#.........#.#.....#.#...#.#...#...#...#.......#.....#
|
||||
#.#.#.#######.###.#####.#.###.#.#.#######.#.#.#####.###.###.#.###.###.#########.###.#.###.#.#######.#.###.###.###.###.#.#.#.#.#######.#.#.###
|
||||
#.#.#.......#.#.#.#...#.#.......#.......#.....#...#...#...#...#.#.....#...#.....#...#.#.....#...#...#...#...........#.#.#.#.#.#.....#...#...#
|
||||
#.#.###.#####.#.#.#.#.#.#.#########.###.#####.###.###.#.#.#####.#######.###.#####.###.#####.#.#.#######.#.#.#####.###.#.#.#.#.#.###.###.#.#.#
|
||||
#...#.#.........#...#.#...........#...#.....#...#...#...#.#.........#.....#.#.....#.#.....#.#.#.......#.#...#...#.......#.#.#...#.#.#.....#.#
|
||||
#.#.#.###############.#.#.#.#####.#####.###.###.#.#.#####.#######.#.#.###.#.#.#####.#####.#.#.#######.#.###.#.#.###.#####.#.#.###.#.#.#.#.#.#
|
||||
#.#...#.....#.#...#...#.#...#...#.....#...............................#...#.............#...#...#.................#.#...#...#.....#.....#...#
|
||||
#.#.#.###.#.#.#.#.#.#####.###.#.#####.#.#.#.###.###.#######.#.#####.###.#.#########.#####.#.###.#####.###.###.###.#.#.#.#.#.###########.#.#.#
|
||||
#.#.#...#.#.....#...#.....#...#.#...#.#...#.#...#...#.......#.#...#.....#...#.............#...#.....#.#...#...#...#.#.....#.......#.......#.#
|
||||
#.#.###.#.###.#.#####.#####.###.#.###.#####.#.###.#.#.#######.#.#.###.#######.#############.#.#.###.#.#.#.#.###.#.###.###.#.#####.#.###.#####
|
||||
#...#.#...#...#...#...#.....#...#.#...#...#.#.#...#.#.#.......#.#.#...#.......#.....#.........#...#.#...#.#.#.#.#.#...#.#.........#...#.#...#
|
||||
#.###.#####.#####.#.#######.#.#.#.#.###.#.#.#.###.###.#.#####.#.###.#.#.#######.###.#.###########.#.#######.#.#.#.#.###.#.#####.#.###.#.#.#.#
|
||||
#...#.......#...#.........#.#.....#.....#.#.#.#...#...#.#...#.#.....#...#.....#.#...#.#...#.....#.#.......#.#.#.#.#.....#.#.....#.#...#...#.#
|
||||
#.#.#.#######.###########.#.#####.#######.#.#.#.###.#####.#.#.#######.#.#.#.###.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.#.###.#.#.###.#.#.#
|
||||
#.#...........#...#.....#.#...#.......#...#...#...#.#.....#...#.......#...#.....#.#.#.....#.#.#...#...#...#...........#.#...#...#.#.......#.#
|
||||
#.###########.#.#.###.###.###.#########.#.#.###.#.#.#.###.#####.#######.#########.#####.#.#.#.#######.#.###.#####.###.#.#####.#.#.#.###.#.#.#
|
||||
#.......#.....#.#.............#.........#.#.#...#.#.#...#.#...#.....#.#.#...#...#.......#.#...#.....#.#.....#...#...#.....#...#...#.........#
|
||||
#.#####.#######.###.#.#######.#.#########.#.#.###.#.###.#.#.#.#.###.#.#.#.###.#.###.#.#.#.###.###.#.#.#######.#.#######.#.#.###.#######.#.#.#
|
||||
#...#.#...#.....#...#.....#.#.#...#...#...#.....#.......#.#.#.#...#.#...#.#...#...#.#...#...#.....#.......#...#.......#.....#.#.#.......#.#.#
|
||||
###.#.###.#.#####.#####.#.#.#.###.#.#.#.#######.#.#########.#.#.###.#.###.#.#####.###.#####.#############.#.#######.#.#####.#.#.#######.#.#.#
|
||||
#...#.......#...#...#...#.#.....#...#.#.....#...#.#.........#.#.#...#.#...#.#.........#.....#...........#.#.#.#.............#.#.....#.....#.#
|
||||
#.#.#####.#.###.###.#.###.#######.#.#.###.#.#.###.#.###.#####.#.#.###.###.#.###########.#####.#########.###.#.#.#############.#.###.#.#.#.#.#
|
||||
#.#.....#.........#...#.#.......#.#.#...#.#.#.#...#.....#.....#.#...#.....#...#.........#.....#.......#.....#...............#...#.#.#.....#.#
|
||||
#.#.###.#.###.#########.#######.#.#.###.###.#.###.#####.#.#########.###.#.###.#.###########.###.#.#######.#.#####.#.#.#####.#.#.#.#.#.#.#.#.#
|
||||
#...#...#...#.#...............#.#...#.#.#...#...#.....#.#.#.......#.#.......#.#...#.........#...#.#.......#.......#.#.#.#...#.#...#.#.#...#.#
|
||||
#####.###.#.###.#########.###.#.###.#.#.#.#####.#######.#.#.#####.#.#######.#.###.#####.#####.#####.#############.###.#.#.###.#.###.###.#.#.#
|
||||
#.....#...#.....#...#...#...#.#.#...#.#.#...............#...#...#.#.....#...#...#.........#...#.....#.......#.........#.#...#.........#...#.#
|
||||
#.#####.#.#######.#.###.###.#.#.#.###.#.#####.###############.###.#.###.###.#.#.#####.#.#.#.#.#.#####.#.#.#.#.###.#.###.###.###.#####.###.###
|
||||
#...#.#.......#...#.....#...#.#.#.#...#.#.............#.......#...#...#...#.#.#.#.#...#.#.#.#.#.#.....#...#...#...#.....#.#.................#
|
||||
###.#.###.###.#.#######.#.#.###.#.#.###.#.#####.#######.#.#####.###.###.#.#.#.#.#.#.###.#.#.#.#.###.#####.#####.#######.#.#########.###.###.#
|
||||
#...#.#.....#.#.#.......#.#.#...#...#...#.#.....#.......#...#...#.....#.#.#.#.....#.....#.#...#...#.....#...#...#...#...#...#.....#.#.......#
|
||||
#.###.#.#.#.#.#.#.#######.#.#.###.###.###.#.#####.#####.###.#.###.###.###.###.###.###.###.#.#.###.###.#####.#.###.#.#.###.#.#.#.###.#########
|
||||
#.........#.#...#.#.....#.#.#.#...#...#...#.#.....#.....#.#...#.#...#.....#...#.....#.....#.#...#...#.#.....#...#.#.#.#...#.#.#...#...#.....#
|
||||
#.#.#.#.#.#######.###.###.###.#####.###.#####.#####.#.#.#.#####.#.#.#######.###############.#.#.###.###.#######.#.#.#.#.###.#.###.###.#.###.#
|
||||
#.#.#...#.#.....#...#.#...#...#.....#.......#.....#...#.#.........#...#.................#...#.#...#...#.#...#.....#.#.#.#.#.#.#...#.#...#...#
|
||||
#.#.#####.#.#.#####.#.#.###.###.#####.#####.#####.#.###.#.###########.#.#####.#######.#.#####.###.###.#.#.#.#######.#.#.#.#.###.#.#.#####.#.#
|
||||
#.#.....#.#.#.....#.#.#.........#...#.#...#.....#...#.#.#.........#...#.#.......#...#.#.......#.#...#.#...#.#...#...#...#.#.....#.......#.#.#
|
||||
#.#####.#.#.###.###.#.#####.###.#.###.#.#######.#####.#.###########.###.###.###.#.#.#.#########.#.###.#.###.#.#.#.#######.#############.#.#.#
|
||||
#...#.#.#.#.#.#.#...#.#...#.....#...#.#.......#.#.....#.#...........#.#...#.#...#.#.#...#...#.....#...#...#...#.#.#.............#...#...#...#
|
||||
###.#.#.#.#.#.#.#.###.#.#.#########.#.###.###.#.#.###.#.#.#######.###.###.#.#.###.#.#.#.#.#.###.###.#########.#.###.#.#########.#.#.#.#####.#
|
||||
#.....#.#.#.#.#.#.....#.#...#.....#.#.#...#...#.....#.#...#.......#.........#.....#...#.#.#...#.#...#.......#.#.....#.#.......#...#.#.....#.#
|
||||
#.#####.#.#.#.#.#####.#.###.#.###.#.#.#.###.#########.#####.#####.#.###############.###.#.###.###.###.#####.#.#######.###.#########.#####.#.#
|
||||
#.#.....#.#...#.......#...#.#.#...........#.#...........#...#.#...#.#.#.......#...#.#...#.#.#.....#.....#.#.#.#...#...#...#.........#.....#.#
|
||||
#.#.#####.###.###########.#.#.#######.###.###.#.#########.###.#.###.#.#.#####.#.#.#.#.###.#.###########.#.#.#.#.#.#.###.#.#.#######.#.#####.#
|
||||
#.#...#.....#...#.........#.#.......#.....#...#.#.........#...#.......#.#...#.#.#...#.....#.........#...#...#.#.#...#...#.#.#.....#.#.#...#.#
|
||||
#.###.#####.#.###.#########.###.###.#####.#.###.#.#########.#.#######.#.#.###.#####.#.#.#.#####.###.#.###.#####.#####.#.###.#.###.###.###.#.#
|
||||
#...#.....#.......#.......#.#.....#.....#.#.#...#...#.......#.........#.#.....#...#.#.#.....#...#...#...#.#.....#...#.#...#.#.#.#.........#.#
|
||||
#.#####.#.#.#.#.###.#####.#.#.###.###.###.#.#######.#.#.#######.#####.#.#.#####.#.#.#.#####.#.###.###.#.#.###.###.###.###.#.#.#.###########.#
|
||||
#.#...#.#.#.#.#...#.#.....#.#.#.#...#.....#.......#.#...........#.....#.#.#.....#.#.#...#.#...#.#...#.#.#.....#.....#.#...#.#.#...#...#...#.#
|
||||
###.#.###.#.#.###.#.#.#####.#.#.###.#.###########.#.#######.#.###.###.#.#.#.#####.###.#.#.#####.###.###.###.#####.#.#.#.#.#.#.#.###.#.#.#.#.#
|
||||
#...#.....#.#...#...#...#.#...#.....#.........#.#.#.........#.#...#.#.#.#...#...#...#.#...#.....#.#...#.#.......#.#.#...#...#.......#.#.#.#.#
|
||||
#.#########.###.###.###.#.#######.#.#########.#.#.###.#.#####.###.#.#.#.#####.#####.#.###.#.#.#.#.###.#.#####.#.###.###.###.#.#.#.###.#.#.#.#
|
||||
#.....#.......#.#.....#...#.......#...#...#.....#...#.#.#...#...#.#.........#...#.....#...#.#.#.....#.#.#.....#...#.....#.......#.#.....#...#
|
||||
#####.#.###.###.#.###.#.#.###.###.###.#.#.#.#####.#.#.#.###.###.#.#######.#.#.#.#.#########.#.#######.#.#.#######.#######.#######.#########.#
|
||||
#.....#.#.#...#.#...#.........#.....#.#.#.#.#...#.#.....#...#.....#.....#.#...#.#...#...#...#.........#.#.#.....#.#.......#.#...#.#...#...#.#
|
||||
#.#####.#.###.#.#.#.###########.#####.#.#.#.#.#.#####.###.###.#####.###.#.###.#.#.###.#.#.#####.#######.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#
|
||||
#...#.......#.#.#.#.......#.....#.....#.#...#.#.#.....#.......#...#.....#...#.#...#...#.....#.........#...#.#.#.#...#.......#.#...#.#...#.#.#
|
||||
#.#.#####.###.#.#######.###.###.#.###########.#.#.###.#.#####.#.#.###.#.###.#.#####.###.###.#.#.#####.#.###.#.#.#######.###.#.#####.#####.###
|
||||
#.#...#.#.#...#...#...#...#.......#...........#.....#.#.#...#.#.#.....#.#...#.#.......#...#.#.#...#...#...#.#.#...#...#...#.................#
|
||||
#.###.#.#.#.#####.#.#.###.###.#.###.#####.###########.###.#.###.#######.#.#.###.#########.#.###.#.#######.#.#.###.#.#.#####.###########.###.#
|
||||
#.#...#...#.....#.#.#.#.....#.#.#...#.....#.....#...#...#.#.....#.....#...#.#...#...#.........#.#.#.....#.#.#...#.#.#.......#...........#...#
|
||||
#.#.#.#########.#.#.#.#.###.#.#.#.#####.###.###.#.#.###.#.#####.#.###.#.#.#.#.###.#.#.#######.#.#.#.###.#.#.###.#.#.###.###.#####.#.#####.#.#
|
||||
#.#.#.#.......#.....#...#.#.#.#.........#...#.#...#.....#...#...#...#...#.#.#...#.#.#.........#.#.....#.#.#.#...#.#.......#.......#.#.....#.#
|
||||
#.#.#.#.#####.###########.#.#.#########.#.###.#########.#.#.#.#.#.#.#.#.#.#####.###.#######.###########.#.###.###.#######.#########.#.#####.#
|
||||
#.#.......#...#.........#...#...#.#...#.#...#.#...........#...#.#.#.#.#.#.......#.......#...............#.....#...#.....#.#.............#...#
|
||||
#####.###.#.#.#.#######.#.###.#.#.#.#.#####.#.#.###.#######.#.#.###.###.#.#######.#####.###.#.###.#####.#######.###.###.#.#####.#######.#####
|
||||
#.....#.....#.#.....#...#.....#.#.#.#.......#...#.......#.....#...#.............#.....#.....#...#.#...#.#.....#...#...#.#.#...#.#...........#
|
||||
#.###.#.#.#########.#.#######.#.#.#.#############.#####.#.###.###.#############.#.###.#######.#.#.#.#.#.#.###.###.###.#.#.#.#.###.#.#.#.#.#.#
|
||||
#.#.#.#.............#.......#.#...#...............#...#...#.....#.#.........#...#...#.......#.#.#...#.....#.....#...#.#...#.#...#.#.#...#.#.#
|
||||
#.#.#.###.#################.#.###.###.#.#############.#####.###.#.#.#######.#.#############.#.#.###############.###.#.#####.###.#.#.###.#.#.#
|
||||
#.#...#.....................#...#...#.#.#.....#.......#.....#.#.#...#.....#.#.#.....#.......#.#...#...........#...#.#...#...#.#.#.#...#...#.#
|
||||
#.#.#.#.#.#######.###############.###.#.###.#.#####.#.#.#####.#.#####.#.###.#.###.#.#.#######.###.#.#########.#.###.#.#.#.###.#.#.###.#.###.#
|
||||
#.#.....#...#...#.#.......#.......#...#.#...#.#.....#.#.#...#...#...........#...#.#...#.......#...#.#.......#.#...#.#.#.#...#...#.#.#.......#
|
||||
#.###.#.#.#.###.#.#.#####.#.#######.###.#.###.#.#####.#.#.#.#####.#############.#.#####.###.###.#.#.###.###.#.#.#.#.###.#.#.#.###.#.###.###.#
|
||||
#.#...#.#.#.......#...#.#...#.....#.....#...#...#...#.#...#.......#.......#...#.#.#...#.#...#.#.#.#...#...#.#...#...#.....#.#.....#.#.......#
|
||||
#.#.#.###.#.#.###.###.#.#####.###.#########.#####.###.#############.#####.###.#.#.#.#.#.#.#.#.#.#.###.###.#.#########.#.#.#.#######.#.#.###.#
|
||||
#...#...#...#...#...#.#...#.....#.#.......#.....#.....#.....#.....#...#.#.....#.#...#.#.#.#.#.#.#...#.#...#.........#.#...#.#.....#...#.....#
|
||||
#.###.#.###.###.#####.###.#.###.#.#.###.#.#.###.#.#######.#.#.#.###.#.#.###.###.#.###.#.#.#.#.#.#####.#####.#####.#.#.#.###.#.#.###.###.#####
|
||||
#.#...#.....#...#.....#...#.#.#.#.#.#...#.#...#.#.#.......#.#.#.......#.....#...#.#.#.#.#.#...#.#...#.....#.....#.#.#.#.#...#.#.....#.......#
|
||||
###.#.#######.#.#.#####.###.#.#.###.#.###.#####.#.#####.#####.#######.#######.###.#.#.#.#.###.#.#.#.#####.###.###.#.#.#.###.#.#######.#.###.#
|
||||
#...#...#.....#.#.....#.#.....#.....#.#.........#...#...#.....#.....#.#.....#.#.....#.....#...#...#.....#...#.#.......#...#.....#.....#...#.#
|
||||
#.###.#.#.#####.#####.#.#.###.#######.#.###########.#.###.#####.#.###.#.###.#.#.#################.###.#.###.#.#.#####.###.#####.#.#####.#.#.#
|
||||
#.#.......#.#.......#...........#.#...#...#.......#.#...#.......#.....#.#.#...#.#.#.............#.#.#.#.#.#.#.#...#.#.#.#...#.#.#.....#...#.#
|
||||
#.###.#####.#.#####.#.#########.#.#.###.#.#.#######.###.#.#.#####.#####.#.#####.#.#.###.#######.#.#.#.#.#.#.#.###.#.#.#.###.#.#.#####.#.###.#
|
||||
#.#...#...#...#.....#...#...#.....#.....#.#...#.....#...#...#.....#.....#.....#.#.#...#.....#...#...#.#...#.#.#...#.......#.#.#...#...#...#.#
|
||||
#.#.#.#.###.###.#.#.###.#.#.#########.###.###.#.#####.###.###.#.###.#####.#####.#.###.#.#.#.#.#######.###.#.###.###.#######.#.###.###.###.#.#
|
||||
#...#.#.....#.#.#.#.#.#...#.....#...#.#.#...#...#.....#...#...#.....#.#.........#...#.#.#.#.#.....#...#.#.#.....#...#.....#.#...#...#.#...#.#
|
||||
#####.#.#####.#.#.#.#.#####.###.#.#.#.#.###.#.###.#####.###.###.#####.#.#########.#.#.#.#.#.#####.#.###.#.#######.###.###.#.#.#####.#.#.###.#
|
||||
#.....#.#.....#.#.#.......#...#.#.#.#...#...#.....#...#...#.....#.#...#.#.........#.#.#.#.#...#.#.#...#.........#...#.#.....#.#.....#.#...#.#
|
||||
#.#.###.#.#####.#.#####.###.#.#.#.#.###.#.#.#######.#.###.#######.#.#.#.#.#.#######.#.#.#.###.#.#.###.#############.#.#######.#.#######.#.###
|
||||
#.....#...#.....#.#.....#...#...#.#.#.....#.........#.....#...#.....#.#.#.#.#...#...#.#.#.#.#.#.#.#...#.............#.....#.......#...#.#...#
|
||||
#.#.#.#####.#####.#######.#######.#.#.###.###.#############.#.#.#####.#.#.###.#.#.###.###.#.#.#.#.#.#.#.###############.#.#######.#.#.###.#.#
|
||||
#...#.#.....#.#...#.......#.......#...#.#.#...#.#...#.......#.#.#...#...#.#...#.#...#...#.......#...#.#...#...........#.#...#...#...#...#.#.#
|
||||
###.#.#.#####.#.###.#######.###.#######.#.#.###.#.#.#.#.#####.#.###.#####.#.###.#######.#.#######.#######.#.#########.###.#.#.#.#######.###.#
|
||||
#.....#...#...#.#...#.....#.#.#.....#.....#.#.....#...#.#.....#...........#.#.#...#.....#.#.......#.......#...#.....#.....#...........#.....#
|
||||
#.#.#####.###.#.#.###.###.#.#.#####.#.#####.#.#########.#.#########.#.#.###.#.#.#.#.#.#.#.#.#######.#########.#####.###.###.#####.#.#.#####.#
|
||||
#.#.....#.....#.#.#...#.#.#...#.#...#.#.....#.#.........#...#.........#.#...#...#...#...#...#...#...#...#...#...#.....#...#.#...#.#.#.....#.#
|
||||
#.#.###.#####.#.#.#.###.#.###.#.#.#.###.#####.#.#.#.#######.###########.#.#####.###.#.#######.#.#.###.#.#.#.###.#.###.###.#.#.#.#.#.###.###.#
|
||||
#...#.............#...#...#...#...#.#...#.....#.#...#.....#.......#.....#.#.......#.#.......#.#.#.#...#.#.#...#.#...#.#...#.#.#...#...#.....#
|
||||
#.#.#.#####.#.#######.#.#####.#.#.#.#.#########.#######.#.#######.#.###.#.###.#.###.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.###.#.#############.#
|
||||
#...#.#.....#...#.....#.....#...#.#.#.....#.....#.......#.#.....#.#.#...#...#.#.#...#.#...#...#...#.#.....#.#...#...#.#...#.#...#...#.....#.#
|
||||
#.#.#.#.#######.#.#########.#####.#.#####.#.#.###.###.#####.###.#.#.#.#.###.#.#.#.###.#.#.#########.###.###.#.###.#.#####.#####.#.#.#.###.#.#
|
||||
#.#...#.#.....#.#.......#.#.#.....#.#.......#.#.......#.....#.....#.#.#.#...#.#.#.#...#.#.#.......#.......#.#.#...#.......#.....#.#...#...#.#
|
||||
#.#.#.###.#.#.#.#######.#.#.#.#.#####.#.#####.#.#.###.#.#####.###.#.#.#.#.###.###.#.#####.#.#.###.###.#.#.#.#.#.###########.#####.#####.#####
|
||||
#.#...#...#.#.#.........#.....#.#.....#.........#...#.#.#...#...#.#.#.#...#...#...#.....#...#.#...#...#.#...#.#.#...........................#
|
||||
###.#.#.###.#########.#.#######.#.#################.###.#.#####.#.#.#.#####.###.#######.#####.#.###.#.#.#.###.#.#######.#.#################.#
|
||||
#.....#...#.......#...#.........#.#.#.............#.....#.....#.....#.#...#.....#.#.....#.........#.#.#.#.....#.....#...#.#...............#.#
|
||||
#.#.#.###.#######.#.#####.###.###.#.#.###.#.###############.#.#######.#.#.#####.#.#.#####.#######.#.###.###########.#.#.###.#############.#.#
|
||||
#.........#.....#.#.#...#...#.#.#.#.#.#...#.#...........#...#.........#.#.....#...#.....#.#.....#.#...#.#.#.......#.#.#...#...#...#.....#...#
|
||||
###.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#####.###.#####.#.#####.#######.#####.#########.#.#.#.#.#.###.#.#.#.###.#.#.#.###.###.###.#.###.###.#
|
||||
#...........#.#.#...#.#.#.#.#...#.#...#.....#.#...#...#.#.#.....#...........#.............#.#.........#.#.#...#.#.#...#.#.....#...#.#.#...#.#
|
||||
#.###.#.#.###.#.#.#.#.#.###.#.###.#.#######.#.#.###.#.#.#.#.#####.#########.#####.#########.#########.#.#.###.#.#######.#######.###.#.###.#.#
|
||||
#.#.......#.....#...#.#.....#.#...#...#...#...#...#.#.#...#...#...#...#...#.#...#.#.....#...#.....#...#.#.#...#.......#...#.....#...#.#...#.#
|
||||
#.#.#.#.#.#.#########.#######.#.#####.#.#.#######.#.#.###.#####.###.#.#.#.###.#.###.###.#.###.###.#####.#.#.#######.#.#.#.#.###.#.###.#.###.#
|
||||
#.#.....#...#.........#.....#.#...#.#...#.......#.#.#.#...#...#.#...#...#.#.........#...#...#...#.#.....#.#...#...#.#.#.#.#.#...#.....#.....#
|
||||
#.#####.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#####.#.#.#.#######.#.#.#######.#####.###.#.#.###.#.###.#.#.#.#.###.#.#.###.###.#######
|
||||
#.#...#...#.....#.#.#.....#.#...#.#.....#.......#...#.#.....#.#.#...#.......#.......#...#.....#.#...#.........#.#.#.#...#.#.#.....#.....#...#
|
||||
#.###.#.#.#.#####.#.#.#####.###.#.#.#####.#.###.#####.#.#####.#.###.#####.###.#####.###.#######.#####.###.#####.#.#.###.#.#.#######.###.###.#
|
||||
#.....#.#...#.....#...#...#.....#.#.....#.#.............#...#.....#.#...#.#...#...#...#.....#...#...#.#...#.....#.#...#...#.#.....#.#.#.#...#
|
||||
#####.#.#.###.#####.###.#.#.#####.#####.###.###.#####.###.#########.#.#.#.#.#.###.#.#######.#.###.#.#.#.#.###.###.#.#.###.#.#.#.#.#.#.#.#.#.#
|
||||
#.#...........#.....#...#.#.#...#.#...#.#...#.........................#.#.........#.......#.#...#.#.#...#.#...#.....#.#...#.#.#.#...#.#.#.#.#
|
||||
#.#.#######.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.###.#.#####.#.#########.#.#.#############.#.#.###.#.#.#####.#.#.#####.#.#.###.###.#####.#.#.###
|
||||
#.......................#.#...#.#...#.#...#.......#...#...#.........#.#.#.....#...#...#.#.#.....#.#...#.#.#...#.......#...#.....#...#...#...#
|
||||
#.#####.#####.#########.#.###.#.#####.###.#.#.#######.#####.#######.#.#.#.###.#.#.#.#.#.#.#.#####.###.#.#.###.#.###.#####.#######.#.#.###.#.#
|
||||
#.#.....#...#.#.......#.#...#.......#.#...#.#...#...#.............#...#...#.#...#...#.#.#...#...#...................#.....#.......#.#.#...#.#
|
||||
###.#.###.#.#.#.#####.#.###.#####.###.#.###.#.#.#.#.#####.#######.#######.#.#########.#.###.#.#.#.#.#####.#.#######.###.###.#####.###.#.###.#
|
||||
#...#.....#.#.#...#...#.#.#.#...#.#...#...#...#.#.#.....#.#...............#.........#.#...#...#...#.....#.#.......#.......#.#...#.....#.#...#
|
||||
#.#########.#.###.#.###.#.#.###.#.#.#####.###.#.#.###.###.#.#############.#######.###.###.#############.#.#.#.###.#.###.#.#.#.#.#######.#.###
|
||||
#.....#.........#.#...#...................#.....#...#...#.#...#.........#.......#...#.#...#.....#...#...#.#.#.#.#.......#...#.#.#...#...#...#
|
||||
#.###.#.#########.###.###.###.#.#####.#.#.#.#.#####.###.#.#####.#######.#.#####.###.#.#.###.###.###.#.###.###.#.###.###.#####.###.#.#.#####.#
|
||||
#...#.#.....#.....#...#...#...#...#...#...#...#.#...#.#...#.....#.....#...#...#.....#.#.......................#.....#...#.........#.........#
|
||||
#.#.#.#######.#####.###.###.#######.#########.#.#.###.#####.#####.#######.#.#.#######.#######.###.#.#####.#.###.###.#.#.###################.#
|
||||
#S..#.............#.......#...................#.............#...............#.........#...........#.........#...............................#
|
||||
#############################################################################################################################################
|
||||
5
Inputs/Day17.txt
Normal file
5
Inputs/Day17.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
Register A: 44348299
|
||||
Register B: 0
|
||||
Register C: 0
|
||||
|
||||
Program: 2,4,1,5,7,5,1,6,0,3,4,2,5,5,3,0
|
||||
3450
Inputs/Day18.txt
Normal file
3450
Inputs/Day18.txt
Normal file
File diff suppressed because it is too large
Load Diff
402
Inputs/Day19.txt
Normal file
402
Inputs/Day19.txt
Normal file
@@ -0,0 +1,402 @@
|
||||
wugw, wrrbgr, rbgr, bgbrb, wuwb, bug, wubur, uwbuwbug, wruu, rbbr, wbgrrg, uuwr, bub, brbggggr, brgguw, gwwuu, uwrbggw, wuwrrr, wbuurww, wwwuwru, gubgr, gubu, ug, ubu, gggrgr, wg, wrgbggu, uwgwubw, bgrgb, uu, gbug, gwuwgr, bgwg, rurgb, rr, ubw, wrr, rggw, ubuu, ubr, ugrr, wrbwrruw, uw, ruggrb, urwwurg, gwr, rurwb, bu, uuu, bbuwb, urbu, ugb, uruub, gwgrrw, wbbw, rwgr, wur, bwbu, bbg, wrbugw, brgr, uurrwg, guruu, uurrrbw, bwwbrguw, gbbgu, bgg, bbwwgbw, rww, uurrr, bgubwb, wwgr, gw, wrgub, wgrg, rugwbb, bgwbuguw, brg, ggbw, bgbubb, wwgu, gwgb, grur, gubw, wbruug, rg, brubbgw, uuugr, rru, brbr, rwbuuu, ubuw, rgru, rwrwgb, wub, rwbu, bwwrr, bwrg, uggbur, gwb, gbugwb, br, rbwu, urubg, uuw, rbb, rgrwu, bguuw, w, www, wurgb, rwwu, rwg, uww, gbwurubb, uuugb, rbrurw, gggbwu, rbrwrgwr, bw, uwrw, bugw, brgguugb, brubw, bbrb, bru, urgr, urwu, bwbb, bur, rwrr, wrrbu, guu, ggugwuw, rwrurb, wbur, gbu, bbb, ur, brw, wrwbb, ugbuwgug, rrugbbru, wwggbw, gwgwgur, rgw, rwwr, wrg, wugrwru, ggwr, ggr, wug, ugu, gbbw, wgww, gwwwuw, gbr, rbwwru, bbru, ruw, gbrgw, gug, bwbuwrb, uwg, rbww, bbbrb, ub, rgrbr, ubg, wugwub, bgr, ru, bwr, bwbug, rgr, wwugr, grg, rwu, wbgg, rgwu, ubugubr, buggur, wwb, rub, wugbb, uubb, uwb, wbb, uwgbw, rubrg, rwubgu, wgwbb, bubrbrww, bg, wwrggu, gr, gggr, ggb, wuuuu, bggwb, ubgrwbr, rgubwu, rwr, gbww, wgbub, ubrb, ruu, rgg, wgrwurrw, ubwggr, uubr, wrwrbrr, ruguw, bwu, guwrug, bgggw, urubr, rruruuw, gur, wrgru, wb, rgwwg, rrguu, wwwugg, rgbg, uwwgg, urr, gwu, ruwb, buwbgur, bbwugb, bubu, rwurwg, wgrb, rrw, uwgwr, ugwu, rgrurg, ww, uwgrrrgb, wrub, bgb, grr, bgwbru, wr, brrbg, rurur, wgbbbur, brwgg, bwgwbw, uuurg, rw, uuwguu, guw, bwg, bwrrwrr, ugr, rbwrg, rwb, urw, uubg, bbwrugr, bgw, brb, rb, rbr, ubbwurb, gbw, buu, wgg, wbw, ugguubw, rurbr, rrwbuur, ubwuwr, urg, wwu, wrguwb, bbgbur, grb, gww, gb, buw, bwbg, grgb, bbu, rbw, rrbu, gruwbw, uur, wwbgr, bwbwu, bgug, uwu, wubbw, rgwr, rrgrr, gwg, bbbubu, wwgrbrw, wuuubb, gbg, uwbwbg, wgwbr, ububb, ubbb, rug, gwbbrb, ubrub, urb, ggrwrgg, rrg, wbr, uub, wbrwbb, ugg, wrgb, bbwu, grurwb, uwbr, ugug, grw, gru, rwgu, wrru, rwgggu, rrr, ugwb, rrrw, brr, buwb, rbwbrg, ugw, rwuuguw, bwgggwb, bugr, wggbrr, uwgrrbub, bgbuuwug, burrrbu, wubwuu, ubwur, ubgwb, uru, brrb, wgb, bwuwgbu, wwuwwbu, bgbbg, wwru, wgr, ggg, guwuu, brbg, gbrb, ugrg, wwgur, wbbu, rwug, gbb, wugr, wuur, ubwurrwg, gwruubgu, wrrw, wubwwg, gugur, urgwu, wrbu, wbg, grwb, ugrrrrb, grbg, ggbbu, gbru, wgw, ggug, ubuub, ggu, wuwrbugb, ugrrrr, gbbubrr, rbgbb, bwwbu, uwwu, wwgbbb, gbbu, b, brwgr, wrb, rwrrw, rubwugg, bbr, wwr, wu, bbgwgbb, rbg, rwwgbbu, bgu, wubuug, ubwww, uggr, rbbbw, rbwgwrbw, bbw, bbgr, rur, ubb, uurbg, wguwb, ubbrgug, wrwr, rwwugb, uwrubb, rrgbbru, bwb, gub, ggbu, wwg, bww, ruwrwg, gbwu, wuu, gbbur, wrubru, rgb, grugwbbw, r, rwww, rbbru, wbrrb, rwgub, ubbrr, wuw, uug, rgu, rggg, bb, g, wru, urgw, ggw, ugwwbrg, grrbw, rbu, bbgugrw, grguw
|
||||
|
||||
urwrggwgbrrwggwuubrrwwugbgbubwbuuugwbguggubrgwwrubub
|
||||
wuwguurugggwbbruubbruwbruugwbguuwrwbrbugurbgugrggb
|
||||
wrbgrwbwbgrrguwbwuugruugrwbugrwuuuuurrugrgggugwuububwrwbg
|
||||
bbbrbwrrwrgrwubbwgbbrbwbruuuwuuwwubbwwgwuwgguurbg
|
||||
bguuubgbwggwgurubuubgurruggbgubwrbrrgbbgugbbugruurggwr
|
||||
uwbbgwbrwubrwuwwbrbubbuggbbbbrugbbrwrubwrg
|
||||
rgrrgruwrrrgwwgrrrrwbuuugrgbbrgbwwruggwrwr
|
||||
wgwwuuruuwrbwbuwwwwbrgurgrgrgruwbrbugbbwggg
|
||||
guuuuwuwrwwrggggurwrugugbubrguwbrrwbwurbbrgwbwgu
|
||||
rrrugwggwgwwuugrgrggbbuwgwwrguubbbwuugbgrugwbbwwugrwgu
|
||||
urubuwwurwgurgwbggurrgrugrbwgrubbwwurbwubwgbgrgrb
|
||||
bbbwgwrbbwruubwwwwwbuubrrrguwguubbbugwrwwgugrbwugbubguwgu
|
||||
rurbwuwgugrrwbrgwrwwubgggbwugbbgbruwwbbwrggwbbgwgwgu
|
||||
ggbgbgwruwguwbwwgruwbbrbgburrwgubuwgbwrbwwwrggwgurwbw
|
||||
guwrwuwrrbwrbgugwguburrwbggurwbbrugwbgrbrwwwbwrrbbbubbw
|
||||
gwrgwrggwrgbbwuwbbwuwrgrggwgrbrwrbwbwuugrbubwwwbw
|
||||
bbwguwgwrggubrgbuuurwwwguubgbbuwbrgggguwbubrbwwrrrbwgu
|
||||
wrbwgbgwbbbwrubwbrgrwbrguguwrggbbwguwubgwbbbguu
|
||||
buwuuwurgbbuwgruwwrbbbrbrgggwwuwrubgrrbbbwwrrbwrwrbbwgu
|
||||
urbrbgugbrbgwbgwrwuuwguwgbgubrgguugbwwgbbbwrrrbubgwgu
|
||||
wgwbguwugbwguwburgbwuruuwwuwbgrbbruggbrwwruwwrugu
|
||||
ubburrrbwuwgubrwgrrbbwwrgugwgrwbugwuwrwwuwguru
|
||||
wwrbgugggrwwrbgbbbbuuurubrugrrurgbrrwrurwbwwggu
|
||||
grbuggwbruggrrrbrwbwgwubgwuubwgrwwugbwggrububgrbgrg
|
||||
brubwgubwrbrgruwwrbgruwrrguwuurwwrubrububrbgwrwrbgbbwrgwu
|
||||
wwrburrburbwbbbrrrggrbuwgubbbgwwbgbgwrububgg
|
||||
uurbgrwburugubguuwgbwruuwwubbugbgwbbggggrggrb
|
||||
uuuuurguwwurrbrrgrurwuwgbrwbggbrrugwguurgg
|
||||
rrgubrwbwwuwbbgrgbuuuwuuubgrubbgwrrgrbbrgwb
|
||||
uugwugrrgrbgrwubbrbuwugbrbgbubuubggbbgwguwwgu
|
||||
uruwwgurbrwrgwrggrgubburubrrurrwugrwbrrgbugbbwbgggwubbu
|
||||
rbbgguugrwgurwgguggggwwwwurbrgwbbbgwwruwrbuugwwgrrugurbb
|
||||
gruurgrrgrgubrugrubwugguugwbguugbrgbuuwrurruruggguwgwgu
|
||||
bguugrgrurgwggbbbrguwugbrrrggrwbguwwwrwwurrwuuwgwggbwubwgu
|
||||
gubgbwgbbruwrwwbbgubrwwrwwwgurrbububbwbwgbwuwbgbuwwgbgwgu
|
||||
wwwruwgubrbbgbburrwgwbgbrwgbrguwrbbbruuuwgrrg
|
||||
wuwbwurruwgbgurbgrwggwwwwrggbuuugbugrbwguggwggrr
|
||||
rrrwwwuwurggbbwuggruugwubgwwgbbgrrgwburwruurwugwuu
|
||||
uwwwuuugrbwbbwugrwrruuwrgurbbgbubuubgugbrurwr
|
||||
bbuurbggwuwbwbuurrrgrwbgrggggbwuwgwrwgrwgwg
|
||||
gbwrwwbwruguugwwbgbwbugwggbubgwugwbuwrrgbg
|
||||
wurbwgubrwubrrrgurgrwuguwgrgwuwwwgwguruwwurgwgu
|
||||
uuwgwuuruwuugrrrgugrubbuwgwugrbrgbgrgwwbubrubw
|
||||
wwbbgguwuwurugguugwggwrurguggburgbguruwbrbbgrbgwuwbw
|
||||
uwrgrbuwbrbgugrrbwuubrrbgbgrbbbguurugggurgrur
|
||||
wbbubggwuurugggbubwrrgbgrubggbggugwwgbggwwubugwbgrrwgb
|
||||
rgguwubwwrbwgbgggbwruwuwugrgrggbwrrwbbbugwbwg
|
||||
ubwrbbbbbbrbggbbgrwwuurwwggurrrbrbuwwuwbwrgruubuwuur
|
||||
bwuggrwwgwubbbwrggugwwrbwrrbubbugwggurgurwg
|
||||
bruugbgwbbwwbrguwrubggwwrggwgrrrrrrrruwgu
|
||||
gugbrugurbuwgrrugugbuugugrbbgwgguuuwggburgwubguuugrwggggr
|
||||
rbbrrbrbbwwgruwrwuwgggrbbbgbuwurgwgwggurrgbggubrrrugwubwru
|
||||
guurwbbubrbbrwgrggrbruubwgbuwgrugrggbbbbuubrwugburww
|
||||
bgrubggwwgwgggwuuggwgurbgggbuwurwbwbrgrguwuruwuwu
|
||||
bubwubbburbbggrwgbwurrwgbwuwrbugbwuuruwwgwubrbuburu
|
||||
brbbgrrbbuuggwbrrrwggwwugugwwbwuwgrbuwrurbuuggugbrgr
|
||||
bbuubwuubbgwwbbbgbbwbbbrgbuwwbbbburguwrgwgrbrbbbgrwrbbbr
|
||||
ggwrbwgggrrwbruubururgwruubbgurwbuwbwrwrbrrugguubrrw
|
||||
gwuguurrrwwgwwgwgwgrurgwuugrrugrbwubwrwrwwbubwwgugbbwgwgr
|
||||
rbgbbggrugwwuguuwggbugbrbgwgbbwggugruubbgugwgbb
|
||||
rrgubuubrbgrrubgguuwbrguwwubbubbububgbbgwgu
|
||||
gbgrgrwbwrugbgbgwwwwubwuwbwbwuwbwrwbgwbugwgu
|
||||
wrruguguguugwwwgwwgrrubbbgrgwgugbrbrwrrgbrubb
|
||||
brgbuwgbubgrurrgwrbubbbggbwruurwbrbbuwgrwuurbgrwrbugurbwbr
|
||||
uggrbrwwwbbrwububrrggrwrwubwuwwubgbuwgbrbbrg
|
||||
urgbggrwwwuruugrurgugrrbbbwwgrbuwuruugbbwrrurrwwwuguw
|
||||
brrgbuwwrurguggrrurbrgrgbbrbburgwwbuwuuuggguwbrwbbgb
|
||||
uwggwgrgrbbgwruwbrwubrbbrrurgrbrgwbwbuwgwgwrgubuuwrbgu
|
||||
brurrrruwrgurbgbwuwwwwrrrgwwuuggrwwgbbwgrbggubr
|
||||
ugrwbbwgbbbruggbgrwrgrguubbruuuwwwrrbguguwugurwgbggb
|
||||
ugwrubwrubuuubbbrurruwurgwgbuwbrgugwurrgwwburbubru
|
||||
wwgruuubggbgwbrbwgbuwwgbrubgggrrrwrugrggwrbrrwwuw
|
||||
bwrrrbwbbwrgwguuwubwruwgbbuugrugbggubwuubwwggrrwbrwrbwrgg
|
||||
rbbgrrwrgbrbuwwurbgwrggrbguuburubwbwbuuwguwrbrw
|
||||
ugrbubbugbrbwgbrgbuuuubrubbbrurwgurgbwuggbrurbrggugurruuwb
|
||||
wubuwurubwrrbrgrguwubuwruugugbubuwrrugbwrgwgwug
|
||||
uugurwrgwburwgbuuuwwwwrbgbgrubrrubbuguuuwbbuw
|
||||
gubuwruubgubwbrbrwwuuurwrurbrruuurrggwurwgw
|
||||
wggrbugwuuubbgrbgwuwbrwwbuuuubwurrwgubwuur
|
||||
wubugrubbrwurbuwbbgwubrgrwbubwwggwrbwggrgwbgrug
|
||||
rwwgwbwwbugrbgwbbbbwgwgbbuurrggwbrrgwgbbuwbrguwgu
|
||||
ruwwubrrrrbwrgruwrrgwrgwbwrguruwrgwubbbuggwrugwgur
|
||||
gwgubguwguwgurrruwbwgbubrwwrbggwguwbbrwwurubburwg
|
||||
ugruburuurgggwgbwugbuwgugrgbgrgbwuugruwbwwggugbwrguguuwgu
|
||||
ggubwuwwrbrubgrrrurrurwbugggrguggbwbgbwwuwwwgwggbggbwuuuw
|
||||
rgbggruubugbrurguurggurgwwrgrbubrrrubrwgbrggurguub
|
||||
rgguwwububrwgwgbguwgurbggrrwwrrbgwrgrubwugu
|
||||
burwurwrrgggwrwguburubgrrwrurgrbrrrwguguuwwburgwuuuruwgu
|
||||
wwuwurwrgggrurbbwgrrrrbwgrurrbggguuwuruuugruruuwburwgrwgur
|
||||
gwrrwruurbwgbuggbgbbgubggwwbuubgruugrwuurgbwuwwu
|
||||
bgggwrbrrrubbbbwrrrbburwgurbburwugubbggwuburbwbuwwgwwbuggwgu
|
||||
rgwuwgbbrugrwguguubwguuruubbgwugbguwurgrgbgruuwrwbg
|
||||
ggbrguguruuugwrgwrwbrbwwwgrwwrubbrwuuurbrwrrb
|
||||
bgruwubbbwrgwwbuuwrrwwuwubgrbwwurwbbugurgbgrbgggurrrw
|
||||
uurbugwuwuwwrrrwbbgwgwubwwbrguwuwrgggwuuruwrrgwbwrbbgrbb
|
||||
gwurwbbwurbbwurubbwwgwwwrrrbuwrgubbwbgrbwwbugrggwu
|
||||
wrwugwwugurwrwrurwurrgrugrubggwubwgbbguurbugrwubgwgww
|
||||
gbggrguuwuwgrwgbrgugbwwbbwuwrbwugrguuwururbbgrbwwggu
|
||||
ggruwrburubgubwurbbwbbwbwrbguubbuwwgwbbwrbbuwgrubrwg
|
||||
rbwrubrbgwwrgguwwgwrbwuurubbrguwbwrrrubbrrubbruwubwggw
|
||||
ubbrrubrbwrubbrwwgrbggbgurrwggwbggbrbrrbgurbrbur
|
||||
bwwurruwugubwrgwrwuwbwbwugurggwbwurruggggbbbrwbggbg
|
||||
wurgrugwugbuggbbrgrburgguwurgurrubguwrrgbuwwg
|
||||
buwuwrrurruuruugggggbwurubbggrgwrgrwgwgwgu
|
||||
bggrbbbgbubuuguwwgubgrgrburrrbwrbwrruwwbuwbwwbwgwgu
|
||||
gwurbugurwbbbrbburwggruwgrwburruruwuugggggwuuwbur
|
||||
rrbwgbbwrgwbwuwgwwuwbrubbwrrrubbgruggbggwgu
|
||||
wrrbruuwubugggbubbubwbgbwwbrwbbgguwrwwwwgugggggwurggggu
|
||||
gwgggbrrugrugbuugbbrugrbgugrwrbwbwrwbgwrubwubrwbbwguuruguw
|
||||
wwgbgwruubrbugrwrbuuurbrgwrrbgugugbbrwbubbrrubgrbugw
|
||||
rbbgwrgbgwgubwrguuugwgrbwurbwbbgwbrggurwugbgbbbuw
|
||||
brgbgburgbrugbwrwgrrbgugbrwugbgbgwbrgwwwwgg
|
||||
rgwbugburuwwrrgbgrbgbwrubrwwbgbubrubwurguwu
|
||||
rugurrgrgrrwgwrbbubrbrwwwuwwwwuurwwwwubbbguwuwggwgu
|
||||
ruggbwbgbbuwbugrubgugubgruggwrwwbbwgrwugwurwuuru
|
||||
wbrrwgbwbrbbbgwrgubuuuwwgrgwrbwbggwwwugbwuwwr
|
||||
rwbgwgwgrrbbbwgwurrrrbrugrbrgubrrwgwwwuwgwrwrbrwuwu
|
||||
wuwrbgwrbbuguuurubwrrurwwgrugbrurgbrgrubrurrwwur
|
||||
gugrurgugrwgwgwrwrrggrwgbwwuwurbrbbgbuwuubuggrwuuu
|
||||
brwwwguwbgrubgrgugruwwrbrugggbggbggbgwrrrguug
|
||||
buwuwugggwwwrgwrugubugbrugwrwuubgbbbwwbgrubb
|
||||
wbrguugwrbwgwgggrggbrgurbggrugubbwrbubbwggwrbuubgrrgrwr
|
||||
wrgrbwgwrbwrwgbrubwgwubbrgrguwrgrbuurgggggg
|
||||
wbuuggwurbwgwguugbuuuwugrwbwwuuuggwbuuwwbbruubwwu
|
||||
buwrgbruwbwwrgbbbuwrrrrrugbbrubbgwguuurbrrgrwuubgwguwbb
|
||||
urbuguubguwuwrwwurwwuuwwbwguugbgbgbububwwbwrwgwugwgu
|
||||
ggrgbrwrbwuurggbgbgrbugggwuubbwrgwrgbgwrrwgwgwuug
|
||||
uwwubwurrwgggwbgrbbruuwruuwbgbrgbgrbrubgbwgwwubwgu
|
||||
rrugububgrbwuguguwrrwwwrgwbwurggruwgbubbruwubuwgbgww
|
||||
uwgwgwbuwgrbgrgugwwwrwwwbuuwguwwgwuggrwbrrruwwbuuw
|
||||
bbrgwubwwuwbruuurguuwbgurwurgbgubgbrrbbwwur
|
||||
bubwrgbuwbuwugbbuburbuwggrrbuwuwrbugbbgrurbwgu
|
||||
ruubggwrgbubwbwugwrbubrrbrbrwgbwgbbuguwbrgurwgggbbbr
|
||||
brrggwurbgrrrruugbubruwrrwggugwgwwrbggrwrbguggbbbru
|
||||
buurwrwwuububbuwwuwwwbgwgubuugbrguugububbgggugbwgu
|
||||
brwuguwwggwbuggurwbuwubwgurwruuwbrurgurwuwurggbbwurruugwbg
|
||||
wrbrggrugurwgugwrggrguwrwugubwurwbrgrrbrbwgbrbuwuggbwbru
|
||||
bbbgrbwwwurubrgwwwbwbrrbbrgrruggbwubgwuwurbugrburwgguurwgwgu
|
||||
ggrrggwbrgguugbwbwugwrwuuruwubrbrbgwbbgrru
|
||||
bwggwrbgrgrrwrgwrubggwwrgwwurbwrururubwuwbruwurwgwwuwu
|
||||
urbrrugruuwbrwwrwurrwrrgbwgubuwwbwgggurrgugbwbrgbugwbggbwu
|
||||
gwugbwrugrgbbwrrbwbwgbguwggrrurbbbbugrggbgb
|
||||
brrgwrbwwbuurwuruwbwwwwrwbbbwggwgggugbguwuburr
|
||||
ruuuwgbguurwgwugwggrwwrbbbwugrbururbwburwwruuwwrugrur
|
||||
wrbuuwrwggwwrrbgwwrbuuggbgrugwrgugguruguwb
|
||||
rbrrwwbuubgrrbuwurwwuwgwguubgrgrbubrwgugwrbgruburbrrug
|
||||
gbwgugrbwbwgrwwbgbrrugwgruubwggbgruuwrwgbwrwrgbuw
|
||||
rwgrbbbgwgubrbwuubrrubbrguubbuwbgrbguggwugurgbguwrrgbb
|
||||
rwgbguwuuwgbrbrrgwgrrwuuuguuggbggggbwburugwurg
|
||||
wgrggbbrbrrruwgguwggrgugbrrbrbwbugbwwrubbbbuwu
|
||||
wrurbrubuuugugwggbugrubruwbburrrrwuuwgwuwggbbuguw
|
||||
gbrrwbwruwrrbrruguuwgbwwbugrwwugwbrgubgrur
|
||||
grrrgguwrrwwrwwgbbrgggwgbguwuuubbwugrrrugrggrb
|
||||
uurgrwubwbrrgurrguuwrbgwrbrurwrugrgubwwgwbwgbrugbgwbuguwgu
|
||||
bwbwwgbbgrwwbrbbbrgbrbwwwuruuubgrgguurbuuwgu
|
||||
grggrwbwgggbrgugrwguwrubwbuwgurrruuwbgbrrgb
|
||||
bbrruubuurbguubwuugrurbwrbgbwubwubwwrwguwug
|
||||
uugbrugbgrbugguugwbwbgrgbuurwwbuubgrgrgbrw
|
||||
wbgrbuuurbbruwwwgwrrbguugbuguggwwwuurruuurbbgwwrbgwg
|
||||
ggrrbggbbgbgwrbgggrbbbrububuwrrbuwbbwrbgrgbgrwbb
|
||||
bgwuguuubrwwuwgbbgbbbuurwwwrwwbrgbggrbbwguguwgu
|
||||
rrbgwruwbbuubbuubrbggbugwwwgbgrwgugbubwbgbbbgbbrgug
|
||||
rbwbrgbbggbburrrwguwwuwrugrgggggrwruuggrbrgubgwrwbrrubggwgu
|
||||
guburwgburrgurggurgbgrwwwbuubbwwruwrubbrbbwrgwwrruubbwbu
|
||||
uwbugwbuwrwurbrwrrrwrwwbrgrbbbwuwrrwrrrbbbwwrwrrbwgbrrgwg
|
||||
bruwrgwrugwggrgrwgrrrwwgwwugbwurggwbrrwbgwgrgurru
|
||||
gwuuruurwwguwugwurrgbuwuwwgrwgurgbbrgwurrwwg
|
||||
wgrbrgurburugugbguwwgwbwwgggbuuugwgwrwbrrrbruburwrwwgwbbrb
|
||||
uwggwbggwgggrgrbrubrbruubguuwgurggwbbrbbgrrbug
|
||||
rurbgwgbwuwuwuuubwuguwrbwgbbrururruwbgwwbuwbrrwrrurwgg
|
||||
ugwuuuurubbgbwrwgbuwrbbrwbwgwuugbrguggbubbggggubgrwuwrbbgg
|
||||
wbbugbrbgbrruwguuruwwgwgwrguwubguuwurbgwbbguwrrrwwwburguuu
|
||||
wuugrbbrrgurgbuuuruwbggrggbubwubbrgbuugrugwbgwguwrw
|
||||
guuwwrbuuurwrrwrwrwrbuugwwbuuuuugugrgbguubrrbggbgu
|
||||
rbwbbruuwwbwgwbwgugggbwwrwugguubrugubwgbbrgrbgu
|
||||
bgrgbuugggbugwbbgwurgwguuuruubrubwbubwgwgwgurrgbubrguubr
|
||||
rbggruugwbuwgugbuubugggwbrwuurgrrbwwbrurbgwbgguugbburgwgwg
|
||||
guwuurbbwwbbuwwuwwggurguwuubuwwwgrugwrubgruurwgbwggb
|
||||
gbrgbwwuggwuwgbgwbbgguwrwbwbwrwrwururbuwbgwgrrwrbuubwrrrbu
|
||||
ggbbwgbbbrbwruggurwguubbwbguwguwgbrwrrruwubrurbuguwgurgu
|
||||
bbwbwrugbwuwbwwbuugrgugugugrgwwuugwrurruwbgwwbwbwr
|
||||
gbwwwuwrwwguwburwuggwbruuwbbrubgrbrwrgwrgrgugwgu
|
||||
rrbwwbrrwgwruwwwrrgwubbugruwguggwwubrrbwwwwggg
|
||||
urrrgwgggrrrurubwurgurwgugwgrugwbbwbwwgbbrwgurgwgwbubgwgu
|
||||
rwgbwbrwwbgrbwggwbuuguuuwgbbubrgrggrwguwbrwrbrwrrwwurg
|
||||
grbrwgbrwgwbwubgrbbgwrgrwuugwbuwuuwbwugrrwg
|
||||
rgrurbbbggrrguburrwwugbgbbgbbbwuwbwrgwgwwbruuruww
|
||||
wubbgwgbggwwggwrwubbrbwrwrbruburbgwwwurgguwgr
|
||||
bbrbgbwrrbgwwwurggwgguwruwbuwbugbubbbbrwbggubuwuwgu
|
||||
uwubbwwbrurwrrrwwurbgwwrubgugrbbgwbbbrwrrrgrbruubbbburrgg
|
||||
rugwrbwugrgwwgwbbwguwbuwbugwwbugwwwurwbbguwgbgrwuwrggbgrr
|
||||
rgwgwwwuwbgwbuuwubbuwbruwgugbbugbbwrbwggwbgbwurubbrrgbrw
|
||||
urwwgrbbgbuwuubrubruburgugbgbwuurgguuwuwubwbuggbwbggwugwgw
|
||||
guugrwbbwwbwbwbuguurubuwwwrrbggbrruwwwurwbbbrbbb
|
||||
ggugbrwbgwrbrbbbrgguggwgrrggwgwrgruurgwurggwwgubgwgu
|
||||
wruugbgugwwrgbwbrbbbgrubrwbgwwguwbbgubwrguwuuwubgur
|
||||
bwuwubbugwgbrrwuuwrgbgbguwuurrbbwrwugwwwrbubgrrrwbw
|
||||
buwrbrgwbgwurrrwguuurbrrbuuurwrgwubbgwbgggguruwbgbggb
|
||||
uwbggrgwbubrbrwwwguguwrrugbbbugbbgwrrwwwgrwgbugurwrurr
|
||||
ggurbuwrwgurrgurgbuwrguwbwbrugbgburwuwuuwuubgggwruubgubwgu
|
||||
gwrrbbbgwbwuwgubbugguwurrwwbrugugwwrwbrgurrrwww
|
||||
gwruwggwrubugwgubrruruurwrggbwgrubbuubgrruwgrburwbgrrbuwgu
|
||||
gguugbgwrrbwwrrgrbrwuggrbwbgbgrwrbuwbbubwgubwuwubbg
|
||||
rruburrrwguwrrgwwuuwwbrgwgrurwurwubrubuurbgbbggrgb
|
||||
wbrgwrbgbrbwgwbuwurgrrruwbwrugwbbbgwbgwbruuuguwuwwbuguwrub
|
||||
wwrgrgbuwbbbwwurgugrruuwwwbrrwuwugwwurwgrwurubguwwg
|
||||
ruburgggurruugrubggwgugbuurgwbbrrggbwggwwrbbgrwb
|
||||
wwggruwuwwguuwwrrgubgwgbwwbrrrwwuuggugwbuurub
|
||||
gwrburbbgbrwugbwrbggrwwwwbrrgrrrurggwbbggbgbubgrrbuwrwu
|
||||
wbuubrwbrgwwubrgrrggrrurwbbwrrgwbrguggwuwwugruw
|
||||
ugbbuugguuwgwbubrwrwwrwgbbbwrwgburuwrbbuuwbw
|
||||
uuuuwbwggrrbbwwrwgrwwbwrurrbruubwwwgbgrgrrwggwwuugbgrrb
|
||||
gbbubwubwbgwubwwgruwbgrburbuwwbgwwgbwrwbwbrgwrrubwwbrug
|
||||
rwbwwruwwwgurgurrgbgubuuguwbwrugbggrwurbbrbbrbuwwrrwww
|
||||
wgwrubgwuubgwgwguguugggwwruurwwgguggbuugwbuuwrbr
|
||||
wwgrwrrgrbbwwwbgbgbubuwrwrbbbrwrgrgguwgwwugggbbgbrbwrgug
|
||||
urugwubwgubrwrbuubguggrbuuuuuwwurrgbrgbgbwwubruwuuwwwggugr
|
||||
buwuburbrgugrubggbgbrburgwrgwwgbuuuuuwgbwbrbuugrwbbbwb
|
||||
uuwgwwbwuurbbggbwrbwrbbruuururwgugwuuurwgrgrwbruwuwru
|
||||
ugubbwgubrgwgwwurbuurwwrbrwggubbguwrggrubrrbuwuubbwbrbrb
|
||||
grwwrrgwrubbwggwgwwuuuwwrwbbwbbguwubwgbrgbrgrgguugrrgrgw
|
||||
wrbrgrgwrwbruruwuwurrbwgwwbrrrwwwwrgrbwgurgrwugwuwgu
|
||||
uuguwwrbgguuwgubbwrwugbrwbbbrbugubbrbrgruugbggbwbrubwg
|
||||
wwbwbbwugbggwbguwggwbgrgubgrbrrrgbrugrgwuggubbrrr
|
||||
brgwbubggbrwbwuggububwbuuwgggrgggwgbwuwguwgwgu
|
||||
gwbwuwuuwurwguggbrbbrrwubbrbrwuuwrbbbgrgurggrrwrg
|
||||
ggugugbrgrrrwuurruuwrgbgbgugbbbrwuwbbgrggbwuggugugugb
|
||||
bgwwurubbguruuuwbuuguwwbbuuggwgbbgrbbubgubruwbgbuwwurgu
|
||||
uuguwgrrbubwrgruggubggwrgururbrruurwgrgbrgug
|
||||
ggwubwbwwbwggguugurbwrrbwrrgwrgrgbubuwuurwgbruubbwgu
|
||||
bwgbguwrgwubgrgbwuwgrggbwwrgbgwbruuwgguggu
|
||||
wbgbuwrrggwgbubgrbuugrrrwrrwguurubuurbgbrb
|
||||
wrbwbrurwrubugrrrbugrwugugrugbwuguubbrgrwwgbrruwbbwg
|
||||
gbuguwgwwgwuggrbggwbrruuwubwrgwbrwgwguwrgbwgu
|
||||
gggggbbururwbggwgwwrrguurwwgwugrrwuggbubrgrrugubgbugubwgu
|
||||
wurbgwbuguwbbgubbgwbburbbrwbbubwrbrubgugbbugwuw
|
||||
uugggbugbwwbrwuguwggrgwrbrgwwrugwgruruwgwubbbwwbbguuwugbr
|
||||
brugggrwruuuggbgwguuurwubgwuuwbruguwwrgwgbugrrwbbrug
|
||||
wurrrrbbbggrwurubbruurbrrbwwgrrrrgruubrrwwwr
|
||||
rugugrwbubrgrwbwwbuugwurrwuuguugrwurwrbbbwrbg
|
||||
rrurbgrgwrwuguggurbrbgwbgugwrbrugbggrugrrrggrw
|
||||
ubwwwwbbguugrurbgrwwgruubggbrrwgbgwrwbrgbugbbbbugwbwbb
|
||||
wwgubgrrruurgrguwrgwuwggbwbwruggrbgrbrbwgguruggwgwuurbbuu
|
||||
ggguurwuuruguggrrwgrwurbwwbwwbwrbrugbgwrwugbruugbgg
|
||||
urgbubgwbrwrgrbwgruguwugwbgrgugrgbwubrgrbwrr
|
||||
uwbwbbbbrwggwrrggwbgbwrgugbrggbwuwgubrwbgbuuwugg
|
||||
wwgbbgwrwrwrbgubgggbrbguguguubbrbbrurgbbgubbbbwgu
|
||||
burwbbguggbwwubrbugbrwwbrgwgruwrrbuggugwgu
|
||||
brrbrguwuwbrrrbuuubwwrbgbubugwwurwugrgrwurbugwwrbugbw
|
||||
gburrrgwuwrbwugugrrrurwrrrbuugruurbbguggugubwgb
|
||||
ruugrbbwbubuggbbuwgbbwgwurbrgrbgruwbrburggubrrwuburuugbur
|
||||
wwbwrbwuwguguuuurwubrwbrburbggrugurwbrrrwwbgurwuwg
|
||||
urggurrrgbbrgrwrwrbuuurbgwrugggrwbrwbgggrugg
|
||||
gurrbgbbrugbwrgwwggrururbbgwgwwbwubgwrrbubwbuubggbrbrr
|
||||
bbwwbgbrbwwrgwwrbgwbgugurugbugwubguwubruurru
|
||||
wuurbgrrgrwurrguuwuurwbwubrbgwbbbbugrwwwwbbbwwgwgwru
|
||||
uwgubbbwuwugwbrgwwguubwwugugwbubguugwgbuurgbrwbruuubuurruw
|
||||
bbruwrwuubwbugbbrbgggbwbwbuwuuubrgugugwbwwrbuwgwuwgu
|
||||
wgrgrbbgruwrgrwgbrwrwguggguwwwubgbwuwrgrbguwu
|
||||
bwbrbbwggwrruuguwgwwgubrbgurrgburuuguuguuwggwwbu
|
||||
ugrbrwugrwbwgbwbwbwrgbgugwurwwgrurrrugbwbggu
|
||||
grwrwbuuwbbrbbbuwrwubbugbbbwwgbwgruwbgrgbwguwwbwuww
|
||||
ugrgbwburbwbgrgubbuurwubrgrwubbrrruwubrugrwrwbggb
|
||||
wwrwwrwrgurgggbrubuuuuurbbrgwrgggwgrwbuwrggruru
|
||||
gwwbbrburbuuuguruubbbggwgrgrubwgruwwrbrgrgruugwrrww
|
||||
ugwrwguggubrrwwurwwwbwbwbbwwwwwguubbwwurrgwwgwbwubwb
|
||||
wburwbggrbgurbwubwubggubrwurguwbbbggbwrbbguwbwbwuurgbgg
|
||||
rwwgggwwwbubgugbubuuwwrbbuwrwwgwggbbbugwbrgbwuuuuw
|
||||
brggrwbbwrubburgwwrbburuwuugwrrwuuwgrrrbwwwgguubwwbbbbuwgu
|
||||
wuwrbwuwbwrugbrwubbbgugbgwgwbubwuurbggwwrrgrbggbw
|
||||
uwrrgrrwwugrburbbwbwbwbwuurgrgubbwwuwrgrwgbugg
|
||||
gbuwgwrwbgbgrruwrgugwuwbgwruwrbgbrrwububbrbrrbgugr
|
||||
bgbbbwwwwbbubwrgwbwrrbgggrwggwgwgbgrbbgggugwru
|
||||
wwgwwbguuwrbwuuwugwrwbgrwbururbugrrrgwbuuwrwwuuu
|
||||
brgruuuugrgwuuguwbbwgrwgbggbgrugrwwbbugrwwrrubwgu
|
||||
wburbrwbwrbwrbrrgggurruuguggwuwbrgwbgbwgbrwubgubugbur
|
||||
rgurgwgrubuuwwrugugbbggurbbgwwrrubgurwbwbbbrurburwrwwub
|
||||
wguuuubwubwgwrwuwwuururbggbgwgbubwwrwrwuuwgwbbbrgr
|
||||
uugubgbguwbggguuggrbwgwwrrguwuwbubwwrgggwgbwgrb
|
||||
gbubrbggrwwgurbbbbbuwbbwggbuwbuwurrgruwwgub
|
||||
buwrrwbuwwgwbuwuurguuwbwrbuugwwwuwgrrbubbrgrbubguruwgu
|
||||
ubruwgrwbwuurrruwbbwwwgrbbbburgwwbbuuwrgwrguburwbuggguw
|
||||
gwuuuuwgbbgbwgggubuugrbbwrrurbbrburrrgwgbwguwubwuww
|
||||
rugugrbbwuggrgbbubggubbggbrgwrbrbgubbwgu
|
||||
uuubbbggurgubgrbguuwwrgbrgrbbrbrubwguwbubwrgwwbugg
|
||||
gbwrrgubbrwgbugbrrruwubwgrwurrwwurwgwrwbrguwrgwwbrwwuwgu
|
||||
wwwbwugurwwguugrbwgruurwwrgguwuggwurugrggwguwg
|
||||
ugbrwwbwwwuwwrgrwuwbuwbgwurubwuwuuwguwubwbburwrwubuw
|
||||
grwgrggggbgwgbgbrwguugwrwbgrrurwbbwburgrwwbbwwgggrwwgugwgu
|
||||
gbrbbgbwgburbbbrwbgbuuguuurrrrwwbggbgrubuuwwwwrb
|
||||
brbugwubbrgbuubwbuguguwuugbrubgbrwwugbuwbgbwuwwbrgubrbwruu
|
||||
rbwrwurbbwubwrgrwrggrwugbbuwburwuggwgwbgbwrgwbgw
|
||||
brurwruuubwwruuwuwwwuggugrbruwbgwbugrrwurugrgubrggbwwr
|
||||
gugrwgubbwbuugwgrgrrrgwbbrguwubruwugbugrbbruuurwgbgur
|
||||
ggbrgubuwwururggrburuuguguurgubbrugurbwrggrrwbwgu
|
||||
rwuugubrrurrbguuugguwwwugrrgwgbrguubgrwbrrwguwbw
|
||||
uwuwrrruwrwwgrwgrbbwwwggwgubgrrrwggubuuuuuubrbbwgu
|
||||
ruurrrgrugrgrgwwugrwwgrbuuguurgrbrbgrwbwgwu
|
||||
buubbwwbwwrwbwwbgurgwbbrrgbwbwbuwwbwbggguburrbrrbwgurgu
|
||||
bgrurgbrrurwwbbrrwbrrrwrgrwbbrugrwbwrrgubbubrrbrgbuuwrgww
|
||||
rwbbwbgwbggwwgugrguwgbuwwubwuwwwwuwbugrwgrgguu
|
||||
bggbubgugwbbrurrubwgwbwwwuubbrguuurwruruwrwwubuurr
|
||||
buwuwbrrubbwuurwbrgwwwwrrgruwggruruggbrgwbwwwbwugrwgr
|
||||
ubbuguurburrrwggwgbwuwwrgwurgruwwwwbwwgruwbugbuugrrggbu
|
||||
ubuwrbwgwrbgugrwubbgrbwrggwrgrubbbbgurwrrwuubwbrgbbbbuggww
|
||||
uruwwuubrbgubrurwbguwrugbwruggbbwwuwuggbrwuwbuggbrbrgrbr
|
||||
uubuuruwrbbwguugwgubbwgwubbruggrgwrrgruuwuwbgwrrrgr
|
||||
gwbububbgwbwgggwrwurugrrruwuwurgbrwbgbwuwuggwgbwuwbur
|
||||
ruguuwwuurgwggbbwgggugugbbuuggwbwbbwgrruuubwrguwrruugwrbb
|
||||
bwwrugwwrgwruubbwwgbwwrwuwubbwurrrubrwwwubbubugugbuwb
|
||||
rrbwwggurwuuubgurbbwgbrbruuwbuuwwrbugggugw
|
||||
rwggguuuwbwuwwubwuuurrubgrguwuwbrgbuwbgugbbbbrwuruuurgrw
|
||||
uugubuwwwrwwuwguubgrrbrrrwrrgwubbwwbwrbgguguuguuwru
|
||||
rwugwruubgurrwrbgubuwrwuwugrwggrwwwugbubugwbbwgwburbbubwu
|
||||
bubbbrgrgbwgubwwruurgrbrbbwgbgrwgggwrbburubwb
|
||||
brwgbbwrbruggwrrbuuuuuuuuwrgbwuggrrrugwuwgr
|
||||
wggbubwgwruwrbgrguugwbruuggwbrrwbgwuwrgwwurgugwurbwbb
|
||||
gwwbrgrrrwrbgwubrwgwrwbgbburgrrwbuwgwgrgwgubbgr
|
||||
rurgrubwgwrrubburwurgrbrgurbrguwugwurrbbbbwwbbuw
|
||||
wgwugubruuugbrgrgwgbrurwbgbwbrbuwgrwurrgruwgu
|
||||
gguwggbrwwugugrbwrbrwgwwgruggurgurwrrrrwbwgu
|
||||
wwgbrrgwwuwubbuuuggbgwgrwbbrgubwwuwurwrbubggrgguurgw
|
||||
wrrrgwrubggugwgwburgbbwguguwwgurrwwgggrguguggrugwwwgu
|
||||
ruwwbrburrrrwgurruwbwgruggrbwuwuurrgbuuwbgbg
|
||||
rbugurbwgurwwrbwrruwgbgwwrwgwggrrguugrbrgwwgwwurubbrubrg
|
||||
bbbbguuuwwurwbwbggbrgwwugwbugrugubwuuwggwbwuwwrgbrguuwr
|
||||
buwubggbrwruburgbubwgbwwrwrgbwgwrwuuurrgrrwwbrrrgubb
|
||||
ggurrgbrbggggrbgwbuwurwbrguugrbuurwrgubwwubbbbwrwuwbur
|
||||
ubbwubgbrwwgrgbgrwbrruuurbwrwrgwbgrrgrbgrgwuuwwururrbr
|
||||
rrugruuwgbwuwgwuwruuwwuuguurrwbwrgugbgwwubbg
|
||||
gubuubrbbrrurrbrrwguguwrwgbbubrbuwwbuwwgubguburuggrgwr
|
||||
wguwrwrwruwbbbbwuubwbguuwurwbubgwwwwrbuugww
|
||||
bbggggggbuwgurgwurbubwubgbgburbwrrbrrrwbwubwwruwuwbggrrugg
|
||||
ggwrgbwruubwwuurgbbwrgbbgwrubwgbrbbbggbrurgugbbwgbgrugu
|
||||
ubuwugruwbrwwbbwbbuwwubgrbgbgggurrrrgbbgwbbwuu
|
||||
rrgwwggwgurgurbbbwubuugbbbgwwrrwrburubgwgu
|
||||
ugrgugbrgrwuugbuwgugrwrbwbugbwggwbwubgbruuuwbrrwrbwuu
|
||||
urgwwubwuubruguwwgurgbwgubgggbbwruwrurwwgbuwrrrbwwuw
|
||||
bgrgubruwrurggrbwuwbbwwugwburbubrrwurwubwrruuurgubrrgub
|
||||
rgbrrrwwbbuwrbruuurggurubggwbbrrbwbbrbgwrbuwgbgg
|
||||
rgguwggugruwwwbrbgrrbwugururguwuuubgruubbwwwu
|
||||
bwwbrrwuurgrruwgrguwwbgrrwrbwuuurgggbrwgbuwbguuuwggwbrrgwgu
|
||||
rbwwwrbubwggrugguugwwgwbuurburbrubuwgbururwgrgwwb
|
||||
wwwgubbwbwbgwubrrgbubuwbbbgrrgrwwrbbuwbubrrguuugruwwruwwb
|
||||
ubrbggrwgrwugwwgrugubrburgggbugwbggbburgugggwbugugguguguw
|
||||
rrrgrgrwgbgwgrgwrurwuwgurrbwwwgbgrgwwbwbubrrubrru
|
||||
wbwgrgbwbgwgbuugburrwburbuwrbwgburrgwuwrggwbwuwgbbbguwrbgr
|
||||
rwgburgwgubuugurwbwbwbuburrrbburgwwwwguwgwwbwbbwwwuwbwgwug
|
||||
rwbuuguuwrrgrwrrgruruuguwwwgbbruwbbwrbrguwgu
|
||||
guwbggbgrbbbbuwrwguwguwgrwurrwrbuurrrgruwwurrw
|
||||
wbwuuuggwbgrwggbrggwbwburgbbrwrrugbbrugurbgwgu
|
||||
wrrubbwrrwbruruwggugwwgrrwugugrgrguuggrubrggugggbrwu
|
||||
rugrgguuuubbuugbbrrwuuwgrbrgbgrbbrbugururrg
|
||||
ugggrgrwgbgwbwwrrgggbwwgbgbwrwwgwubbbrbbbuuwgwbbubbbwubw
|
||||
gwgwuwuuwgbuubbwwwrrurrbgbubuuguwwbrgwubuuwbgwwuwbg
|
||||
rurggguuubuuwrbrgwgguurwgrwugruugwwggrbuuugwbwgu
|
||||
gbburubbgbggrwubgrgrurbwgrrubuwrrbbgrgrwgg
|
||||
wgrrgwurbguwgbuwrbrurruwrbgrrbrgggguugrbwgwrbwwbrgwgu
|
||||
rgbwbrwguubrwwrwugbbbwugwurwwgurbbrgwwugbbbwgb
|
||||
ruwwgugrgrgrwgrwrbrrggwurrrwubrrbbrbwubrbwgu
|
||||
brbwrrrggrgrggbwbgubgrrugwgwuubrbwwurbwbru
|
||||
wrbrwgbwbbguburgrrgwrbrwwurugruggwgrrrurggur
|
||||
gggwrgwwbuwwbrbgbrbbgbbubbuggrgrggbwugugggrbub
|
||||
urgbwrgbgwwrgbwurgggrwgbbgwbwgrwwuuuguggbrbggw
|
||||
wwubrgbwrguwrbrurrwwwgrwrbrbrrbrrwwgbbuwwwbbbwbg
|
||||
rrgugrbrbuwwwuuwwurgubgwbbruuggbbbruuwubur
|
||||
urguwgrrrgbrrwbggbgurrrrrwggrggrrburrrgggbu
|
||||
ruwgguwurbbrgbgwgrrubwbwurwrbwgburrbbgrgburgubwwgb
|
||||
wggwubbrwwwububuugwbwbubrubuguwguwrbbrwbgwgurgu
|
||||
uubggrubwgrgbrurgbuwubgbuuwugwbuururrururgggrurwwrrgrrgbgwgu
|
||||
brrwrbrbggggrwrburbrurbuwuuguwbbrgrruwbugwwburuuugubwgu
|
||||
gbwrruugrgwbgrbruwwgrurbgwwubgwwbbggubgrwubrrburrgwuw
|
||||
uburgbbwrgrwurwbuwrrwbbbggrruwrugubruwbgwubggurbuwwbbuwgu
|
||||
wwrwguuwubrbbruguuruugbwwwrbbuubbuuubbbgrgr
|
||||
uuwgbbgguuggrwwrrrubbbbgurgrruuubwwugwgu
|
||||
guggrgrbrburubbugbugrgrggggugwgwggrrwwgbbwgu
|
||||
rbgbbwrbwggugurgubbwwwrggwgwuwgrbrrbgubbbbruw
|
||||
uuuwgrrrubbrwrbggwgguubbwbrbrwbgrgwbubwggwubgrub
|
||||
rurwruuwwgwrguwugruburbgbuugugwuubrbbwurgrbrbugwubr
|
||||
urrruurwuwbbbwububwrgguwbrgrbuubgrwuguwurwrbubrugu
|
||||
gugwgrrrbrrrgrrwwgrggbuggbwbwgbburbwwggguwrub
|
||||
wguwwwgwggwwurrrguwuwbgrgbrgwugbwbwwggbugbggr
|
||||
gwgrwrgwbbburggrbwwurrrgbguurrrgrbrugwgbwurwguwbgbgrbug
|
||||
rbbrrrbuuurgugwgrrbuwrbrrurwuwgrrrgbugbwgu
|
||||
urwgwbuuwrgwwrrggwwubbrbwguuwbwrggbbwwwwbwrrrwwgbwwurbrrg
|
||||
wwbguurugruuwuubugbgrwgwwggrbubrggwrwruubwrgwub
|
||||
ubgruruguugrwbwbuwbbwruubwgrrurwwruwugwbruuurrwwrrgruugw
|
||||
grbubwruwubgugggrrgrbwgurbgwugwwggrrbrgrbuwbbbrbwgu
|
||||
wrgrrubgggrurgwguurubwgggbwuwrrubrugbrgbrbggwgg
|
||||
gwgbrgrrbbrgubgrubrwrwrugrgubrgruuguwrwubwwwrgbubwwggbbwgu
|
||||
bwbwgbgwbwwbuuwbrubggggbugwgbgbuuwggrwuwrbr
|
||||
wugrwurwgrbugrwrwrwrrgwwuugrrwgrgbgbuwgu
|
||||
urbbubruuggrugwwrbrrguugguuwuuwuuubrbgbbggrgbug
|
||||
rrugubrbbgbwrbggguugrbrrrbruugruuggrbgwbuuwuururugwruug
|
||||
burwbgbgruwrurbrwuwrgurgrrbrbbguwwbbrwgbwbgwrwbruuwbgwgww
|
||||
wbubuuwbrwuwwruggbbugbrrrgbgwguwwgrgurgwrugrguurrrrbbgrbbwgu
|
||||
rbwrbubggwuubugbrubuurruguwrrwgubwrwwububwrgrguw
|
||||
gbrgubrugbwrgwwwwrbugwwgwgwrbrgwuuggrubwrbrugwbbruubwgu
|
||||
wbgrubbrgwgrbrbuuuubuugwubbugwbuggwrburgwugw
|
||||
grwgrbgwwrubruuubburwgbwgugwugwwrbwbwwrguwbbubuuwguwr
|
||||
1000
Inputs/Day2.txt
Normal file
1000
Inputs/Day2.txt
Normal file
File diff suppressed because it is too large
Load Diff
141
Inputs/Day20.txt
Normal file
141
Inputs/Day20.txt
Normal file
@@ -0,0 +1,141 @@
|
||||
#############################################################################################################################################
|
||||
#.......#...#.......#...#.....#...###...............###.......#...#...#...#.....#.......###.....#...................###.....................#
|
||||
#.#####.#.#.#.#####.#.#.#.###.#.#.###.#############.###.#####.#.#.#.#.#.#.#.###.#.#####.###.###.#.#################.###.###################.#
|
||||
#.#...#.#.#.#.....#.#.#.#...#.#.#.#...#...#...#...#...#.....#.#.#.#.#.#.#...#...#.#.....#...#...#.........#.........#...#.................#.#
|
||||
#.#.#.#.#.#.#####.#.#.#.###.#.#.#.#.###.#.#.#.#.#.###.#####.#.#.#.#.#.#.#####.###.#.#####.###.###########.#.#########.###.###############.#.#
|
||||
#...#.#.#.#.#...#.#.#.#.....#.#.#.#...#.#...#...#...#...#...#.#.#.#.#.#.....#...#.#...###...#...#.....###.#...#...#...#...###...........#...#
|
||||
#####.#.#.#.#.#.#.#.#.#######.#.#.###.#.###########.###.#.###.#.#.#.#.#####.###.#.###.#####.###.#.###.###.###.#.#.#.###.#####.#########.#####
|
||||
#.....#...#...#...#...#.......#.#.###.#.###...#...#.#...#...#.#.#.#.#.#.....#...#.#...#.....#...#.#...#...#...#.#.#.#...#.....#.....#...#...#
|
||||
#.#####################.#######.#.###.#.###.#.#.#.#.#.#####.#.#.#.#.#.#.#####.###.#.###.#####.###.#.###.###.###.#.#.#.###.#####.###.#.###.#.#
|
||||
#.....#.......#.....#...#...#...#...#...#...#...#...#.......#.#.#.#.#.#.#.....###.#...#.....#.###.#.#...#...#...#...#...#...#...###...###.#.#
|
||||
#####.#.#####.#.###.#.###.#.#.#####.#####.###################.#.#.#.#.#.#.#######.###.#####.#.###.#.#.###.###.#########.###.#.###########.#.#
|
||||
#.....#.#...#...#...#...#.#.#.#.....#...#...............#...#...#.#.#...#...#...#.#...#...#.#.#...#.#.#...###.......#...#...#...#...#...#.#.#
|
||||
#.#####.#.#.#####.#####.#.#.#.#.#####.#.###############.#.#.#####.#.#######.#.#.#.#.###.#.#.#.#.###.#.#.###########.#.###.#####.#.#.#.#.#.#.#
|
||||
#.#...#.#.#...#...#...#...#.#.#.#...#.#...#...#.....###...#...#...#.#.......#.#.#.#.#...#.#.#.#...#.#.#.###...#...#.#...#...#...#.#.#.#.#.#.#
|
||||
#.#.#.#.#.###.#.###.#.#####.#.#.#.#.#.###.#.#.#.###.#########.#.###.#.#######.#.#.#.#.###.#.#.###.#.#.#.###.#.#.#.#.###.###.#.###.#.#.#.#.#.#
|
||||
#...#...#...#.#.....#...#...#.#.#.#.#...#.#.#.#...#.#.....#...#.....#.......#.#...#...#...#.#...#.#...#...#.#.#.#.#.#...###.#.#...#...#...#.#
|
||||
###########.#.#########.#.###.#.#.#.###.#.#.#.###.#.#.###.#.###############.#.#########.###.###.#.#######.#.#.#.#.#.#.#####.#.#.###########.#
|
||||
###...#...#.#.###.......#...#.#...#.###.#.#.#.....#.#.#...#.....#.........#.#.#.......#.#...#...#...#.....#.#.#.#.#.#.#...#.#.#...#.........#
|
||||
###.#.#.#.#.#.###.#########.#.#####.###.#.#.#######.#.#.#######.#.#######.#.#.#.#####.#.#.###.#####.#.#####.#.#.#.#.#.#.#.#.#.###.#.#########
|
||||
#...#...#...#...#.........#...#.....#...#.#...#.....#.#.#...###.#.#.....#...#...#.....#...#...#...#.#.....#.#.#.#...#...#...#.#...#...#.....#
|
||||
#.#############.#########.#####.#####.###.###.#.#####.#.#.#.###.#.#.###.#########.#########.###.#.#.#####.#.#.#.#############.#.#####.#.###.#
|
||||
#.............#.#...#...#.....#.#...#...#.....#...#...#.#.#.....#.#.#...###.....#.........#...#.#.#.#.....#.#...#...#...#...#...#.....#...#.#
|
||||
#############.#.#.#.#.#.#####.#.#.#.###.#########.#.###.#.#######.#.#.#####.###.#########.###.#.#.#.#.#####.#####.#.#.#.#.#.#####.#######.#.#
|
||||
#.............#.#.#.#.#.#.....#...#.###.........#...#...#.....#...#.#.#...#.#...#.......#.#...#.#...#.#...#.#.....#...#...#.#.....#.....#.#.#
|
||||
#.#############.#.#.#.#.#.#########.###########.#####.#######.#.###.#.#.#.#.#.###.#####.#.#.###.#####.#.#.#.#.#############.#.#####.###.#.#.#
|
||||
#.............#...#.#.#.#.......#...#...#...###.....#...#.....#.#...#.#.#.#.#...#.#...#...#.###.....#...#...#.........#...#...#...#...#...#.#
|
||||
#############.#####.#.#.#######.#.###.#.#.#.#######.###.#.#####.#.###.#.#.#.###.#.#.#.#####.#######.#################.#.#.#####.#.###.#####.#
|
||||
#.........###.....#.#.#...#.....#.#...#...#.....###...#.#.....#.#...#.#.#...#S..#...#.....#.#...###.....#.............#.#.......#...#...#...#
|
||||
#.#######.#######.#.#.###.#.#####.#.###########.#####.#.#####.#.###.#.#.#################.#.#.#.#######.#.#############.###########.###.#.###
|
||||
#.#.....#...#.....#.#...#.#.....#.#.......#.....#...#.#...###.#.###.#.#.#######...#.......#.#.#.....#...#.....#...#...#.#...........#...#...#
|
||||
#.#.###.###.#.#####.###.#.#####.#.#######.#.#####.#.#.###.###.#.###.#.#.#######.#.#.#######.#.#####.#.#######.#.#.#.#.#.#.###########.#####.#
|
||||
#.#.###.#...#.....#.###.#.#.....#.#...#...#.#...#.#.#.#...#...#.#...#...###...#.#.#...#...#.#.#.....#...#.....#.#.#.#.#.#.....#.....#...#...#
|
||||
#.#.###.#.#######.#.###.#.#.#####.#.#.#.###.#.#.#.#.#.#.###.###.#.#########.#.#.#.###.#.#.#.#.#.#######.#.#####.#.#.#.#.#####.#.###.###.#.###
|
||||
#...#...#...#.....#.#...#.#.....#.#.#.#.#...#.#.#.#.#.#.###...#.#.#########.#.#.#.###...#.#.#.#.#...###.#.......#...#...#...#.#.#...#...#...#
|
||||
#####.#####.#.#####.#.###.#####.#.#.#.#.#.###.#.#.#.#.#.#####.#.#.#########.#.#.#.#######.#.#.#.#.#.###.#################.#.#.#.#.###.#####.#
|
||||
#...#.....#.#.....#.#...#.#.....#...#...#...#.#.#.#...#.#...#.#...#####.....#.#.#.#.....#.#.#.#...#...#.#.....#.....#.....#...#.#.....#.....#
|
||||
#.#.#####.#.#####.#.###.#.#.###############.#.#.#.#####.#.#.#.#########.#####.#.#.#.###.#.#.#.#######.#.#.###.#.###.#.#########.#######.#####
|
||||
#.#.#...#.#.#.....#.....#...#...........#...#.#.#...###.#.#.#.......###...###...#.#...#.#.#...#.......#.#...#.#.#...#.......###.#.......#...#
|
||||
#.#.#.#.#.#.#.###############.#########.#.###.#.###.###.#.#.#######.#####.#######.###.#.#.#####.#######.###.#.#.#.#########.###.#.#######.#.#
|
||||
#.#...#...#...#...#.....#.....#...#.....#.#...#.#...#...#.#.#.......#####.....###...#.#.#.....#.........#...#...#...........#...#.........#.#
|
||||
#.#############.#.#.###.#.#####.#.#.#####.#.###.#.###.###.#.#.###############.#####.#.#.#####.###########.###################.#############.#
|
||||
#...#.......#...#...###.#.#.....#...#...#.#.###.#.#...#...#.#.......#####.....#...#.#.#.#...#.....#.......#...#...###...#...#.#.....#.......#
|
||||
###.#.#####.#.#########.#.#.#########.#.#.#.###.#.#.###.###.#######.#####.#####.#.#.#.#.#.#.#####.#.#######.#.#.#.###.#.#.#.#.#.###.#.#######
|
||||
###...#.....#.###.......#.#.....#...#.#.#...#...#.#...#...#.#.....#.#####...#...#...#.#.#.#.#.....#...#...#.#.#.#.#...#...#...#...#.#.......#
|
||||
#######.#####.###.#######.#####.#.#.#.#.#####.###.###.###.#.#.###.#.#######.#.#######.#.#.#.#.#######.#.#.#.#.#.#.#.#############.#.#######.#
|
||||
###.....#...#.#...#.......#...#.#.#...#.....#.#...###...#.#.#.#...#...###...#.....#...#.#.#...###...#...#.#.#...#.#.#.............#.........#
|
||||
###.#####.#.#.#.###.#######.#.#.#.#########.#.#.#######.#.#.#.#.#####.###.#######.#.###.#.#######.#.#####.#.#####.#.#.#######################
|
||||
#...#.....#...#.....#...#...#...#.#.........#.#.###.....#.#.#.#...#...###.###.....#.#...#...#.....#.......#.#.....#.#.#.........#...........#
|
||||
#.###.###############.#.#.#######.#.#########.#.###.#####.#.#.###.#.#####.###.#####.#.#####.#.#############.#.#####.#.#.#######.#.#########.#
|
||||
#.#...###...#.........#.#.....#...#.....#...#.#...#.....#.#.#.###.#...#E#...#.....#.#.....#.#...............#.......#...#.......#.#.........#
|
||||
#.#.#####.#.#.#########.#####.#.#######.#.#.#.###.#####.#.#.#.###.###.#.###.#####.#.#####.#.#############################.#######.#.#########
|
||||
#...#.....#...#.......#.......#.#.......#.#.#.....#.....#.#.#.#...#...#.#...###...#.#.....#.#.................#...#.....#.........#.........#
|
||||
#####.#########.#####.#########.#.#######.#.#######.#####.#.#.#.###.###.#.#####.###.#.#####.#.###############.#.#.#.###.###################.#
|
||||
#...#...........#...#...#...#...#.........#.....###.....#.#.#.#...#...#...###...#...#.....#.#.#...#.........#.#.#.#...#...#.....#...........#
|
||||
#.#.#############.#.###.#.#.#.#################.#######.#.#.#.###.###.#######.###.#######.#.#.#.#.#.#######.#.#.#.###.###.#.###.#.###########
|
||||
#.#.....#.........#...#...#...#.........#.....#...#...#.#.#.#...#...#...###...#...#.......#.#.#.#...#...#...#...#.#...###...#...#...........#
|
||||
#.#####.#.###########.#########.#######.#.###.###.#.#.#.#.#.###.###.###.###.###.###.#######.#.#.#####.#.#.#######.#.#########.#############.#
|
||||
#.....#.#.........#...#...#...#.......#.#.###...#...#.#.#.#.#...###.#...#...#...#...#.....#.#.#.#.....#...#...###...#...#.....#...#...#.....#
|
||||
#####.#.#########.#.###.#.#.#.#######.#.#.#####.#####.#.#.#.#.#####.#.###.###.###.###.###.#.#.#.#.#########.#.#######.#.#.#####.#.#.#.#.#####
|
||||
#.....#...#...#...#.....#...#.###.....#...#...#...#...#.#.#.#.....#...###...#...#.#...###...#...#...........#.......#.#.#.#...#.#...#.#.....#
|
||||
#.#######.#.#.#.#############.###.#########.#.###.#.###.#.#.#####.#########.###.#.#.###############################.#.#.#.#.#.#.#####.#####.#
|
||||
#...#...#...#...#...#...#...#...#...#...#...#...#...###...#.#.....#...#...#.....#.#.#...###...#.....#...#.........#...#.#...#.#...###.#...#.#
|
||||
###.#.#.#########.#.#.#.#.#.###.###.#.#.#.#####.###########.#.#####.#.#.#.#######.#.#.#.###.#.#.###.#.#.#.#######.#####.#####.###.###.#.#.#.#
|
||||
###...#.......#...#...#.#.#...#...#...#.#.#.....#...#...###.#.....#.#...#.#.....#...#.#.#...#.#...#...#...###...#.......###...#...#...#.#...#
|
||||
#############.#.#######.#.###.###.#####.#.#.#####.#.#.#.###.#####.#.#####.#.###.#####.#.#.###.###.###########.#.###########.###.###.###.#####
|
||||
#...#...#.....#.###...#...###...#.....#...#.......#...#...#.#...#.#.#.....#.#...#...#.#.#...#...#.............#...#.......#.....#...#...#...#
|
||||
#.#.#.#.#.#####.###.#.#########.#####.###################.#.#.#.#.#.#.#####.#.###.#.#.#.###.###.#################.#.#####.#######.###.###.#.#
|
||||
#.#...#...#...#...#.#...#.....#.....#...#...#.....#.......#...#...#.#...#...#.#...#...#.....#...#...........#...#...#.....###...#.....###.#.#
|
||||
#.#########.#.###.#.###.#.###.#####.###.#.#.#.###.#.###############.###.#.###.#.#############.###.#########.#.#.#####.#######.#.#########.#.#
|
||||
#.....#...#.#...#.#...#.#...#.#...#...#.#.#.#...#...#.........###...#...#...#...#...........#.###.#.......#...#.......#...#...#.....#...#.#.#
|
||||
#####.#.#.#.###.#.###.#.###.#.#.#.###.#.#.#.###.#####.#######.###.###.#####.#####.#########.#.###.#.#####.#############.#.#.#######.#.#.#.#.#
|
||||
#.....#.#...###...###.#.....#...#.....#.#.#...#.###...#.....#.....#...#.....#.....#.......#.#...#.#.#.....#...#...###...#...#.......#.#...#.#
|
||||
#.#####.#############.#################.#.###.#.###.###.###.#######.###.#####.#####.#####.#.###.#.#.#.#####.#.#.#.###.#######.#######.#####.#
|
||||
#.....#.#...........#.......#...#...###...###.#.....#...#...#...#...###.......#...#...#...#...#.#...#.......#...#.....#.......###.....#.....#
|
||||
#####.#.#.#########.#######.#.#.#.#.#########.#######.###.###.#.#.#############.#.###.#.#####.#.#######################.#########.#####.#####
|
||||
#.....#.#.........#.........#.#.#.#.........#.....#...###.....#...#.........#...#.....#.......#.#...#...................#...#...#.....#.....#
|
||||
#.#####.#########.###########.#.#.#########.#####.#.###############.#######.#.#################.#.#.#.###################.#.#.#.#####.#####.#
|
||||
#.......#.........#.........#.#...#...#...#.....#.#.#.............#.......#.#.......#.....#...#...#...#...#...#...#...###.#.#.#.#...#.#.....#
|
||||
#########.#########.#######.#.#####.#.#.#.#####.#.#.#.###########.#######.#.#######.#.###.#.#.#########.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#####
|
||||
###.......#...#...#.#.......#.#.....#...#.#...#.#...#.#.......#...#...#...#.........#.#...#.#.....#.....#...#...#...#.....#...#...#...#.....#
|
||||
###.#######.#.#.#.#.#.#######.#.#########.#.#.#.#####.#.#####.#.###.#.#.#############.#.###.#####.#.#######################################.#
|
||||
#...#.......#...#...#.........#.........#...#...#.....#.....#.#.#...#.#.........#...#.#...#...#...#.#.......#.....#.......#...#...#...#...#.#
|
||||
#.###.#################################.#########.#########.#.#.#.###.#########.#.#.#.###.###.#.###.#.#####.#.###.#.#####.#.#.#.#.#.#.#.#.#.#
|
||||
#.....#...#...#...#...#...#...#...#.....#.......#...#.......#...#.#...#.....###...#...###...#.#...#.#.#...#...###...#...#...#.#.#.#.#.#.#...#
|
||||
#######.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#####.###.#.###########.#.###.###.###############.#.###.#.#.#.#.###########.#.#####.#.#.#.#.#.#####
|
||||
#.......#...#.#.#.#.#...#.#.#...#...#...#.#.....#...#.###.....#...#...#...#.#...#...#...###.#...#.#.#...#.#...........#.....#...#.#.#...#...#
|
||||
#.###########.#.#.#.#####.#.#########.#.#.#.#####.###.###.###.#.#####.###.#.#.#.#.#.#.#.###.###.#.#.#####.#.###############.#####.#.#####.#.#
|
||||
#...........#.#.#.#.....#.#.........#.#...#...#...#...#...#...#.....#.#...#.#.#...#.#.#.#...#...#...#.....#.#.......#.....#.....#...#...#.#.#
|
||||
###########.#.#.#.#####.#.#########.#.#######.#.###.###.###.#######.#.#.###.#.#####.#.#.#.###.#######.#####.#.#####.#.###.#####.#####.#.#.#.#
|
||||
#.....#...#.#.#.#.#...#.#.....#...#...#.......#...#.###.#...#.......#.#...#.#.....#...#.#...#.#.....#.......#.....#...###.......#.....#...#.#
|
||||
#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#####.#########.#.###.#.###.#######.###.#.#####.#####.###.#.#.###.#############.###############.#########.#
|
||||
#...#.#.#...#...#...#...#...#...#.....#...#...#...#...#.#.###.......#.#...#.###...#.....###...#...#.............#...#...#.....#...#.........#
|
||||
###.#.#.#################.#.#########.###.#.#.#.#####.#.#.#########.#.#.###.###.###.#############.#############.###.#.#.#.###.#.###.#########
|
||||
#...#.#.........#.....#...#.#.......#...#...#.#.#.....#.#.#...#.....#.#...#.....#...#.....###...#.....#.......#...#...#...#...#.#...#.......#
|
||||
#.###.#########.#.###.#.###.#.#####.###.#####.#.#.#####.#.#.#.#.#####.###.#######.###.###.###.#.#####.#.#####.###.#########.###.#.###.#####.#
|
||||
#...#.#.........#.#...#...#...#...#...#.......#.#.###...#.#.#.#.....#.###.......#...#...#...#.#.......#.#.....###...........#...#.....#...#.#
|
||||
###.#.#.#########.#.#####.#####.#.###.#########.#.###.###.#.#.#####.#.#########.###.###.###.#.#########.#.###################.#########.#.#.#
|
||||
#...#...#...#...#.#...#...###...#.....###...###.#...#...#.#.#.###...#.#...#...#...#...#.#...#.........#.#.#...###...###.......#.....#...#...#
|
||||
#.#######.#.#.#.#.###.#.#####.###########.#.###.###.###.#.#.#.###.###.#.#.#.#.###.###.#.#.###########.#.#.#.#.###.#.###.#######.###.#.#######
|
||||
#.......#.#.#.#.#.#...#.#...#...........#.#...#...#...#.#.#.#...#...#...#...#.###...#...#.#.....#...#...#...#...#.#.#...#.......###.#.......#
|
||||
#######.#.#.#.#.#.#.###.#.#.###########.#.###.###.###.#.#.#.###.###.#########.#####.#####.#.###.#.#.###########.#.#.#.###.#########.#######.#
|
||||
#.......#.#...#.#.#.....#.#.###.......#.#...#.#...#...#.#.#...#...#.#.........#.....#.....#...#.#.#...#.........#.#.#.#...#...#...#.#...#...#
|
||||
#.#######.#####.#.#######.#.###.#####.#.###.#.#.###.###.#.###.###.#.#.#########.#####.#######.#.#.###.#.#########.#.#.#.###.#.#.#.#.#.#.#.###
|
||||
#...#...#.....#...###.....#.....#...#...###.#.#...#.###.#.###...#.#.#.#...#...#.....#.#...###.#.#...#.#.....###...#...#.....#...#.#.#.#.#...#
|
||||
###.#.#.#####.#######.###########.#.#######.#.###.#.###.#.#####.#.#.#.#.#.#.#.#####.#.#.#.###.#.###.#.#####.###.#################.#.#.#.###.#
|
||||
#...#.#...#...#.......#...........#.#...#...#.#...#.#...#.#...#.#...#...#.#.#.#...#.#.#.#...#.#.#...#.#...#...#.#.................#...#.#...#
|
||||
#.###.###.#.###.#######.###########.#.#.#.###.#.###.#.###.#.#.#.#########.#.#.#.#.#.#.#.###.#.#.#.###.#.#.###.#.#.#####################.#.###
|
||||
#...#...#...###.....#...#...........#.#.#...#.#.###.#...#...#.#.......#...#.#.#.#.#.#...###...#.#.###.#.#...#...#.###.................#.#...#
|
||||
###.###.###########.#.###.###########.#.###.#.#.###.###.#####.#######.#.###.#.#.#.#.###########.#.###.#.###.#####.###.###############.#.###.#
|
||||
###...#.#...........#.#...#...#.....#.#...#.#.#.#...#...###...#...#...#...#.#...#.#.....#.......#...#.#.#...#...#.....#...#...........#...#.#
|
||||
#####.#.#.###########.#.###.#.#.###.#.###.#.#.#.#.###.#####.###.#.#.#####.#.#####.#####.#.#########.#.#.#.###.#.#######.#.#.#############.#.#
|
||||
#.....#.#.....#.......#.....#.#.#...#.###.#.#.#.#...#.....#.#...#.#.....#.#...#...#.....#...#...#...#...#...#.#.....#...#.#...###...#...#...#
|
||||
#.#####.#####.#.#############.#.#.###.###.#.#.#.###.#####.#.#.###.#####.#.###.#.###.#######.#.#.#.#########.#.#####.#.###.###.###.#.#.#.#####
|
||||
#...#...#.....#...#...........#.#.#...#...#.#...#...#...#.#.#.###.....#.#.#...#...#.......#.#.#.#...#.......#.....#...###...#.....#...#.....#
|
||||
###.#.###.#######.#.###########.#.#.###.###.#####.###.#.#.#.#.#######.#.#.#.#####.#######.#.#.#.###.#.###########.#########.###############.#
|
||||
#...#...#.#.......#.........#...#.#...#...#...#...#...#.#.#.#.#.......#.#...#.....#.......#...#.....#.....#.....#.....#.....#...#...........#
|
||||
#.#####.#.#.###############.#.###.###.###.###.#.###.###.#.#.#.#.#######.#####.#####.#####################.#.###.#####.#.#####.#.#.###########
|
||||
#...#...#.#.#...............#.#...#...#...#...#...#...#...#.#.#...#...#...###.#...#.....#.......#.........#.#...#...#.#.....#.#.#.........###
|
||||
###.#.###.#.#.###############.#.###.###.###.#####.###.#####.#.###.#.#.###.###.#.#.#####.#.#####.#.#########.#.###.#.#.#####.#.#.#########.###
|
||||
#...#.#...#.#.....#.........#.#...#...#...#...###...#.#...#...#...#.#...#...#.#.#.#.....#.#.....#.........#.#...#.#...#...#...#.#...#...#...#
|
||||
#.###.#.###.#####.#.#######.#.###.###.###.###.#####.#.#.#.#####.###.###.###.#.#.#.#.#####.#.#############.#.###.#.#####.#.#####.#.#.#.#.###.#
|
||||
#...#.#.#...#.....#.###.....#.#...#...###...#.....#.#...#.....#.#...#...#...#.#.#.#.......#.....#.........#...#.#.......#...#...#.#.#.#...#.#
|
||||
###.#.#.#.###.#####.###.#####.#.###.#######.#####.#.#########.#.#.###.###.###.#.#.#############.#.###########.#.###########.#.###.#.#.###.#.#
|
||||
###.#.#.#...#.....#.#...#...#.#...#.#.......#...#.#...#.....#.#...###...#.###...#...#.....#.....#.#...#.....#.#.#.....#.....#.....#.#...#.#.#
|
||||
###.#.#.###.#####.#.#.###.#.#.###.#.#.#######.#.#.###.#.###.#.#########.#.#########.#.###.#.#####.#.#.#.###.#.#.#.###.#.###########.###.#.#.#
|
||||
#...#.#.....#...#.#.#.....#...###...#.#...#...#...###.#...#.#.#.........#...#.......#.###.#.....#...#.#.###...#.#...#.#...........#...#.#.#.#
|
||||
#.###.#######.#.#.#.#################.#.#.#.#########.###.#.#.#.###########.#.#######.###.#####.#####.#.#######.###.#.###########.###.#.#.#.#
|
||||
#...#.#.......#...#.#.................#.#.#.#.....#...#...#...#...#.....#...#...#.....#...#...#.###...#...#.....#...#.#...........###.#.#.#.#
|
||||
###.#.#.###########.#.#################.#.#.#.###.#.###.#########.#.###.#.#####.#.#####.###.#.#.###.#####.#.#####.###.#.#############.#.#.#.#
|
||||
###.#.#...#...#...#.#.........#...#...#.#...#...#.#...#.....#...#...#...#.....#.#.###...#...#.#...#.....#.#.#...#.###...#...###.....#...#...#
|
||||
###.#.###.#.#.#.#.#.#########.#.#.#.#.#.#######.#.###.#####.#.#.#####.#######.#.#.###.###.###.###.#####.#.#.#.#.#.#######.#.###.###.#########
|
||||
#...#.###...#...#...#.........#.#.#.#.#.....#...#.....#...#...#.....#...#...#.#.#.#...#...###...#.#.....#.#...#.#.........#.....#...#...#...#
|
||||
#.###.###############.#########.#.#.#.#####.#.#########.#.#########.###.#.#.#.#.#.#.###.#######.#.#.#####.#####.#################.###.#.#.#.#
|
||||
#.....#...#...........#.......#.#.#.#...#...#...#...#...#.#.........#...#.#.#.#...#...#.###...#...#.#.....#.....#...#...........#.....#...#.#
|
||||
#######.#.#.###########.#####.#.#.#.###.#.#####.#.#.#.###.#.#########.###.#.#.#######.#.###.#.#####.#.#####.#####.#.#.#########.###########.#
|
||||
#.....#.#.#...#...#...#.###...#.#.#.#...#.#.....#.#.#...#.#.....#...#.....#.#.#.......#.....#.#.....#.....#...#...#.#.........#...#.........#
|
||||
#.###.#.#.###.#.#.#.#.#.###.###.#.#.#.###.#.#####.#.###.#.#####.#.#.#######.#.#.#############.#.#########.###.#.###.#########.###.#.#########
|
||||
#...#...#.....#.#.#.#.#.#...#...#.#.#...#.#.#...#.#.#...#.#...#...#.......#.#.#...#...#...#...#...#...#...#...#.#...#...#...#...#.#.........#
|
||||
###.###########.#.#.#.#.#.###.###.#.###.#.#.#.#.#.#.#.###.#.#.###########.#.#.###.#.#.#.#.#.#####.#.#.#.###.###.#.###.#.#.#.###.#.#########.#
|
||||
###.............#...#...#.....###...###...#...#...#...###...#.............#...###...#...#...#####...#...###.....#.....#...#.....#...........#
|
||||
#############################################################################################################################################
|
||||
5
Inputs/Day21.txt
Normal file
5
Inputs/Day21.txt
Normal file
@@ -0,0 +1,5 @@
|
||||
029A
|
||||
980A
|
||||
179A
|
||||
456A
|
||||
379A
|
||||
2244
Inputs/Day22.txt
Normal file
2244
Inputs/Day22.txt
Normal file
File diff suppressed because it is too large
Load Diff
3380
Inputs/Day23.txt
Normal file
3380
Inputs/Day23.txt
Normal file
File diff suppressed because it is too large
Load Diff
313
Inputs/Day24.txt
Normal file
313
Inputs/Day24.txt
Normal file
@@ -0,0 +1,313 @@
|
||||
x00: 1
|
||||
x01: 0
|
||||
x02: 1
|
||||
x03: 1
|
||||
x04: 0
|
||||
x05: 0
|
||||
x06: 1
|
||||
x07: 1
|
||||
x08: 0
|
||||
x09: 1
|
||||
x10: 1
|
||||
x11: 1
|
||||
x12: 1
|
||||
x13: 1
|
||||
x14: 0
|
||||
x15: 1
|
||||
x16: 0
|
||||
x17: 1
|
||||
x18: 0
|
||||
x19: 1
|
||||
x20: 1
|
||||
x21: 0
|
||||
x22: 0
|
||||
x23: 0
|
||||
x24: 1
|
||||
x25: 1
|
||||
x26: 1
|
||||
x27: 0
|
||||
x28: 1
|
||||
x29: 1
|
||||
x30: 1
|
||||
x31: 0
|
||||
x32: 0
|
||||
x33: 1
|
||||
x34: 1
|
||||
x35: 0
|
||||
x36: 0
|
||||
x37: 0
|
||||
x38: 1
|
||||
x39: 0
|
||||
x40: 0
|
||||
x41: 0
|
||||
x42: 0
|
||||
x43: 1
|
||||
x44: 1
|
||||
y00: 1
|
||||
y01: 0
|
||||
y02: 0
|
||||
y03: 1
|
||||
y04: 1
|
||||
y05: 0
|
||||
y06: 0
|
||||
y07: 0
|
||||
y08: 0
|
||||
y09: 0
|
||||
y10: 0
|
||||
y11: 1
|
||||
y12: 0
|
||||
y13: 0
|
||||
y14: 0
|
||||
y15: 0
|
||||
y16: 1
|
||||
y17: 0
|
||||
y18: 0
|
||||
y19: 1
|
||||
y20: 0
|
||||
y21: 1
|
||||
y22: 0
|
||||
y23: 1
|
||||
y24: 0
|
||||
y25: 0
|
||||
y26: 1
|
||||
y27: 0
|
||||
y28: 0
|
||||
y29: 1
|
||||
y30: 0
|
||||
y31: 0
|
||||
y32: 0
|
||||
y33: 1
|
||||
y34: 0
|
||||
y35: 0
|
||||
y36: 0
|
||||
y37: 1
|
||||
y38: 0
|
||||
y39: 0
|
||||
y40: 1
|
||||
y41: 0
|
||||
y42: 1
|
||||
y43: 1
|
||||
y44: 1
|
||||
|
||||
x44 XOR y44 -> drc
|
||||
phq OR frm -> hjs
|
||||
vdh AND nwn -> gqd
|
||||
y40 XOR x40 -> vkn
|
||||
x21 XOR y21 -> cnb
|
||||
cnb AND wmb -> vvk
|
||||
dfb XOR bfn -> hbk
|
||||
bhd XOR mmh -> z06
|
||||
fkc XOR bwj -> z22
|
||||
gnj AND jfw -> spq
|
||||
dwh AND kqn -> fhp
|
||||
x19 AND y19 -> kkg
|
||||
drc XOR qqt -> z44
|
||||
fkc AND bwj -> jbb
|
||||
y32 XOR x32 -> qwt
|
||||
y37 AND x37 -> kgg
|
||||
x07 AND y07 -> dqn
|
||||
dsp AND bvp -> hff
|
||||
pmv OR pkn -> wmt
|
||||
cjf OR pfk -> z45
|
||||
hgq XOR phb -> z27
|
||||
qnq OR dpc -> djp
|
||||
x32 AND y32 -> nbb
|
||||
qwt AND jqm -> fdk
|
||||
x18 XOR y18 -> grp
|
||||
vkf OR hdm -> kqn
|
||||
cqv AND jss -> bwd
|
||||
x00 AND y00 -> jfw
|
||||
cjb XOR srm -> z19
|
||||
jss XOR cqv -> z35
|
||||
ntt OR spq -> ndd
|
||||
cqm XOR qqj -> z43
|
||||
x01 AND y01 -> ntt
|
||||
y14 XOR x14 -> dfb
|
||||
nbk XOR wrk -> z05
|
||||
dvw AND rpg -> z23
|
||||
vvc OR kcv -> qqj
|
||||
bqc XOR fwr -> z26
|
||||
dwh XOR kqn -> z41
|
||||
x15 XOR y15 -> bkb
|
||||
rjm XOR gjr -> z24
|
||||
x22 XOR y22 -> bwj
|
||||
y22 AND x22 -> hpj
|
||||
x08 XOR y08 -> hnf
|
||||
y27 AND x27 -> frm
|
||||
wrw OR swr -> fds
|
||||
gtm AND rmt -> mkv
|
||||
kdh AND qvq -> ghr
|
||||
fgv AND mfm -> kcv
|
||||
hnf AND gqs -> pmv
|
||||
kkg OR qvs -> vdh
|
||||
fdk OR nbb -> rmt
|
||||
y29 AND x29 -> cwd
|
||||
hjk OR bts -> vkg
|
||||
vtk AND npm -> tqb
|
||||
dvw XOR rpg -> dbb
|
||||
y39 XOR x39 -> mnm
|
||||
y05 XOR x05 -> wrk
|
||||
djd AND fds -> dqt
|
||||
tvh OR sqm -> npm
|
||||
cdr XOR cmt -> z10
|
||||
x28 XOR y28 -> hgd
|
||||
x33 XOR y33 -> gtm
|
||||
mnm XOR vhv -> z39
|
||||
fbv XOR bwg -> z38
|
||||
hqs AND nhr -> vbt
|
||||
kth OR qcp -> hgq
|
||||
wjj OR scs -> bfn
|
||||
bkv OR vvk -> fkc
|
||||
cmt AND cdr -> pph
|
||||
dqt OR gqb -> bqc
|
||||
y35 XOR x35 -> jss
|
||||
vkb OR krd -> cdr
|
||||
mqf AND cvh -> trj
|
||||
x36 XOR y36 -> dsp
|
||||
y41 XOR x41 -> dwh
|
||||
y38 XOR x38 -> bwg
|
||||
ghr OR tpc -> jqm
|
||||
ckn XOR hqq -> z07
|
||||
vkn AND vkg -> vkf
|
||||
y28 AND x28 -> wkc
|
||||
x31 XOR y31 -> qvq
|
||||
rjm AND gjr -> swr
|
||||
gcb OR dbb -> rjm
|
||||
y18 AND x18 -> z18
|
||||
y24 AND x24 -> wrw
|
||||
x17 XOR y17 -> kbh
|
||||
y24 XOR x24 -> gjr
|
||||
x26 XOR y26 -> fwr
|
||||
y43 AND x43 -> bvm
|
||||
y15 AND x15 -> sbt
|
||||
y12 XOR x12 -> fvh
|
||||
kvn OR ffb -> cjb
|
||||
y31 AND x31 -> tpc
|
||||
y37 XOR x37 -> bnh
|
||||
y11 AND x11 -> scv
|
||||
hgd AND hjs -> phr
|
||||
jfw XOR gnj -> z01
|
||||
fvh XOR sfk -> z12
|
||||
fds XOR djd -> z25
|
||||
qwt XOR jqm -> z32
|
||||
bvp XOR dsp -> z36
|
||||
phr OR wkc -> jdq
|
||||
y07 XOR x07 -> hqq
|
||||
y43 XOR x43 -> cqm
|
||||
bnh XOR kss -> z37
|
||||
trg OR vbt -> kdh
|
||||
cwd OR pkc -> nhr
|
||||
y19 XOR x19 -> srm
|
||||
dkd AND jdq -> pkc
|
||||
wrk AND nbk -> fnk
|
||||
hjs XOR hgd -> z28
|
||||
rnt AND qbs -> rcp
|
||||
djp XOR mft -> z03
|
||||
cht OR mkv -> mqf
|
||||
hbk XOR bkb -> z15
|
||||
x44 AND y44 -> pfk
|
||||
x26 AND y26 -> qcp
|
||||
ndd XOR jgw -> z02
|
||||
x06 AND y06 -> dhs
|
||||
ckn AND hqq -> cpt
|
||||
y13 AND x13 -> wjj
|
||||
x10 AND y10 -> tvr
|
||||
ffr OR gqd -> wmb
|
||||
y09 XOR x09 -> tjb
|
||||
nhr XOR hqs -> z30
|
||||
hgq AND phb -> phq
|
||||
x00 XOR y00 -> z00
|
||||
y16 AND x16 -> prt
|
||||
dqn OR cpt -> gqs
|
||||
x23 AND y23 -> gcb
|
||||
mft AND djp -> tvh
|
||||
bkb AND hbk -> qtw
|
||||
kfk AND chk -> vgb
|
||||
vhv AND mnm -> hjk
|
||||
y42 XOR x42 -> mfm
|
||||
x25 XOR y25 -> djd
|
||||
fgv XOR mfm -> z42
|
||||
grp XOR fgr -> kvn
|
||||
x16 XOR y16 -> chk
|
||||
x09 AND y09 -> krd
|
||||
cqb OR rmg -> mqm
|
||||
y30 XOR x30 -> hqs
|
||||
kss AND bnh -> dvf
|
||||
y11 XOR x11 -> rnt
|
||||
x04 AND y04 -> ptm
|
||||
y13 XOR x13 -> cbr
|
||||
rnt XOR qbs -> z11
|
||||
hff OR fjf -> kss
|
||||
x25 AND y25 -> gqb
|
||||
kdh XOR qvq -> z31
|
||||
y06 XOR x06 -> mmh
|
||||
cnb XOR wmb -> z21
|
||||
y02 XOR x02 -> jgw
|
||||
x17 AND y17 -> hkn
|
||||
y34 AND x34 -> cvh
|
||||
x27 XOR y27 -> phb
|
||||
x42 AND y42 -> vvc
|
||||
x03 XOR y03 -> mft
|
||||
y35 AND x35 -> nvg
|
||||
x10 XOR y10 -> cmt
|
||||
y20 AND x20 -> ffr
|
||||
x30 AND y30 -> trg
|
||||
ptm OR tqb -> nbk
|
||||
bfn AND dfb -> sjr
|
||||
jgw AND ndd -> qnq
|
||||
y39 AND x39 -> bts
|
||||
y38 AND x38 -> knq
|
||||
npm XOR vtk -> z04
|
||||
prt OR vgb -> jqc
|
||||
kfk XOR chk -> z16
|
||||
rvd OR dhs -> ckn
|
||||
fnk OR wkv -> bhd
|
||||
y03 AND x03 -> sqm
|
||||
x08 AND y08 -> pkn
|
||||
y02 AND x02 -> dpc
|
||||
bwg AND fbv -> pdw
|
||||
mqf XOR cvh -> z34
|
||||
tjb AND wmt -> vkb
|
||||
jdq XOR dkd -> z29
|
||||
x34 XOR y34 -> tfn
|
||||
y21 AND x21 -> bkv
|
||||
tfn OR trj -> cqv
|
||||
fgr AND grp -> ffb
|
||||
bwd OR nvg -> bvp
|
||||
cjv OR hkn -> fgr
|
||||
fhp OR rnc -> fgv
|
||||
sjr OR tck -> z14
|
||||
vkn XOR vkg -> z40
|
||||
kbh XOR jqc -> z17
|
||||
kgg OR dvf -> fbv
|
||||
tjb XOR wmt -> z09
|
||||
tvr OR pph -> qbs
|
||||
qqj AND cqm -> gsg
|
||||
pdw OR knq -> vhv
|
||||
gqs XOR hnf -> z08
|
||||
y20 XOR x20 -> nwn
|
||||
kbh AND jqc -> cjv
|
||||
bqc AND fwr -> kth
|
||||
rcp OR scv -> sfk
|
||||
sbt OR qtw -> kfk
|
||||
bhd AND mmh -> rvd
|
||||
nwn XOR vdh -> z20
|
||||
y29 XOR x29 -> dkd
|
||||
y23 XOR x23 -> rpg
|
||||
jbb OR hpj -> dvw
|
||||
cbr XOR mqm -> z13
|
||||
y33 AND x33 -> cht
|
||||
y12 AND x12 -> rmg
|
||||
mqm AND cbr -> scs
|
||||
sfk AND fvh -> cqb
|
||||
y14 AND x14 -> tck
|
||||
x04 XOR y04 -> vtk
|
||||
y05 AND x05 -> wkv
|
||||
rmt XOR gtm -> z33
|
||||
y01 XOR x01 -> gnj
|
||||
srm AND cjb -> qvs
|
||||
x36 AND y36 -> fjf
|
||||
drc AND qqt -> cjf
|
||||
y40 AND x40 -> hdm
|
||||
y41 AND x41 -> rnc
|
||||
gsg OR bvm -> qqt
|
||||
3999
Inputs/Day25.txt
Normal file
3999
Inputs/Day25.txt
Normal file
File diff suppressed because it is too large
Load Diff
6
Inputs/Day3.txt
Normal file
6
Inputs/Day3.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
where())what()@)select()why()?mul(371,776)/%how()'~+:how()mul(977,266)@$@mul(749,170)how()<;$^#what()select()mul(338,975)>from()+,{select()!!mul(626,938)%/>^{((}]mul(733,977)>)() +$)mul(695,376)!%#how()mul(767,788)<(mul(876,501)mul(18,72)[*when(625,65)<mul(515,137)>*('what()mul(491,884)from()?{>how()mul(645,385)/[when(){what()why()mul(802,476)#'select()who(327,719)+-,##mul(103,807)#(mul(192,909):@'^where(247,392)!who()</mul(305,182)[@[;!;mul(553,402)<%mul(247,89)!mul(91,152)$@mul(502,543)+why()what()[when()@>^mul(875,344)why()mul(205,505)?;?when()!],mul(165,670),#$++'>)'mul(503,815):mul(483,302)~+*}!$where()why()&mul(785,794)/,{why();where(218,722)}when()don't();!mul(405,577)where()@mul(521,472){how()what()'what() where(55,484)mul(360,384)%mul(176,384)}%when()-$%what(436,501)mul(652,387)mul(758,52)-~@,*-@mul(343,835)when()select()](;#mul(76,425)from()>})]mul(720,464)#~)why()why()mul(619,682))mul(15,67)mul(569,569)]where()++&@:[#mul(844,620)select()+^*what()why(197,509) mul(280,807)%^mul(233,435)}?*:+^^what()!when()mul(69,464)& )]$mul(393,827)@]^mul(64,552):^)*<&where()?#mul(51,727)mul(159,242),+what())>+mul(140,116)do()~?mul(590,950)};[*;;when()mul(186,556)]&;#&##*!mul(806,651)^select()who()[mul(820,386);?from()mul(771,404)-$+#]&where()}mul(473,823)don't()when(874,250)'}mul(916,835)mul(432,92)how(), :mul(2,546)who(61,440), -mul(486,858)where(869,462)do()'select()&?+&why()where()>>mul(796,512){~(when():^>*&'mul(927,22)%;where()who()^$mul(203,851)%how()mul(820,954)from())~#<don't()select();@??]?mul(693,878)from()when()@/mul(202,438)mul(266,957)from()])[/how()select()don't()+>mul(741,967)select()what()+[[why()&]mul(42,517)>]why()<mul(577,659)&['<where()>,select(297,821):mul(324,191);%{->:!#mul(567,73)don't()?why():^{$*]why()mul(504,229)'mul(40,787)/select()?who();[who()where();$mul(537,42)[#@&*~<@mul(418,58);{}how()*-don't()[<'@from() mul(38,329)-*mul(381,685)what()</:)^(',when()mul(850,565)@,,%select(95,745)#mul(99,343),]^who()[mul(46,377)mul(788,562)?<mul(101,829)]$#-]select()mul(536,292)who(419,754)mul(933:[>?+,,*%)mul(740,7)#)<how()mul(44,988)mul(693,770)why()-;[mul(76,905)where()];mul(457,100)what()mul(63,750)where()!&who()$>#)?^mul(211,355){~#who()<]who()@>~mul(135,667)-^)]'mul(165,161)<;,mul(350,311);%?~}$how(768,325)*mul(773,359)~!(select()?{why()mul(269,149)when()}*who()}mul(536,90)don't()>$ &!where()*who()&mul(405,425)!+mul(304,694)'<#$<<,#select()<mulselect()<?mul(448,840)!]-;mul(79,274)>):%:* -why()#mul[who()when(918,883){ ^''mul(907,968)what()when()[who()>mul(81'how()+what()select()<mul(66,242)mul(32,790)why()why()mul(707,867);{+[@select()@,mul(183,895)~mul(570)],:select(),%{%from()mul(568,881)[{@/}*mul(989,413)^($who()!}<&;mul(380,574)+why()?select()#mul(812,587)why()when()mul(772,647)>;&'']+how()mul(745,379)]^-mul(403,82)mul(840,830)when()+what()how()[!select()mul(827,564)?:]mul(602,333){what()[[mul(606,272)
|
||||
,who()>}who():#from()mul(960,322)where()'<from()why()what()%where()mul(282,700)mul(591,113)<where()%, )mul(17}{')~!-mul(462,619)]mul(422,776)mul(250,987){((mul(880,386)(<>)?,+when() mul(59,855)'mul(308,433)~<how()>[;<why(98,720)@*mul(406,466)-what()when()'do()^mul(293,490)-@;{^why()who()mul(811,340)]^*what()[mul(705,73),:mul(557,31)mul(678,868)how()how()(when()mul:what(),how()where()when(354,851)who(418,214)when()where()mul(500,581)~what()how()mul(109,217)@>$;:mul(486@!>mul(508,605)what()from()mul(597,956)>#' *mul(834,240)}![{who(983,119)]#what()where()mul(533,711))}what()'/-mul(189,207)^*--$?mul(424,618)mul(407,288)why()<[+mul(170,906)&select()[,#who()+,mul(508,516)?who()!}+select()mul(963,397)*/]mul(129,895)$select()'when()^?mul(604,838)>mul(38,524)?why()~)[#*+:mul(793,697))what();}who())]mul(286,779)--where();mul(864,153)*mul(93,786)[$&&+mul(349,493,'~mul(161,724)~+$what():mul(326,607)what()select()mul(108,288)@(where(287,297)~how()<when()how()from()mul!^@->mul(15,832)select()!%( mul(233,322*;%],&@why(660,737)mul(47,778)?mul(68,311)}do()^/>[mul(572,909)^(,$,*~?mul(550,192){select()$${mul(949,906)?[^]@@^what()do()'<what()$mul(318,25)mul(406,742)'mul+['&{[^++@mul(550,647)'@)-mul(339,137),mul(412,523)(select()what()mul(234,64)!$[>mul(581,669)who()how()$~;(where())how()<mulwho()&?]%don't())~@~+mul(879,734)from()))*@#:$?where()mul(954,523)@what()<mul(481,127)]}<'/[who()why()+mul&%mul(244,792){[~mul(706,361)!;mul(658,168)$]mul(386,274)?what()* who()select()where(685,196)$what()mul(929,590)when()who()who()'mul(122,764)^%:@mul(315,523);~+;?/%&mul(97,566)~>what();<>^mul(859,756)mul(323,125%?}%where()mul(694,499),[mul(290,758)how()from()-/*<mul(179,392)how(930,981) ^())*}'$mul(446,657)*why()?]how()how()?from()mul(685,212)%when()' ;;from()?[mulwho(612,115)select()mul(56,213)[]}who()%,mul(241,98)^</%<&~from()mul(786,775) what()mul(748,183)'from()mul(388,111)where(){*}?&select()who()mul(108,115)mul(795,158) (~don't()*select()@:'!^mulselect()mul(838,249)@do() (~%[from()*)mul(327,71)what()%who(142,172)select()[!,what()}]do()>who()&'where()what()where()when()mul(286,592);: how(824,40)^mul(341,311)'&how()};^how()mul(479,155)-&when()%>!from() mul(743,297)/+% mul(785,803)~&/}#($?select()from()mul(378,606)/%when()mul(304,253)who())mul(19 mul(358,187)!/mul(61,423):%: )mul(773,349)select()mul(380,503)where()#%;do()who()$!(:&where()where()mul(25,688who()mul(539,689)?[/(>mul(915,247)how()@ when()why();;from()mul(192,625)?how()who()why()+<~where()!mul(922,457)how()@:+}[&{don't()mul(663,641)& :*]select()from()^>who(646,961)mul(302,499)mul(779,59)#+ /~;}mul(489]mul(883,556)from()#what()#:when():@$^mul(857,680)why(836,2)[mul(815,638)&why()~:why()~mul(960,833)<>from()where()where()$:who()mul(853,356)%;)+ where()from())do()<]mul(139,315){&+why(765,155),what()>@mul(281,247)mul(797,456) <>/:mul(785,173)when()$~-?:select()when()&mul(185,8)mul(510,671)%,when()how()where()from()who()mul(654,885)*who()mul(227,178)} !mul(256,394)
|
||||
mul(888,165);]~mul(93,961)do();where(449,598)*-& #mul(364,267)how()what()where()&@%mul(173,845)+?>({]^-}!mul(500,764)why() , ;where()}mul(509,958)~#when()&'^(#*}mul(567,675)!why()%:(~where(){mul(659,362/<@+mul(442,603)where(232,716)!how()!;)$what()mul(47,742)don't()&{ what()mul(201,59)-how()where()&select()mul(564,724)&when(){><{who(56,63)>#mul(750,782)$,mul(713,443)(^>*who()mul(255,743)+< what()mul(13,455^when()%';how()<<&'%mul(909,623)[?%when()~[$mul(647,666)+why()mul(303,514)mul(866,565)why()*@what()(mul(528,440)mul(580,935)mul(621,192)(from()?who(),!*-mul(834,426),!]/)how()]why()do()how()}!{why()'@~^who()mul(114,512[#^~ select()*who(){^;mul(813,830)+;[#/[do()select()}/^(@!;*mul(667,761;#why()!(+(mul(427,964)why()^where()!;mul(816,813)&select()what()why()$><do()where();)<mul(238~/]^&when()what()what(181,18)mul(755,285) from()how():mul(452,659)#!}]$/what()mul(64,590)%?where()}&}/'}mul(948,939)~what();^+'~mul(688,702)'mul(557,538):'why()(why()from()%mul(731,311)>from()mul(204,891)*#^[-how()how(275,54)mul(862,293)^^/~>,*)mul(858,212)[how()?>where()mul(45,936)select())select() <)where()how()mul(617,746)/ ~%from()~mul(466,629)mul(604,220)why(235,921)^what()^select()who(540,898)what()>mul(893,561),%~(who()how())#+#mul(845};mul(795,975)who(),',mul(988,400)/$+,!$~mul(931,322)( <:%+when()mul+%<&<where():$&where()mul(795,328)'+][{mul(466,329)^mul(190,896){mul(367,236){ --<{~#where()mul(181,169)how(833,790)[/who()mul(876,536)how()(%;/>mul#'mul(892,416)what()why()mul(369,579)''mul(384,303)when()where()[what()-?$[when()mul(179,420):?:select()}when()when();,mul(246,209)select()mul(966,243)[mul(153,599)when()mul(914,433)[from()when()[--#;'!mul(810,766)select()why()$>!when()mul(931,687);select()how()@&mul(98,464)]mul(652,409)#:mul(516,121){<{() @~;how()mul(123,360))^](mul(277,239)mul(840,613)what()%mul(586,205)^]@#/don't()'[;^,$ from()mul(628,557)<)>];+who()mul(878,975from()mul(143,987)+when()*])%what()mul(603,174-from()~?mul(943,847)where(170,904)&#%]who(888,776)mul(302,183)mul(443,591),why():]~:%mul(77,426)when()where()mul(950,995)&mul(274,396)?[from()where()from()mul(409,518)$do()#^{why()mul(613,963)&^ >>;^how()mul(925,923);}mul(852,446*;& mul(743,312)do()%/who()*$]?mul(475,555)(>select();when()[mul(976,68)select()]what() +when()from()><mul(389,991)select(),mul(309,286)who(),where()why()^what(),^mul(400,11){/what()mul(152,74)/why():<*#++^mul(345,21)]who()}!'how()%(mul(679,89)>why()mul(976#>>how():''%what()mul(828,766)!@(mul(798,719)$]*<how()where()[mul(296,310)mul(681,531[>mul(646,954)@why()}from():$why()%/select()mul(741,161)+mul(91,115)^-}when()%++mul(933,749)from()<{when()(mul(909,579)#>;where()mul(211,740)$where()from()who()&mul(255,95)mul(511,373)&@!who()when()$@$?select()mul(2,521)^{)#mul(294,886)why()(!@mul(7,438)%*~(#{'$mul(234,87){+,how()how()mul(890,233)mul(801,729),;&(&mul(421@/+/from()when()/don't()/mul(672,498)what()mul(14,796)^![*what()when()# mul{!where()$where(871,580)}mul(717,476)&)'%?why(905,632)when()what()mul(815,617),how()mul(827,71)>?mul(837,520)*how()select()what())select(),how()$from()mul(952,273 &@mul(106,964)-[where()mul(778,265)}$'mul(947,970)who()<mul(832,154)}{}%[@mul(78,394)#select()[do()^select(){}#!/usr/bin/perl[@'/?~&>?>mul(780,897)
|
||||
/,mul(904,917)how()from()] :%where()why(824,519)$}mul(433,689)-/{where()%>how()mul(232,555)&'@mul(170,145)?-{#?[mul(130<select(954,54)why():when() mul(152,582);{+?%,mul(911,198)+(}why()^!>?from()mul(575,167;~,${;-/)what()when()mul(688,24)&)#^*mul(251,895)(>from()#}]select()?}%mul(583,40)@what()!-mul(396',)!>%%when()}mul(127,975)#mul(986,310)what();from() <{'<mul(818,513))-[^&[mul(788,658who()*who(180,634)what()mul(183,781)mul(973,625)%how()mul(163,168)#%select())()mul/<mul(995,378)>?from()[&who()when()when()[mul(910,515)$mul(261,324)~</-'where(39,447)mul(872,74)mul(622,70)select() mul(648,514)[who(242,434)]<;?+>-mul(124,305)~select()mul(323,359)*~~mul(524}(;mul(145,708) %}what(487,689)%from()mul(371,88)~!)mul(883,681)why(621,555)from()-mul(175,888)&{];-what(569,630):?mul(229,850)&>'where()'mul(269,654]-why()//from()select()}mul(545,830)[?:}mul(849,642)/;(:)}<~mul(928,739)mul(216,77)select():;(when()@(}*]mul(113,497)(!~~;^[!mul(447,997);select()~[>]}~who()don't());}#why(326,879)+)-<(mul(581,152)> ;mul+how(771,784)+&why(582,346)'select()~what()<,mul(239,575)<(]+*from()]~'<mul(828,834)'mul(58,537)}]<mul(116-**><}@who()<-mul(473,971),:($when()from(41,290)what()];do())@^[@ from()mul(603,541)}mul(811,508)*?/!what()[-{mul(994,800 ?/!where()<why(104,314)mul(281,392)who();{who() ;(]when(133,642)mul(207,843)/%'mul(354,644)mulwhen()*;{mul(300,946)>who()where()what()}:what(){^[do()when(284,569)}>mul(150,172,]/<mul(972,952)~]do()how()>when()^mul(231,419)/do()select() }-#mul(671,892)<>/how(789,349)from()@what()#@)mul(315,222)from()}when()/}mul(930,682)>'where()?who()mul(132,978);;:@/#^}do()+mul(447,390): mul(723,622)?(how();$select()mul(980,864);>^why()[?#mul(734,179)# where(),@how()mul(838,788)/{++%mul(272,849):*%/^</$from()mul(453,461))mul(962,132)mul(375,359)!)%how()(?select()who()mul(142,910)?how()from()<$!mul(298,364)#who()+*who()!don't()mul(816,177)+mul(702,924)}(what()mul(989,523)<,,mul(735,588)how(489,394)mul(484,416)+#do()from()^^ $mul(123,782)mul(853,914)mul(203,868){'mul(909,468)why()/?where()$what()who(401,657)mul(786,343)mul(961,300)]{(!<do()^mul(936~mul(793,152)where()from()'-from()<+do()where(){+:mul(859,728)-where()%select()(mulwhat()mul(806,696)@<-mul(684,756),}who()how()~?:select()select()mul(471,727)from()<<why()what()how() }how()]mul(623,35)when():mul(871,956)mul(400,531)]where(), ;select()from()@select()don't()$/{[mul(519,781)[*mul(746,603 -from(112,309)]+ who()mul(217,136)-{+?select()#@%/mul(899,418)*!$+ *mul(154,146) +~where()mul(859,846)!<~%[{do():!(!{~mul(408,608)},/who()!, -mul(744,613)mul(829,465);~}/,'#+#mul(674,197)what()>%mul(466,441how()who()who()<why()where()select()mul(427,642)where();@+where()how(610,397))^mul(731,688)}())~why(29,145)do()(^{select(),<>'@(mul(692,669)#&mul(39,354)-where()from()who()~don't()*( {where();what()#mul(526,300)select(552,879), when()where()select()&-mul(283,140)&&?^ mul(243,254)how()/}who()mul(282,199)select()!](?'what()@&+mul(31,366)}who()mul(640,530)mul(565,470)mul(290,665){what(445,299)}<#%~ ][mul(320,303)-~from()(who()>[('why()don't()~&{)]mul(720,131)#~!!select()mul(3,408)-[where()from()who()}&}mul(558,189)!?[&(do()-^>mul(429,22)$!:>how()<,select()select(629,810)mul(748,450)(/<]?select()!//mul(679,551)how()who();?what()from()-mul(225,868)@{why()mul(177,830),{?^what())mul(229,827)~what()]'how(958,802)?who() (mul(676,215)[)mul(999,210)?]$*,?]-$,mul(661,825)
|
||||
from()<#from()[@>?$(mul(631,608),+mul(946,420),( (^[^+/{mul(569,409),what()who()~mul(702,265);mul(88,623)}who()what()&mul(676,744)from() !+[do():who()^?mul(336,740)?mulwhy()from()!}where()%%mul(571,353)>$,& }>{*mul(276,415)><-do()~(]}mul(308,489)/from()when(579,867)what()~when()?&mul(633,256)how(){?~mul^why()who()>mul(223,473);why()when(),mul(722,306)from()^mul(200,701)!select()?,mul(711,878)how()where())##'+}#@mul(56,894)@[what()mul&-who()when()when()[%>?mul(281,311)where()where()how(){select()'%mul(949#[?:mul(895,313)/mul(25,736)mul*&):-/%who())mul(301,39)what()(mul(767,317)&!what()mul(271,721)(:where() :*&/mul(881,552)mul(117,678)> #),where()%)&$mul(394,101)<)>&who()what()'+mul(496,283)mul*]@+mul(331,181)select()'?:how()!what()-how()]mul(629,183){{(mul(980,656)! when()@{'-,what(),mul(93,847)++where();@select()when()mul(544,305)'#'<,from()>why()>mul(219,755)what(){ ~]}don't()-when();^^when())?~how()mul(590,547)(!from()when()[?}where()mul(930,301)where()^+when()what(733,168){>mul(899,94);:?mul(928,368)mul'what()how() >($mul(625,960)%'&where()select()~mul(584,72)^!mul(55,527);mul(492,224)?($:,',*select()mul(180,326)<what() mul(268,667)?+mul(235,375) *!]!mul(141,332);mul(356,884)from(695,588){{when()*&mul(711,131)*select()-*&mul(143,130)[select()[from(204,615) what()(mul(653,542)>select():{where()mul(824,130)what()mul(683,478)from(918,839)what()mul(582,660)<@*how()*(mul(681,373)(~~>@::]$mul(873,698)<@+when()-^mul(100,128)[^+:where()how(542,879)&{mul(327,603) $+!when()$mul(505,966) ,$~)>mul(193,642){!/,}* mul(784,245)}?what()when()#mul(4,692)<+&%!)mul(184,826)+mul(469,907)from()how(601,83)mul(307,230),@}where(318,472)from()}:})-mul(898,829?$^@where();what()(mul(258,499)mul(212,108){{!&<who()where()mul(38,864) :'#mul#where()mul(119,346)when()from()how()mul(979,593)~when()who()mulwho()where()from()*?who()])!)mul(941,717)what()from(){select()mul(29,799){{({;$don't()&/mul(321,8)mul(593,740)&:when()>what()who()who()mul(983,25)*);who()!, [don't()select();-%*@mul(798,455)when()$>from()where():do()mul(707,598)how())!:select()how()#do()mul(81,685)who()+where()mul(292,774)?/mul(80,716who()*{#;;*do()&%why()+mul(554,30)!select()],{%/what()mul(600,514)#when())do()@what()'%when()mul(955,368)[#/>:?-how() select()mul(170@?)mul(584,682)what()^,?]#@mul(623,37) ;mul(650,391)/%mul(535,768)how()when()mulwhere()when()when()*(mul(193,547)$)[why()'select()$$who()]mul(446,367),what()~@%*mul(675,581)mul(637,187){mul(727,146)}where()<how() mul(800,526)where()from(970,555)+when(),who()##mul(331,931)+[when()mul(604,25)who(265,522)select(330,185)when(){mul(893,602)select()#'(mul(280,461)-what()'-?)?mul(711,860)%&$^;]mul(389,793) }~from();from(233,583)&#)^mul(502,146)where()[mul(66,348):who()-?mul(511,100)+]@mul(329,746)<+how()$}how()/#where()don't(){~how()when()@where()'mul(479,879)why()who()who()who()}when()!from()+^mul(290,234)where()do(),how()mul(740,873):@who()mul(315where(744,335)(->)mul(896,767)select()'-mul(980,725)select()[ *#mul(159,247)!what()who(560,832){-why()what()~&#mul(567,372)-:!]?/why()+:{mul(277,161)-where()'-who()$how()<what(203,370)]do()/??:#[mul(524,458)why()*@!-}$$<:mul(903,579)&why()-$from()!()mul(102,88)-/]~mul(311,176)who(707,558)where(){what()^]mul(410,763)*&how()~;from():%@%mul(606,429<>who()from()'how(),$$when()mul(429,870):@;<#mul(587,942*&;*do()$$select()mul(3,25)when(),-%+:# from(872,943)}mul(782,821)
|
||||
!>mul(851,461)+!where()$!{@!:)mul(93,494):!mul(951,143)+>)why()-{from()what()mul(988,791)mul(931,510)(:where(245,25){'mul(117,354)'what(); [[<don't()what())]:~#who()+mul(225,504%{]who();why()where()@<$<mul(639,292)&(from(),^ mul(104,198)&~ don't();&&[*when()?mul(181,83){why();>@how()select()do()when()?:from()mul(778,261):,+,mul(314,222);<?;who()what(){+mul(816,477)why()from()'where()^+<mul(199,340){-select()&mul(950,14){how()who()<don't()$}%mul(101,370)mul(615,41)how()>,^what(190,985)select() ?<mul(116,361)!@>*,[who()+:-mul(796,495)~/>do()<,}who()^mul(187,492)>'*$!what()mul(991,172)^&}:-mul(458,567)?mul(883,842)mul(755,150),!:%why()}mul(428,866)why()%why()where() (~:mul(352,708)what(370,596)$mul(898select()$why()~from()select()-when()mul(160,761)who(700,128)*mul(944,190)*#}^}from()where()mul(530,978):,+where()[?>mul(553,289)*$@/mul(286,141)what()@':~mulhow(116,291)%[mul(151,627)mul(362,891)~ %-<?;~mul(440,308)from()?<])mul(721,908)mul(45,682)*where(549,565)?~why()how()when()# mul(283,656)#!$when()~what()how()(mul(645,350),what()~^:select()-mul^<)what()what()do();$$when()mul(174,89)^mul(316,811)<~;:<select(619,564)mul(265,577)&why();why()where()&+ 'mul(365,604)?@&*,~what()$mul(568,621){+select():'[/select()mul(765,39!what())+mul(571,963)-:<+who()why()>/:%mul(275,35)@?&mul(276,797)who()/;who())why()when() ~)mul(400,219)where(757,508)}+'+>do()~?from()]~?why()${mul(674,313)]/!#select()^>how()&[do()mul(763,291)[?}><mul(424,631)#:]]mul(283,356)#/mul(999,277)[;;]mul(475,763)>$:;]/ @]mul(923,77)+:/,mul(974,68)}^<}*?(mul(573,391)?^mul(882,854)what()(from(){%!@+when()mul(263,665)'%/<[who(257,651)mul(131,306)#+[why()&,@{who()!mul(378,207)mul(830,423)how(180,743)[<$-)}-don't()mul(104,63)'$~+)/!(do()(?*when()/<:mul(184,312)-mul(457,714)?how()&where():!<(who()mul(832,385)?;&>select(),'[}-mul(409,111)<'who()who()}what(39,120)!<(@mul(466,625))from()'{:;what(),mul(833,127)$+!]mul(107,815)/ {what()what()mul(37,91)[-, what(812,83)?&mul(376,103)};-mul(640,727)select()[$-mul(64,181)mul(734,97)&@why()<#select()/?/mul(164,82)mul(786,473)@{'}mul(206,560)&~mul(784,62)@*^+what():!from()^[mul(206,626)what()[(,{where()from()why()?who()mul(533,212)#where()+how()']}where()((mul(301,424):what()#what()@ >'!do()@what()<what()when()'mul(89,449)select(871,600)+mul(438,837)-('mul(382,10)mul(547,112)mul(27,677)&]/<!#mul(141,36) where()select()$<why()!+mul(333,145)who()!)>mul(965,812)mul(3,550)from()who()!mul(965,728)#>#!)where()*)mul(497,530):when()#mul(352,808)!~{how()*!&mul(552,920)/where()+where()@-#/?mul(896,130)mul(347,579)~@ /^mul(727,709)#-how()&!&&@why()]mul(475,103)*how()/)~who()mul(542,160)mul(743,692)mul(561,997)why()mul(124,866)+}{why() mul(278,696)how()'what()$;?//where()when()mul(17,188)-+where()why();don't()--%<@why()+mul(356,107)%what()^,select()select(607,736):how()-mul(633,572)who()from()/;}select()mul(772,944)]@+/<]select()*?where()mul(858,850)(select()select()where()mul(181,712)~mul(979,178)#?}%?%do():who(268,689)*mul(941,59))-{&&(mul(296,702):@)where()don't()why()when(),mul(405,639)~$),who(575,232),%mul(671,828)
|
||||
140
Inputs/Day4.txt
Normal file
140
Inputs/Day4.txt
Normal file
@@ -0,0 +1,140 @@
|
||||
MSAMXXMASXSXMMSASXMASMXMASXSXSSMSSSMMMSSSSMSAMXASAMXXAXMSMMMAXMAMSAMXAMXMXXMXMASMXSAXMXMAMXSXSXXMSSXMSSMMSSMMMMXSXAXMXMAMMASMSXSXSSXMSSMSSMM
|
||||
MSASASAAXSMAMMSAMXSXXMAMXSASAAAASMSASAASAAAMMMSXXMMMSMMXAAASMMMMSAMXSAXASMMSSMMXAXXMSSXXMSMMASMXMASXAAXAAAAAAMAASXSAMAXSMSMMASAXAXAAAAAMAAAS
|
||||
ASAMASMMMASXMAMAMXXAXSMSAMAMMMMMMAMMMMXXMMMMSASXXMAXAASXSSMSASAMXMSAMXSASAMAASAMXMAAAMXMASAMAMXMMASMMMSMMSSMMMMMSAAASMSMAAMSAMAMXMXMMXSMXXMM
|
||||
MMAMAMAAAMAMMASMMXMMMXAAMMXMMXXXMXSXASXSMSXXMASAMSSSMSMAAMASXMASAAMASXSAMXMSSMMXSMMMXSAXAXAMSSMAMASXMASXMAMMSMMASAMXMMAMMMMMXSXMSMXMASMXSASA
|
||||
XSAMAXSMSXAMSASASXMAAXSSMXXXAXMXSAAXXSAAASASMAMAXAXAMXMSMMMMMSAMMMSXMMMAMXAXAAAAMXMSAXMSSMSMASASMAMXMASXMAXAAAMMSAXXSSXMXSXMXXAMXMMMSMAASMMS
|
||||
MSXMMXMXXMMMMASAMMSMXXAAXXSASMMAMAMMXMMMMMAMMASAMMSAMSXMASXXXSAXSXSMSAMASXMSSMMSXAXMASMXMAXMMXSAMSSSMXSASAMXSSMXSASAMXMAXMASMSSMASAXAMMMSMAM
|
||||
XMAMSAMMSAMXMMMMMAASMMSAMXXMMAMASMXSAMASXMXMXASASXAAASASAMMMASXMSXMASXSASAMAMXAMMSMMXMXAMAMAMSMMSAMAAMSAMXSAAXMASAMXMXMASMXMASASASXSMAXAXMAS
|
||||
SMAMXASAMAMXMMXAMSSSXAMASXXXXXSASAAXASASXMAXMXXXMMXMXSAMXSXAXSMMMAMAMAMMSXMMSMASAAAMXSSMMXSXMAAXMASMMMMAMAMMMMMXSXXAAASAMXAXXSAMXSAMXSMMXSAS
|
||||
XSXSSMMXSAMXMMMMMMAMMXSAMMMMSXMAMMMSAMASASMSSSXAXMAMXMMMMMXSAMAAXAMASXSAMXXSAMXMMSMMAXASAAMASXSMSMMMAAXAMSMSAMSASXSMSMSAMSMMMMMMSMMMAMASXMAS
|
||||
MAMXAAAAXMMAMAAMAMSMSXMASAAAAAMXMAASXMMMMMAAAXSXASAXMXMAXSAMXSSMSSSXSXMXSAXXMSAMXXXMXSAMMMSAMAAAAMASXMXMMMAMAMSAMAXAMASMMAMASAMXAAAMAMAMAMAM
|
||||
SAAMSMMSSXXAXSMSAXXASXMXSXMMSAMXMMMSXSXSAMMMSMMSMMAXSASASMAMAXAAAAAAMMSXMXSXASMSAMAMAMAMXAMAXXXMAMASAMASAMAMMAMAMSMMMAMASXSASASAMSMSMSSSSMAM
|
||||
SXMAAXXAAMSXXAASMMMMMAXMSAMXXAMXXMXMXXAXAXXMAAMXXMSMSASXXMSMMSAMMSMAMAMAMAMMXMXMAXAMASAMMMXSMXMASMMSASASASXSMMMMAAAXMASMSAMXXAMMXAXAMXMAMSAS
|
||||
SAASAXSMXMAMMMMMMAXASXMASMMMSAMMSMAMSMSMSMAMSXXASMMAMMMMSMMAMSXXAXXXMMSAMASASXSXMMXMAMASAMAAMMMAAAASXMASMMXXXXAASXXMXAAXMMMSMMSAMXSMSSMAMSXS
|
||||
SAMAAMSXSMMSMAAXMMSMMMAMSXAAXSMSASASXAAAMSSMMMSXSAMXMAMASASAMXMMMSAMXAMASXXASMSAMSSMSSXMAMSSSXMXSMMSXXXSAMXAXMMMMASXSMMXXSAMXAAAMAAXAXMAXXAM
|
||||
MAXXSXSAMMXAXMSSMMMXMMSMMMSSXXXSAXXXMXMXMAXXAXMASMMSSSMASMMAMAAMAXAMMSSMMXMMMAMAMAAAAXAMMMXAMMMMXXAMXMMSAMMMMAMSMAMAAAMMMMAMMXSMMMXMASMMSMAM
|
||||
XMMMXMMAMSSMSXAXMAASMAXAXAAXMMMMSMASXXSAMAMSMSMAMXSXAAMAMMXMSSMSMSAMAAXAAXMASMSAMSMMMXMMAXMAMAAMMMXXAAAXXMAMMAXXMASMMMMAMMAMSMMAAXSAMXXAAMXM
|
||||
AMAXAMSMMMAASMMSXMXMMAMMMSXMAAAAMMMMAASASAAAAAMXXXMMMMMSMSAMXMAAXSAMMSSMMSSMMAXXMAMASAXMMMSAXMSSMAAXSXMSASXSMMXSAMXMXSXSMMAMXASXMSXXMAMXXSXM
|
||||
XXAMXMAAASMMMAMAMSMSMSSXAXMASXMSMMXMXMXASASMSMSSXSMSXSAXXXASAMXMMMAMAMXAXAMXMASXSMSASXSAAXSMSMXAMMSXMAXXMAMAAAMAMXASXSAXAMMSMXMAXXMSMSSSSMAX
|
||||
MXSXMMSSMSAMXSMMMAASAXMMXSAMAAMAXSAMXXMAMAXAXAAXAXAAAMXSMSMMASAMXSXMASXSMSMXMMSAAAMASASMMMMAAXMXMMMAMXMASMSSMSSSMSXSAMAMMXMAMXXMMSMSAAAMXSMM
|
||||
SAMAAAAAXSXMAXAXSMSMXMASMSXSXXMAXSASMSXMMSMAMMMMMMMMSMMXMAMXAMASAAXSSSMMAMAAMXMMMMMAMXMAAASXMMXMMXMXMSMXAAAAAXAMXXAMAMAMXXSASMMXAMAMAMSAAAMA
|
||||
MASXMMXSMMMMMSXMASXMMAAXASAMXSXSASAMMXXAAAASXMMXMXMAXAAASASMASXMXSXXAXAMAMSSSSSXMAMAMAXSMXXAASMASAXMXAXAXXMXSMSMXMSMASXSAXMASAAASMXMXXXMSSMS
|
||||
MAMMXSAMASXAMXASMMMASMSMMMXMMMAMMMAMAMSMSSXXAXSAMMSMMSSMSASXXSMSAMMMMMSSXXAMMAXMMMXAXXXXMMSMMAASMXXAXMSMSXSAMMXSXXXSMSAMMSMAMMMSMAMXXMSXMAXA
|
||||
MMSMAMXMXMMMMMAMAXMAXMAMXSXSAMMMXSAMAMXAMXASAMSASAMXAXAMXXMASMAMMMMAXXXMMMASMSMMXMASMSXSAAXASMSMSMMXAXAXMXMASXAAMXMMMMXMSXMXMMXXXXSXASMASMMM
|
||||
MSAMMSMSSSXSAAAXXMMAMSAMASASAMMSXMXSAMMAMMMMMXSAMXAMXSAMXMXXXMSMXXMMSMSMXSSMAXAXAMAMAXAXMMSXMXAMAMASASMXSAXMMMMSMASAMXAXXAMASMMSMMSXMXSXMXAX
|
||||
MXASAAAXAAASXXMXSAMXAMASXMMMXSSMMSASAXSSMSXASMMXMMXMMSAMMXSMMMXMAXSAAAAAAMAMMMMSASXMSMSMMAXXXMXSAXMAMXMASMMMXAMAXXSXSXMASAMASAAAAAMAMMMMMSSM
|
||||
SSMMXXSMMMMMAMSASXSMMSASXMAMMMXAASMMSMAAXASAXASXSMSXASASAMXAMSAXAMMSMSMSXXAAMXXMAXAAMMMAMXSSSSMSMXMAMAMMMXAXSXSASMSAMXXAMAXASMMMSMXAMAAAXAAS
|
||||
XAMXMMMAXXXMXMMASAXAAMXMASMSASMMMSXAXMSMMMAXSAMXSAXMXSAMMMSXMXMXASAXXAAAXSSSMXXXMMMMMASAMXAAMSASASXSSSSMSMMXAAMASXSAXAMMSSMMSMSXMMSSSSSSMMSM
|
||||
SAMXSASXSXSMMXMAMAMMMSASXMASMSAAAMMSSMXAMXAAMAMAMXMMMXXMAMXSAAMSXMASXMSMMMMAMXMMMASXSMSASXMXMMXMAMAAXAAAAASMXMMXMASXMMSMAMAXMAMAXMAMXMAMXXAM
|
||||
MMSMMMSASAMXAXMASXSXSAMXAMMMXSXMMXAXAAXMAXMXMAMASAMMASASXXAAXMMASMAMAXXXAASAMASASASAXXXXMAXSMSMMMMMMMSMMMAMAAXMSAMXMXAAMMSSMMAXMMMASMMSMSMMS
|
||||
MAAXAXMAMXMASXMXMMXMAXXSAMXSMSMMMMXXMMMSSSMXXASAXXXAMXAXAMSSMSXASMXSXMXASMXASMSASAMXMMSMSXMMAAXAXXXMAXXXMASMMSAMMMAXMASMMMASXAASASASMAMASAMX
|
||||
MSSMMSXXAAMXXXMAAMMSSXMMXXMSAXMAASMSMXXAAAASMMMMSMSSSMXMMMMAAXMASXMAMXMMMXMAMXMMMMXMSXAASXSMSMSMSSMMSMMXMAXMASASXSMSXAXAASAMXXSAAMASMXMASAMM
|
||||
XAMAXMMXSXSASMMSSMAAMXMAASAMMMMSXMAAXAMMSMMMAXMXAAXAAXMAMASMMMMXMASXSXXSAXXAMXSXASAAMMMMMASAMASAAAMMAAMSSMMAMSXMAMSSXMMSMMASMMMMAMXMXAMAMASX
|
||||
MAXSASXAMAMMSSMXAMMSSXMAMMAMXXAXAMSMSXXAMAXSXMASMSMSMMMXSASASAXASXMAMAMMASAAMAXSAMMSMMAAXAMAMAMMSSMSMSMAAAXSXSAMMMASASAXXSAMXSASMSAMSMSMSAMX
|
||||
MMMMAXMMMAMASAXSAMAMMMMXSSSMMMMSMMAAMAMASMMMMMXXAMAMAMSAMMSASMSASAMAMAMXAMMSMAMSMSMXASMSMASXMAMMAMAXAAXSSMMMASMMXMASXMASAMSSMSASASAMSXAMMASX
|
||||
SASMSMAAMXMXSAMSAMXXAAAMMAMMMAMAASMMMAAXMAMAAXMMXMASAMMASAMMMAXAMAMXSMSMSSXMMXXMAAASAMAAMAXXSXXMAMSMSMXMMMAMXMXMXMASAMAMAMMXMMXMMSAMMMSXSMMM
|
||||
MASAXSSMXSMAMMMMXAXSSXXAMAMXSSSSMMAMSMSSSXSSSSMSASXSASMXMMSAMSMMSASASXAXAMAXMMMMSMXMSMSMSMSASAXSXMMMMMMSXSASXXAMSMMSAMXMXMMMSXSAXMAMAAXMMSAS
|
||||
MSMMMMMSAAMXXAAMAMXXMAXSSMSMMMAMXMAMAMAAXAMXAXAMMSXSXMASXXMAAMAMSAMASXMMMMMMMAXAXXSAMXXAMAMAMXMMAMXAASAAASASAMASXAXMXXSXSMSAMAMXMSSMMMSAMMXM
|
||||
SAAXXAAMSSMMSSSSSMXMMMMMAMXAMMSMASXSSSSMMSMMSMSMXMAXASAMMASAMMAMMAMAMAMAXAAMXXMASAMXMXMAMSMAMMMSAMXSSSMMMMXMMSMXXMMASMSAMAAXMSMAMAXAMAMAMAAM
|
||||
ASMMSMXMAMXAAAAAMXAMAXASXMMSXAAMXSAAAAMXAXASXAAXMASXXMASMMMSMSMXSAMXXAMXMSMSASMMSAMXSXSXMXSAXAMSXMXMAMAMSMSSXAMMMSMMMAMSMAMSMAXAMMSMMAMXMSAS
|
||||
MMMXXXXAASMSMMMMMMXSMSASAAAMMSMSAMMMMMMMSXMMMSMSMAMXMXXMAAAMMAAXMMXXXASAMMASMXAASXMXSAMAMAMMMSMMMSMMAMAAAAXASASAASAMMMAAXAMAMMSMMXAXMSSMXMAA
|
||||
XMMXMASMXSAXMXMXSAMAAMXSXMXSAXAMMXXASXSAXAMXAAMAMXMAMMSMSMMXSMMMAMAXMMMMXSASXMMMMAMAMAMAMSSMAAAAAXXMASMSMMMMSXMAMSAMAMSSSXSXXXAXASMSMMAMAMXM
|
||||
AMXMSAAXAMXMSXSASAXXXXXXMSMMMMAMSSMXSAMASAMSSMSXSASASAXAASMMSAXSSMSMXAAXAMXMAXSXSAMMSMSMSXAMSSSMSSXAMAMXAMSXMASXMSAMXMXAXASAMSAMXSXAMSAMAMMX
|
||||
SAAMMSSMMSASXSMASMMSSMMSAMXAMSSMMAMAMXMASAMAXXAMSASASMMSMXSAMXMMAAAASXMMMSAMXMAASXSXAAAMMMAMXMMAXMAXSAMXSAXMAMXMASXMXXMMMMMAMMMMMMMAXMXMAMXM
|
||||
MXMMAMXAXSXSXAMAMAXAAAAASMMAXAXXXAMXSXSASXMASXSMMAMAMXAAAXMMMAAXMMMMMAAMASXSMAMXMMMXMSMSAMMSMSMMMSAXSASAMMMSAMAAMMMMXMMMSMMMMMAAASXMMSMMAMAA
|
||||
SAMMSMXAMXMMXAMASMMSXMXSMMMSMASMSMSASMMASMSAMXMAMSMMMMASAMXSMXSXSMXXXSMMASXMAXMXMAAAXMAMXSAAMMASAMXMSAMXSXAXAMSSXAASAAAASAAAAXMXMMAAAAMMSSXS
|
||||
SAMMAASXMSAXSXXXAMAXXMMXASAAMAMMAXMASAMAMMXXMASAMAAAXMAMAXAXSAXMASXMAXAMXMAXXASXSMSSSMAMAMXXSSMMXSXMMMMMSMMSSXMXMSSXMMMXSAMSASXSSSSMMXXMXAMX
|
||||
SAMMMMMAASMMXASMXMASAMXXAMSMMSXSXSMMMXMXSSSMSASMXSSMAMASMMSSMXXAMXMAMXAXSSSMMMAAXMAXXMAMMXSXAAXAXSMMAAAMXAAAMXAMMMAMMASAMXMMXXAAAMXXSMSXMASX
|
||||
SMMXSASMMMAMMMMXAMAXAMXMSMMXAXAXAMXSAXXSMAMAMXMAAXAMXSXSXAMAXSMSXXXASMSMAAMXASMAMMMSSSXMSASMSMMMSMASXSSSSMMSSMMMAXMASASASMXXMMMMMMMAAAAXSAMM
|
||||
SAMXSAXAASAMAMASXMASXSSXAASMMMXMASAMXSMMMAMSMAMMMXAMASASMSSMMSAMASMAMAAMMMMSASAAMAMMAMAAMAMAAAMMMMMMAAAMAASXMAXSMSXAMASAMAAXXAAAAAXXMXMMMASA
|
||||
SAMXMAMSMSSXXMMAMXXMAAASMSMASAMSMMASMMXMAMMXMXSASXMMMMMXAXMAAMAMAMMSMSMMMAASXSXMMAXSAMXMMMMSSMMMAMXMXXSXSMMASMMMASXMMAMAMSMSMMMXXSSXMXSASAMX
|
||||
SSMXMAMAAXAXSMSMSMMMMMMXMXMAMMMAAXXMAXMAASMSXMXXMASMSMXMSMXMMSAMXSAAAAXMXMXMAMXSSSXSASMSASAAAAMMAXXXMXMAMXMXMAMMAMAXMAXXMAMSASMSMAMXMAXMXMAS
|
||||
SAXMMMSXSMMMXAAAAAASXSASMAMMMASXSMSSSMASMSAMASXMSMMAAMAMAMXXMXASMMMSSMXSAMXMSMAXAMASAMAAAMMSSMMSSSMASAMXMSSMSMMMASMMSASAMXXSAMAAMAMMMASMXSSM
|
||||
SMMSAMXMMAXAMSMSMSMSASAMMXSASMSAXAXXXAXXAMMSAMMAAMMSMSXXAXXMSSMMAMMMAXAMAXMMMAMMMMMMAMMMMMAMXXMAMAAMMASMAAAAAAASXMXMXMAXMMASMMXMSMXSMASMAMAM
|
||||
SXASMSAMSSMSAMAMAXAMXMAMAXSXSAMMMXMXMSMMMMAMASXMASAXXAASMSMAAXMASAASXMMSAMSASAMAAAXSAMASXMASMMAMMMMXMAMMMMMSMSMSAMXMAMAAXSASMSMXMMAXMXMMAXMM
|
||||
XMAMXMAMAXAXMMAMXSAXXAMMMXMASASMSAAXAAXAXMXSMMAMMMXSXMAMAAMMMMXAASAMXAMMMMSASMMXMXXSASAMASXSAMMMASXMSSXXAXXXMMASAMAMAMXMMMAXAASAAMMSSMMSSSXS
|
||||
SSMMSSSMMSXMASXMASAMSSMAXASASAMAMXXXSSSMXAMXXMMSAAAXAXMMSAMXSMMMMMSSMSAXAAMMMAASXMMSMMXSXMASMMASMSAMAMASMSMAMMMMSSMSMSAXMMSMSMSMSAAMAAXAASMS
|
||||
AAAXAAXMAXAAXXAMXMAMAAXXMAMXMMMAMMMMAAAMMSASAMAMMSMMMMXAMASAMXAMXAAXXAMMMMXAMXAAAAMXMAXXAMAMASAMXSAMAMXMAAMAMAMMASMAASAMXAMXMAXAMMXSSMMMSMXX
|
||||
SXMMMMMMMSSSXSXXXMAMMSMXAAMAAAXAXSAAXMAMAAMSAMASXMXAMXMAMAMASMSSMMSSSMXAAMSMSMSMSXMAMMMSMMASXMMSMMXMAMAXXMSSSMSMAXSMXMMMMAMAMMMMMAXMASASAMMS
|
||||
MASAMXAXXAAXXAMXSMMMAAAXMASMXMSMSAMMMXMMSSMSAMXXAAMMSAXXMSSMMAMXMAMXMXAXMXAAXXXAXMMXSAAAASASMSMAASMSSSSMMXMXAAAMSMXXMASXXAMSMSAMMSMMASXSASAX
|
||||
SAMASXMMMMSMSXMASAAMSSSMSMXMXXAMAMSXSAXAAAAXXAMSMMMXMASXXAAAMSSSSSSSSXSSSSMSXMMSMMSAMMMSMMASAAXMXMAAXSAASMXSMMMAMASXMXAAMMMXASXSAAMMXSMSMMXS
|
||||
MXSAMMSAAXMAMXMAXAMXXAXAXXAMXMASAXAAMAMMSMMMSXMAMASXMASXMMSXMMAAXAAAXAXAAXMMAMMAASXSMAXXAMXMMMXSAMMMMSSMMMASXMXASMMAMXMMAAAMXMMMMSSMXSAMAMAS
|
||||
MMMMSASXSMMAMMMMSSXSSMMMMMSMSSMMMMXMMAXMAXSAXAMMSASAMSMMAXAAMMMMMMMMMXMMSMASAMSMSMAMMXMXAMMMMSAMMXXMXMAXAMASASMMSXXAMAXXSMMSMMXSAMXMAMSMAMAS
|
||||
AAAMMASXXASAMMAMXMAXAXAXSAAAAMSAXMMMSXSMXMMMSSMMMMXAMAAXSMMSMMASAMAXAMXXXMASXMAXAMXMSSSSSMAAAMAXSAMSMMMSMMASMMAMSMMMMXMMXMXXAMASAMXMMMAXSXMS
|
||||
SMSSMSXMMAMAXSXSAMSMXMMMAXMXMMSMMSAMAMXMAMXMAMAXAMSSSMSMAMAAMMASASXMXAXSXMASASAXMAMXSAXAAXXMXXXMMASAAAAAAMAXMSSMMAASMMXSAMXSSMASMSMMMMMSMAAX
|
||||
XAMXMMAMSSXMAAASMXAAASXSSSSXXXXAASXSSSMSSSMMASMMSAAAMAMXAMSSSMASAMXXASAMAMAMMMMSXAASMMMSMMSMSMAMSMMXSMSSSMSSXAXMMMMMAAAMASMAXMASAAAAAASAMAMS
|
||||
MAMAMSMMAXAMXMXMASMSMSAXMAMMMSMMMSAXXAMXAAAMAMAAMMSMSMSSXXXAMMAMASAXMMASAMMMSAASMSMMAXAXMXAAASXMAXMAMMMAMAMAMMSMMSMSMMMSAMMMMMAMMMSMSXSAXSSM
|
||||
AXSAMAMMMMXMMMMSMMXAAMMMMAMAAXAASMMMSMMMSMMMASMXMAMASAAMXMMMMMMSAMMMXSAMASXAXMXSAXAMXMMSSSMMMSXMMMMMMXMAMSMXMXAMXAAAAMXMMMAMXMSXXMAXXMMMMXAX
|
||||
SASMSXSAAMSMMAASXSSMSMSXSXSMSSSMSAAMMAMMMMXSXSXXMMSAMMMMAMMXSAMMASXMAMMSXMMXSXMMMMMASMMAAAASXMAMAASXMASXMAMMXMAMSMSMMSAMSSSXMAMAAASAMXASXSSM
|
||||
XXSXMMSMSMSAXMMXAAAAAAMXXMSAMAAAMXMMSAMMAMASAMAXSMMASXMXMSAASAMSAMAMASAAXSMXAXMAXSMAAAMMSMMMAAXMAMSAXXSASXSAAMXMSXMAAMXXAXMAMAMSMMMXSSSSXAXX
|
||||
MMSAMASMMAMAMSMMSMMSMSMAXAMAMSMMMAMMSXMMAXAMAMMMSASAMXSAMMMXSAMMSSXMXSMMMAMMMXXAAXMAXXXAXMASMMMAMSMXMAMASAMMXSAMXAMMMSMSMSSXMAXAAASAMMMMMMMM
|
||||
AAMXMASAMMMSMMAAXAXXAMAMXSMMMMXAMAXAXSSSSMSXMMMXSAMASAMMSXMMMXMAMMMSAMXXSAMAAMASXMSSMMMSSSMMMASXMAAAMXMSMAMAMSASMSMSXAAAXAAXSSSSSMSAMXAMAAAX
|
||||
SSMAMAMMXSAXAMMMSMMMSMMXAXAXXXMMMSMMMMMAXAMXSAMMMMSXMASAMXSSXMMMSAAMAXXASMSMMSAMAMAAAAXAAXAXSASXSMSMSXMAMXMAXSAMAAAMAMXMMMMMAMXXMASAMXMXSSSX
|
||||
AAXSMXMXXMASXMSXSXMAXAMMMSSMMAASAXASXAAAMXMAXASMAAAAMAMMSAAMSMAAMMMSAMSXMXAXMMASXMMSMMMMSMMMMASXMXXAMMXAMMSXMXMMSMSMXMAAAAXXXXAMXASXMASAMAMX
|
||||
SSMMAMSMSMAMAMSAMXSASAMSMAMXASMSASAMXMMXMAMMSMXMMXSAMASXMMMMASMSSMAMAXMASXMSXSAMXSXXXAXXAAXXXMSAMAMASMSXMAXSXAMXXAXMASXSMSSSMMSSMXMASASAMAMM
|
||||
MMAMXMAASMSXSMMAMAMXSXMXMASMXXAXAMAMXSAXSAMXAMSMMMXMXMXAXSXSAMSAXMXMXAXXMAAAXMASAASMSSSMMSMSAMXAMMSAMMAXASMMSXMAMMMMXAMXMXAAXAAAXSMMSMMMMMSS
|
||||
MMMMSSMSMAXSMASXMXSASAASMXSAMMMMMMXXXAAXMMSSMXAAAAMAAMXMMMAMASAMXASXMMSSSMMMSXAXXAMXAASAAMASMASAMXMASMSMMXAMSMSXSASXSMSASASMMMSSMSAMMAXMSAAA
|
||||
MAAAAXXMMAMAXXMXAAMASXMAXMXXMAXMSAMXSMMMMAAMMSSSMSSSMXAAAXSMMMMXXMASAAAAMMMXXMMSMXAMMSSSMMAMMMAAXAXXMAXXXSAMXASXSASXAASMSAAXMAMAASMXMSMAXMAS
|
||||
SSSMMSSMMSSMMSMXMXMAMASXSSSMSSSXMASAXXSXMSSMAAMXAAAAAXSXMSMMSAXSASASMMMMMASASXAAASMSMAMAMMXMASMMMSMAMMMMMSXMASMAMMMMMMMAMMMMMMSMMMXMSMAMAXSM
|
||||
XAAXXAMAAXAXAAXAMSMMSAMMAAAAAAMXSAMXSAMXAAAMMSXXMMXMMMMASAMAMASXXMASXSXXMAXMXMMXMAAAMAMAXXMMXMAMAXMASAAAMXMAMAMXMASAMMMMMMXAAMXXXMAMAASXMSAS
|
||||
MSMMMASMMSMMSSSXSAAXMASAMSMMMXMAMXMAMXAMMMSMMAXXASXAMSSMMAMXMMSAMXXMASMMMSSMAMSSMXMMSSSXSAXXASAMXXSASMSSSMXMMSMXSASMSAAMAXSXMSASMSSSSSMAMAMX
|
||||
AAXMAMMXMAXAXXMXAXXMMXMXMXMXMAMAMAMSSSXSAAXMMSSMAMXSXAAXSAMXSMMMSSMMXMSXAAAXASAAXSXXMAAASMMMXSXSAAMXSAMAAAASXXAAMMSXSXSSMXSASMAMAXMAMXMXMMXX
|
||||
XSAMXMXSMMSMMMXXMAMMMXXAMAMASASASAMAAXAMMMMAAAAMAMMMMSSMSASXSAAAXMAMXXAMMSXMMMXSMMASMMMMMXSXMMMSXXXAMXMSMSMSASMMSXMASXMAMAMMMAMMSMMSAMXMXXXX
|
||||
MXXMASASAMMMAMMMXSAASMSASASMSXSMSASMSMMMSMSMMSMSASXAAXAMXXMASMMMSSSMSSMSAMMSXAAMAMAMAXXXXAXAAAAXAXMXSAAXAXXMXMASXASAMASXMASAMXMAXXXMMMAMXMMM
|
||||
MMSMXMASXMSMXSASAMSMAASASASASAMASAMAXXXXAAAXXMASASXMSSMSAAMXMASXMAAAMMXMAMASMMXSAMASXMSXMASXMMSMMXMASMSMSMXXASMMSXMAMXMAMXMXXSMXXSXMASAMXASX
|
||||
AAAAAMXMMXSAASMMXMASMAMAMXMXMMMAMMMSMMMAMSMMAMXMAMAMXMASXXSASAMAMSMMMXMMAMMMAAAXASASAMXAMASASMXAXASAMAAAAXMXXMSAMXMSSMMSMMMSMMMMMSASASAXSAMX
|
||||
MMSSXSMMSAMMMMMSMXMSXAMSMSMSMXMXSXAAAAXXXMMSSSMMXSAMXMXMMMSXMASAMAMSMAXSAMXSMMSSMMASMMASMASMMAMMXMMAXSMSMMMSMMMMSAMAAXAAMAAAAAAAXSAMAMXXMASX
|
||||
SXMMASAXMMSMXAXXASMMXSSXAXAAMASMMMSSSMSXAXAAAAXSASASXMMAAAXMAMXMXMXAMAMSASXSXAMAXMMMASAXXXMMMSMSSMMSMXAMXSASAAAASAMXSMSSXMSSXSSSMMMMMMSXMMSA
|
||||
XAASAMSXXXMXSMSMXMXAAXMMMMSMSASAXXAAXAMMMMMMMSMSASAMASMXMXSAMXXMASXMXSASAMAMMMSMMMXSAMMSMMSMXMAMAAAMAXXMXMAXSMMMSAMXXAXAAXAMAMAMAMXMSAMASAMM
|
||||
SXMMAMMMMSXAMSAXASMXMMXAAXXAMMSXMMMXMXMAXAXMMXASXMAMAMMMSAMXMXMMAXAXXMAMAMAMSAAMASAMSSMAMMAMMMAMXMMSSMXAXMSMXMSAXMSSMMMSMMASXMAMASAXMASXMASX
|
||||
AMSXSMAAAAMXSAMSXSAAMMMSMSMAMASASXXXAASASXSXAMAMAMXMAXAMXXMASAAMXSSMSMAMXSSXMSAXAMASAXXASXASXSMMXSAMAMMXSAMXAXMMMMSXASAMXMMMMSMSAMXSXAXASAMA
|
||||
SASAXXSMSXAXAXMAAXXSAAAAXMMMMMSAMAMMSMMMAMMMXMAMAMXXMSMSMMSASMSMMXMAMSASAMXAMMXMASMMMMMMMMAMXAMXAMXSAMMMSAMMMSASXMXXAMXAAXAAXAAMMSMMMMSMMMSS
|
||||
MAMAMAXAMXSASXMSSMMXAMSSSMSMMMMMMXMAAXMMMXAMAXSMSMSMAAMAAAMASAXXAAMAMMXSAMSMMAAXMMXAAAASXSASXSAMXSAMASAAXAMXAXAXMASMSSMSMSMSSSSMAAAXAMAMAXAA
|
||||
MXMSMSMSAAXSMAXAAAXSSXAMMAAAAAMMSXMSSXMASMSSSXMAXASMSMSMMMSASASASMXMXSXMXMAMMMXAAASXMSAXXMAMAMMXMXMSMSMSSSMXMMSSMXMAMAMXXXXAXAMMXXXXMMMMXSSM
|
||||
MXMXAXAMMMSASMMSSMMMMMXSMSMXMXXASAMXAMSSMAAAMAMXMXMAXAXXXXSAXAAMXMASAAAAMSXMAAMMMMSAMMMMMMSMMMMSMMXAMXAAAAAXXAAAAXMMSSMXXSMSSMXMSSSSMXSAMXAX
|
||||
MXMMMMXMMXMMAMXAXAMXXMMMAMAMSSMMSAMMMMXAMXMAMMMXAXMXMXMMSMMMMMMXMSXMASXMAMMSMXSXAAMMXAAMMAAAASAAAXSMSMMMSMXSMMSSMMSAAXMXMMAAXXXMAAAXAAMAMXMX
|
||||
SXMAMSMXXMMMSAMXSXMXAMXSMMAMAAAMMAMMXMSXMASMXAMXSAMASAXMAXAMXAXAXXAMAMXAXXAAXAXXMMMXXMMMMSMSMSXSMMXXAAAAXAAAMAMAAASMSMSAMMMMSSSMMSMMMMMAAAMM
|
||||
AMMAMMXXASMAMXSXMASMMAAXMSXMSSMMSSMSAMXAMASAMXAMXMSASMSSMXXSSSSMASAMSSMSMMSSMMMAMXXSXXAXMMMMASAXMSSSXSMSSMMXMASMMMXAAMMAMXMASMAAAAXXXAXSSMSA
|
||||
MSSMSAAMSMMMSMMASAMASAMXMMMMAAAXAMASXSXSMMSMAMAXAXMXSAXAMSMXMMAMMAMMMAAMXXAMXXAMXSMSASMMMAAMAMAXMAAMMMXMXMSXSASXSMMMMSSSMMMSSSSMMMXAMMXMAMAX
|
||||
XMAMXMASXAAAAAXXMASXMMMAAXSSSMXSAMXMASAMAMXXMASMMXSAMXMAMAAAMSXMMMXAXAMXXMSMASXMMXAMAMAASMMSAMXMMMSMASAXMXMAMAMAAXMAXXAAAMSMMXXAXXMXXMAMAMMS
|
||||
SMMMSXMAXXMMXMXSSMMASASXSMAAAXASAMXAASASMMSXMAMAMXMMSXSAMMSSXMASXXSXXSAMXSAMXXAAMXMMAMXMMAASAMXSMMMXAMAXXSMMMXMSMSXMXMXMMMMAMXSXMXMASMMSMSAS
|
||||
MAAAXMAMAMSXSMXMAASMMAAAMMMMMMASAMXMAMAMAXXAMASAMMSXXAXAXXMAXSAMMXMASMAAXSMSXSSMMMASXSASMXMSAMAAAAAMMXSASAAXXMAMAAXAMSAMXMXAMMMSAXMXXAAXAMAM
|
||||
SAMSSXXXMAMAAXAMMMMXMSMAMAAMXSASXXXXXXSSMMMXMASAMASAMXMMMSAMXXSXXAMXMSMSMMXAAXMASXMMASASAMASXMASMMSSMAMXAXMMMSAMXMXXAXMXASMXSAXXSXSMSMMMMMSM
|
||||
MXAAMMMXMAMXMSXSXMASAMXXMXMSASAMXSMMMMMAMMSAMXSAMSXMXAXMAXXXMMMMSSSSXMXAAMMMMMSXMAXMAMASAMXMXMAXAAAXMXMSXXSXMASAXSMSSXMMMXAASXMXMXMAAXMXSAMX
|
||||
MMMASXSSSSSSXAASXSAMASXSSMAMAXAMAMMAAAXXMASASASXMAMXSMSMSSXXMASASAAMMSMSXMAAAAXMMXMMXSASXMSSMXAXMMSMMSXMAXXAMXMMSXAAXAMASMMMMXMASAMXMSAXMASA
|
||||
XASAMAMAAXAAMMSMAMXSAMAAAMAMMXMMXXASMMSAMXXMMMMXSSMXAAXXMXMXMSSSMMMMAXMMMMSSMSSSMSAXAMAMAAAAAMSSXAMAAXAMXMSSMMAXMMMMSXSAMAAMXSMMSASAAMMMMXMX
|
||||
SXMMMAMMMMMMXSAMXMMMXMMSMMMSMXSASAAXAXMASAXSASXMAMASXAMXAAAXMAMMMMMMSSXSAXAXXAAAASXMMSSSMMMMMMMAMSSMMSSMXMAMASXXAAAXXMMMSSMSAAMAXAMMXMXASAMX
|
||||
MMSASXSAMXMMXMXXXSXMXSAMXSAXAAMAMMXMMMSAMXMMASMMAXAAXAAMSMSMMASAAMAMXMASXMMSAMMMMMXSXAAAAMXMAXXAXXAAXAMXXMXXMSMSSSSSMXAMAXXMASMSSMMMMMSXXASX
|
||||
AAXAMASMSMSMMMSSMMAMASAMXMMMMMSASXXMXAMXSSSMAMXSMMSSSMSMMMAASMSMSMSSMMAMAMAXMXSXXXSAMSSXMMXXAMSXMSXMMSSMMMSXXMAXAAXAXSSSMSMSXXAMXXAXAAMXSAMA
|
||||
MMSAMXMXAAAXXAAAASXMASAMXXAAAASXSASAMXSXMAAMMMXAXAMAMXAAXSSXMMSXMAXXAMXSAMXXXASXMMXMAXMASMSMXXMAMAASAMAAAAXXAMXMMMMSMMXAXSAMXMAMXSSSXSAAMAMX
|
||||
XXAXXXMSMSMSMMSSMMAMXXXAMXSMMMSMMAMSAMXAMXMMMSSMMMMMAXXMMXXXMASAMMMSMMXSMSMSMMMAXAAXMXMASAAXMASXMSSMASMMMSSXSMMXXXAAAXSXMMSMXSAMXMXSAMXXSAMM
|
||||
XMASMAMMXMXXXAXXMSXSMSXMXAAMMAMAMXMXXMXAMAXAXAAASASXSSSSXMAXSXMMMAAAAAAMXMAAMXSMMSMMSASAMXMMSAMXXXAMXMXMSAMAXASXSMSSSMXASAMXMSXSMSAMXMSASASM
|
||||
MXAXMAMMMSXMMMMMXXAAXMASMSSXMASXMMSXXMASXMSMSSSMMASAAAAXMXSXMAXAMXMMSMXXAMSMSMMSAAMAXXXASXMAMMSSXXMMSMAMMAMMXAMMAAMMXMSSMMSSMMXMAMAXSAMXSAMX
|
||||
SXMSSMXSAAAAASASMMMMAMXMAAAASXMXMASXMASXAXAAMMMAMSMMMMMMAAXASMSMSXSAXXXXMXAMXMAASXMASMSMMAMXSXAXASAMXMASMXMXMSMMMXMMAMXMASAMAXSMASMMXXSAMXMX
|
||||
SASAMXAMMXXMAMASMAAXSSSMSMSMMASXMASMAXMSMMMMMASAMAMSMMMSMMSAMAAXAAMMMXSAMSAMAMXMXXMAMXAMXXSSMMXSMAAMXSMSAASXMAAXXMASASMSMMMSMMAXAXXAMMMXSMSS
|
||||
SXMASMMXXXSXSMAMMSSMMAMAAXMASAMAAXSMMMMXXAAASXXMMAXMAAAAAXMXMMMMMSMSAMXAMAASMSMSSXMXSSMMSMMAAMAMXAAXMSAMMMSASMXMSSMMAMMAXAAAXAMMSXSAAASXMMAS
|
||||
SMSAMAXMSMMAMMXMAXXASAMMMMSAMMSMMMMXAAMSMXSMSAMXMMSMMMXXSMMASXSAXAAMSSMSMMXMAAAXMXSAAAXAAAMSXMXSMSSXAXXXXXSMMSAAAMXMSMSSMMSXSSXAMMSXSMSASMAM
|
||||
SAMXSSMMSAMXMASMMSSXMAMXAMMASASMSMAXMSMAMMMAMMMAASAMXXSAMXSXSAASXMXMMXAXMAXMSMMMMAMMSMMSSMMMSMMXMAMMSMSMSMXSAXMMMSAMXASAAAAXSXMXSAMMXASAMMSS
|
||||
MAMXAXMASMMMAMMAAXMMSAMSSMMAMXMAXMMSMAXXSAMAMAMSSMASAAMMMXMMMMMMMMMXMMSMAXXMXXMXMASAMXXMAASAMXAAMASMAXAAAXMMSSMSXSASXMMSMMSSMAMAMMMAMMMXMAMX
|
||||
SAMMMXMAMAMMAMSMMSAAMAXMAAMSSSMSMMAAXMASMMSSMMXMAMAMMSMAMSASXSXAAAXMMAXXASMMAXAASXMASMSMSMMASMSXSAXXMMMSMMSAAMXMASMMAMXXXXXXMAMASXMXSXMSMSMM
|
||||
XAXASXMASAMSAXAAMMMMSMMMMXMAAXAMAMSMSMMAMXAAXXASXMXSXAXAXSAMAMXMSMSASAMSXSASAMSASAMXXAXXMASAMXMAMMSMSAAAAAMMMSAMMMAMAMAMMASMXXSAXAMAMAAMAAMA
|
||||
SMSMSASASAMSXSMSMXAAXAAXXSAMXMAMSMMAAXXMMMMSMSXSAMXMXMMMXMSMSMAMAMSXMAMAAMMMXXXAMMSSMMMMXMAMXAMAMSAASMSMMMSAXSXSMSSMASASXASASXMMSMMASAMMMMSS
|
||||
AXAAXAMXSXMSAXMMMMMSSSMSAMAXMMXMAAMSMMXXAAMXAMXMAMASAXASAMXMAXMMAMMXSXMMMMASXSMSMAAXAAASAMMMMMXAMMMMMAAXXXMMXMXSXAXXXMAAMAMXAXSAAASASXXSAAXX
|
||||
MSMSMXMXSMMMXMAMSASAMXAAASAMXSASMSMMXMSMSMSMSMSSMSASASASASXSMSXSXMXAMMMSXSAMAMAMMMMSSMXXASXMASMMSXMAMMMXSMMSXMASMMMMMMSMMASAMXMMSXMASXAXMXMX
|
||||
XAXAAXMASAXAMMXAAMMSSMMSMMMMXSASAMXMAMAMMAMAXXMAMSXSXMASMMAAAAXAXSMSXSAAXMASAMAMASMMMSMSMMMMXSAAAASXSMXAAAAXAMASXXAAMAXXMASAXAXMMMMXMMMXMAAX
|
||||
SSSMSXSAXXMMMSAMMXMAXAXMASXSMMAXXAAMSSSXSAMAMXSXMMAMXMXMXMSMMMSMSMAMAMMSSMXAMSASASASAMXAXAMSASMMMMMMAAMSSMMSAMXSMMMSMASXSMSMSMSMAAAAXAXAXXSA
|
||||
MAMAMMMAXSAMASXXAAMXXSASMXAAXMAMMSXAAAMASASMMASMMMAMMMMSAMXMAMAXAMAMXMAXAXMAXAXXXSAMXSSMXMSMASASXXAMMMMXAXAAASAMASAAMXMASAMAMXAMMMXMMMMAASMX
|
||||
MAMAMAMAMXAMASXMSXSMMMASXMSMMXXMMAAMMSMASMMAMAXAASASAASMMMXSAXSSSMSSSMSSSMSAMXMXMMMMXMXXAMAMXMASMSSSXXSXMMXXXMAMAMSSSSMMMAMAMMSSMSAMSSSMMXAX
|
||||
SXMAXMMASXMMMXMAAAXAAMAMAXXAAAMSXMMSAXMASMSASMSSMSASMSMMXSAXMSMAAAXAMAMAMAXMAAMAAAAMSMSAMMAMXSAXMAXMAMSXSASMSSSMAMAMAAASMXMXSXAAAMASAAAXXMXM
|
||||
SMSMSASAMAMAMSXXMSMMSSMSSMMSXXAAAAAMXXMXSASXMAXMASXXMMXXSMAXSAMMMMMAMXMAMMMMMSSMSSXSAAXASXSMMMASMMXSMMMXMASAAAMAXMASMXMMAAXAMMMMMSSMMSMASMMM
|
||||
MAAAAAMMMASASAAMXMAXAAXAMXAXMASXSMMSMSMXMAMAMXMMMMMSXMASMMMMMASMMSMSMMSAMMASAMAXAAMMMXMAMAAMSMMMMMASAXSAMAMMMMSSMSMMXSMXXMMASAXXAXAAMAMAXXAX
|
||||
MXMSMMMSSXMXXMXAAXXMSSMSSMMSSMXAMMMAAAAMMXMMSMAMMAAXAAXAMASXSMMAMSAAAASAMSAMASXMMSSMASAMMSMMXAXSAMMSAMMAMXSAMXAAAXXSAMSAAMSAXMSMMXMXSASMSSSS
|
||||
XSXXXXAXMMSSSXSSSSMMXMAMAXMAASMMMMXMSMSAMXMAAXMMSMSSSMSMSASAAXMAMMMMMMSAMMASAMAAXAMXMMMSAMAXSMMSASAMAMSXMAXAMXSMMXXMAMXSSMMMSXAASAXMSXSAAXAA
|
||||
MAAMAMXXAXAAAAAXMAMMAMMMAXMSMMXMASAMXMAXXAMXMMSAAXXAMAAXMASMMMSSSMSSSMXAMSMMMXSXMMSMSMXMASMMMAASXMMSMMAMMSSMMMXAMAMSSMAMXMASAMXMMASAMXMMMMMM
|
||||
AMXSMMXSMMMSMMMMMAMXAMAMASXMAAMMASASAMXMSMSSXAMXSSMMMMMMSASASAXAAMAAMASAMXMAMMMASXMAAAASMMXAXSMSMMAMAXMXAAXAAASAMXAAXXXMASXMXSSSSXMXXMMAXASX
|
||||
SXAAXMAAAAMAAAXAMSSSXSXSSMMSMMSMASAMXMAMXAAXMMMXXMAXAXSXMASXMAMMMMSSMMMXMASASMSAMMMMMSMMSASMMXAXAMAXMMXMMSXXMXSMASMSXMMMMMSMXAAXAXAXMMSAMXSS
|
||||
MMXMAMSSSMSSSMXSXXAMAAXSAMAXAAXMAMXMASXMMMMXSAAMSSMMMXMAMXMASXMSXAAXAXMASMSASAMXMASXMMAAMMMMSMSMSSMSAMXAAMMSMMMXAXXMASASAAMXMMXMMMXSXAMXMMXX
|
||||
MSMSMAAXAXMXMMSMMMAMXMXSAMSMMMMMAMXXAMAXXMAASAAXXAXMMASAMASAMAASMMSSMAXASAMXMAMXSAMXSSMMMSAAAAAAAAXSAMXMXSAXAAAMMSMXMMASMXMAXXASXSMAMXMSAMXM
|
||||
SAAAAMMSMMSAMXAAASAMAXAXXMAMASASMSSMSSMMSMMXSMSXSAMXSASASMSAMMMMAMMAMAMSMMMXSXMMMXSMXASAAMMSSSMSMSMMAMAMMMASMMMMSAAAMSASASMSMMASAMAMSMAMXMSM
|
||||
SMSMSMAAXAMASXSSMSASXMMSMSMSASXSAAMAMAXAAASAXAAXXMAMMASAMXSAMXAASMXAMASAAAMAMAAASAMXSAMMMSAAAAAXMAXSASASAMXMMAAXSMSMXAAXASAMXMAMAMSXXMASAXAX
|
||||
XMAXXMMSMMSXMXMAXSXMXXXAXSXMXSXMMMMASXMASAMXMXMMAXSAMXMXMASAMSSSXASXSXSMSMMXSMMSMXSAMXMSAAMMSMMMXAASXSXSXSMMSMMMMXAXAMXMXMAMXMASAMAXXMASXSAS
|
||||
1379
Inputs/Day5.txt
Normal file
1379
Inputs/Day5.txt
Normal file
File diff suppressed because it is too large
Load Diff
130
Inputs/Day6.txt
Normal file
130
Inputs/Day6.txt
Normal file
@@ -0,0 +1,130 @@
|
||||
........#...........................#...........#............................................................................#....
|
||||
...........#..............................................##.#....................##.......#.............##..............#........
|
||||
...................#..#........#..#..##.................#......##..................#.....#....#.............#...........#...##....
|
||||
..........#......#..................................................#...................#........#..#.....#.......................
|
||||
.........#...#......#...................................#............#...#........#.............#..#........................#.....
|
||||
..##.#...........#......#.....#.#...#..............#.#......#.......#..............#.............#..................#.......#.....
|
||||
...#.................................####...........#..........#..#.....#........#...........................................#....
|
||||
..........#......................#............................#....................#..............#......#....#.................#.
|
||||
...#.................#.........#.........#.#.....#....#.................................................................#.#.......
|
||||
.......#.......................#...........#..................................#.............#..................#......#.#.........
|
||||
....................#.#.........#.........#................................#........#.#.........................#..#....#.........
|
||||
........#.............#....#.....#................................##.....#..................#.....................#...............
|
||||
..............#...................#..........................................#..........#........................#................
|
||||
...........#...................................................................................#..........#.........##.#..........
|
||||
............#....................#...................#.................................#.......#............#.......#.............
|
||||
..........................................#.....#.............#.#.......................##......#.....#...........................
|
||||
........................#...#..................#......................................................#.#..#......................
|
||||
...#.....#.....................#..........................................#................................................#.....#
|
||||
..##....................................#.....................#.............#.......#.............................................
|
||||
........#..................#......#................................#.......................................................#......
|
||||
.........#................#...............................##.#.....................#...........................#...........#.#....
|
||||
............#.....#..................................#.....#........#................#............................................
|
||||
.....................................................##..............#.....#.....#.......#........................................
|
||||
..........#..#..............#..#...#.......................#..........................................#...........................
|
||||
...............#.............................................................#..#......#.......#..#....................#..........
|
||||
.#......................#....##.#....................#..#...#............................#............................#....#....#.
|
||||
...#...................................................................................................................#.......#..
|
||||
.#....#..............#....................#......................................#.......................#....#..#................
|
||||
........#.....................#............................................#...............#......................................
|
||||
....#........#..........................................................................#..............................###.......#
|
||||
........#..#.....................#..................#..................##..........#..............................................
|
||||
..........................#...#................#....................................................#..#............#.............
|
||||
......#..............#................................#.....................#.................................#............#......
|
||||
...................................................#....................#.................#.....#................................#
|
||||
..........................#...............#....#........................#.............................................#...........
|
||||
##..............#..............................#....#.......................#.................................................#...
|
||||
...........................#.............................................................#.#................#......#........#.##..
|
||||
........#..................#...#..............#..............................#.....#..........#...................................
|
||||
..........#......#.##..#.....#.......##.....#......................................................#..................#...........
|
||||
....#.........#................#............................................#..#...#............#.....#..#........................
|
||||
#.......#..............#.....................#..........#....#......#......................................#........#.............
|
||||
.........#..........................................................................#.........#............................#......
|
||||
..........................#...#.......#...............#..............#.......................#...#................................
|
||||
.......................................................................#.........................................#...............#
|
||||
...................#.....#.......................................................#.............................................#..
|
||||
...##.....................#....#................................#........#...#....#.......##......................................
|
||||
.................................................................#.......#................................#.........#.............
|
||||
#..........................#.#........................#............................................#...#.........#................
|
||||
................#.#........#...................#...............................#.........#............#.........#.................
|
||||
...#...................................#.....................................................................#..#......#..........
|
||||
.................................................#..........................................#....#................................
|
||||
..............##.#...............................................#......................................................##........
|
||||
...........#..............................................#.....................................##.....#.........#................
|
||||
#.......................#..........................#......#...................#.#.................................................
|
||||
..............##..........................#............................................................#................#.........
|
||||
.......................#...#.........#....................................................................#............#..........
|
||||
.....#.................##.................................................#...........#..............#....#.................#.....
|
||||
.........#................................................#....................#.......#.........................##.#.............
|
||||
...........#............#...#...................#.........#....................................................#..................
|
||||
....................#.....................................................................#..........#.#..........................
|
||||
............................##..#.......................#.......#...................#.#..........#..........................#...#.
|
||||
..................#...........#.......#.............................................................#.............................
|
||||
...##......................#....##..................................#...............#.#..#........................................
|
||||
..#..............................##..................................................................#.......#....................
|
||||
...#.......#..........#.#.................................................##....#...............#...............#..........#.....#
|
||||
.....................................................##....................#..#..#...........................#....................
|
||||
...#......................#........#..................#.##..............#..............#....................................#.....
|
||||
...............#..........................#..........................................................#.#..#..............#........
|
||||
....................##....................#..#...................................#................................................
|
||||
...........................#..............#.....................................#.........................##......................
|
||||
...............#.................................................................#.....................#..........................
|
||||
......#..........#...#...........#................................................#...#.................................#..#......
|
||||
..........#............................#.............#.....................#........#............#.........#......................
|
||||
...........#...........#..........#....#......................................................................#........#.........#
|
||||
......................#...............##.................................................................................#.....#..
|
||||
...#................#........#..........#...................#............^...........#.................#.#......##.#.............#
|
||||
.......................##..............#......#.....................................#.....#.........................#.#.#.........
|
||||
.................#..#..........................................#...................#...#.........#................................
|
||||
..#.#.....#.............................................................#.#.......................................................
|
||||
..............................#...............###...............#..........##..........................#...#..#..........##.......
|
||||
.................................#.....#.........#......................................................#................#........
|
||||
...............##.#..................................................#........................#...................#.........#..##.
|
||||
.........#.................................#......#...............................................................................
|
||||
..................#......................#.#.........................................................#.....#......................
|
||||
.#..................#.............................#...............................................................................
|
||||
...................#...................#.#........#......#...........................#......................#..........#..........
|
||||
.............#...................................................................................................#................
|
||||
..........................#................................................#........#..#..........................................
|
||||
.#........................................................#.......#......#..#.....................................................
|
||||
..................##..............#.............#................#...............................#......#......#........#....#.#..
|
||||
#.............#....................................#.....................................................#........................
|
||||
............................#................................................................#....#.....#................#........
|
||||
.........#.......................................................................................................................#
|
||||
..#.........................................................................................#........#.#...........#..............
|
||||
...........#......................#.......#................................#...#.......#...............#..........................
|
||||
.......................#...#..#.......#..................#........#.....#.........#...............................................
|
||||
..#..##...................#..........#................................................#.........#...................#.............
|
||||
........................##..........................#.......#..........................#...#.#....................................
|
||||
..........................................................................................#.............#...........#............#
|
||||
..............................#.............................................................................................#.#..#
|
||||
.............#..........#...........................#.........................#........#.....................#............#......#
|
||||
....................................#..........................................................................................#..
|
||||
.........#.................................#...........................................................................#..........
|
||||
.#..............................#......#......#.#................................#.................#......#....#..#..#...........#
|
||||
.#...#................#.......#............#.........#...#..........#......#.........................#....................#.......
|
||||
..............#........................#................................................................................#.........
|
||||
.........#........#..#.........#........#......#..#..............................................#................#...............
|
||||
...........#......................#.......#..................................#....#...#......#..........#.........................
|
||||
...........#........................................................#.#...........#................#..............................
|
||||
.#...........................#...................#...#..................................................................#........#
|
||||
....................................................................#...................#.....#......#...........................#
|
||||
...#..#..............#......................#......#..#...............#..............#..............#..............#..............
|
||||
...........#........................#............#.#...........#..................................................................
|
||||
............#........................#.................................................#..............#.#....................#....
|
||||
............................#...........................#............................#........#..........................#........
|
||||
#................................................................#...........................#.............#.#........#.#.......#.
|
||||
............#..........#..............#.......#...#................................#.........#.#................#........#....#...
|
||||
...#.....................#..........#.............#....................................................#.#........................
|
||||
...............#..................................................#......................#...............#........................
|
||||
......#............................#..................#.....#...........................................................#...#.#...
|
||||
#................#..........................................................................................#..........#.......#..
|
||||
.................................................................#..............#...................#...................#.#.......
|
||||
...............#..............................................#.................#...............#...........................#.....
|
||||
.............................#...#........................#....................#........#.....................................#.##
|
||||
...............##..#.....#..#....#.#...#...........................................#.#........#........#.......#..................
|
||||
.......#........................#....#..#............................................................#.......#....................
|
||||
........#....................#........#....#.................#........................#.............#.............................
|
||||
#...#...........#......................................................#...............#...........#..#..#....#................#..
|
||||
................................#........................................................#...#..#......#....#.....#....#...#......
|
||||
..#..............#............................#........#....#......#.................................................#............
|
||||
850
Inputs/Day7.txt
Normal file
850
Inputs/Day7.txt
Normal file
@@ -0,0 +1,850 @@
|
||||
453693978: 7 219 8 44 2 9 3 2 6 4 1 6
|
||||
61192589: 81 8 83 9 879 6 4 2 6 7 9
|
||||
6066: 65 29 87 9 14 5 21 3
|
||||
1957116: 171 37 224 6 42
|
||||
198050: 342 577 3 2 711
|
||||
41665119255: 7 7 8 124 371 3 6 2 51 5
|
||||
3166026: 5 33 9 66 6
|
||||
1662321: 5 4 7 622 17 6 1 52 43 2
|
||||
265653132: 630 1 4 9 22 8 498 8 5 7
|
||||
1060: 88 9 55 4 39 73
|
||||
157494755: 3 1 4 98 951 5
|
||||
1952833595452: 7 234 5 550 3 483 3 82
|
||||
467: 2 71 5 251 5 64
|
||||
7316189440: 6 2 6 443 1 512 7 4 8 8 7
|
||||
33138: 4 8 8 8 7 1 49 99 2 6 5 1
|
||||
913284: 2 89 585 39 270 2 1 3 6
|
||||
1215195700: 81 4 79 913 52 4
|
||||
298632108: 6 6 3 6 15 73 210 5
|
||||
318936618: 150 160 832 403 693
|
||||
2102812: 3 323 434 5 82
|
||||
3848880609: 716 5 82 59 651
|
||||
4940008: 658 1 935 55 31
|
||||
311641: 23 9 1 6 8 7 6 7 3 5 1 586
|
||||
722421: 81 9 30 3 8
|
||||
33606277360: 672 5 6 277 36 1
|
||||
13106566: 2 73 2 1 24 38 63 66
|
||||
54290459591: 4 9 7 1 554 6 7 2 62 859
|
||||
4886125: 1 56 5 829 2 7 5 1 1 4 9 2
|
||||
274540788: 6 3 715 6 3 68 51 3 3 2 3
|
||||
34447941395840: 3 1 852 309 9 70 2 4 7 5
|
||||
4575402861600: 15 153 1 35 5 6 68 740
|
||||
13778598989: 459 3 85 989 89
|
||||
105779: 3 6 584 993 7
|
||||
146019901569: 1 460 1 98 94 1 5 6 9 69
|
||||
1993182: 51 58 924 451 460
|
||||
6265483638730: 9 93 62 2 98 7 570 89
|
||||
196996630250: 7 2 76 3 3 1 3 8 57 56 3 4
|
||||
3944294: 2 21 4 7 4 996 1 5 7 3
|
||||
1427032798: 13 9 65 228 823 178 1
|
||||
480: 7 4 5 30
|
||||
356848870313: 574 635 862 9 69 8
|
||||
4991679: 9 6 6 59 9 79 1 1 29 81 2
|
||||
96014924: 2 899 48 230 3 10 34
|
||||
530314220: 68 99 15 786 18
|
||||
27235017: 353 75 890 751
|
||||
28227685247: 1 8 889 21 8 8 5 6 3 7 8
|
||||
23386943686: 7 5 3 54 2 9 12 7 5 5 3 49
|
||||
4671109: 7 7 85 18 6
|
||||
65643: 8 55 6 9 449 1 6 3
|
||||
28442705797959: 9 2 8 7 507 6 579 795 9
|
||||
604412418874: 85 90 73 6 79 8 8 62 8 6
|
||||
142652179: 24 680 578 6 82 82 7 9
|
||||
318206557831966: 3 24 7 98 55 7 83 1 966
|
||||
940: 1 33 4 93 6 9 2 2 79 1 67
|
||||
5659883: 5 285 2 661 9 5 6 310 7
|
||||
462378: 66 6 319 910 244
|
||||
16578901: 69 8 624 6 3 1
|
||||
58541640192: 4 9 4 7 92 907 8 6 9 1 8
|
||||
7340642493: 67 5 39 72 39 8 7 95
|
||||
452912147: 461 214 982
|
||||
48011225806: 4 80 112 25 556 249
|
||||
994133176: 5 7 9 7 3 5 696 3 31 68 5
|
||||
1671942: 6 5 943 3 41 4 59
|
||||
2011: 854 1 663 74 419
|
||||
2350244: 39 17 3 2 2 2
|
||||
599522955: 1 6 3 192 1 733 89 298
|
||||
150499563: 3 660 5 348 118
|
||||
1974967: 405 9 758 5 82
|
||||
1526491271: 309 9 717 22 817 4 6
|
||||
291350: 32 91 81 72 1
|
||||
2331564579753: 4 208 7 8 5 6 542 4 7 7 6
|
||||
9094800: 3 50 44 53 26
|
||||
8558953: 3 82 5 89 50
|
||||
5818: 578 3 8
|
||||
101507885: 3 65 33 89 9 10 5 77 5
|
||||
234179567: 8 3 993 765 301 62
|
||||
13394703: 4 615 99 55 3
|
||||
12726838: 50 6 7 8 3 4 2 936 83 2 9
|
||||
159408: 4 908 174 1 720
|
||||
257838: 444 5 58 28
|
||||
134142820: 6 8 99 1 9 7 28 3 4 3 4 7
|
||||
99344148: 2 1 788 29 5 9 6 544 7 9
|
||||
2522113308: 5 331 6 9 1 6 3 4 39 99 2
|
||||
140321: 4 3 5 4 31 9
|
||||
20942125931928: 68 562 429 219 8 89
|
||||
253357107: 361 41 7 341 2 19 7 58
|
||||
2576029514834: 5 1 3 605 83 1 4 834
|
||||
3812481: 8 507 2 74 1
|
||||
38667377388: 3 5 77 23 47 73 32 6 47
|
||||
154599952490: 3 2 3 671 64 6 87 8 3 1
|
||||
6771960: 3 9 66 3 3 337 6 90 3 1 8
|
||||
43692: 90 7 45 4 2
|
||||
318124: 1 8 497 80 44
|
||||
172874771: 2 8 9 1 3 9 7 63 2 7 63 8
|
||||
4129352: 502 4 4 8 511 4 2 469 1
|
||||
30132480: 4 148 672 59 5
|
||||
390439859: 29 8 6 4 6 9 81 9 9 27 2 7
|
||||
65515806624: 5 663 155 373 639 98
|
||||
5014677: 2 758 9 202 633
|
||||
1490: 81 7 16 78 3
|
||||
23528003: 4 9 8 6 6 7 5 7 83 13 5 1
|
||||
7929094: 23 407 7 2 121 85
|
||||
276945: 37 5 91 94 5
|
||||
561691819: 1 6 7 682 5 5 7 9 86 17
|
||||
12070408538: 9 163 43 3 5 1 1 8 7 5 38
|
||||
14816: 4 37 3 6 54 16 544
|
||||
9301982: 903 906 6 857 18 89
|
||||
236: 7 8 131 90
|
||||
924816: 14 66 8 16
|
||||
94248002483: 6 8 22 816 165 247 8 3
|
||||
775651572420: 98 383 3 6 3 73 210 2
|
||||
31344: 4 4 8 5 821 6 8 59 4 388
|
||||
30930: 6 15 50 119 62
|
||||
154217932: 22 13 1 719 67 6 8 498
|
||||
23474981: 3 65 250 41 18 65 81
|
||||
178893876: 3 7 7 8 96 9 33 33 4 7 2 6
|
||||
618737127839: 39 61 312 801 195
|
||||
4517: 6 3 1 1 5 236 925 52
|
||||
1014255: 7 727 51 99 9 3 1 856 7
|
||||
1588: 87 7 32 9 671
|
||||
112938355813: 21 9 573 9 5 580 4 3 5
|
||||
12794721648: 3 99 764 6 65 2 8 8 2 48
|
||||
784111270947: 4 542 47 29 35 9 970
|
||||
133997465978: 4 69 2 4 4 31 3 2 1 5 97 5
|
||||
16625917453: 222 5 591 66 8 6 2 4 13
|
||||
145: 70 69 4
|
||||
1756138126: 20 15 121 1 5 7 81 126
|
||||
928811: 7 190 65 680 986
|
||||
21408695: 2 9 5 690 8 6 1 3 47 2 2 5
|
||||
368451: 66 302 4 4 8
|
||||
27863124: 3 19 5 1 995 89 216 7 4
|
||||
957338381: 354 2 3 9 6 3 823 7 8 1 1
|
||||
44521661: 48 680 341 4 1 76 625
|
||||
10437926: 148 585 4 89 10 2 3 2
|
||||
88019880: 3 312 7 30 884
|
||||
791624: 8 79 5 8 9
|
||||
89138231364: 274 609 3 533 609
|
||||
4293432: 3 6 4 5 9 5 8 9 528 72 39
|
||||
6358683: 4 1 6 21 5 8 31 37 4
|
||||
3764592: 51 1 324 4 591
|
||||
19530679599: 882 5 415 5 2 26 53 3 6
|
||||
87417: 3 280 24 19 99
|
||||
533489: 4 9 37 4 1 5 90
|
||||
5011: 3 6 5 22 490
|
||||
73338720: 293 93 52 23 91 80
|
||||
126: 9 1 1 1 13 1 93 9
|
||||
3615788: 90 4 1 57 85
|
||||
147888: 4 79 17 485 78
|
||||
193516984: 487 87 2 76 6 65 8 68
|
||||
2589283728: 2 58 9 2 19 5 46 9 4 730
|
||||
64553362: 645 533 60
|
||||
22331998272: 2 642 77 7 845 4 23 2
|
||||
8657594: 778 86 6 6 5 5 9 4
|
||||
5562082: 2 88 21 180 82
|
||||
44600739: 88 9 78 223 3 25 2 89
|
||||
1175: 8 2 6 68 87
|
||||
77262: 97 784 353 4 857
|
||||
1958152581: 847 682 3 1 231
|
||||
89632318: 9 7 56 145 172 6 20
|
||||
29470: 459 49 58 4 5
|
||||
5458120200000: 4 6 815 6 65 36 90 530
|
||||
683299: 7 276 8 5 59 44 419
|
||||
7405744: 25 715 574 2 1
|
||||
15815402: 3 546 7 1 7 8 7 4 5 4 9 9
|
||||
4153776591: 13 577 8 2 88 320 271
|
||||
5994590716: 99 787 8 926 1 73
|
||||
1905139223188: 945 8 6 457 6 95 42
|
||||
154417: 193 8 17
|
||||
168145522524: 957 766 7 66 38 96 7
|
||||
4795006: 2 21 5 204 9 59 47
|
||||
7043070062: 6 8 1 6 85 8 33 7 4 2 9 2
|
||||
62697036236: 28 3 70 82 722 3 236
|
||||
12178755: 8 8 77 4 3 558 5 3 81 5
|
||||
32779766156: 693 473 93 773 156
|
||||
115249713: 90 243 4 29 2 596
|
||||
68054: 73 4 951 2 1 4 52 2 1 9
|
||||
802077409221: 92 7 3 17 848 2 2 3 1 5 3
|
||||
142074998208: 640 71 85 7 8 44 719
|
||||
8632: 5 9 7 58 4
|
||||
2624715: 4 1 5 8 619 8 1 1 4 3 4 8
|
||||
4759740: 937 8 357 79 9 60
|
||||
4635323000: 9 8 284 8 368 2 7 79 77
|
||||
248375402756: 2 34 2 32 3 910 68 9 4
|
||||
125065077: 8 41 531 78 6 35 79 4 7
|
||||
182358: 4 182 3 855 30 8 1 2
|
||||
3812369: 77 29 2 2 493
|
||||
1609831: 218 737 251 7 654
|
||||
2024734: 756 4 8 37 9 94
|
||||
552808080: 8 72 93 12 626 22 5
|
||||
52118327: 2 161 674 6 790 4 9
|
||||
160697381: 2 89 8 7 39 16 10 2 6 53
|
||||
275832: 26 8 34 39 24
|
||||
144618480: 398 5 757 8 3 8 11 3 3 4
|
||||
2550199: 6 8 7 8 41 137 79
|
||||
212959799662: 2 660 8 15 979 9 661
|
||||
173540566353: 22 8 3 9 180 6 2 1 8 7 51
|
||||
4867527232: 4 46 54 108 9 7 9 6 4 8 2
|
||||
30630: 6 36 258 6 30
|
||||
912202863: 5 86 2 15 1 5 286 1
|
||||
400914580: 371 29 914 5 80
|
||||
43596216103: 768 89 2 2 2 3 7 9 9 5 9
|
||||
8946096736: 4 2 710 32 23 3 4 5
|
||||
15609768411359: 9 707 567 4 4 8 67 60
|
||||
4122784380: 280 748 89 165
|
||||
10977874: 68 6 1 16 3 7 2 81 91
|
||||
2908919: 99 976 2 315 30 1 689
|
||||
29609: 1 4 19 17 3 86 681 28 4
|
||||
245700: 12 1 351 5 3 45
|
||||
367: 1 3 3 55 37
|
||||
62951499517: 9 32 5 73 8 364 520
|
||||
734005: 73 39 74 24 6
|
||||
124853195948528: 88 69 9 482 698 6 79 9
|
||||
3636750240572: 5 6 5 9 5 5 210 6 6 4 5 74
|
||||
112035399: 651 10 169 326 3 99
|
||||
84854: 9 4 8 831 89 3
|
||||
233936125149: 9 6 811 648 97 261 44
|
||||
5809: 5 5 7 17 5 62 2
|
||||
87092610443: 9 9 84 1 8 78 4 14 4 4 3 1
|
||||
15382371424083: 9 6 3 8 919 69 92 95 85
|
||||
117071: 291 4 1 57 1 2 90
|
||||
487732407: 6 4 63 10 8 973 4 406 1
|
||||
1157798799: 5 82 8 78 383 798 799
|
||||
11910216899: 5 69 842 1 7 13 6 8 6 3 9
|
||||
906: 4 5 6 87 803
|
||||
7607716138743: 73 89 98 986 911 486
|
||||
8026454: 2 91 49 28 9
|
||||
987004: 1 8 2 274 5 8 26 474 44
|
||||
402628876: 5 7 82 2 409 833 77 76
|
||||
30661956: 8 6 491 5 81 9 20 9 3 13
|
||||
33657773: 4 7 13 803 39 770
|
||||
23941915: 73 49 5 4 3 98 5 12
|
||||
19880498446: 763 46 620 1 7 2 2 3
|
||||
1382284: 91 83 9 7 79 24
|
||||
20366858: 45 1 5 731 84 102 4 5 6
|
||||
93755256: 30 71 7 1 44 5 7
|
||||
164884487835: 850 4 722 4 4 487 835
|
||||
1341603775: 52 860 1 3 775
|
||||
1072: 16 225 1 88 742
|
||||
7246685: 74 704 4 97 9
|
||||
1427830680364: 48 392 9 5 2 590 358 6
|
||||
47410058: 39 84 17 2 4 5 7
|
||||
428546912: 2 9 3 971 6 4 6 7 3 3 5 12
|
||||
9674801499: 276 42 29 4 875
|
||||
33994953: 679 868 31 5 3
|
||||
10034366578321: 4 3 6 27 6 80 7 753 23
|
||||
21580: 8 37 695 90 26
|
||||
2831604330: 7 831 8 39 3 9 3 6 5 56
|
||||
103563266: 6 9 7 7 5 6 2 4 1 98 64 8
|
||||
34404349: 1 772 7 1 40 9 8 9 7 4 4 7
|
||||
59764: 1 66 90 1 32 34 569 67
|
||||
3837946112: 4 1 7 9 320 9 7 884 308
|
||||
392845: 490 4 80 59 467
|
||||
2237: 354 6 6 93 3 2 11
|
||||
530442: 22 1 6 4 41
|
||||
667875343107: 1 9 540 5 5 76 3 28 2 1 7
|
||||
27334270016: 77 6 74 857 80 68 1 7
|
||||
9133: 64 4 493 8 34
|
||||
1093: 1 6 63 471 184
|
||||
2345410: 2 3 45 407 3
|
||||
698287110552: 775 867 7 5 672 9 2 70
|
||||
18068437: 4 104 61 20 956 37
|
||||
368540: 2 606 3 43 6 41
|
||||
864: 9 6 9
|
||||
1418: 75 9 1 16 74
|
||||
30118881: 6 5 1 4 4 9 992 1 3 88 5 1
|
||||
311278809: 432 33 2 4 9 4 1 9 3 4 3
|
||||
46589936700: 88 21 8 9 58 5 7 75 4
|
||||
8569194: 4 15 54 8 3 58 7 2 3
|
||||
481417: 937 5 73 8 1 7
|
||||
2397863: 6 80 45 286 8 2 8 23
|
||||
24256960: 5 28 442 4 98
|
||||
22569840: 94 68 6 36 645
|
||||
42699365540: 6 70 4 37 656 6 554 10
|
||||
38737384769: 8 5 392 5 2 863 7 8 94
|
||||
2389502926: 95 2 805 6 2 60 24 52 7
|
||||
5752: 86 9 3 579 82 4
|
||||
63029652680: 1 7 3 3 50 701 5 7 6 683
|
||||
3090035: 3 7 5 618 35
|
||||
1373: 28 1 4 6 247
|
||||
2919: 7 6 3 9 34 385
|
||||
67269: 9 4 5 6 6 5 9 680 7 157 5
|
||||
6172980: 6 1 944 59 9 2 55
|
||||
161860638588: 3 56 58 473 38 5 89
|
||||
664801: 1 3 8 9 490 979 60
|
||||
3317827: 8 42 394 1 348
|
||||
187757: 872 5 43 220 57
|
||||
12552562: 5 25 525 62
|
||||
29106: 4 4 6 10 9 5 2 4 12 4 62 7
|
||||
202769: 18 2 25 2 65 4
|
||||
481787: 489 31 82 23 8
|
||||
243818: 72 72 815 43 9 9 3 9 3 8
|
||||
255915710: 365 584 9 8 4 7 6 18
|
||||
649896756: 40 922 81 675 6
|
||||
90209784: 86 4 8 4 8 2 9 41 7 553 4
|
||||
1938043461875: 585 2 316 1 60 6 6 46
|
||||
344395030560: 68 321 1 8 570 346
|
||||
68445524: 58 9 95 45 5 24
|
||||
101817063790: 29 7 5 5 1 74 9 1 2 758 5
|
||||
8208761: 5 5 5 5 8 5 6 617 69 7 1
|
||||
120768: 98 9 6 8 17
|
||||
3116048: 3 3 11 4 1 7 1 7 8 6 253 6
|
||||
2514187687609: 251 41 876 87 607 2
|
||||
816971: 99 6 3 82 3
|
||||
1132216: 92 246 837 148 4
|
||||
22172: 7 6 3 37 633 31 7
|
||||
2749313: 6 218 82 3 1 112 7
|
||||
4280: 385 42 2 5 5
|
||||
2653814829: 9 3 9 176 3 37 7 19 54
|
||||
2862201: 9 7 5 80 67 6 133 3 4 4 9
|
||||
3370: 5 3 21 85 560 5
|
||||
33510727: 5 336 55 7 745 4 8 3 5 2
|
||||
8542478027: 7 9 6 423 8 1 96 973 54
|
||||
625114645518: 598 7 791 132 1 51 7
|
||||
94520255: 14 36 8 9 30 8 7 603 5 3
|
||||
269825453: 8 5 54 424 5 94 333
|
||||
8990: 54 35 90
|
||||
1939417840: 58 41 62 83 40
|
||||
25841539: 82 340 8 764 8
|
||||
5583873650: 5 3 508 2 6 4 3 1 3 4 9 48
|
||||
2487933: 8 69 8 5 3 11 1 3
|
||||
1270416845906: 973 680 98 91 1 211
|
||||
46166671264: 4 54 5 8 601 4 83 871
|
||||
115632308: 472 81 410 51 8
|
||||
206282: 293 1 6 9 7
|
||||
21933071: 57 5 579 1 846 35 775
|
||||
1729624: 4 27 1 1 1 328 9 5 4 6 5 6
|
||||
75757: 941 8 2 60 412
|
||||
1352210: 1 598 3 777 83 7 6 8 1 2
|
||||
347983: 5 8 4 832 9 2 53 4
|
||||
53321843: 8 9 1 555 117 69 5 7 40
|
||||
509941350: 8 160 89 2 5 73 4 510
|
||||
16749548152: 933 6 735 9 548 152 2
|
||||
182715414753: 653 6 6 453 7 658 7 53
|
||||
22751389220402: 34 82 726 135 6 90 2
|
||||
7477875: 53 6 73 255 75
|
||||
17145951: 557 66 95 16 465 6
|
||||
29997394: 688 436 5 93 1
|
||||
830276218: 88 468 801 8 93 99 21
|
||||
413822746: 4 902 530 227 46
|
||||
8475989: 61 731 55 523 5 3 751
|
||||
213173385: 7 419 5 82 91 143 244
|
||||
8476: 315 34 6 16 9 1 4
|
||||
215132022208: 651 865 7 571 33 382
|
||||
1737558: 5 8 9 328 1 3 4 42 2 6 3 9
|
||||
7212898: 98 8 92 74 27
|
||||
3376916: 422 8 323 579 9 7
|
||||
21912156: 22 6 166 15 7 2
|
||||
2424528990: 7 4 84 7 410 39
|
||||
399686: 7 4 27 2 84
|
||||
479369: 51 9 87 6 6 2 34 1 68
|
||||
5366794: 3 264 201 94 2
|
||||
24942: 917 2 938 9 9 3 4 766 7
|
||||
45408317: 82 66 264 8 318
|
||||
955693: 41 3 911 6 93
|
||||
1763: 11 7 8 32 5 2
|
||||
7137940: 7 8 86 68 6 46 50 123 4
|
||||
375924: 644 6 5 97 631
|
||||
51789: 970 83 5 409 9 1 724
|
||||
4633540: 927 4 891 1 336 8 3 5 5
|
||||
3827074: 2 4 7 5 3 3 9 6 234 8 53 3
|
||||
174783: 8 76 5 59 7 525 798
|
||||
18220965653: 3 5 796 308 2 6 6 929
|
||||
450081: 923 64 456 1 8
|
||||
1580629050: 6 907 7 60 4 7 8 975 7 6
|
||||
53908033: 71 857 9 97 8 90 883
|
||||
200570582525: 8 532 2 2 6 6 770 3 34 8
|
||||
2049329780118: 75 90 11 9 2 667 3 10 9
|
||||
335240782: 85 493 8 78 5
|
||||
515973: 2 7 3 30 63
|
||||
491045376: 520 8 93 5 378
|
||||
52900144900: 730 2 89 93 37 22
|
||||
411113430: 485 53 6 4 9 1 5 909 7
|
||||
428079459263: 850 1 6 5 7 945 8 9 3 6 3
|
||||
10267334400: 2 8 1 1 29 879 4 6 911 8
|
||||
1148385886: 4 2 5 3 9 8 8 49 4 3 91 8
|
||||
5042966021: 6 59 634 1 4 8 955 6 2 9
|
||||
153826991: 64 742 8 3 99
|
||||
84651: 1 84 54 6 5 1
|
||||
38009515: 36 7 791 6 328 743 6
|
||||
10646: 5 20 4 361 98 82
|
||||
58142385: 3 6 4 8 6 4 1 4 1 8 7 63
|
||||
11447010: 899 6 590 85 82 32 90
|
||||
148080024328: 16 411 9 662 417 1 6
|
||||
415528025: 1 29 2 8 3 7 7 117 7 178
|
||||
940546890: 3 62 7 237 68 183 31 3
|
||||
9075990043624: 8 9 28 76 525 41 2 626
|
||||
424464: 424 459 5
|
||||
8532951: 73 18 762 29 51
|
||||
9591544: 83 491 557 30 4
|
||||
34543862: 6 864 32 5 1 9 1 537 6 2
|
||||
335: 23 11 82
|
||||
30000: 5 561 53
|
||||
228530406544: 5 2 952 2 1 4 60 65 4 7
|
||||
117821: 34 38 9 9 4 730
|
||||
294451: 985 78 277
|
||||
67315140: 54 2 1 4 6 963 188 4 2
|
||||
767382521: 1 5 3 186 1 5 385 6 4 1 8
|
||||
72: 5 1 2 9
|
||||
4199365273188: 5 307 59 92 758 86
|
||||
36909183: 9 205 3 5 3 6 91 6 6 3 7 3
|
||||
4228426: 86 9 2 3 79 44 3 351 6
|
||||
3101601: 5 1 31 88 1 5 6 594 5 2
|
||||
14125920447: 5 92 1 8 3 3 397 7 771
|
||||
74256718132: 9 9 44 403 5 8 939 423
|
||||
14732109: 8 501 4 408 9 3 42
|
||||
881310249: 979 9 2 10 251 1
|
||||
126469: 9 45 4 715 98 471
|
||||
674696887: 2 4 842 4 55 7 88 26 5 2
|
||||
1665232268: 1 6 65 2 3 138 8 6 802
|
||||
2499735: 51 574 42 56 5 2 95
|
||||
134637242: 138 8 97 503 739
|
||||
18438: 15 82 960 391 53 7
|
||||
121068: 158 1 3 76
|
||||
139306754996: 5 4 62 6 25 283 4 9 1 9 6
|
||||
12209400: 8 2 3 9 48 918 95 2
|
||||
6913282747: 864 5 7 1 5 8 52 9 6 4 6 7
|
||||
18079451: 451 8 9 8 9 4 316 7 7
|
||||
358746938735: 7 751 8 51 6 29 6 8 2 6 2
|
||||
354669920028: 510 3 31 715 84 972
|
||||
38034: 607 48 58 1 44
|
||||
349019647: 2 2 974 479 2 8 64 32
|
||||
15031: 6 74 619 5 5 21 8 64 70
|
||||
31157828: 519 2 587 4 68 3
|
||||
121029120588: 29 1 4 824 4 85 5 7 8 9 9
|
||||
5203105: 518 2 30 65 38
|
||||
1787278: 102 584 5 6 235
|
||||
1818: 51 327 53 2 956
|
||||
23589640: 24 54 2 91 9 5 5 5 38 2
|
||||
11185866008155: 3 54 5 984 659 3 81 5 4
|
||||
5159414: 12 8 8 1 258 37 26
|
||||
943: 27 4 6 8 5 26
|
||||
1507815: 218 56 55 3 68 10 5
|
||||
781435: 2 6 3 1 436
|
||||
404002479853: 4 8 5 6 6 9 921 8 6 1 1 74
|
||||
117808: 7 3 1 90 119
|
||||
13344: 76 61 1 1 96
|
||||
29321: 291 1 40 69 9
|
||||
8616607: 2 78 583 60 86 524
|
||||
7794317578: 9 2 3 9 9 5 8 43 4 6 35
|
||||
2845227: 2 2 845 809 78 22 9 90
|
||||
415532023: 9 50 35 9 3 41 7 8 75 1
|
||||
24380364: 405 3 3 7 394 6
|
||||
5561933: 2 64 71 612 77
|
||||
43868704: 69 4 3 3 27 538 3 4 88 8
|
||||
2030282568: 6 2 7 5 9 43 5 7 7 680 24
|
||||
27749412203: 360 5 76 9 408 3 1 201
|
||||
27842: 64 7 5 60 662
|
||||
767760: 457 20 4 7 3
|
||||
58361: 88 829 4 500 7 2 9
|
||||
817389: 28 193 15 1 2 36 95 9
|
||||
696008: 26 73 83 239 2 5 8
|
||||
1586875: 9 90 30 110 65 225
|
||||
22312441922: 8 3 4 60 2 488 3 75 5 45
|
||||
153426394832: 27 4 311 1 4 7 2 4 4 7 3 2
|
||||
205905: 25 9 795
|
||||
55771301: 94 593 6 23 301
|
||||
76140038424: 47 2 300 5 9 62 5 6 92 4
|
||||
19026558: 2 27 9 9 639 2 3 4 5 4 12
|
||||
10591093: 7 3 6 5 5 1 82 6 7 4 65 4
|
||||
34476157: 8 38 67 38 86 156
|
||||
236957826051: 383 42 690 3 618
|
||||
41953947120: 6 962 46 6 57 8 95
|
||||
91726: 9 364 4 7
|
||||
103501474: 5 906 6 136 28 25 8
|
||||
2306986833: 233 33 95 610 3
|
||||
5183417876687: 4 89 106 178 766 85
|
||||
1613979: 1 160 3 9 80
|
||||
6211199231: 97 252 8 63 21 192
|
||||
1075782: 2 8 30 1 78 20 452 22
|
||||
97694735: 3 2 370 47 96 72 5 7 7 5
|
||||
137890590151: 1 3 9 7 67 7 6 489 6 80 9
|
||||
2910853: 3 2 292 60 5 178 9 10 9
|
||||
231046: 19 16 660 5 43
|
||||
3745: 89 2 5 4 2 5
|
||||
1244: 7 438 68 9 6 223 493
|
||||
1590: 55 908 46 581 1
|
||||
9887612034: 318 619 910 5 1 203 4
|
||||
648753846: 700 57 89 856 6
|
||||
69616: 1 69 6 41 102 4 7 304
|
||||
726504624: 72 6 504 607 14
|
||||
7366176: 9 9 1 7 938 7 8 8 43 7 5
|
||||
961848: 957 9 39 51
|
||||
1207774165: 6 6 3 93 5 3 83 7 416 1 4
|
||||
2179548541632: 21 7 426 173 56 264
|
||||
2520: 21 19 3 21 1
|
||||
1360262: 90 7 2 182 80 48 7 90
|
||||
1927043167: 29 662 72 43 167
|
||||
10689713431: 9 6 4 83 6 57 4 83 923 7
|
||||
946187: 1 38 24 10 185
|
||||
8362219: 96 26 19 867 4
|
||||
264: 13 2 4
|
||||
2784905: 5 8 5 44 388 552 905
|
||||
78379479: 38 5 9 3 2 456 7 6 2 8 79
|
||||
76: 4 6 3 60 5
|
||||
10715175424869: 855 4 225 17 66 84 71
|
||||
1509802788: 2 7 6 4 9 64 70 7 7 83 4
|
||||
132789652: 9 154 89 44 9 5 2
|
||||
17956425: 46 399 387 5 8
|
||||
660210: 4 2 1 3 22 22 631 961
|
||||
192932438388: 304 366 382 3 578
|
||||
239253759: 4 8 136 13 4 5 8 757
|
||||
732994: 739 16 97 64 7
|
||||
26087: 4 62 72 814 401
|
||||
160480426: 89 15 579 18 1
|
||||
379310: 35 31 30 4 34 74
|
||||
207366390: 5 898 893 46 268 385
|
||||
15765: 1 7 563 4
|
||||
2266789870: 4 341 73 557 997 9 3 6
|
||||
96665484: 2 964 43 13 9 484
|
||||
365768: 79 3 7 121 768
|
||||
142963608282: 2 6 9 5 7 8 22 380 8 2 83
|
||||
2498: 2 850 2 729 37 30
|
||||
11935499: 3 6 323 852 5 4 54 43
|
||||
71923: 222 576 3 9 77
|
||||
3431484: 240 3 68 21
|
||||
100190754049: 555 31 52 42 41 992
|
||||
5751501: 5 7 51 223 275
|
||||
122835227404: 89 1 373 37 63 27 404
|
||||
4837305: 432 8 95 3 454 5 9 829
|
||||
3649109600: 4 7 2 21 9 3 365 20 152
|
||||
655120053: 27 478 2 84 5 129 2
|
||||
3576368741749: 946 7 8 1 6 3 9 4 175 1 1
|
||||
2893325: 78 22 2 42 177 40 5
|
||||
1924937835: 20 3 2 5 4 307 9 5 66 5 4
|
||||
643751: 650 99 24 7 4
|
||||
45: 3 3 26 9 3
|
||||
660: 2 4 87 559 8
|
||||
2539: 4 403 892 35 1
|
||||
3674: 362 8 46
|
||||
1162251792: 62 6 5 7 36 39 474 542
|
||||
2368091154: 3 2 8 575 13 858
|
||||
66120: 64 4 5 8 10 19
|
||||
7486826365: 4 5 4 7 31 205 3 4 3 7 2 7
|
||||
386307741: 9 1 70 7 1 63 675 4 7 9 6
|
||||
10230561458: 8 9 14 10 69 5 8 9 7 821
|
||||
154794180: 85 6 226 79 17
|
||||
159148110: 81 246 4 235 93 22
|
||||
984556511: 62 9 27 1 97 4 18 978
|
||||
23606766469: 389 4 446 5 5 25 3 42 4
|
||||
5939892044: 54 700 81 2 970 3 41
|
||||
32603669: 649 9 21 5 3 200 2 470
|
||||
980: 58 7 512 60 4
|
||||
140631198724: 2 5 7 4 92 39 217 8 724
|
||||
122630144587: 4 41 1 589 3 28 94 590
|
||||
28426054754: 61 237 9 10 699 951 3
|
||||
26993694: 9 260 1 8 36 94
|
||||
5508: 56 4 83 37 491
|
||||
2566794: 47 946 3 1 83 838
|
||||
730292037: 9 5 3 89 783 725 5 4 37
|
||||
7719: 4 61 95 388 738
|
||||
1371461493: 150 71 91 4 79 2 9
|
||||
305217: 8 54 1 66 26 91 3
|
||||
33935249: 5 75 1 9 2 6 95 3 459 1 4
|
||||
16749: 8 7 937 712 98
|
||||
151413850: 1 6 650 7 3 13 4 745 5 1
|
||||
8008143: 773 5 3 7 5 69
|
||||
121022047: 3 2 6 3 3 702 4 3 4 3 60 6
|
||||
3488486358: 329 31 654 1 523
|
||||
184688494: 1 1 3 1 6 89 2 127 4 2 9 5
|
||||
1711196664021: 63 980 41 26 328 5 22
|
||||
6581064: 76 10 5 24 86
|
||||
137584: 5 10 98 4 7 384
|
||||
3890756: 1 29 363 1 99 57
|
||||
24153773792: 8 69 616 19 752 2 8 3 6
|
||||
16858296: 6 738 83 39 7
|
||||
12071831817: 9 5 9 2 5 210 5 7 5 384 7
|
||||
1675: 96 335 312 8 2 173
|
||||
713182: 701 5 7 18 2
|
||||
1462: 2 2 7 1 30 6 7 9 2 8 2 993
|
||||
4012: 434 9 66 6 1 5 1 3 8 4 5 7
|
||||
2509636115739: 883 3 449 211 573 8
|
||||
441509: 734 2 9 282 251
|
||||
1587801154: 494 29 6 3 801 1 52 1
|
||||
423094: 6 389 3 89 27 31 251 4
|
||||
1757133170: 872 31 764 54 65
|
||||
247757499: 147 3 8 3 4 4 9 88 42 1 1
|
||||
1727313: 65 11 28 5 2 809 98
|
||||
70450601: 99 3 4 89 20 372 5 55 2
|
||||
4541108057: 805 161 564 1 8
|
||||
24042847: 9 5 9 3 243 4 7 9 2 9 83 6
|
||||
2108110977: 398 1 23 93 1 999 23
|
||||
5610241: 6 935 2 39
|
||||
72098: 1 60 19 9 99
|
||||
1197518856112: 9 9 8 84 8 3 76 6 10 1 4
|
||||
158774: 7 3 97 37 3 711 62
|
||||
11060285775: 8 1 4 836 3 7 10 7 7 25 3
|
||||
8140: 27 96 1 3 3 2 95 7 3 727
|
||||
10121438: 1 436 9 92 70
|
||||
860403: 710 4 3 6 302 5
|
||||
927083: 542 74 7 5 43
|
||||
16882215034: 57 894 9 5 5 9 1 4 9 6 3 1
|
||||
63578: 7 2 1 563 77
|
||||
4088249760043: 32 12 234 760 70 20 2
|
||||
31374736: 6 5 364 6 2 8 1
|
||||
4399214: 936 47 13
|
||||
23925060150: 53 16 68 60 2 75
|
||||
2543: 6 547 3 5 871 8
|
||||
122579998: 3 78 11 7 748
|
||||
291594: 444 470 57 97 3
|
||||
2409360: 343 3 3 3 9 824 7 4 5
|
||||
1238038362: 5 5 509 92 5 36 9 7 97
|
||||
525001557: 8 4 1 7 7 140 3 5 1 434 3
|
||||
390649328: 477 8 1 90 44 5 328
|
||||
17363355: 77 26 6 289 3 7 806
|
||||
19956: 97 24 2 20 486
|
||||
91153855713: 2 3 1 3 6 6 7 7 989 7 34 3
|
||||
5739997: 951 603 4 418 59 65 4
|
||||
626980232: 6 202 67 80 18 5 2
|
||||
4747733: 47 321 8 147 95 38
|
||||
107928: 5 9 3 170 2 6 4 61 508 4
|
||||
23558102: 7 2 16 4 7 5 6 6 5 9 1 99
|
||||
3185485154: 88 48 4 6 6 1 2 593 6 55
|
||||
23136: 238 3 96 1
|
||||
638: 1 4 6 487 5
|
||||
1708208892: 2 9 45 187 58 43 1 2
|
||||
14968528167: 8 579 51 5 28 167
|
||||
9945460932: 6 9 5 6 8 5 916 360 4 33
|
||||
5557436: 4 1 3 63 44 7 73 1 2 1 6 9
|
||||
862: 674 190 1
|
||||
250758036025: 3 330 120 753 27
|
||||
3525594141: 71 8 8 6 1 1 2 8 9 49 44
|
||||
7239: 721 2 9 1
|
||||
9508: 479 638 2 36 4 421 7
|
||||
103: 3 1 1 5 98
|
||||
390780: 49 452 4 195 1
|
||||
363428: 790 17 41 116 377
|
||||
155757666973: 7 2 2 8 8 44 9 6 66 9 7 5
|
||||
7060895263377: 38 393 7 47 43 559 7
|
||||
691906033: 3 6 48 49 33 6 247 7 8
|
||||
34158764: 853 835 4 536 4
|
||||
80088635: 23 201 42 96 2 1 3 5
|
||||
13013: 18 7 77 3 332
|
||||
50774459: 837 8 35 80 5 2 91 6 2
|
||||
327169: 390 7 824 33 8
|
||||
376192: 43 970 80 9 79 3
|
||||
730012804: 78 709 2 165 8 1
|
||||
4787861: 477 823 956 7 1
|
||||
2115126258: 787 5 79 756 9 789 9
|
||||
10684275841: 9 98 3 1 4 79 6 7 48 40 9
|
||||
8744258566: 152 1 94 34 6 82 3 4 1 3
|
||||
57560529: 5 49 985 234 40
|
||||
91086832317: 3 7 91 8 68 318 4 6 5 4 1
|
||||
10313078819: 515 650 2 7 875 6 6
|
||||
134021197048: 40 67 423 94 5 45
|
||||
3004143: 6 9 8 43 5 269 3
|
||||
29492: 6 649 28 696 4
|
||||
2597274: 6 4 395 9 9 626
|
||||
68091255: 6 714 82 12 5 5 3 9 86 5
|
||||
2845: 7 4 44 1
|
||||
104652062010: 95 153 72 620 10
|
||||
1170739907: 282 106 415 2 5
|
||||
1267124: 2 239 86 545
|
||||
73548167869: 5 8 41 3 762 2 7 742 4 8
|
||||
97610: 536 45 168
|
||||
30385962006: 5 45 2 157 5 4 6 9 5 5 5 6
|
||||
34136389: 1 453 7 836 9
|
||||
2859663: 6 641 303 7 83 4 4 9 3
|
||||
831006074: 220 4 26 58 65 54
|
||||
5595: 3 78 66 3 246
|
||||
19003371840: 39 10 44 2 9 5 895 192
|
||||
1551347724: 2 5 950 622 9 3 3 1 1 3 6
|
||||
13541596: 728 186 7 93 2
|
||||
649502: 76 4 3 468 4 6 24 9 2 1
|
||||
19761: 9 12 941
|
||||
795078: 107 4 894 2 9 6 9 6 2 6
|
||||
837304819: 6 834 6 4 83 4 5 3 4 3 4
|
||||
5986344: 2 36 8 25 8 2 9 7 6 8 78
|
||||
88505841: 436 3 5 9 7 2 9 816 8 41
|
||||
24532: 82 32 8 94 9
|
||||
467483: 9 13 512 25 2
|
||||
6636537605: 3 53 1 8 1 56 5 40 4 33 5
|
||||
8150: 56 25 53
|
||||
689417616: 2 334 21 41 7 616
|
||||
639347: 63 90 3 38 9
|
||||
3941: 16 7 16 4 3
|
||||
55039: 417 64 8 7 54 39
|
||||
46002735: 89 813 51 718 17
|
||||
456590: 43 6 1 34 47 37 587 7 8
|
||||
1991724104: 18 3 2 1 4 1 136 4 1 10 4
|
||||
59472469157: 3 33 12 6 469 157
|
||||
714290736: 868 1 991 1 8 9 9 7 7 8 6
|
||||
3612781652: 2 7 3 3 73 274 427 410
|
||||
15855368368: 3 321 62 77 914 368
|
||||
1785304: 1 3 4 9 7 3 9 339 56 6 3 8
|
||||
248248: 1 409 22 33 8
|
||||
85008: 73 2 408 8 22
|
||||
275270328357: 9 6 8 9 9 2 6 930 54 6 34
|
||||
5663910: 79 34 7 500 671
|
||||
11127: 79 967 3 4 630
|
||||
179132250: 9 5 3 3 69 909 2 7 8 962
|
||||
4158095: 7 9 35 58 93 8 62 499
|
||||
3554470140: 6 5 2 73 324 99 4 3 23
|
||||
24449671: 8 7 5 8 83 29 4 2 1 4 70 1
|
||||
13718997648: 507 762 349 27 650
|
||||
1149: 3 51 11 406 149
|
||||
364809367069: 4 2 5 95 4 3 9 4 117 7 6 7
|
||||
78161431493: 76 2 161 35 3 2 49 495
|
||||
149614581: 149 60 78 1 66 84
|
||||
147777: 829 5 602 20 31
|
||||
767044338: 451 3 9 345 9 632 6 79
|
||||
36147907: 3 6 14 76 72 238
|
||||
3552: 8 8 5 1 32 960 1
|
||||
127596066: 3 7 20 343 66
|
||||
525466393: 3 93 4 82 45 8 6 66 394
|
||||
67036412837: 6 6 9 321 543 161 645
|
||||
49566812: 486 9 620 47 6 5 49 1
|
||||
36941: 2 4 614 8 92
|
||||
232740: 7 13 69 7 2 4 56 8 4 6 36
|
||||
103981615845: 259 984 9 8 51 6 38 6 1
|
||||
192070: 305 15 2 22 3 1 3
|
||||
668719800: 41 7 906 13 3 2 611 5 8
|
||||
93386: 2 25 79 881
|
||||
4979436: 65 5 9 415 714
|
||||
1514021: 16 43 1 1 2 858 365
|
||||
6538594: 90 8 9 2 7 4 9 54 6 9 11 4
|
||||
23056640: 9 70 2 74 493 5 8 1
|
||||
1530672212: 1 78 4 2 3 6 663 9 1 4 7 2
|
||||
4062698: 577 89 61 90 3 8
|
||||
28841858187: 331 51 87 48 8 18 7
|
||||
267849863: 666 3 62 464 4 5
|
||||
50616209: 7 1 6 666 209
|
||||
51813: 5 17 6 9 44
|
||||
43065: 69 12 6 96 74
|
||||
1265168131485: 8 6 8 4 41 9 95 5 8 8 9 9
|
||||
277830795: 1 371 7 735 795
|
||||
670242195: 1 69 551 81 95
|
||||
351738: 878 88 6 41 4 1
|
||||
60511327: 9 160 6 4 5 6 7 25 876 3
|
||||
8723027848: 3 49 34 74 62 481 8
|
||||
376702259433: 76 970 413 109 429 8
|
||||
981338733: 3 845 75 9 387
|
||||
332372089: 217 4 14 4 93 7 65 6 7 7
|
||||
13062184: 32 55 7 55 35 4 28 5 85
|
||||
555428252: 8 226 8 48 5 7 2 4 7 8 1 9
|
||||
153435: 6 11 35 84 778 387 3
|
||||
8052295745: 67 6 44 705 48 8 63
|
||||
9637546: 23 1 419 470 73
|
||||
235413707139: 8 7 89 17 2 326 64 71
|
||||
152664989: 9 2 6 861 5 54 2 2 67 8 9
|
||||
10599157: 47 425 401 7 520
|
||||
321048168: 437 4 8 91 168
|
||||
6133466570: 613 338 4 82 570
|
||||
364395: 2 670 5 3 4 4 71 9 9 651
|
||||
96144271: 93 41 273 426 6 3
|
||||
296100266: 7 416 700 262 7
|
||||
12: 3 4 5
|
||||
316640576: 765 5 3 80 3 8 10 69 64
|
||||
3742903512: 440 341 55 4 85
|
||||
2424885: 999 485 97 365 5
|
||||
1109686976: 3 564 542 680 6 9 73
|
||||
130649102: 87 2 180 48 2 813 2
|
||||
351996258059: 1 841 90 8 12 3 31 5 56
|
||||
19712180: 69 7 5 3 2 42 952 6 1 61
|
||||
161820433: 174 6 500 62 85 5 6
|
||||
1751: 893 698 6 11 7 136
|
||||
865218480617: 7 3 564 5 4 7 840 3 1 5 4
|
||||
29024: 56 2 173 5 24
|
||||
137761920: 77 281 755 384
|
||||
234: 18 2 6 9
|
||||
85892: 8 749 98 99 249 5 39
|
||||
6668277571: 6 9 7 140 8 20 139 986
|
||||
58381: 138 21 556 4 872
|
||||
39749790: 2 659 9 5 2 6 5 2 8 331 3
|
||||
16910718: 54 86 5 73 726
|
||||
196244: 2 301 436 924 44
|
||||
680: 3 1 76 7 46 3 5
|
||||
24098: 21 3 8 5 651 9
|
||||
72406081: 76 1 987 9 964 4 2 7
|
||||
401310: 9 4 69 824 4 441
|
||||
482255395: 9 533 25 55 395
|
||||
336753: 86 5 76 995 3
|
||||
2009631: 2 7 488 4 70 6 1 50 878
|
||||
39840: 7 32 108 6 20
|
||||
5677304803: 3 8 989 803 48 8 759 7
|
||||
109641032174: 3 61 289 561 76 40 14
|
||||
509254455841: 4 26 69 895 172 461
|
||||
30807424: 1 489 63 42 4
|
||||
1305895444: 65 557 83 24 6
|
||||
36122860: 7 665 97 80 60
|
||||
432561944: 465 50 6 465 1 6 5 8 8
|
||||
1598755: 13 2 1 1 6 8 5 3 6 7 295 5
|
||||
214270585186: 5 2 479 31 90 3 8 497
|
||||
820817: 5 250 3 227 94 11 9 2
|
||||
87935: 6 8 8 81 5 34 384 5 4 8 1
|
||||
3181124: 4 2 356 6 5 79 45
|
||||
57558: 9 306 260 55 1
|
||||
469698: 3 376 14 76 698
|
||||
427158: 348 601 75 18 6
|
||||
259325: 47 42 9 54 99 8 32 3
|
||||
1854090496: 3 7 6 2 7 70 27 3 1 48 1 6
|
||||
951: 8 7 21 93 109 4
|
||||
805719131: 6 7 8 2 6 3 102 7 23 9 7 7
|
||||
3719908556832: 499 91 4 1 2 4 640 8 8 4
|
||||
144066: 29 108 3 559 39
|
||||
258758334: 2 586 1 58 1 334
|
||||
12025: 665 7 2 662 9
|
||||
87559383: 9 179 7 2 32 7 6 90 3
|
||||
288550536146: 5 476 74 4 2 606 145
|
||||
275093262: 4 430 760 7 834 860 4
|
||||
6227179152: 5 496 7 872 73 17
|
||||
254426: 31 350 1 453 8
|
||||
28668: 6 3 3 6 246 317 4 5 3 4
|
||||
204246: 7 8 1 34 2 460 5 3 7 6 1
|
||||
966451: 533 5 8 36 933 5 43 3
|
||||
1000614359: 1 8 794 8 4 2 908 7 3
|
||||
54277578: 180 4 5 252 6 3
|
||||
960344059020: 8 5 1 745 7 4 1 47 5 4 9 8
|
||||
1794254145263: 84 471 547 987 84
|
||||
61238: 3 50 359 7 96 38
|
||||
262072: 1 76 9 4 7 34 238
|
||||
163767141: 35 56 9 1 9 4 178 1 8 1
|
||||
4278695529: 62 69 695 526 3 1
|
||||
657492404523: 491 13 72 355 65 2 62
|
||||
12144984: 121 3 5 9 986
|
||||
2877557499: 57 484 9 129 531
|
||||
588122: 5 6 3 48 65
|
||||
6876603: 176 5 719 1 21 43
|
||||
1275198662: 2 83 751 6 662
|
||||
12739432716: 53 290 76 543 6 5 9 5 9
|
||||
412298231633: 9 34 9 4 5 3 3 25 5 63 1 7
|
||||
277472967211: 41 445 9 5 4 76 4 7 209
|
||||
20790: 45 7 15 9 7
|
||||
48961044215: 8 5 8 80 4 7 6 9 1 26 84 5
|
||||
270911: 2 83 25 215 518
|
||||
1640: 795 3 8 7 6 805 2 3 1 7 3
|
||||
111034: 33 35 5 37 7 41 6
|
||||
72864: 61 91 55 4 11 8
|
||||
5341448448: 1 88 5 8 7 4 9 3 7 6 4 392
|
||||
849: 801 3 1 45
|
||||
1677855061: 414 49 9 919 1
|
||||
1954728: 839 9 384 93 52 6 60 6
|
||||
3579938: 8 838 89 6 2
|
||||
54951093321: 5 495 109 332 3
|
||||
779284807: 9 463 784 5 234 5 2 65
|
||||
295479: 2 312 5 47 4 4 297 6
|
||||
86113396: 5 877 30 976 5 908
|
||||
417248766: 6 6 84 542 8 26 14 61 6
|
||||
7928: 7 925 6
|
||||
2561662: 88 3 24 3 76 39 90 676
|
||||
17824: 126 3 9 947 45 62 4
|
||||
474147901: 10 53 1 4 2 5 30 90 5 9
|
||||
332807: 61 5 135 318 6 6 599
|
||||
248428: 9 46 15 7 4
|
||||
5058558453: 35 239 55 261 2
|
||||
203986: 44 83 9 124 161
|
||||
5566: 602 8 1 9 8 5 29 4 7 3 6 5
|
||||
71442: 904 36 38 2
|
||||
52410: 5 2 90 6 3 9
|
||||
9126793: 39 2 520 67 93
|
||||
285020268: 315 28 3 59 358 39
|
||||
50
Inputs/Day8.txt
Normal file
50
Inputs/Day8.txt
Normal file
@@ -0,0 +1,50 @@
|
||||
.....wV....q.....................................n
|
||||
.......w......q.h.....Vn.........................D
|
||||
............w.S..G.....................DT.........
|
||||
......S........h......e..T.....y......D...........
|
||||
......m.......Ae.......T........o.................
|
||||
....m....S........................................
|
||||
...m..........................n........8..........
|
||||
.........2...G......................n.............
|
||||
..2........V.......h................Q.............
|
||||
............................o.....................
|
||||
.Z......I..U....e...u.....G....o..................
|
||||
...N..G.........................................y.
|
||||
.....I............q.......h...................s...
|
||||
......U........qI....o.V..Rz........8........k....
|
||||
......d.Z.........................R.......8y......
|
||||
.........e..............T.....l...................
|
||||
.......2.........................u...R............
|
||||
.....d.............................Q..............
|
||||
...................v.....................s.Q....M.
|
||||
........2..........4.....................8..7.k...
|
||||
...........x..N..................A..........k.....
|
||||
...........ZN...........v...............K.........
|
||||
...d.......N.....................Ky.6.............
|
||||
...........................l6.....................
|
||||
....L....g.................4.......k..K.......0...
|
||||
..............L...........4R................s.....
|
||||
U......r..............H.4.........................
|
||||
.......U.............a.......H.............u......
|
||||
......xY...............l..........................
|
||||
...................................6..u...........
|
||||
........Y......L......l............0..............
|
||||
......9..L...........A.....v..HEa........K........
|
||||
..................v........6.EX.............z.....
|
||||
d..Y.............m......A.........................
|
||||
......................a.i......M...........z......
|
||||
...................g.......................0......
|
||||
...............................H.........i........
|
||||
..........3................W........E...i...0.....
|
||||
.................t.a....g.................5.......
|
||||
.r...t...........................7.....5..........
|
||||
....................................7....5........
|
||||
....................g.Y...wMz.....................
|
||||
9..........O....3................W.7..E..XD...1...
|
||||
t..............3.x.....9..........W.M.............
|
||||
...9............W.................................
|
||||
Z.............x................X.i......5.........
|
||||
...........3.....................................1
|
||||
...................O.......s....X.................
|
||||
..............r...................................
|
||||
..........................O.................1.....
|
||||
1
Inputs/Day9.txt
Normal file
1
Inputs/Day9.txt
Normal file
File diff suppressed because one or more lines are too long
15
Program.cs
15
Program.cs
@@ -25,6 +25,19 @@ var selectedDay = AnsiConsole.Prompt(select);
|
||||
|
||||
var stopWatch = new Stopwatch();
|
||||
|
||||
// Read input
|
||||
try
|
||||
{
|
||||
selectedDay.ReadInput();
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
AnsiConsole.WriteException(e);
|
||||
|
||||
Environment.Exit(1);
|
||||
}
|
||||
|
||||
// Part 1
|
||||
AnsiConsole.MarkupLine($"[cyan]Running [yellow]{selectedDay}[/]...[/]\n");
|
||||
|
||||
AnsiConsole.MarkupLine("[cyan]Part [yellow]1[/] result:[/]");
|
||||
@@ -44,7 +57,9 @@ catch (Exception e)
|
||||
|
||||
stopWatch.Reset();
|
||||
|
||||
// Part 2
|
||||
AnsiConsole.MarkupLine("\n[cyan]Part [yellow]2[/] result:[/]");
|
||||
|
||||
try
|
||||
{
|
||||
stopWatch.Start();
|
||||
|
||||
@@ -14,4 +14,25 @@ public static class StringExtensions
|
||||
{
|
||||
return new StringReader(text).ReadAllLines();
|
||||
}
|
||||
|
||||
public static char[,] AsCharGrid(this string text)
|
||||
{
|
||||
var lines = text.ReadAllLines().ToArray();
|
||||
var lineCount = lines.Length;
|
||||
var columnCount = lines[0].Length;
|
||||
|
||||
var grid = new char[lineCount, columnCount];
|
||||
|
||||
for (int i = 0; i < lineCount; i++)
|
||||
{
|
||||
var line = lines[i];
|
||||
|
||||
for (int j = 0; j < columnCount; j++)
|
||||
{
|
||||
grid[i, j] = line[j];
|
||||
}
|
||||
}
|
||||
|
||||
return grid;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user