Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b7b3192510 |
@@ -2,10 +2,9 @@
|
|||||||
|
|
||||||
<PropertyGroup>
|
<PropertyGroup>
|
||||||
<OutputType>Exe</OutputType>
|
<OutputType>Exe</OutputType>
|
||||||
<TargetFramework>net9.0</TargetFramework>
|
<TargetFramework>net7.0</TargetFramework>
|
||||||
<ImplicitUsings>enable</ImplicitUsings>
|
<ImplicitUsings>enable</ImplicitUsings>
|
||||||
<Nullable>enable</Nullable>
|
<Nullable>enable</Nullable>
|
||||||
<LangVersion>latest</LangVersion>
|
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
@@ -13,9 +12,4 @@
|
|||||||
<PackageReference Include="Spectre.Console" Version="0.45.0" />
|
<PackageReference Include="Spectre.Console" Version="0.45.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
|
||||||
<None Remove="Inputs\*" />
|
|
||||||
<EmbeddedResource Include="Inputs\*" />
|
|
||||||
</ItemGroup>
|
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -7,13 +7,7 @@ namespace AdventOfCode;
|
|||||||
[MemoryDiagnoser(false)]
|
[MemoryDiagnoser(false)]
|
||||||
public class DayBenchmark
|
public class DayBenchmark
|
||||||
{
|
{
|
||||||
private Day Day { get; } = new Day10();
|
private Day Day => new Day15();
|
||||||
|
|
||||||
[GlobalSetup]
|
|
||||||
public void Setup()
|
|
||||||
{
|
|
||||||
Day.ReadInput();
|
|
||||||
}
|
|
||||||
|
|
||||||
[Benchmark]
|
[Benchmark]
|
||||||
public void Part1()
|
public void Part1()
|
||||||
|
|||||||
12
Days/Day.cs
12
Days/Day.cs
@@ -1,5 +1,3 @@
|
|||||||
using System.Reflection;
|
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
|
|
||||||
public abstract class Day
|
public abstract class Day
|
||||||
@@ -7,19 +5,9 @@ public abstract class Day
|
|||||||
public abstract int Number { get; }
|
public abstract int Number { get; }
|
||||||
public abstract string Name { get; }
|
public abstract string Name { get; }
|
||||||
|
|
||||||
protected string Input { get; private set; } = null!;
|
|
||||||
|
|
||||||
public abstract void RunPart1(bool display = true);
|
public abstract void RunPart1(bool display = true);
|
||||||
public abstract void RunPart2(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()
|
public override string ToString()
|
||||||
{
|
{
|
||||||
return $"Day {Number}: {Name}";
|
return $"Day {Number}: {Name}";
|
||||||
|
|||||||
2311
Days/Day1.cs
2311
Days/Day1.cs
File diff suppressed because it is too large
Load Diff
386
Days/Day10.cs
386
Days/Day10.cs
@@ -1,5 +1,3 @@
|
|||||||
using System.Collections.Frozen;
|
|
||||||
using System.Numerics;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
@@ -7,163 +5,283 @@ namespace AdventOfCode.Days;
|
|||||||
public class Day10 : Day
|
public class Day10 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 10;
|
public override int Number => 10;
|
||||||
public override string Name => "Hoof It";
|
public override string Name => "Cathode-Ray Tube";
|
||||||
|
|
||||||
private const int MapSize = 60;
|
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var hikingTrailsScores = 0;
|
int cycle = 1;
|
||||||
|
int x = 1;
|
||||||
|
long sum = 0;
|
||||||
|
|
||||||
var (heightMap, trailHeads) = ParseMap();
|
// Increment sum when needed
|
||||||
|
void IncrementCycle()
|
||||||
var hikingTrails = new HashSet<Point>();
|
|
||||||
|
|
||||||
foreach (var trailHead in trailHeads)
|
|
||||||
{
|
{
|
||||||
hikingTrails.Clear();
|
cycle++;
|
||||||
|
|
||||||
GetHikingTrailScore(trailHead, -1);
|
// Check for signal stength at the start of a cycle
|
||||||
|
if ((cycle + 20) % 40 == 0)
|
||||||
|
{
|
||||||
|
sum += x * cycle;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
hikingTrailsScores += hikingTrails.Count;
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Sum of scores of hiking trails: [yellow]{hikingTrailsScores}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Sum of signal strengths: [yellow]{sum}[/][/]");
|
||||||
}
|
|
||||||
|
|
||||||
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)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var (heightMap, trailHeads) = ParseMap();
|
// Setup the CRT
|
||||||
|
const char litPixel = '#';
|
||||||
|
const char darkPixel = '.';
|
||||||
|
|
||||||
var totalRating = 0;
|
const int rowCount = 6;
|
||||||
|
const int columnCount = 40;
|
||||||
|
var crt = new char[rowCount, columnCount];
|
||||||
|
var crtCanvas = new Canvas(columnCount, rowCount);
|
||||||
|
|
||||||
foreach (var trailHead in trailHeads)
|
// 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()
|
||||||
{
|
{
|
||||||
GetHikingTrailRating(trailHead, -1);
|
cycle++;
|
||||||
|
|
||||||
|
// We're done drawing the crt
|
||||||
|
if (cycle > 240)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Draw a white or black pixel
|
||||||
|
int row = (cycle - 1) / columnCount;
|
||||||
|
int column = (cycle - 1) % columnCount;
|
||||||
|
|
||||||
|
// The CRT is drawing on the sprite
|
||||||
|
if (column == x - 1 || column == x || column == x + 1)
|
||||||
|
{
|
||||||
|
crt[row, column] = litPixel;
|
||||||
|
crtCanvas.SetPixel(column, row, (cycle + row) % 2 == 0 ? Color.Green : Color.Red);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
crt[row, column] = darkPixel;
|
||||||
|
crtCanvas.SetPixel(column, row, Color.Black);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Total rating of hiking trails: [yellow]{totalRating}[/][/]");
|
AnsiConsole.Write(crtCanvas);
|
||||||
}
|
|
||||||
|
|
||||||
return;
|
|
||||||
|
|
||||||
void GetHikingTrailRating(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)
|
|
||||||
{
|
|
||||||
totalRating++;
|
|
||||||
}
|
|
||||||
|
|
||||||
GetHikingTrailRating(position + (1, 0), height);
|
|
||||||
GetHikingTrailRating(position + (-1, 0), height);
|
|
||||||
GetHikingTrailRating(position + (0, 1), height);
|
|
||||||
GetHikingTrailRating(position + (0, -1), height);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private (byte[,] HeightMap, List<Point> TrailHeads) ParseMap()
|
#region Input
|
||||||
{
|
|
||||||
var heightMap = new byte[MapSize, MapSize];
|
|
||||||
var trailHeads = new List<Point>();
|
|
||||||
|
|
||||||
var y = 0;
|
public const string Input =
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
"""
|
||||||
{
|
noop
|
||||||
var x = 0;
|
noop
|
||||||
foreach (var height in line)
|
addx 15
|
||||||
{
|
addx -10
|
||||||
var heightValue = height - '0';
|
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
|
||||||
|
""";
|
||||||
|
|
||||||
if (heightValue is 0)
|
#endregion
|
||||||
{
|
|
||||||
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,127 +1,233 @@
|
|||||||
using System.Collections.Frozen;
|
using System.Collections.Immutable;
|
||||||
using System.Numerics;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
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 class Day11 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 11;
|
public override int Number => 11;
|
||||||
public override string Name => "Plutonian Pebbles";
|
public override string Name => "Monkey in the Middle";
|
||||||
|
|
||||||
private const int BlinkIterations = 25;
|
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var stones = ParseStones();
|
const int roundsCount = 20;
|
||||||
|
|
||||||
for (var iteration = 0; iteration < BlinkIterations; iteration++)
|
var monkeys = ParseMonkeys();
|
||||||
|
|
||||||
|
// Do 20 rounds
|
||||||
|
for (int round = 0; round < roundsCount; round++)
|
||||||
{
|
{
|
||||||
var index = 0;
|
foreach (var monkey in monkeys)
|
||||||
|
|
||||||
while (index < stones.Count)
|
|
||||||
{
|
{
|
||||||
var stone = stones[index];
|
// Throw items while there's some
|
||||||
var stoneString = stone.ToString();
|
while (monkey.ThrowItem(monkeys)) { }
|
||||||
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Number of stones after blinking {BlinkIterations} times: [yellow]{stones.Count}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var stones = ParseStones().ToDictionary(s => s, _ => 1L);
|
const int roundsCount = 10_000;
|
||||||
|
|
||||||
for (var iteration = 0; iteration < (BlinkIterations * 3); iteration++)
|
var monkeys = ParseMonkeys();
|
||||||
|
|
||||||
|
// Do 10 000 rounds
|
||||||
|
for (int round = 0; round < roundsCount; round++)
|
||||||
{
|
{
|
||||||
var stonesToIterate = stones.ToList();
|
foreach (var monkey in monkeys)
|
||||||
|
|
||||||
foreach (var (stone, count) in stonesToIterate)
|
|
||||||
{
|
{
|
||||||
var stoneString = stone.ToString();
|
// Throw items while there's some
|
||||||
|
while (monkey.ThrowItem(monkeys, false)) { }
|
||||||
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 stonesCount = stones.Sum(p => p.Value);
|
var topMonkeys = monkeys.OrderByDescending(m => m.InspectionCount).Take(2).ToList();
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Number of stones after blinking {BlinkIterations} times: [yellow]{stonesCount}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Monkey business: [yellow]{topMonkeys[0].InspectionCount * topMonkeys[1].InspectionCount}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<long> ParseStones()
|
private static IImmutableList<Monkey> ParseMonkeys()
|
||||||
{
|
{
|
||||||
var stones = new List<long>();
|
var monkeys = new List<Monkey>();
|
||||||
|
|
||||||
var span = Input.AsSpan();
|
// Split by monkey description
|
||||||
|
foreach (var monkey in Input.ReplaceLineEndings("\n").Split("\n\n"))
|
||||||
foreach (var stoneRange in span.Split(' '))
|
|
||||||
{
|
{
|
||||||
stones.Add(long.Parse(span[stoneRange]));
|
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));
|
||||||
}
|
}
|
||||||
|
|
||||||
return stones;
|
return monkeys.ToImmutableList();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void SafeAdd(Dictionary<long, long> dictionary, long key, long valueToAdd)
|
#region Input
|
||||||
{
|
|
||||||
if (dictionary.TryGetValue(key, out var currentValue))
|
public const string Input =
|
||||||
{
|
"""
|
||||||
dictionary[key] = currentValue + valueToAdd;
|
Monkey 0:
|
||||||
}
|
Starting items: 89, 95, 92, 64, 87, 68
|
||||||
else
|
Operation: new = old * 11
|
||||||
{
|
Test: divisible by 2
|
||||||
dictionary[key] = valueToAdd;
|
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
|
||||||
}
|
}
|
||||||
398
Days/Day12.cs
398
Days/Day12.cs
@@ -1,5 +1,3 @@
|
|||||||
using System.Collections.Frozen;
|
|
||||||
using System.Numerics;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
@@ -7,149 +5,329 @@ namespace AdventOfCode.Days;
|
|||||||
public class Day12 : Day
|
public class Day12 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 12;
|
public override int Number => 12;
|
||||||
public override string Name => "Garden Groups";
|
public override string Name => "Hill Climbing Algorithm";
|
||||||
|
|
||||||
private const int GridSize = 140;
|
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;
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var areas = ParseAreas();
|
var map = ParseMap();
|
||||||
|
var canvas = DrawMap(map);
|
||||||
|
|
||||||
var visited = new HashSet<Point>();
|
// Test all possible solutions
|
||||||
var totalPrice = 0;
|
var minimumPathLength = ExplorePath(map);
|
||||||
|
|
||||||
var currentArea = 0;
|
// Draw solution path
|
||||||
var currentPerimeter = 0;
|
foreach (var (x, y) in minimumPathLength.path)
|
||||||
|
|
||||||
for (var y = 0; y < GridSize; y++)
|
|
||||||
{
|
{
|
||||||
for (var x = 0; x < GridSize; x++)
|
canvas.SetPixel(x, y, Color.White);
|
||||||
{
|
|
||||||
// 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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Total pricing: [yellow]{totalPrice}[/][/]");
|
AnsiConsole.Write(canvas);
|
||||||
}
|
AnsiConsole.WriteLine();
|
||||||
|
|
||||||
return;
|
AnsiConsole.MarkupLine($"[green]Minimum path length: [yellow]{minimumPathLength.length}[/][/]");
|
||||||
|
|
||||||
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)
|
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 byte[,] ParseAreas()
|
private (int length, List<(int x, int y)> path) ExplorePath(byte[,] map)
|
||||||
{
|
{
|
||||||
var areas = new byte[GridSize, GridSize];
|
var height = map.GetLength(0);
|
||||||
|
var width = map.GetLength(1);
|
||||||
|
|
||||||
int y = 0;
|
// 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)>();
|
||||||
|
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
toExplore.Enqueue((_start.x, _start.y, 0, 0, new()));
|
||||||
|
|
||||||
|
// Explore all possible path
|
||||||
|
while (toExplore.Count > 0)
|
||||||
{
|
{
|
||||||
int x = 0;
|
var (x, y, previousElevation, steps, path) = toExplore.Dequeue();
|
||||||
|
|
||||||
foreach (var area in line)
|
// If we went out of bound
|
||||||
|
if (x < 0 || x >= width || y < 0 || y >= height)
|
||||||
{
|
{
|
||||||
areas[x, y] = (byte)(area - 'A');
|
continue;
|
||||||
|
|
||||||
x++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
y++;
|
// 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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return areas;
|
return pathLengths.MinBy(p => p.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly record struct Point(int X, int Y)
|
private (int length, List<(int x, int y)> path) FindNearestStart(byte[,] map)
|
||||||
: IAdditionOperators<Point, Point, Point>,
|
|
||||||
ISubtractionOperators<Point, Point, Point>,
|
|
||||||
IMultiplyOperators<Point, int, Point>
|
|
||||||
{
|
{
|
||||||
public static Point operator +(Point left, Point right)
|
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)
|
||||||
{
|
{
|
||||||
return new Point(left.X + right.X, left.Y + right.Y);
|
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));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Point operator -(Point left, Point right)
|
return pathLengths.MinBy(p => p.length);
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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++)
|
||||||
|
{
|
||||||
|
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 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++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
canvas.SetPixel(x, y, _colorMap[map[y, x]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return canvas;
|
||||||
|
}
|
||||||
|
|
||||||
|
#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,87 +1,731 @@
|
|||||||
using System.Collections.Frozen;
|
using Spectre.Console;
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
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 class Day13 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 13;
|
public override int Number => 13;
|
||||||
public override string Name => "Claw Contraption";
|
public override string Name => "Distress Signal";
|
||||||
|
|
||||||
private const int MaxButtonPress = 100;
|
|
||||||
private const int ButtonACost = 3;
|
|
||||||
private const int ButtonBCost = 1;
|
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var lines = Input.AsSpan().EnumerateLines();
|
var pairs = ParsePacketPairs();
|
||||||
|
|
||||||
var minimumTokensToWin = 0;
|
var sum = 0;
|
||||||
|
|
||||||
while (lines.MoveNext())
|
for (int i = 0; i < pairs.Count; i++)
|
||||||
{
|
{
|
||||||
var (aX, aY, bX, bY, goalX, goalY) = ParseMachine(ref lines);
|
var pair = pairs[i];
|
||||||
|
|
||||||
for (var i = MaxButtonPress; i >= 0; i--)
|
if (pair.left < pair.right)
|
||||||
{
|
{
|
||||||
var xOffset = bX * i;
|
sum += i + 1;
|
||||||
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Minimum tokens to win all prizes: [yellow]{minimumTokensToWin}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Right order pair indices sum: [yellow]{sum}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
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)
|
|
||||||
{
|
{
|
||||||
var lineA = lines.Current;
|
// This is an integer
|
||||||
lines.MoveNext();
|
if (packet[0] != '[')
|
||||||
|
{
|
||||||
|
return ReadInteger(ref packet);
|
||||||
|
}
|
||||||
|
|
||||||
var lineB = lines.Current;
|
// This is a list packet
|
||||||
lines.MoveNext();
|
return ReadList(ref packet);
|
||||||
|
|
||||||
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
|
||||||
}
|
}
|
||||||
623
Days/Day14.cs
623
Days/Day14.cs
@@ -1,151 +1,582 @@
|
|||||||
using System.Collections.Frozen;
|
using System.Drawing;
|
||||||
using System.Numerics;
|
|
||||||
using System.Text;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
using Color = Spectre.Console.Color;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
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 class Day14 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 14;
|
public override int Number => 14;
|
||||||
public override string Name => "Restroom Redoubt";
|
public override string Name => "Regolith Reservoir";
|
||||||
|
|
||||||
private const int Height = 103;
|
private readonly Point _sandSource = new(500, 0);
|
||||||
private const int HeightCenter = Height / 2;
|
private Point _offsetSandSource;
|
||||||
|
|
||||||
private const int Width = 101;
|
|
||||||
private const int WidthCenter = Width / 2;
|
|
||||||
|
|
||||||
private const int Iterations = 100;
|
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var robots = ParseRobots();
|
var map = GenerateMap();
|
||||||
|
|
||||||
for (var i = 0; i < Iterations; i++)
|
// 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))
|
||||||
{
|
{
|
||||||
foreach (var robot in robots)
|
sandBlocksCount++;
|
||||||
{
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Safety factor: [yellow]{safetyFactor}[/][/]");
|
AnsiConsole.Write(canvas);
|
||||||
|
|
||||||
|
AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var robots = ParseRobots();
|
var map = GenerateDictionaryMap();
|
||||||
|
|
||||||
var canvas = new Canvas(Width, Height);
|
// Compute ground level
|
||||||
|
var yMax = map.Keys.Max(p => p.Y);
|
||||||
|
var groundLevel = yMax + 2;
|
||||||
|
|
||||||
for (var i = 0; i < int.MaxValue; i++)
|
// Simulate sand fall
|
||||||
|
int sandBlocksCount = 0;
|
||||||
|
while (GenerateSand(map, _sandSource, groundLevel))
|
||||||
{
|
{
|
||||||
for (var x = 0; x < Width; x++)
|
sandBlocksCount++;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if (display)
|
||||||
|
{
|
||||||
|
AnsiConsole.Write(GenerateCanvas(map, _sandSource));
|
||||||
|
|
||||||
|
AnsiConsole.MarkupLine($"[green]Total sand blocks: [yellow]{sandBlocksCount}[/][/]");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool GenerateSand(CellType[,] map, Canvas canvas, in Point sandSource)
|
||||||
|
{
|
||||||
|
// Stop if source is blocked
|
||||||
|
if (map[sandSource.X, sandSource.Y] == CellType.Sand)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
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)
|
||||||
{
|
{
|
||||||
for (var y = 0; y < Height; y++)
|
return false;
|
||||||
{
|
|
||||||
canvas.SetPixel(x, y, Color.Grey23);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach (var robot in robots)
|
// Try below
|
||||||
|
if (map[sandPosition.X, sandPosition.Y + 1] == CellType.Air)
|
||||||
{
|
{
|
||||||
robot.Position = new Point(
|
sandPosition.Y += 1;
|
||||||
Math.Abs((Width + robot.Position.X + robot.Velocity.X) % Width),
|
continue;
|
||||||
Math.Abs((Height + robot.Position.Y + robot.Velocity.Y) % Height)
|
|
||||||
);
|
|
||||||
|
|
||||||
canvas.SetPixel(robot.Position.X, robot.Position.Y, Color.Green1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display grid
|
// Fall outbound on the left
|
||||||
if ((i + 1 - 46) % 101 == 0)
|
if (sandPosition.X - 1 < 0)
|
||||||
{
|
{
|
||||||
AnsiConsole.Write(canvas);
|
return false;
|
||||||
AnsiConsole.WriteLine();
|
}
|
||||||
|
|
||||||
AnsiConsole.Write($"Seconds elapsed: {i + 1}");
|
// Try on the left
|
||||||
|
if (map[sandPosition.X - 1, sandPosition.Y + 1] == CellType.Air)
|
||||||
|
{
|
||||||
|
sandPosition.X -= 1;
|
||||||
|
sandPosition.Y += 1;
|
||||||
|
|
||||||
var key = Console.ReadKey(true).Key;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (key is ConsoleKey.Enter)
|
// Fall outbound on the right
|
||||||
{
|
if (sandPosition.X + 1 >= width)
|
||||||
AnsiConsole.WriteLine();
|
{
|
||||||
AnsiConsole.WriteLine();
|
return false;
|
||||||
AnsiConsole.MarkupLine($"[green]Image at instant: [yellow]t={i + 1}s[/][/]");
|
}
|
||||||
|
|
||||||
break;
|
// Lastly try on the right
|
||||||
}
|
if (map[sandPosition.X + 1, sandPosition.Y + 1] == CellType.Air)
|
||||||
|
{
|
||||||
|
sandPosition.X += 1;
|
||||||
|
sandPosition.Y += 1;
|
||||||
|
|
||||||
AnsiConsole.Clear();
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Can't go anywhere, stop
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
map[sandPosition.X, sandPosition.Y] = CellType.Sand;
|
||||||
|
canvas.SetPixel(sandPosition.X, sandPosition.Y, Color.SandyBrown);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static bool GenerateSand(IDictionary<Point, CellType> map, in Point sandSource, int groundY)
|
||||||
|
{
|
||||||
|
// Stop if source is blocked
|
||||||
|
if (map.GetValueOrDefault(sandSource, CellType.Air) == CellType.Sand)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var sandPosition = new Point(sandSource.X, sandSource.Y);
|
||||||
|
|
||||||
|
// Make sand fall till we don't go outbound
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
|
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++)
|
||||||
|
{
|
||||||
|
for (int y = 0; y < height; y++)
|
||||||
|
{
|
||||||
|
canvas.SetPixel(x, y, ColorCellType(map[x, y]));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return canvas;
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Robot> ParseRobots()
|
private static Canvas GenerateCanvas(IDictionary<Point, CellType> map, in Point sandSource)
|
||||||
{
|
{
|
||||||
var robots = new List<Robot>();
|
// Compute dimensions
|
||||||
|
var xMin = map.Keys.Min(p => p.X);
|
||||||
|
var xMax = map.Keys.Max(p => p.X);
|
||||||
|
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
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++)
|
||||||
{
|
{
|
||||||
var positionX = int.Parse(line[(line.IndexOf('=') + 1)..line.IndexOf(',')]);
|
for (int y = yMin; y <= yMax; y++)
|
||||||
var positionY = int.Parse(line[(line.IndexOf(',') + 1)..line.IndexOf(' ')]);
|
{
|
||||||
|
canvas.SetPixel(x - xMin, y - yMin, Color.Grey23);
|
||||||
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)));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return robots;
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class Robot(Point position, Point velocity)
|
private CellType[,] GenerateMap()
|
||||||
{
|
{
|
||||||
public Point Position { get; set; } = position;
|
var paths = Input.ReadAllLines()
|
||||||
public Point Velocity { get; } = velocity;
|
.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 readonly record struct Point(int X, int Y)
|
private static Color ColorCellType(CellType cellType)
|
||||||
: IAdditionOperators<Point, Point, Point>,
|
|
||||||
ISubtractionOperators<Point, Point, Point>,
|
|
||||||
IMultiplyOperators<Point, int, Point>
|
|
||||||
{
|
{
|
||||||
public static Point operator +(Point left, Point right)
|
return cellType switch
|
||||||
{
|
{
|
||||||
return new Point(left.X + right.X, left.Y + right.Y);
|
CellType.Air => Color.Grey23,
|
||||||
}
|
CellType.Rock => Color.LightSlateGrey,
|
||||||
|
CellType.Sand => Color.SandyBrown,
|
||||||
public static Point operator -(Point left, Point right)
|
_ => throw new Exception("Invalid CellType")
|
||||||
{
|
};
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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
|
||||||
}
|
}
|
||||||
387
Days/Day15.cs
387
Days/Day15.cs
@@ -1,193 +1,292 @@
|
|||||||
using System.Collections.Frozen;
|
using System.Collections.Concurrent;
|
||||||
using System.Numerics;
|
using System.Drawing;
|
||||||
using System.Text;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
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 class Day15 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 15;
|
public override int Number => 15;
|
||||||
public override string Name => "Warehouse Woes";
|
public override string Name => "Beacon Exclusion Zone";
|
||||||
|
|
||||||
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)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var (map, position, instructions) = ParseMap();
|
const int targetY = 2_000_000;
|
||||||
|
|
||||||
foreach (var instruction in instructions)
|
// 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)
|
||||||
{
|
{
|
||||||
var direction = instruction switch
|
// Get covered columns on y line
|
||||||
{
|
var xCenter = sensorBeaconPair.SensorPosition.X;
|
||||||
InstructionLeft => new Point(-1, 0),
|
var coveredColumns = sensorBeaconPair.SensorRange - Math.Abs(sensorBeaconPair.SensorPosition.Y - targetY);
|
||||||
InstructionRight => new Point(1, 0),
|
|
||||||
InstructionUp => new Point(0, -1),
|
|
||||||
InstructionDown => new Point(0, 1),
|
|
||||||
_ => throw new ArgumentException($"Invalid instruction: {instruction}")
|
|
||||||
};
|
|
||||||
|
|
||||||
var destination = position + direction;
|
if (coveredColumns > 0)
|
||||||
|
|
||||||
// Destination is free, just move
|
|
||||||
if (map[destination.X, destination.Y] is not (Wall or Box))
|
|
||||||
{
|
{
|
||||||
position = destination;
|
ranges.Add(new CoverRange(xCenter - coveredColumns, xCenter + coveredColumns));
|
||||||
}
|
|
||||||
// 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)
|
// Check if the beacon is on targetY
|
||||||
|
if (sensorBeaconPair.BeaconPosition.Y == targetY)
|
||||||
{
|
{
|
||||||
pushTarget += direction;
|
beaconsOnTargetY.Add(sensorBeaconPair.BeaconPosition.X);
|
||||||
}
|
|
||||||
|
|
||||||
// Cannot move anything since there is a wall
|
|
||||||
if (map[pushTarget.X, pushTarget.Y] is Wall)
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 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)
|
|
||||||
{
|
|
||||||
coordinatesSum += 100 * y + x;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Sum of boxes GPS coordinates: [yellow]{coordinatesSum}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Number of positions that cannot contain a beacon: [yellow]{totalCovered}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void DisplayGrid(char[,] map)
|
|
||||||
{
|
|
||||||
for (var y = 0; y < Size; y++)
|
|
||||||
{
|
|
||||||
for (var x = 0; x < Size; x++)
|
|
||||||
{
|
|
||||||
AnsiConsole.Write(map[x, y]);
|
|
||||||
}
|
|
||||||
|
|
||||||
AnsiConsole.WriteLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
AnsiConsole.WriteLine();
|
|
||||||
}
|
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
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;
|
||||||
|
|
||||||
private (char[,] Map, Point Start, List<char> Instructions) ParseMap()
|
// Parse pairs
|
||||||
{
|
var pairs = ParsePairs();
|
||||||
var readingMap = true;
|
|
||||||
|
|
||||||
var map = new char[Size, Size];
|
// Find all points that are just outside a sensor range
|
||||||
|
var possiblePoints = new ConcurrentBag<Point>();
|
||||||
|
|
||||||
Point start = default;
|
Parallel.For(0, pairs.Count, i =>
|
||||||
|
|
||||||
var instructions = new List<char>();
|
|
||||||
|
|
||||||
var y = 0;
|
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
|
||||||
{
|
{
|
||||||
if (line.IsWhiteSpace())
|
var pair = pairs[i];
|
||||||
{
|
|
||||||
readingMap = false;
|
|
||||||
|
|
||||||
continue;
|
var sensor = pair.SensorPosition;
|
||||||
}
|
var distance = pair.SensorRange + 1;
|
||||||
|
|
||||||
if (readingMap)
|
for (int x = -distance; x <= distance; x++)
|
||||||
{
|
{
|
||||||
var x = 0;
|
var y = distance - Math.Abs(x);
|
||||||
foreach (var symbol in line)
|
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)
|
||||||
{
|
{
|
||||||
map[x, y] = Empty;
|
continue;
|
||||||
|
|
||||||
if (symbol is Wall or Box)
|
|
||||||
{
|
|
||||||
map[x, y] = symbol;
|
|
||||||
}
|
|
||||||
else if (symbol is '@')
|
|
||||||
{
|
|
||||||
start = new Point(x, y);
|
|
||||||
}
|
|
||||||
|
|
||||||
x++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
y++;
|
// Check if this point is just outside at least one other sensor range
|
||||||
}
|
for (int otherIndex = 0; otherIndex < pairs.Count; otherIndex++)
|
||||||
else
|
|
||||||
{
|
|
||||||
foreach (var instruction in line)
|
|
||||||
{
|
{
|
||||||
instructions.Add(instruction);
|
if (otherIndex == i)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
});
|
||||||
|
|
||||||
return (map, start, instructions);
|
// 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}[/][/]");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly record struct Point(int X, int Y)
|
private static IList<SensorBeaconPair> ParsePairs()
|
||||||
: IAdditionOperators<Point, Point, Point>,
|
|
||||||
ISubtractionOperators<Point, Point, Point>,
|
|
||||||
IMultiplyOperators<Point, int, Point>
|
|
||||||
{
|
{
|
||||||
public static Point operator +(Point left, Point right)
|
var pairs = new List<SensorBeaconPair>();
|
||||||
|
|
||||||
|
foreach (var line in Input.ReadAllLines())
|
||||||
{
|
{
|
||||||
return new Point(left.X + right.X, left.Y + right.Y);
|
var span = line.AsSpan();
|
||||||
|
|
||||||
|
// 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)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Point operator -(Point left, Point right)
|
return pairs;
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#region Input
|
||||||
|
|
||||||
|
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
|
||||||
}
|
}
|
||||||
416
Days/Day16.cs
416
Days/Day16.cs
@@ -1,289 +1,219 @@
|
|||||||
using System.Numerics;
|
using Spectre.Console;
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
|
|
||||||
|
public class Valve
|
||||||
|
{
|
||||||
|
public string Name { get; }
|
||||||
|
public int Rate { get; }
|
||||||
|
public IList<Valve> AccessibleValves { get; }
|
||||||
|
|
||||||
|
public Valve(string name, int rate)
|
||||||
|
{
|
||||||
|
Name = name;
|
||||||
|
Rate = rate;
|
||||||
|
AccessibleValves = new List<Valve>();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public record ValvePath(int CurrentMinute, int PressurePerMinute, int ReleasedPressure, Valve CurrentValve, HashSet<Valve> OpenedValves);
|
||||||
|
|
||||||
public class Day16 : Day
|
public class Day16 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 16;
|
public override int Number => 16;
|
||||||
public override string Name => "Reindeer Maze";
|
public override string Name => "Proboscidea Volcanium";
|
||||||
|
|
||||||
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)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var (maze, start, end) = ParseMaze();
|
var startValve = ParseValves();
|
||||||
|
|
||||||
var visited = new Dictionary<(Point Position, Point Direction), int>();
|
// Test all possibles paths
|
||||||
|
int maxPressure = 0;
|
||||||
|
var paths = new Queue<ValvePath>();
|
||||||
|
paths.Enqueue(new ValvePath(1, 0, 0, startValve, new HashSet<Valve>()));
|
||||||
|
|
||||||
var minimumScore = int.MaxValue;
|
// Remember best pressure at each valve
|
||||||
|
var valvePotential = new Dictionary<Valve, (int currentMinute, int potential)>();
|
||||||
|
|
||||||
var toVisit = new Queue<(Point Position, Point Direction, int Score)>();
|
while (paths.Count > 0)
|
||||||
|
|
||||||
toVisit.Enqueue((start, DirectionRight, 0));
|
|
||||||
|
|
||||||
while (toVisit.Count > 0)
|
|
||||||
{
|
{
|
||||||
var (position, direction, score) = toVisit.Dequeue();
|
var state = paths.Dequeue();
|
||||||
|
|
||||||
if (visited.TryGetValue((position, direction), out var savedScore) && savedScore <= score)
|
// Check if this state is worse than last one at this same valve
|
||||||
|
int potential = state.ReleasedPressure + (30 - state.CurrentMinute + 1) * state.PressurePerMinute;
|
||||||
|
if (valvePotential.TryGetValue(state.CurrentValve, out var lastState))
|
||||||
{
|
{
|
||||||
continue;
|
if (state.CurrentMinute >= lastState.currentMinute)
|
||||||
}
|
|
||||||
|
|
||||||
visited[(position, direction)] = score;
|
|
||||||
|
|
||||||
// Reached end
|
|
||||||
if (position == end)
|
|
||||||
{
|
|
||||||
if (score < minimumScore)
|
|
||||||
{
|
{
|
||||||
minimumScore = score;
|
if (potential <= lastState.potential)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
valvePotential[state.CurrentValve] = (state.CurrentMinute, potential);
|
||||||
|
|
||||||
|
// Release pressure at start of minute
|
||||||
|
var newPressure = state.ReleasedPressure + state.PressurePerMinute;
|
||||||
|
|
||||||
|
// Compute new max
|
||||||
|
if (newPressure > maxPressure)
|
||||||
|
{
|
||||||
|
maxPressure = newPressure;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Stop at minute 30
|
||||||
|
if (state.CurrentMinute == 30)
|
||||||
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Try forward if there is no wall
|
// Check if the valve can be opened
|
||||||
var destination = position + direction;
|
if (!state.OpenedValves.Contains(state.CurrentValve))
|
||||||
|
|
||||||
if (maze[destination.X, destination.Y] is not Wall)
|
|
||||||
{
|
{
|
||||||
toVisit.Enqueue((destination, direction, score + 1));
|
// New state with current valve opened
|
||||||
|
var openedValves = new HashSet<Valve>(state.OpenedValves);
|
||||||
|
openedValves.Add(state.CurrentValve);
|
||||||
|
|
||||||
|
paths.Enqueue(new ValvePath(state.CurrentMinute + 1, state.PressurePerMinute + state.CurrentValve.Rate, newPressure, state.CurrentValve, openedValves));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Also try changing direction
|
// Move to all accessible valves
|
||||||
toVisit.Enqueue((position, NextDirection(direction), score + 1000));
|
foreach (var accessibleValve in state.CurrentValve.AccessibleValves)
|
||||||
toVisit.Enqueue((position, PreviousDirection(direction), score + 1000));
|
{
|
||||||
|
paths.Enqueue(new ValvePath(state.CurrentMinute + 1, state.PressurePerMinute, newPressure, accessibleValve, state.OpenedValves));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Lowest score: [yellow]{minimumScore}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Max pressure released: [yellow]{maxPressure}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var (maze, start, end) = ParseMaze();
|
throw new NotImplementedException();
|
||||||
|
|
||||||
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()
|
private static Valve ParseValves()
|
||||||
{
|
{
|
||||||
var maze = new char[Size, Size];
|
var valves = new Dictionary<string, Valve>();
|
||||||
Point start = default;
|
|
||||||
Point end = default;
|
|
||||||
|
|
||||||
var y = 0;
|
// Create valves first
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
foreach (var line in Input.ReadAllLines())
|
||||||
{
|
{
|
||||||
var x = 0;
|
var span = line.AsSpan();
|
||||||
foreach (var symbol in line)
|
|
||||||
|
var nameStart = span.IndexOf(' ') + 1;
|
||||||
|
var name = span[nameStart..(nameStart + 2)].ToString();
|
||||||
|
|
||||||
|
var rateStart = span.IndexOf('=') + 1;
|
||||||
|
var rateEnd = span.IndexOf(';');
|
||||||
|
|
||||||
|
var rate = int.Parse(span[rateStart..rateEnd]);
|
||||||
|
|
||||||
|
valves.Add(name, new Valve(name, rate));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add links
|
||||||
|
// Create valves first
|
||||||
|
foreach (var line in Input.ReadAllLines())
|
||||||
|
{
|
||||||
|
var span = line.AsSpan();
|
||||||
|
|
||||||
|
var nameStart = span.IndexOf(' ') + 1;
|
||||||
|
var name = span[nameStart..(nameStart + 2)].ToString();
|
||||||
|
|
||||||
|
var valve = valves[name];
|
||||||
|
|
||||||
|
var valvesStart = span.IndexOf(',') != -1 ? span.IndexOf(',') - 2 : span.Length - 2;
|
||||||
|
var valvesToAdd = span[valvesStart..].ToString().Split(", ").Select(v => valves[v]);
|
||||||
|
|
||||||
|
foreach (var valveToAdd in valvesToAdd)
|
||||||
{
|
{
|
||||||
if (symbol is Start)
|
valve.AccessibleValves.Add(valveToAdd);
|
||||||
{
|
|
||||||
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);
|
return valves["AA"];
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Point NextDirection(Point direction)
|
#region Input
|
||||||
{
|
|
||||||
if (direction == DirectionUp)
|
|
||||||
{
|
|
||||||
return DirectionRight;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (direction == DirectionRight)
|
public const string ExampleInput =
|
||||||
{
|
"""
|
||||||
return DirectionDown;
|
Valve AA has flow rate=0; tunnels lead to valves DD, II, BB
|
||||||
}
|
Valve BB has flow rate=13; tunnels lead to valves CC, AA
|
||||||
|
Valve CC has flow rate=2; tunnels lead to valves DD, BB
|
||||||
|
Valve DD has flow rate=20; tunnels lead to valves CC, AA, EE
|
||||||
|
Valve EE has flow rate=3; tunnels lead to valves FF, DD
|
||||||
|
Valve FF has flow rate=0; tunnels lead to valves EE, GG
|
||||||
|
Valve GG has flow rate=0; tunnels lead to valves FF, HH
|
||||||
|
Valve HH has flow rate=22; tunnel leads to valve GG
|
||||||
|
Valve II has flow rate=0; tunnels lead to valves AA, JJ
|
||||||
|
Valve JJ has flow rate=21; tunnel leads to valve II
|
||||||
|
""";
|
||||||
|
|
||||||
if (direction == DirectionDown)
|
public const string Input =
|
||||||
{
|
"""
|
||||||
return DirectionLeft;
|
Valve JI has flow rate=21; tunnels lead to valves WI, XG
|
||||||
}
|
Valve DM has flow rate=3; tunnels lead to valves JX, NG, AW, BY, PF
|
||||||
|
Valve AZ has flow rate=0; tunnels lead to valves FJ, VC
|
||||||
|
Valve YQ has flow rate=0; tunnels lead to valves TE, OP
|
||||||
|
Valve WI has flow rate=0; tunnels lead to valves JI, VC
|
||||||
|
Valve NE has flow rate=0; tunnels lead to valves ZK, AA
|
||||||
|
Valve FM has flow rate=0; tunnels lead to valves LC, DU
|
||||||
|
Valve QI has flow rate=0; tunnels lead to valves TE, JW
|
||||||
|
Valve OY has flow rate=0; tunnels lead to valves XS, VF
|
||||||
|
Valve XS has flow rate=18; tunnels lead to valves RR, OY, SV, NQ
|
||||||
|
Valve NU has flow rate=0; tunnels lead to valves IZ, BD
|
||||||
|
Valve JX has flow rate=0; tunnels lead to valves DM, ZK
|
||||||
|
Valve WT has flow rate=23; tunnels lead to valves OV, QJ
|
||||||
|
Valve KM has flow rate=0; tunnels lead to valves TE, OL
|
||||||
|
Valve NG has flow rate=0; tunnels lead to valves II, DM
|
||||||
|
Valve FJ has flow rate=0; tunnels lead to valves AZ, II
|
||||||
|
Valve QR has flow rate=0; tunnels lead to valves ZK, KI
|
||||||
|
Valve KI has flow rate=9; tunnels lead to valves ZZ, DI, TL, AJ, QR
|
||||||
|
Valve ON has flow rate=0; tunnels lead to valves LC, QT
|
||||||
|
Valve AW has flow rate=0; tunnels lead to valves DM, AA
|
||||||
|
Valve HI has flow rate=0; tunnels lead to valves TE, VC
|
||||||
|
Valve XG has flow rate=0; tunnels lead to valves II, JI
|
||||||
|
Valve II has flow rate=19; tunnels lead to valves LF, NG, OL, FJ, XG
|
||||||
|
Valve VC has flow rate=24; tunnels lead to valves WI, HI, AZ
|
||||||
|
Valve VJ has flow rate=0; tunnels lead to valves UG, AA
|
||||||
|
Valve IZ has flow rate=0; tunnels lead to valves VF, NU
|
||||||
|
Valve EJ has flow rate=0; tunnels lead to valves ZK, LC
|
||||||
|
Valve DU has flow rate=12; tunnels lead to valves TC, UG, FM
|
||||||
|
Valve ZK has flow rate=10; tunnels lead to valves JX, EJ, JW, QR, NE
|
||||||
|
Valve XF has flow rate=25; tunnels lead to valves OP, VT
|
||||||
|
Valve LC has flow rate=4; tunnels lead to valves FM, EJ, ON, AJ, PF
|
||||||
|
Valve SV has flow rate=0; tunnels lead to valves XS, IY
|
||||||
|
Valve LF has flow rate=0; tunnels lead to valves II, OV
|
||||||
|
Valve DI has flow rate=0; tunnels lead to valves KI, BY
|
||||||
|
Valve OP has flow rate=0; tunnels lead to valves YQ, XF
|
||||||
|
Valve NQ has flow rate=0; tunnels lead to valves TC, XS
|
||||||
|
Valve QJ has flow rate=0; tunnels lead to valves VT, WT
|
||||||
|
Valve IY has flow rate=22; tunnel leads to valve SV
|
||||||
|
Valve AJ has flow rate=0; tunnels lead to valves LC, KI
|
||||||
|
Valve TE has flow rate=11; tunnels lead to valves QI, HI, KM, YQ
|
||||||
|
Valve ZZ has flow rate=0; tunnels lead to valves KI, AA
|
||||||
|
Valve VT has flow rate=0; tunnels lead to valves XF, QJ
|
||||||
|
Valve OL has flow rate=0; tunnels lead to valves KM, II
|
||||||
|
Valve TC has flow rate=0; tunnels lead to valves NQ, DU
|
||||||
|
Valve TL has flow rate=0; tunnels lead to valves VF, KI
|
||||||
|
Valve QT has flow rate=0; tunnels lead to valves AA, ON
|
||||||
|
Valve BY has flow rate=0; tunnels lead to valves DM, DI
|
||||||
|
Valve OV has flow rate=0; tunnels lead to valves LF, WT
|
||||||
|
Valve VN has flow rate=0; tunnels lead to valves RR, BD
|
||||||
|
Valve VF has flow rate=13; tunnels lead to valves OY, IZ, TL
|
||||||
|
Valve BD has flow rate=17; tunnels lead to valves NU, VN
|
||||||
|
Valve UG has flow rate=0; tunnels lead to valves VJ, DU
|
||||||
|
Valve PF has flow rate=0; tunnels lead to valves LC, DM
|
||||||
|
Valve RR has flow rate=0; tunnels lead to valves XS, VN
|
||||||
|
Valve AA has flow rate=0; tunnels lead to valves QT, ZZ, AW, VJ, NE
|
||||||
|
Valve JW has flow rate=0; tunnels lead to valves ZK, QI
|
||||||
|
""";
|
||||||
|
|
||||||
if (direction == DirectionLeft)
|
#endregion
|
||||||
{
|
|
||||||
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
247
Days/Day17.cs
@@ -1,247 +0,0 @@
|
|||||||
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
204
Days/Day18.cs
@@ -1,204 +0,0 @@
|
|||||||
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
179
Days/Day19.cs
@@ -1,179 +0,0 @@
|
|||||||
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
288
Days/Day20.cs
@@ -1,288 +0,0 @@
|
|||||||
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
183
Days/Day21.cs
@@ -1,183 +0,0 @@
|
|||||||
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
162
Days/Day22.cs
@@ -1,162 +0,0 @@
|
|||||||
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
172
Days/Day23.cs
@@ -1,172 +0,0 @@
|
|||||||
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
370
Days/Day24.cs
@@ -1,370 +0,0 @@
|
|||||||
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
111
Days/Day25.cs
@@ -1,111 +0,0 @@
|
|||||||
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,105 +5,365 @@ namespace AdventOfCode.Days;
|
|||||||
public class Day3 : Day
|
public class Day3 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 3;
|
public override int Number => 3;
|
||||||
public override string Name => "Mull It Over";
|
public override string Name => "Rucksack Reorganization";
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var result = 0;
|
long sum = 0;
|
||||||
|
|
||||||
var input = Input.AsSpan();
|
foreach (var line in Input.ReadAllLines())
|
||||||
var mulStart = input.IndexOf("mul(");
|
|
||||||
|
|
||||||
while (mulStart != -1)
|
|
||||||
{
|
{
|
||||||
input = input[(mulStart + 4)..];
|
var middle = line.Length / 2;
|
||||||
|
var firstCompartment = line[..middle];
|
||||||
|
var secondCompartment = line[middle..];
|
||||||
|
|
||||||
// Start of a mul operation, search the ending parenthesis and make sure it's before the next mul
|
var common = firstCompartment.Intersect(secondCompartment).First();
|
||||||
var mulEnd = input.IndexOf(")");
|
|
||||||
var nextMulStart = input.IndexOf("mul(");
|
|
||||||
|
|
||||||
if (mulEnd != -1 && (nextMulStart == -1 || mulEnd < nextMulStart))
|
sum += CharToPriority(common);
|
||||||
{
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var result = 0;
|
long sum = 0;
|
||||||
|
|
||||||
var input = Input.AsSpan();
|
foreach (var group in Input.ReadAllLines().Chunk(3))
|
||||||
var mulStart = input.IndexOf("mul(");
|
|
||||||
|
|
||||||
while (mulStart != -1)
|
|
||||||
{
|
{
|
||||||
// Check if there is a "don't()" before next mul
|
var firstBag = group[0];
|
||||||
var dontStart = input.IndexOf("don't()");
|
var secondBag = group[1];
|
||||||
|
var thirdBag = group[2];
|
||||||
|
|
||||||
if (dontStart < mulStart)
|
var common = firstBag.Intersect(secondBag).Intersect(thirdBag).First();
|
||||||
{
|
|
||||||
// Search for next "do()"
|
|
||||||
input = input[(dontStart + 7)..];
|
|
||||||
|
|
||||||
var doStart = input.IndexOf("do()");
|
sum += CharToPriority(common);
|
||||||
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Result: [yellow]{result}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Sum of priorities is: [yellow]{sum}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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,117 +5,592 @@ namespace AdventOfCode.Days;
|
|||||||
public class Day5 : Day
|
public class Day5 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 5;
|
public override int Number => 5;
|
||||||
public override string Name => "Print Queue";
|
public override string Name => "Supply Stacks";
|
||||||
|
|
||||||
|
private IDictionary<int, Stack<char>>? _stacks;
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
var result = 0;
|
_stacks = InitStacks();
|
||||||
|
|
||||||
var precedences = new HashSet<int>?[100];
|
foreach (var line in Input.ReadAllLines())
|
||||||
|
|
||||||
var readingPrecedences = true;
|
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
|
||||||
{
|
{
|
||||||
if (line.IsWhiteSpace())
|
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++)
|
||||||
{
|
{
|
||||||
readingPrecedences = false;
|
toStack.Push(fromStack.Pop());
|
||||||
|
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Sum of middle page numbers: [yellow]{result}[/][/]");
|
for (int i = 1; i <= 9; i++)
|
||||||
}
|
|
||||||
|
|
||||||
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(','))
|
|
||||||
{
|
{
|
||||||
var number = int.Parse(line[range]);
|
AnsiConsole.Markup($"[{(i % 2 == 0 ? "yellow" : "green")}]{_stacks[i].Pop()}[/]");
|
||||||
|
|
||||||
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)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
// if (display)
|
_stacks = InitStacks();
|
||||||
// {
|
|
||||||
// AnsiConsole.MarkupLine($"[green]Number of safe reports: [yellow]{xmasCount}[/][/]");
|
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();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#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,4 +1,3 @@
|
|||||||
using System.Numerics;
|
|
||||||
using Spectre.Console;
|
using Spectre.Console;
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
@@ -6,189 +5,75 @@ namespace AdventOfCode.Days;
|
|||||||
public class Day6 : Day
|
public class Day6 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 6;
|
public override int Number => 6;
|
||||||
public override string Name => "Guard Gallivant";
|
public override string Name => "Tuning Trouble";
|
||||||
|
|
||||||
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)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
HashSet<Point> visited = [];
|
int position = 0;
|
||||||
var direction = DirectionUp;
|
|
||||||
|
|
||||||
var (obstaclesGrid, position) = ReadInputGrid();
|
// 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]);
|
||||||
|
|
||||||
visited.Add(position);
|
for (int i = 3; i < Input.Length; i++)
|
||||||
|
|
||||||
// Move the guard till it leaves the grid
|
|
||||||
while (true)
|
|
||||||
{
|
{
|
||||||
var destination = position + direction;
|
charStream.Enqueue(Input[i]);
|
||||||
|
|
||||||
if (destination.X is < 0 or >= GridSize ||
|
// Check if all 4 chars are different
|
||||||
destination.Y is < 0 or >= GridSize)
|
if (charStream.ToHashSet().Count == charStream.Count)
|
||||||
{
|
{
|
||||||
|
position = i + 1;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if it's possible to move or if there is an obstacle
|
charStream.Dequeue();
|
||||||
if (obstaclesGrid[destination.X, destination.Y])
|
|
||||||
{
|
|
||||||
direction = NextDirection(direction);
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
position = destination;
|
|
||||||
|
|
||||||
visited.Add(position);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Amount of distinct positions: [yellow]{visited.Count}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Position of start-of-packet marker is: [yellow]{position}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
var possibleLoops = 0;
|
const int length = 14;
|
||||||
var (initialGrid, startPosition) = ReadInputGrid();
|
int position = 0;
|
||||||
|
|
||||||
for (var y = 0; y < GridSize; y++)
|
// 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 x = 0; x < GridSize; x++)
|
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)
|
||||||
{
|
{
|
||||||
// Store obstacle state
|
position = i + 1;
|
||||||
var initialState = initialGrid[x, y];
|
break;
|
||||||
|
|
||||||
// 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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
charStream.Dequeue();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (display)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Amount of possible loop positions: [yellow]{possibleLoops}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Position of start-of-message marker is: [yellow]{position}[/][/]");
|
||||||
}
|
|
||||||
|
|
||||||
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));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private (bool[,] ObstaclesGrid, Point Start) ReadInputGrid()
|
#region Input
|
||||||
{
|
|
||||||
var grid = new bool[GridSize, GridSize];
|
|
||||||
Point start = default;
|
|
||||||
|
|
||||||
var y = 0;
|
public const string Input =
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
"""
|
||||||
{
|
rgffbnnqvqhhmtmzzmmpmllcggsdswwvvwzzpptbppgngsnncwcnwcwnwgwrwrrnqnlqlccwggrcgrccjgcgwghgffjgjgrgmmsrrhchfcfdccjwwzdzcdcbcjjtfjjltlvvtstvttszsvsmmfccwcjwwzmzhhjvjpvjpppcwppdtdvtdvtvztzvzffdfqqgbgffrgrpgphhbcctssncsnncfcppvnpvnvfnfvnnfggtpplggwsggldllzvzrznncbbjpplbbrrnsrssmrsrhhmqmnqqhpqqnrqnrrtrnnrwrwhhpjhphlhvvgbgzztqtvvmssdshhqnhnjjvhjhqqbrqrrmrlrdllvrlvlccfvcffhfssgvsswhwqqfwfwhhcffjmmjrrbgrgjgrrvsrvvwmwsmmszzvmzvmmwmtthvvfbfllpjpwpwjpwpnpjpqqwtqtwwqpwqqrsqqcpqqssrgsrrjwwqmwmgwgrggmvmgmfgmffjfhjfjttcztccmtmmccnznhhcgcffmnfmmqjjhwwtccbzbhhwnhnsnmsnmnqqchhhnggbzbjzjzszsfsjfjvffnlffvrvddbhhqccdnnzwnznjnpnmppthhqddjhddqjqlqplqqjpjwppqttswsvwvfwflfplffnbfbwfwhhlhtlhtltzzmlmslmlwwgzwzrrwhhlnnrfnnmpppjpgpbbhpbhppbrppbhhzgzczqcqvqggwppcnnhnznvznzhhcpctptpjtppdhhprhrcrpcprpplrprzrnrfnrnlrlvrrfqqnnsqsqrssnrnvvvghvvbzzqppjsjnnrprwrrmqqtfqfwwrdrsddprddbdzbdbndbdjdljjrtjrrnzrzjrzzpssftfmfbflbbcpcsppwrppntnhthlthtbbsmsbmsmggpssnhnjjtsjjwssdjdwwppcbpcclmccwzzrggmgmnnwjnnqppjttvllmhhvcctptbpbdpdhdqqgggbnnqcchlhssltstllvqlvqvdvjdvvqvsvfvhfhlfftqffztzdttfvvzmvzznvnsnjjvqjvjljplpvvzlzhzghgddbbzbmbnztgthrnpsqhhdvprtpdftmqfvgjzgdvqwmvgwbczvbschqfhdvqcfnmbgmtqmlmsqcbfhshrzzbrtpgnwwtzgnjghzrlwhntprqhvshjcfvlnchccbtnswfnmpccdppqrqrhngvlwrpplbnpgzbzwtzwrsptmsmlndcfmbnqgvnqvzwpvrtfsrwfvfwdvplrfdddwcnwhzchmwfjsfvbtbrjchmgqwfvvmpzhqcbzhrcmjrzmgrtnzrcqdqdqnpwjctlhrjcphbbcvhvqnhtwjrvrbzfzfzzplshvrcchvtgtjcnhlzsttwdhcmdvrdlgsngvtzqsjrcptwwbgvfbsvgnmfhmvgqtfzbhhmdznjlsghhnlwzhvplfvlqzbrsjhdvrshjbnfqgpscbpzmnmmcsdbtwbwmsvfjwdvtctslcqfssrhczdptlrjbfzjctqrcbppcfcbqqzhhftdjchtscwgwcnpvrrjvnnwrqtrqmbgdfcpqhddnvdnmlmqcgsndwbcfvfrzsrflsnqrpmszqrdlshlcsfrmnsqmtrvjwqcllftscwrtmvcjsmrlqvdfjzgfdtswqzldqgjvhczpqrfbclnbwcjprjncvhgfmjhgfgnvfzfnvbbstgsgtspdhtfsncttlwmllbbvqftjtshfjlqtjwlvrbwmzfhdmcbhtqdzqtzmdljqprwhqwcvbtfqbpjwztgqrvlrqdwmqrqzvptsgjdqnqdfwfpjdglwgpdrcfrrzmpjmtbwwrqqcsnmphcqtthlnlzlfftrjmtjwwqrldcfjjclzrsqvltsfchfggcwbzbtpqcjfvgpwnwwqrdbdvjplgsgctdhqvttmtpmmjfcqdslhjgtdppbmzbrfbrrjncfdhlmjgdwjrmbgpcgctghbvphpgfvvfvtplqrhnjjhqntjvbsggvrvjgrwptcgqgrmjtprvhnvjsdsfqrqrrltlhvfsjsqpbwndbsnjzplcfqtfbdqdzdvnljcsmjnrmwwjzqwsjbdlclsmccbqwnlpltqhqhmthhrdjwlqwrbltghsvblqntvjqzpmmpqwrrwvhmtfqzhrmjfglwfpthhgbhdmrtprtqgqbdcfqlbbvmzmchzglmpzdvhpqchhclbcvrcmhtzqfzrplbvmdhghsttzgdjbgmmtvlqjsstgwlwchhwmflwbgljgszghvfdsngbtbcnhzmmdmsjqfbcsmgpjwjqgwqdlrgznnmhphbrzcgnqczpcbljjmhnnrmzlpqbswwcjpjqcrtdmgprpmmbprwlmpzcmwlnbzqjsgftrncvmjmjwvqgszsrmrczhjnwlghgndhbthwlhfbncrwqfgnshrmdfhwmfvllhvbmmllwfbgrnrttpzffzvcfjfbrmdqfcfrdqsltpbbttnqnbncfhwghfbgwrltbhwmmlpczsvvdnwhchgfplnjsttsqvsznwvlwzgfnhfrrgplsfwrwnbfhblwtjpldjmzrglhppgsjsgzssbbgrrbdmpwhgjjmlfnpdbvtntcwrvltgfnrgwttvvjhqljjvvnmztwgzcclgbjnjspzwnpgtgvhhhqbzrnvmdcljcdncvpnpdhrhqwvlhllbsrmjbzlgczwjsrvqrqfqmtjrnpbtdhsrfbhrgtgnrmlgcwcmrvrdfcqbfcqczjchgrjpzqfqqmcpvnvbrssfrfsrjmlngplqqsnclgvpfhjbzdppjftlgbmcgdbrvqrclvtdnzhhcmzlrdrgbrqrlvfcnvznnqwswvhdpbbjmsqzcrmjngzmdftjzsjvgfdtcvdwhnwwjlcgcmflzzpzpgzrvmptbjgrdjbzscrglhcjppdjdshnvvbsnnddtbwsdrpnbnlrtppcrzbbjrfzhbwgmjqtmgjvmrjgfdndlmqvhgwprsjnhcmrnfdfdzggjjzcccnsnwwbjzmsfjjfhclptfcwqjhnphpwzszjmsrtnbqpqsvcfcvrrgclwlbrqngdcdlzrdfpvbgtznjzdvjngrgswhjnrpgswtqflpgvnpbsvcrtgtzcbhdjpbjwnpdzcmprtzlppbqvpzrrlbssmwhhvqqpmwggnzwcfdnzccjrrncnvjqgbpstctwpqvhdsbcsjrpbzbdlwwvjngtbnvpthppglgsnrbwnvpzldhsgwqhclgwrdsvcfdclvdsbrhcfnbgrtqswstnjfmfrdgphpvgjfqzcwnpcghdhtflgdnhhnnnwrpnmppszgqdcqjqpnccfsqjsmwtqvzwfqvtwtthwswmcqqcqjwcgwgzgmnpzbfpzrqbvqhbhtsvvbppbmqzfnsmwppzvsctgcncztsqdfhnlwjjtvwcchvnphwpnpzqsjhlrcmnbthtqlfclnsfdtpwfzljdpfszvhgzdpzhbjtphbfbmwgfrfplntfqhgpbjzghmblzzhdcbptngqwrtfmvtbhphpvdwpswbscrwzhnvqfwlbwwqqgstgmbqlllspbhbpjmmrfhmjwzdnsdwmpvlrspgzmdjwqwcjpbgwspsghjdvrbbsbtgwptqdvvdhbhqbdhpbzdsdwsjdbjnztdqqrdhwhtpvcbblbmjgmbpqghdsfthzjffrdvldfsnpcsmnzwzcqlnvcrcbqnfcdrfbffrvhqsbqjnnbzsqvqqdqwmsvbqvtgmnnlthpngfsljqnrdhhzpmwsnqvrgdnvlbgnndfcpjfgmzqssvnnrwbmslcqpnhnnwzggsjvqcsqpfzjcmcppntmsdtfggzdncqbfjsqvbzgnnlsdbgjqffsmvnbqlsrjwdmcjbrsrpchnnhdtlcdhfdltmlvtrwjpzphtbhzzrlrwbbhhpntgbcfmphnbrjdhrhvmvhfglrncngjdsvbfrqtqzsgvlzjqzcqnwdcfgvnpsqpphwfsdvpgnchjnnjhsqgvlqcvhzzzcrsqcvrbsbjbdbgddlbb
|
||||||
var x = 0;
|
""";
|
||||||
|
|
||||||
foreach (var symbol in line)
|
#endregion
|
||||||
{
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
1315
Days/Day7.cs
1315
Days/Day7.cs
File diff suppressed because it is too large
Load Diff
375
Days/Day8.cs
375
Days/Day8.cs
@@ -1,169 +1,314 @@
|
|||||||
using System.Collections.Frozen;
|
using Spectre.Console;
|
||||||
using System.Numerics;
|
|
||||||
using Spectre.Console;
|
|
||||||
|
|
||||||
namespace AdventOfCode.Days;
|
namespace AdventOfCode.Days;
|
||||||
|
|
||||||
public class Day8 : Day
|
public class Day8 : Day
|
||||||
{
|
{
|
||||||
public override int Number => 8;
|
public override int Number => 8;
|
||||||
public override string Name => "Resonant Collinearity";
|
public override string Name => "Treetop Tree House";
|
||||||
|
|
||||||
private const int GridSize = 50;
|
|
||||||
|
|
||||||
public override void RunPart1(bool display = true)
|
public override void RunPart1(bool display = true)
|
||||||
{
|
{
|
||||||
HashSet<Point> antinodePositions = [];
|
var grid = CreateGrid();
|
||||||
|
|
||||||
var frequencyAntennas = ParseAntennas();
|
var valid = new HashSet<(int, int)>();
|
||||||
|
|
||||||
// Find antinodes for each frequency
|
// Check each line from left to right
|
||||||
foreach (var (_, antennas) in frequencyAntennas)
|
for (int i = 0; i < grid.GetLength(0); i++)
|
||||||
{
|
{
|
||||||
// Take antennas by pair to find antinodes
|
int previousTreeSize = -1;
|
||||||
foreach (var firstAntenna in antennas)
|
|
||||||
|
for (int j = 0; j < grid.GetLength(1); j++)
|
||||||
{
|
{
|
||||||
foreach (var secondAntenna in antennas.Where(a => a != firstAntenna))
|
var size = grid[i, j];
|
||||||
|
|
||||||
|
// The tree on the left is blocking the view, stop searching on this line
|
||||||
|
if (size <= previousTreeSize)
|
||||||
{
|
{
|
||||||
var firstAntinode = firstAntenna + (firstAntenna - secondAntenna);
|
continue;
|
||||||
var secondAntinode = secondAntenna + (secondAntenna - firstAntenna);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
valid.Add((i, j));
|
||||||
|
previousTreeSize = size;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Unique antinode positions count: [yellow]{antinodePositions.Count}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Total viewable trees: [yellow]{valid.Count}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void RunPart2(bool display = true)
|
public override void RunPart2(bool display = true)
|
||||||
{
|
{
|
||||||
HashSet<Point> antinodePositions = [];
|
var grid = CreateGrid();
|
||||||
|
|
||||||
var frequencyAntennas = ParseAntennas();
|
var maxScenicScore = 0;
|
||||||
|
|
||||||
// Find antinodes for each frequency
|
// Compute scenic score for each tree
|
||||||
foreach (var (_, antennas) in frequencyAntennas)
|
for (int i = 0; i < grid.GetLength(0); i++)
|
||||||
{
|
{
|
||||||
// Take antennas by pair to find antinodes
|
for (int j = 0; j < grid.GetLength(1); j++)
|
||||||
foreach (var firstAntenna in antennas)
|
|
||||||
{
|
{
|
||||||
foreach (var secondAntenna in antennas.Where(a => a != firstAntenna))
|
var size = grid[i, j];
|
||||||
|
var score = ComputeScenicScore(grid, i, j, size);
|
||||||
|
|
||||||
|
if (score > maxScenicScore)
|
||||||
{
|
{
|
||||||
// Always add antinodes on antennas if a pair is formed
|
maxScenicScore = score;
|
||||||
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)
|
if (display)
|
||||||
{
|
{
|
||||||
AnsiConsole.MarkupLine($"[green]Unique antinode positions count: [yellow]{antinodePositions.Count}[/][/]");
|
AnsiConsole.MarkupLine($"[green]Max scenic score: [yellow]{maxScenicScore}[/][/]");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private FrozenDictionary<char, List<Point>> ParseAntennas()
|
private int ComputeScenicScore(int[,] grid, int i, int j, int size)
|
||||||
{
|
{
|
||||||
var antennas = new Dictionary<char, List<Point>>();
|
var visibleTreeCountLeft = 0;
|
||||||
|
var visibleTreeCountRight = 0;
|
||||||
|
var visibleTreeCountTop = 0;
|
||||||
|
var visibleTreeCountBottom = 0;
|
||||||
|
|
||||||
var y = 0;
|
// Look on left
|
||||||
foreach (var line in Input.AsSpan().EnumerateLines())
|
for (int x = j - 1; x >= 0; x--)
|
||||||
{
|
{
|
||||||
var x = 0;
|
visibleTreeCountLeft++;
|
||||||
|
var nextTreeSize = grid[i, x];
|
||||||
|
|
||||||
foreach (var frequency in line)
|
// Blocking the view
|
||||||
|
if (nextTreeSize >= size)
|
||||||
{
|
{
|
||||||
if (frequency is '.')
|
break;
|
||||||
{
|
|
||||||
x++;
|
|
||||||
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!antennas.TryGetValue(frequency, out var list))
|
|
||||||
{
|
|
||||||
list = [];
|
|
||||||
antennas[frequency] = list;
|
|
||||||
}
|
|
||||||
|
|
||||||
list.Add(new Point(x, y));
|
|
||||||
|
|
||||||
x++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
y++;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return antennas.ToFrozenDictionary();
|
// 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;
|
||||||
}
|
}
|
||||||
|
|
||||||
private readonly record struct Point(int X, int Y)
|
private int[,] CreateGrid()
|
||||||
: IAdditionOperators<Point, Point, Point>,
|
|
||||||
ISubtractionOperators<Point, Point, Point>,
|
|
||||||
IMultiplyOperators<Point, int, Point>
|
|
||||||
{
|
{
|
||||||
public static Point operator +(Point left, Point right)
|
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++)
|
||||||
{
|
{
|
||||||
return new Point(left.X + right.X, left.Y + right.Y);
|
for (int j = 0; j < grid.GetLength(1); j++)
|
||||||
|
{
|
||||||
|
grid[i, j] = int.Parse(lines[i][j].ToString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Point operator -(Point left, Point right)
|
return grid;
|
||||||
{
|
|
||||||
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
|
||||||
}
|
}
|
||||||
2244
Days/Day9.cs
2244
Days/Day9.cs
File diff suppressed because it is too large
Load Diff
1000
Inputs/Day1.txt
1000
Inputs/Day1.txt
File diff suppressed because it is too large
Load Diff
@@ -1,60 +0,0 @@
|
|||||||
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 +0,0 @@
|
|||||||
0 7 6618216 26481 885 42 202642 8791
|
|
||||||
140
Inputs/Day12.txt
140
Inputs/Day12.txt
@@ -1,140 +0,0 @@
|
|||||||
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
1279
Inputs/Day13.txt
File diff suppressed because it is too large
Load Diff
500
Inputs/Day14.txt
500
Inputs/Day14.txt
@@ -1,500 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,71 +0,0 @@
|
|||||||
##################################################
|
|
||||||
##...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
141
Inputs/Day16.txt
@@ -1,141 +0,0 @@
|
|||||||
#############################################################################################################################################
|
|
||||||
#.........#...........#.................#.......#.............#.....#.#...#...........#.....#.....#...#.......#.....#...........#.......#..E#
|
|
||||||
#.#######.#.#.#######.###.#########.###.#######.#.#.#.###.#.#.###.#.#.#.#.#.#####.#.###.#.#.#.#.#.#.#.#.#.#.#.#.###.#.#####.###.#.#####.###.#
|
|
||||||
#.#.....#.#.#.#.....#...............#.#.#.....#...#...#.#.#.......#...#.#.#.....#.#.#...#.....#.#.#.#...#.#.....#.#.........................#
|
|
||||||
#.#.###.#.#.#.###.#######.###########.#.#.###.#.#######.#.#.#########.#.#.#.#####.###.#####.###.#.#.#####.#######.#.#.#.#.#.#.#.###.#.#.#.###
|
|
||||||
#...#.#.#...#...#...#.....#...........#.#...#.#.#.......#.#.........#.#.#.#.#.....#...#.........#.#.....#.......#.#.#.#.....#.......#...#...#
|
|
||||||
#.#.#.#.#######.###.#.###.#.#########.#.###.#.#.#####.#.#.#.###.###.###.#.#.#.#.#.#.###.###.#####.#.#######.###.#.#.#####.#.#########.###.#.#
|
|
||||||
#.#...#.......#...#...#...#...#.#.....#...#.#.#.....#.#.#...#...#...#...#...#...#.#.#...#.........#.#.....#.#...#.#...#...#...#.......#.....#
|
|
||||||
#.#.#.#######.###.#####.#.###.#.#.#######.#.#.#####.###.###.#.###.###.#########.###.#.###.#.#######.#.###.###.###.###.#.#.#.#.#######.#.#.###
|
|
||||||
#.#.#.......#.#.#.#...#.#.......#.......#.....#...#...#...#...#.#.....#...#.....#...#.#.....#...#...#...#...........#.#.#.#.#.#.....#...#...#
|
|
||||||
#.#.###.#####.#.#.#.#.#.#.#########.###.#####.###.###.#.#.#####.#######.###.#####.###.#####.#.#.#######.#.#.#####.###.#.#.#.#.#.###.###.#.#.#
|
|
||||||
#...#.#.........#...#.#...........#...#.....#...#...#...#.#.........#.....#.#.....#.#.....#.#.#.......#.#...#...#.......#.#.#...#.#.#.....#.#
|
|
||||||
#.#.#.###############.#.#.#.#####.#####.###.###.#.#.#####.#######.#.#.###.#.#.#####.#####.#.#.#######.#.###.#.#.###.#####.#.#.###.#.#.#.#.#.#
|
|
||||||
#.#...#.....#.#...#...#.#...#...#.....#...............................#...#.............#...#...#.................#.#...#...#.....#.....#...#
|
|
||||||
#.#.#.###.#.#.#.#.#.#####.###.#.#####.#.#.#.###.###.#######.#.#####.###.#.#########.#####.#.###.#####.###.###.###.#.#.#.#.#.###########.#.#.#
|
|
||||||
#.#.#...#.#.....#...#.....#...#.#...#.#...#.#...#...#.......#.#...#.....#...#.............#...#.....#.#...#...#...#.#.....#.......#.......#.#
|
|
||||||
#.#.###.#.###.#.#####.#####.###.#.###.#####.#.###.#.#.#######.#.#.###.#######.#############.#.#.###.#.#.#.#.###.#.###.###.#.#####.#.###.#####
|
|
||||||
#...#.#...#...#...#...#.....#...#.#...#...#.#.#...#.#.#.......#.#.#...#.......#.....#.........#...#.#...#.#.#.#.#.#...#.#.........#...#.#...#
|
|
||||||
#.###.#####.#####.#.#######.#.#.#.#.###.#.#.#.###.###.#.#####.#.###.#.#.#######.###.#.###########.#.#######.#.#.#.#.###.#.#####.#.###.#.#.#.#
|
|
||||||
#...#.......#...#.........#.#.....#.....#.#.#.#...#...#.#...#.#.....#...#.....#.#...#.#...#.....#.#.......#.#.#.#.#.....#.#.....#.#...#...#.#
|
|
||||||
#.#.#.#######.###########.#.#####.#######.#.#.#.###.#####.#.#.#######.#.#.#.###.#.#.#.#.#.#.###.#.#.#####.#.#.#.#######.#.#.###.#.#.###.#.#.#
|
|
||||||
#.#...........#...#.....#.#...#.......#...#...#...#.#.....#...#.......#...#.....#.#.#.....#.#.#...#...#...#...........#.#...#...#.#.......#.#
|
|
||||||
#.###########.#.#.###.###.###.#########.#.#.###.#.#.#.###.#####.#######.#########.#####.#.#.#.#######.#.###.#####.###.#.#####.#.#.#.###.#.#.#
|
|
||||||
#.......#.....#.#.............#.........#.#.#...#.#.#...#.#...#.....#.#.#...#...#.......#.#...#.....#.#.....#...#...#.....#...#...#.........#
|
|
||||||
#.#####.#######.###.#.#######.#.#########.#.#.###.#.###.#.#.#.#.###.#.#.#.###.#.###.#.#.#.###.###.#.#.#######.#.#######.#.#.###.#######.#.#.#
|
|
||||||
#...#.#...#.....#...#.....#.#.#...#...#...#.....#.......#.#.#.#...#.#...#.#...#...#.#...#...#.....#.......#...#.......#.....#.#.#.......#.#.#
|
|
||||||
###.#.###.#.#####.#####.#.#.#.###.#.#.#.#######.#.#########.#.#.###.#.###.#.#####.###.#####.#############.#.#######.#.#####.#.#.#######.#.#.#
|
|
||||||
#...#.......#...#...#...#.#.....#...#.#.....#...#.#.........#.#.#...#.#...#.#.........#.....#...........#.#.#.#.............#.#.....#.....#.#
|
|
||||||
#.#.#####.#.###.###.#.###.#######.#.#.###.#.#.###.#.###.#####.#.#.###.###.#.###########.#####.#########.###.#.#.#############.#.###.#.#.#.#.#
|
|
||||||
#.#.....#.........#...#.#.......#.#.#...#.#.#.#...#.....#.....#.#...#.....#...#.........#.....#.......#.....#...............#...#.#.#.....#.#
|
|
||||||
#.#.###.#.###.#########.#######.#.#.###.###.#.###.#####.#.#########.###.#.###.#.###########.###.#.#######.#.#####.#.#.#####.#.#.#.#.#.#.#.#.#
|
|
||||||
#...#...#...#.#...............#.#...#.#.#...#...#.....#.#.#.......#.#.......#.#...#.........#...#.#.......#.......#.#.#.#...#.#...#.#.#...#.#
|
|
||||||
#####.###.#.###.#########.###.#.###.#.#.#.#####.#######.#.#.#####.#.#######.#.###.#####.#####.#####.#############.###.#.#.###.#.###.###.#.#.#
|
|
||||||
#.....#...#.....#...#...#...#.#.#...#.#.#...............#...#...#.#.....#...#...#.........#...#.....#.......#.........#.#...#.........#...#.#
|
|
||||||
#.#####.#.#######.#.###.###.#.#.#.###.#.#####.###############.###.#.###.###.#.#.#####.#.#.#.#.#.#####.#.#.#.#.###.#.###.###.###.#####.###.###
|
|
||||||
#...#.#.......#...#.....#...#.#.#.#...#.#.............#.......#...#...#...#.#.#.#.#...#.#.#.#.#.#.....#...#...#...#.....#.#.................#
|
|
||||||
###.#.###.###.#.#######.#.#.###.#.#.###.#.#####.#######.#.#####.###.###.#.#.#.#.#.#.###.#.#.#.#.###.#####.#####.#######.#.#########.###.###.#
|
|
||||||
#...#.#.....#.#.#.......#.#.#...#...#...#.#.....#.......#...#...#.....#.#.#.#.....#.....#.#...#...#.....#...#...#...#...#...#.....#.#.......#
|
|
||||||
#.###.#.#.#.#.#.#.#######.#.#.###.###.###.#.#####.#####.###.#.###.###.###.###.###.###.###.#.#.###.###.#####.#.###.#.#.###.#.#.#.###.#########
|
|
||||||
#.........#.#...#.#.....#.#.#.#...#...#...#.#.....#.....#.#...#.#...#.....#...#.....#.....#.#...#...#.#.....#...#.#.#.#...#.#.#...#...#.....#
|
|
||||||
#.#.#.#.#.#######.###.###.###.#####.###.#####.#####.#.#.#.#####.#.#.#######.###############.#.#.###.###.#######.#.#.#.#.###.#.###.###.#.###.#
|
|
||||||
#.#.#...#.#.....#...#.#...#...#.....#.......#.....#...#.#.........#...#.................#...#.#...#...#.#...#.....#.#.#.#.#.#.#...#.#...#...#
|
|
||||||
#.#.#####.#.#.#####.#.#.###.###.#####.#####.#####.#.###.#.###########.#.#####.#######.#.#####.###.###.#.#.#.#######.#.#.#.#.###.#.#.#####.#.#
|
|
||||||
#.#.....#.#.#.....#.#.#.........#...#.#...#.....#...#.#.#.........#...#.#.......#...#.#.......#.#...#.#...#.#...#...#...#.#.....#.......#.#.#
|
|
||||||
#.#####.#.#.###.###.#.#####.###.#.###.#.#######.#####.#.###########.###.###.###.#.#.#.#########.#.###.#.###.#.#.#.#######.#############.#.#.#
|
|
||||||
#...#.#.#.#.#.#.#...#.#...#.....#...#.#.......#.#.....#.#...........#.#...#.#...#.#.#...#...#.....#...#...#...#.#.#.............#...#...#...#
|
|
||||||
###.#.#.#.#.#.#.#.###.#.#.#########.#.###.###.#.#.###.#.#.#######.###.###.#.#.###.#.#.#.#.#.###.###.#########.#.###.#.#########.#.#.#.#####.#
|
|
||||||
#.....#.#.#.#.#.#.....#.#...#.....#.#.#...#...#.....#.#...#.......#.........#.....#...#.#.#...#.#...#.......#.#.....#.#.......#...#.#.....#.#
|
|
||||||
#.#####.#.#.#.#.#####.#.###.#.###.#.#.#.###.#########.#####.#####.#.###############.###.#.###.###.###.#####.#.#######.###.#########.#####.#.#
|
|
||||||
#.#.....#.#...#.......#...#.#.#...........#.#...........#...#.#...#.#.#.......#...#.#...#.#.#.....#.....#.#.#.#...#...#...#.........#.....#.#
|
|
||||||
#.#.#####.###.###########.#.#.#######.###.###.#.#########.###.#.###.#.#.#####.#.#.#.#.###.#.###########.#.#.#.#.#.#.###.#.#.#######.#.#####.#
|
|
||||||
#.#...#.....#...#.........#.#.......#.....#...#.#.........#...#.......#.#...#.#.#...#.....#.........#...#...#.#.#...#...#.#.#.....#.#.#...#.#
|
|
||||||
#.###.#####.#.###.#########.###.###.#####.#.###.#.#########.#.#######.#.#.###.#####.#.#.#.#####.###.#.###.#####.#####.#.###.#.###.###.###.#.#
|
|
||||||
#...#.....#.......#.......#.#.....#.....#.#.#...#...#.......#.........#.#.....#...#.#.#.....#...#...#...#.#.....#...#.#...#.#.#.#.........#.#
|
|
||||||
#.#####.#.#.#.#.###.#####.#.#.###.###.###.#.#######.#.#.#######.#####.#.#.#####.#.#.#.#####.#.###.###.#.#.###.###.###.###.#.#.#.###########.#
|
|
||||||
#.#...#.#.#.#.#...#.#.....#.#.#.#...#.....#.......#.#...........#.....#.#.#.....#.#.#...#.#...#.#...#.#.#.....#.....#.#...#.#.#...#...#...#.#
|
|
||||||
###.#.###.#.#.###.#.#.#####.#.#.###.#.###########.#.#######.#.###.###.#.#.#.#####.###.#.#.#####.###.###.###.#####.#.#.#.#.#.#.#.###.#.#.#.#.#
|
|
||||||
#...#.....#.#...#...#...#.#...#.....#.........#.#.#.........#.#...#.#.#.#...#...#...#.#...#.....#.#...#.#.......#.#.#...#...#.......#.#.#.#.#
|
|
||||||
#.#########.###.###.###.#.#######.#.#########.#.#.###.#.#####.###.#.#.#.#####.#####.#.###.#.#.#.#.###.#.#####.#.###.###.###.#.#.#.###.#.#.#.#
|
|
||||||
#.....#.......#.#.....#...#.......#...#...#.....#...#.#.#...#...#.#.........#...#.....#...#.#.#.....#.#.#.....#...#.....#.......#.#.....#...#
|
|
||||||
#####.#.###.###.#.###.#.#.###.###.###.#.#.#.#####.#.#.#.###.###.#.#######.#.#.#.#.#########.#.#######.#.#.#######.#######.#######.#########.#
|
|
||||||
#.....#.#.#...#.#...#.........#.....#.#.#.#.#...#.#.....#...#.....#.....#.#...#.#...#...#...#.........#.#.#.....#.#.......#.#...#.#...#...#.#
|
|
||||||
#.#####.#.###.#.#.#.###########.#####.#.#.#.#.#.#####.###.###.#####.###.#.###.#.#.###.#.#.#####.#######.#.#.#.#.#.#.#.#####.#.#.#.#.#.#.#.#.#
|
|
||||||
#...#.......#.#.#.#.......#.....#.....#.#...#.#.#.....#.......#...#.....#...#.#...#...#.....#.........#...#.#.#.#...#.......#.#...#.#...#.#.#
|
|
||||||
#.#.#####.###.#.#######.###.###.#.###########.#.#.###.#.#####.#.#.###.#.###.#.#####.###.###.#.#.#####.#.###.#.#.#######.###.#.#####.#####.###
|
|
||||||
#.#...#.#.#...#...#...#...#.......#...........#.....#.#.#...#.#.#.....#.#...#.#.......#...#.#.#...#...#...#.#.#...#...#...#.................#
|
|
||||||
#.###.#.#.#.#####.#.#.###.###.#.###.#####.###########.###.#.###.#######.#.#.###.#########.#.###.#.#######.#.#.###.#.#.#####.###########.###.#
|
|
||||||
#.#...#...#.....#.#.#.#.....#.#.#...#.....#.....#...#...#.#.....#.....#...#.#...#...#.........#.#.#.....#.#.#...#.#.#.......#...........#...#
|
|
||||||
#.#.#.#########.#.#.#.#.###.#.#.#.#####.###.###.#.#.###.#.#####.#.###.#.#.#.#.###.#.#.#######.#.#.#.###.#.#.###.#.#.###.###.#####.#.#####.#.#
|
|
||||||
#.#.#.#.......#.....#...#.#.#.#.........#...#.#...#.....#...#...#...#...#.#.#...#.#.#.........#.#.....#.#.#.#...#.#.......#.......#.#.....#.#
|
|
||||||
#.#.#.#.#####.###########.#.#.#########.#.###.#########.#.#.#.#.#.#.#.#.#.#####.###.#######.###########.#.###.###.#######.#########.#.#####.#
|
|
||||||
#.#.......#...#.........#...#...#.#...#.#...#.#...........#...#.#.#.#.#.#.......#.......#...............#.....#...#.....#.#.............#...#
|
|
||||||
#####.###.#.#.#.#######.#.###.#.#.#.#.#####.#.#.###.#######.#.#.###.###.#.#######.#####.###.#.###.#####.#######.###.###.#.#####.#######.#####
|
|
||||||
#.....#.....#.#.....#...#.....#.#.#.#.......#...#.......#.....#...#.............#.....#.....#...#.#...#.#.....#...#...#.#.#...#.#...........#
|
|
||||||
#.###.#.#.#########.#.#######.#.#.#.#############.#####.#.###.###.#############.#.###.#######.#.#.#.#.#.#.###.###.###.#.#.#.#.###.#.#.#.#.#.#
|
|
||||||
#.#.#.#.............#.......#.#...#...............#...#...#.....#.#.........#...#...#.......#.#.#...#.....#.....#...#.#...#.#...#.#.#...#.#.#
|
|
||||||
#.#.#.###.#################.#.###.###.#.#############.#####.###.#.#.#######.#.#############.#.#.###############.###.#.#####.###.#.#.###.#.#.#
|
|
||||||
#.#...#.....................#...#...#.#.#.....#.......#.....#.#.#...#.....#.#.#.....#.......#.#...#...........#...#.#...#...#.#.#.#...#...#.#
|
|
||||||
#.#.#.#.#.#######.###############.###.#.###.#.#####.#.#.#####.#.#####.#.###.#.###.#.#.#######.###.#.#########.#.###.#.#.#.###.#.#.###.#.###.#
|
|
||||||
#.#.....#...#...#.#.......#.......#...#.#...#.#.....#.#.#...#...#...........#...#.#...#.......#...#.#.......#.#...#.#.#.#...#...#.#.#.......#
|
|
||||||
#.###.#.#.#.###.#.#.#####.#.#######.###.#.###.#.#####.#.#.#.#####.#############.#.#####.###.###.#.#.###.###.#.#.#.#.###.#.#.#.###.#.###.###.#
|
|
||||||
#.#...#.#.#.......#...#.#...#.....#.....#...#...#...#.#...#.......#.......#...#.#.#...#.#...#.#.#.#...#...#.#...#...#.....#.#.....#.#.......#
|
|
||||||
#.#.#.###.#.#.###.###.#.#####.###.#########.#####.###.#############.#####.###.#.#.#.#.#.#.#.#.#.#.###.###.#.#########.#.#.#.#######.#.#.###.#
|
|
||||||
#...#...#...#...#...#.#...#.....#.#.......#.....#.....#.....#.....#...#.#.....#.#...#.#.#.#.#.#.#...#.#...#.........#.#...#.#.....#...#.....#
|
|
||||||
#.###.#.###.###.#####.###.#.###.#.#.###.#.#.###.#.#######.#.#.#.###.#.#.###.###.#.###.#.#.#.#.#.#####.#####.#####.#.#.#.###.#.#.###.###.#####
|
|
||||||
#.#...#.....#...#.....#...#.#.#.#.#.#...#.#...#.#.#.......#.#.#.......#.....#...#.#.#.#.#.#...#.#...#.....#.....#.#.#.#.#...#.#.....#.......#
|
|
||||||
###.#.#######.#.#.#####.###.#.#.###.#.###.#####.#.#####.#####.#######.#######.###.#.#.#.#.###.#.#.#.#####.###.###.#.#.#.###.#.#######.#.###.#
|
|
||||||
#...#...#.....#.#.....#.#.....#.....#.#.........#...#...#.....#.....#.#.....#.#.....#.....#...#...#.....#...#.#.......#...#.....#.....#...#.#
|
|
||||||
#.###.#.#.#####.#####.#.#.###.#######.#.###########.#.###.#####.#.###.#.###.#.#.#################.###.#.###.#.#.#####.###.#####.#.#####.#.#.#
|
|
||||||
#.#.......#.#.......#...........#.#...#...#.......#.#...#.......#.....#.#.#...#.#.#.............#.#.#.#.#.#.#.#...#.#.#.#...#.#.#.....#...#.#
|
|
||||||
#.###.#####.#.#####.#.#########.#.#.###.#.#.#######.###.#.#.#####.#####.#.#####.#.#.###.#######.#.#.#.#.#.#.#.###.#.#.#.###.#.#.#####.#.###.#
|
|
||||||
#.#...#...#...#.....#...#...#.....#.....#.#...#.....#...#...#.....#.....#.....#.#.#...#.....#...#...#.#...#.#.#...#.......#.#.#...#...#...#.#
|
|
||||||
#.#.#.#.###.###.#.#.###.#.#.#########.###.###.#.#####.###.###.#.###.#####.#####.#.###.#.#.#.#.#######.###.#.###.###.#######.#.###.###.###.#.#
|
|
||||||
#...#.#.....#.#.#.#.#.#...#.....#...#.#.#...#...#.....#...#...#.....#.#.........#...#.#.#.#.#.....#...#.#.#.....#...#.....#.#...#...#.#...#.#
|
|
||||||
#####.#.#####.#.#.#.#.#####.###.#.#.#.#.###.#.###.#####.###.###.#####.#.#########.#.#.#.#.#.#####.#.###.#.#######.###.###.#.#.#####.#.#.###.#
|
|
||||||
#.....#.#.....#.#.#.......#...#.#.#.#...#...#.....#...#...#.....#.#...#.#.........#.#.#.#.#...#.#.#...#.........#...#.#.....#.#.....#.#...#.#
|
|
||||||
#.#.###.#.#####.#.#####.###.#.#.#.#.###.#.#.#######.#.###.#######.#.#.#.#.#.#######.#.#.#.###.#.#.###.#############.#.#######.#.#######.#.###
|
|
||||||
#.....#...#.....#.#.....#...#...#.#.#.....#.........#.....#...#.....#.#.#.#.#...#...#.#.#.#.#.#.#.#...#.............#.....#.......#...#.#...#
|
|
||||||
#.#.#.#####.#####.#######.#######.#.#.###.###.#############.#.#.#####.#.#.###.#.#.###.###.#.#.#.#.#.#.#.###############.#.#######.#.#.###.#.#
|
|
||||||
#...#.#.....#.#...#.......#.......#...#.#.#...#.#...#.......#.#.#...#...#.#...#.#...#...#.......#...#.#...#...........#.#...#...#...#...#.#.#
|
|
||||||
###.#.#.#####.#.###.#######.###.#######.#.#.###.#.#.#.#.#####.#.###.#####.#.###.#######.#.#######.#######.#.#########.###.#.#.#.#######.###.#
|
|
||||||
#.....#...#...#.#...#.....#.#.#.....#.....#.#.....#...#.#.....#...........#.#.#...#.....#.#.......#.......#...#.....#.....#...........#.....#
|
|
||||||
#.#.#####.###.#.#.###.###.#.#.#####.#.#####.#.#########.#.#########.#.#.###.#.#.#.#.#.#.#.#.#######.#########.#####.###.###.#####.#.#.#####.#
|
|
||||||
#.#.....#.....#.#.#...#.#.#...#.#...#.#.....#.#.........#...#.........#.#...#...#...#...#...#...#...#...#...#...#.....#...#.#...#.#.#.....#.#
|
|
||||||
#.#.###.#####.#.#.#.###.#.###.#.#.#.###.#####.#.#.#.#######.###########.#.#####.###.#.#######.#.#.###.#.#.#.###.#.###.###.#.#.#.#.#.###.###.#
|
|
||||||
#...#.............#...#...#...#...#.#...#.....#.#...#.....#.......#.....#.#.......#.#.......#.#.#.#...#.#.#...#.#...#.#...#.#.#...#...#.....#
|
|
||||||
#.#.#.#####.#.#######.#.#####.#.#.#.#.#########.#######.#.#######.#.###.#.###.#.###.#.#####.#.#.#.#.###.#.#.###.#.#.#.#.###.#.#############.#
|
|
||||||
#...#.#.....#...#.....#.....#...#.#.#.....#.....#.......#.#.....#.#.#...#...#.#.#...#.#...#...#...#.#.....#.#...#...#.#...#.#...#...#.....#.#
|
|
||||||
#.#.#.#.#######.#.#########.#####.#.#####.#.#.###.###.#####.###.#.#.#.#.###.#.#.#.###.#.#.#########.###.###.#.###.#.#####.#####.#.#.#.###.#.#
|
|
||||||
#.#...#.#.....#.#.......#.#.#.....#.#.......#.#.......#.....#.....#.#.#.#...#.#.#.#...#.#.#.......#.......#.#.#...#.......#.....#.#...#...#.#
|
|
||||||
#.#.#.###.#.#.#.#######.#.#.#.#.#####.#.#####.#.#.###.#.#####.###.#.#.#.#.###.###.#.#####.#.#.###.###.#.#.#.#.#.###########.#####.#####.#####
|
|
||||||
#.#...#...#.#.#.........#.....#.#.....#.........#...#.#.#...#...#.#.#.#...#...#...#.....#...#.#...#...#.#...#.#.#...........................#
|
|
||||||
###.#.#.###.#########.#.#######.#.#################.###.#.#####.#.#.#.#####.###.#######.#####.#.###.#.#.#.###.#.#######.#.#################.#
|
|
||||||
#.....#...#.......#...#.........#.#.#.............#.....#.....#.....#.#...#.....#.#.....#.........#.#.#.#.....#.....#...#.#...............#.#
|
|
||||||
#.#.#.###.#######.#.#####.###.###.#.#.###.#.###############.#.#######.#.#.#####.#.#.#####.#######.#.###.###########.#.#.###.#############.#.#
|
|
||||||
#.........#.....#.#.#...#...#.#.#.#.#.#...#.#...........#...#.........#.#.....#...#.....#.#.....#.#...#.#.#.......#.#.#...#...#...#.....#...#
|
|
||||||
###.#.###.#.###.#.#.#.#.#.#.#.#.#.#.#.#.#####.###.#####.#.#####.#######.#####.#########.#.#.#.#.#.###.#.#.#.###.#.#.#.###.###.###.#.###.###.#
|
|
||||||
#...........#.#.#...#.#.#.#.#...#.#...#.....#.#...#...#.#.#.....#...........#.............#.#.........#.#.#...#.#.#...#.#.....#...#.#.#...#.#
|
|
||||||
#.###.#.#.###.#.#.#.#.#.###.#.###.#.#######.#.#.###.#.#.#.#.#####.#########.#####.#########.#########.#.#.###.#.#######.#######.###.#.###.#.#
|
|
||||||
#.#.......#.....#...#.#.....#.#...#...#...#...#...#.#.#...#...#...#...#...#.#...#.#.....#...#.....#...#.#.#...#.......#...#.....#...#.#...#.#
|
|
||||||
#.#.#.#.#.#.#########.#######.#.#####.#.#.#######.#.#.###.#####.###.#.#.#.###.#.###.###.#.###.###.#####.#.#.#######.#.#.#.#.###.#.###.#.###.#
|
|
||||||
#.#.....#...#.........#.....#.#...#.#...#.......#.#.#.#...#...#.#...#...#.#.........#...#...#...#.#.....#.#...#...#.#.#.#.#.#...#.....#.....#
|
|
||||||
#.#####.#.###.###.#####.###.#.###.#.###.#.#######.#.#.#####.#.#.#.#######.#.#.#######.#####.###.#.#.###.#.###.#.#.#.#.###.#.#.###.###.#######
|
|
||||||
#.#...#...#.....#.#.#.....#.#...#.#.....#.......#...#.#.....#.#.#...#.......#.......#...#.....#.#...#.........#.#.#.#...#.#.#.....#.....#...#
|
|
||||||
#.###.#.#.#.#####.#.#.#####.###.#.#.#####.#.###.#####.#.#####.#.###.#####.###.#####.###.#######.#####.###.#####.#.#.###.#.#.#######.###.###.#
|
|
||||||
#.....#.#...#.....#...#...#.....#.#.....#.#.............#...#.....#.#...#.#...#...#...#.....#...#...#.#...#.....#.#...#...#.#.....#.#.#.#...#
|
|
||||||
#####.#.#.###.#####.###.#.#.#####.#####.###.###.#####.###.#########.#.#.#.#.#.###.#.#######.#.###.#.#.#.#.###.###.#.#.###.#.#.#.#.#.#.#.#.#.#
|
|
||||||
#.#...........#.....#...#.#.#...#.#...#.#...#.........................#.#.........#.......#.#...#.#.#...#.#...#.....#.#...#.#.#.#...#.#.#.#.#
|
|
||||||
#.#.#######.#.#.#####.###.#.#.#.#.#.#.#.#.#.#.###.#.#####.#.#########.#.#.#############.#.#.###.#.#.#####.#.#.#####.#.#.###.###.#####.#.#.###
|
|
||||||
#.......................#.#...#.#...#.#...#.......#...#...#.........#.#.#.....#...#...#.#.#.....#.#...#.#.#...#.......#...#.....#...#...#...#
|
|
||||||
#.#####.#####.#########.#.###.#.#####.###.#.#.#######.#####.#######.#.#.#.###.#.#.#.#.#.#.#.#####.###.#.#.###.#.###.#####.#######.#.#.###.#.#
|
|
||||||
#.#.....#...#.#.......#.#...#.......#.#...#.#...#...#.............#...#...#.#...#...#.#.#...#...#...................#.....#.......#.#.#...#.#
|
|
||||||
###.#.###.#.#.#.#####.#.###.#####.###.#.###.#.#.#.#.#####.#######.#######.#.#########.#.###.#.#.#.#.#####.#.#######.###.###.#####.###.#.###.#
|
|
||||||
#...#.....#.#.#...#...#.#.#.#...#.#...#...#...#.#.#.....#.#...............#.........#.#...#...#...#.....#.#.......#.......#.#...#.....#.#...#
|
|
||||||
#.#########.#.###.#.###.#.#.###.#.#.#####.###.#.#.###.###.#.#############.#######.###.###.#############.#.#.#.###.#.###.#.#.#.#.#######.#.###
|
|
||||||
#.....#.........#.#...#...................#.....#...#...#.#...#.........#.......#...#.#...#.....#...#...#.#.#.#.#.......#...#.#.#...#...#...#
|
|
||||||
#.###.#.#########.###.###.###.#.#####.#.#.#.#.#####.###.#.#####.#######.#.#####.###.#.#.###.###.###.#.###.###.#.###.###.#####.###.#.#.#####.#
|
|
||||||
#...#.#.....#.....#...#...#...#...#...#...#...#.#...#.#...#.....#.....#...#...#.....#.#.......................#.....#...#.........#.........#
|
|
||||||
#.#.#.#######.#####.###.###.#######.#########.#.#.###.#####.#####.#######.#.#.#######.#######.###.#.#####.#.###.###.#.#.###################.#
|
|
||||||
#S..#.............#.......#...................#.............#...............#.........#...........#.........#...............................#
|
|
||||||
#############################################################################################################################################
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
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
3450
Inputs/Day18.txt
File diff suppressed because it is too large
Load Diff
402
Inputs/Day19.txt
402
Inputs/Day19.txt
@@ -1,402 +0,0 @@
|
|||||||
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
1000
Inputs/Day2.txt
File diff suppressed because it is too large
Load Diff
141
Inputs/Day20.txt
141
Inputs/Day20.txt
@@ -1,141 +0,0 @@
|
|||||||
#############################################################################################################################################
|
|
||||||
#.......#...#.......#...#.....#...###...............###.......#...#...#...#.....#.......###.....#...................###.....................#
|
|
||||||
#.#####.#.#.#.#####.#.#.#.###.#.#.###.#############.###.#####.#.#.#.#.#.#.#.###.#.#####.###.###.#.#################.###.###################.#
|
|
||||||
#.#...#.#.#.#.....#.#.#.#...#.#.#.#...#...#...#...#...#.....#.#.#.#.#.#.#...#...#.#.....#...#...#.........#.........#...#.................#.#
|
|
||||||
#.#.#.#.#.#.#####.#.#.#.###.#.#.#.#.###.#.#.#.#.#.###.#####.#.#.#.#.#.#.#####.###.#.#####.###.###########.#.#########.###.###############.#.#
|
|
||||||
#...#.#.#.#.#...#.#.#.#.....#.#.#.#...#.#...#...#...#...#...#.#.#.#.#.#.....#...#.#...###...#...#.....###.#...#...#...#...###...........#...#
|
|
||||||
#####.#.#.#.#.#.#.#.#.#######.#.#.###.#.###########.###.#.###.#.#.#.#.#####.###.#.###.#####.###.#.###.###.###.#.#.#.###.#####.#########.#####
|
|
||||||
#.....#...#...#...#...#.......#.#.###.#.###...#...#.#...#...#.#.#.#.#.#.....#...#.#...#.....#...#.#...#...#...#.#.#.#...#.....#.....#...#...#
|
|
||||||
#.#####################.#######.#.###.#.###.#.#.#.#.#.#####.#.#.#.#.#.#.#####.###.#.###.#####.###.#.###.###.###.#.#.#.###.#####.###.#.###.#.#
|
|
||||||
#.....#.......#.....#...#...#...#...#...#...#...#...#.......#.#.#.#.#.#.#.....###.#...#.....#.###.#.#...#...#...#...#...#...#...###...###.#.#
|
|
||||||
#####.#.#####.#.###.#.###.#.#.#####.#####.###################.#.#.#.#.#.#.#######.###.#####.#.###.#.#.###.###.#########.###.#.###########.#.#
|
|
||||||
#.....#.#...#...#...#...#.#.#.#.....#...#...............#...#...#.#.#...#...#...#.#...#...#.#.#...#.#.#...###.......#...#...#...#...#...#.#.#
|
|
||||||
#.#####.#.#.#####.#####.#.#.#.#.#####.#.###############.#.#.#####.#.#######.#.#.#.#.###.#.#.#.#.###.#.#.###########.#.###.#####.#.#.#.#.#.#.#
|
|
||||||
#.#...#.#.#...#...#...#...#.#.#.#...#.#...#...#.....###...#...#...#.#.......#.#.#.#.#...#.#.#.#...#.#.#.###...#...#.#...#...#...#.#.#.#.#.#.#
|
|
||||||
#.#.#.#.#.###.#.###.#.#####.#.#.#.#.#.###.#.#.#.###.#########.#.###.#.#######.#.#.#.#.###.#.#.###.#.#.#.###.#.#.#.#.###.###.#.###.#.#.#.#.#.#
|
|
||||||
#...#...#...#.#.....#...#...#.#.#.#.#...#.#.#.#...#.#.....#...#.....#.......#.#...#...#...#.#...#.#...#...#.#.#.#.#.#...###.#.#...#...#...#.#
|
|
||||||
###########.#.#########.#.###.#.#.#.###.#.#.#.###.#.#.###.#.###############.#.#########.###.###.#.#######.#.#.#.#.#.#.#####.#.#.###########.#
|
|
||||||
###...#...#.#.###.......#...#.#...#.###.#.#.#.....#.#.#...#.....#.........#.#.#.......#.#...#...#...#.....#.#.#.#.#.#.#...#.#.#...#.........#
|
|
||||||
###.#.#.#.#.#.###.#########.#.#####.###.#.#.#######.#.#.#######.#.#######.#.#.#.#####.#.#.###.#####.#.#####.#.#.#.#.#.#.#.#.#.###.#.#########
|
|
||||||
#...#...#...#...#.........#...#.....#...#.#...#.....#.#.#...###.#.#.....#...#...#.....#...#...#...#.#.....#.#.#.#...#...#...#.#...#...#.....#
|
|
||||||
#.#############.#########.#####.#####.###.###.#.#####.#.#.#.###.#.#.###.#########.#########.###.#.#.#####.#.#.#.#############.#.#####.#.###.#
|
|
||||||
#.............#.#...#...#.....#.#...#...#.....#...#...#.#.#.....#.#.#...###.....#.........#...#.#.#.#.....#.#...#...#...#...#...#.....#...#.#
|
|
||||||
#############.#.#.#.#.#.#####.#.#.#.###.#########.#.###.#.#######.#.#.#####.###.#########.###.#.#.#.#.#####.#####.#.#.#.#.#.#####.#######.#.#
|
|
||||||
#.............#.#.#.#.#.#.....#...#.###.........#...#...#.....#...#.#.#...#.#...#.......#.#...#.#...#.#...#.#.....#...#...#.#.....#.....#.#.#
|
|
||||||
#.#############.#.#.#.#.#.#########.###########.#####.#######.#.###.#.#.#.#.#.###.#####.#.#.###.#####.#.#.#.#.#############.#.#####.###.#.#.#
|
|
||||||
#.............#...#.#.#.#.......#...#...#...###.....#...#.....#.#...#.#.#.#.#...#.#...#...#.###.....#...#...#.........#...#...#...#...#...#.#
|
|
||||||
#############.#####.#.#.#######.#.###.#.#.#.#######.###.#.#####.#.###.#.#.#.###.#.#.#.#####.#######.#################.#.#.#####.#.###.#####.#
|
|
||||||
#.........###.....#.#.#...#.....#.#...#...#.....###...#.#.....#.#...#.#.#...#S..#...#.....#.#...###.....#.............#.#.......#...#...#...#
|
|
||||||
#.#######.#######.#.#.###.#.#####.#.###########.#####.#.#####.#.###.#.#.#################.#.#.#.#######.#.#############.###########.###.#.###
|
|
||||||
#.#.....#...#.....#.#...#.#.....#.#.......#.....#...#.#...###.#.###.#.#.#######...#.......#.#.#.....#...#.....#...#...#.#...........#...#...#
|
|
||||||
#.#.###.###.#.#####.###.#.#####.#.#######.#.#####.#.#.###.###.#.###.#.#.#######.#.#.#######.#.#####.#.#######.#.#.#.#.#.#.###########.#####.#
|
|
||||||
#.#.###.#...#.....#.###.#.#.....#.#...#...#.#...#.#.#.#...#...#.#...#...###...#.#.#...#...#.#.#.....#...#.....#.#.#.#.#.#.....#.....#...#...#
|
|
||||||
#.#.###.#.#######.#.###.#.#.#####.#.#.#.###.#.#.#.#.#.#.###.###.#.#########.#.#.#.###.#.#.#.#.#.#######.#.#####.#.#.#.#.#####.#.###.###.#.###
|
|
||||||
#...#...#...#.....#.#...#.#.....#.#.#.#.#...#.#.#.#.#.#.###...#.#.#########.#.#.#.###...#.#.#.#.#...###.#.......#...#...#...#.#.#...#...#...#
|
|
||||||
#####.#####.#.#####.#.###.#####.#.#.#.#.#.###.#.#.#.#.#.#####.#.#.#########.#.#.#.#######.#.#.#.#.#.###.#################.#.#.#.#.###.#####.#
|
|
||||||
#...#.....#.#.....#.#...#.#.....#...#...#...#.#.#.#...#.#...#.#...#####.....#.#.#.#.....#.#.#.#...#...#.#.....#.....#.....#...#.#.....#.....#
|
|
||||||
#.#.#####.#.#####.#.###.#.#.###############.#.#.#.#####.#.#.#.#########.#####.#.#.#.###.#.#.#.#######.#.#.###.#.###.#.#########.#######.#####
|
|
||||||
#.#.#...#.#.#.....#.....#...#...........#...#.#.#...###.#.#.#.......###...###...#.#...#.#.#...#.......#.#...#.#.#...#.......###.#.......#...#
|
|
||||||
#.#.#.#.#.#.#.###############.#########.#.###.#.###.###.#.#.#######.#####.#######.###.#.#.#####.#######.###.#.#.#.#########.###.#.#######.#.#
|
|
||||||
#.#...#...#...#...#.....#.....#...#.....#.#...#.#...#...#.#.#.......#####.....###...#.#.#.....#.........#...#...#...........#...#.........#.#
|
|
||||||
#.#############.#.#.###.#.#####.#.#.#####.#.###.#.###.###.#.#.###############.#####.#.#.#####.###########.###################.#############.#
|
|
||||||
#...#.......#...#...###.#.#.....#...#...#.#.###.#.#...#...#.#.......#####.....#...#.#.#.#...#.....#.......#...#...###...#...#.#.....#.......#
|
|
||||||
###.#.#####.#.#########.#.#.#########.#.#.#.###.#.#.###.###.#######.#####.#####.#.#.#.#.#.#.#####.#.#######.#.#.#.###.#.#.#.#.#.###.#.#######
|
|
||||||
###...#.....#.###.......#.#.....#...#.#.#...#...#.#...#...#.#.....#.#####...#...#...#.#.#.#.#.....#...#...#.#.#.#.#...#...#...#...#.#.......#
|
|
||||||
#######.#####.###.#######.#####.#.#.#.#.#####.###.###.###.#.#.###.#.#######.#.#######.#.#.#.#.#######.#.#.#.#.#.#.#.#############.#.#######.#
|
|
||||||
###.....#...#.#...#.......#...#.#.#...#.....#.#...###...#.#.#.#...#...###...#.....#...#.#.#...###...#...#.#.#...#.#.#.............#.........#
|
|
||||||
###.#####.#.#.#.###.#######.#.#.#.#########.#.#.#######.#.#.#.#.#####.###.#######.#.###.#.#######.#.#####.#.#####.#.#.#######################
|
|
||||||
#...#.....#...#.....#...#...#...#.#.........#.#.###.....#.#.#.#...#...###.###.....#.#...#...#.....#.......#.#.....#.#.#.........#...........#
|
|
||||||
#.###.###############.#.#.#######.#.#########.#.###.#####.#.#.###.#.#####.###.#####.#.#####.#.#############.#.#####.#.#.#######.#.#########.#
|
|
||||||
#.#...###...#.........#.#.....#...#.....#...#.#...#.....#.#.#.###.#...#E#...#.....#.#.....#.#...............#.......#...#.......#.#.........#
|
|
||||||
#.#.#####.#.#.#########.#####.#.#######.#.#.#.###.#####.#.#.#.###.###.#.###.#####.#.#####.#.#############################.#######.#.#########
|
|
||||||
#...#.....#...#.......#.......#.#.......#.#.#.....#.....#.#.#.#...#...#.#...###...#.#.....#.#.................#...#.....#.........#.........#
|
|
||||||
#####.#########.#####.#########.#.#######.#.#######.#####.#.#.#.###.###.#.#####.###.#.#####.#.###############.#.#.#.###.###################.#
|
|
||||||
#...#...........#...#...#...#...#.........#.....###.....#.#.#.#...#...#...###...#...#.....#.#.#...#.........#.#.#.#...#...#.....#...........#
|
|
||||||
#.#.#############.#.###.#.#.#.#################.#######.#.#.#.###.###.#######.###.#######.#.#.#.#.#.#######.#.#.#.###.###.#.###.#.###########
|
|
||||||
#.#.....#.........#...#...#...#.........#.....#...#...#.#.#.#...#...#...###...#...#.......#.#.#.#...#...#...#...#.#...###...#...#...........#
|
|
||||||
#.#####.#.###########.#########.#######.#.###.###.#.#.#.#.#.###.###.###.###.###.###.#######.#.#.#####.#.#.#######.#.#########.#############.#
|
|
||||||
#.....#.#.........#...#...#...#.......#.#.###...#...#.#.#.#.#...###.#...#...#...#...#.....#.#.#.#.....#...#...###...#...#.....#...#...#.....#
|
|
||||||
#####.#.#########.#.###.#.#.#.#######.#.#.#####.#####.#.#.#.#.#####.#.###.###.###.###.###.#.#.#.#.#########.#.#######.#.#.#####.#.#.#.#.#####
|
|
||||||
#.....#...#...#...#.....#...#.###.....#...#...#...#...#.#.#.#.....#...###...#...#.#...###...#...#...........#.......#.#.#.#...#.#...#.#.....#
|
|
||||||
#.#######.#.#.#.#############.###.#########.#.###.#.###.#.#.#####.#########.###.#.#.###############################.#.#.#.#.#.#.#####.#####.#
|
|
||||||
#...#...#...#...#...#...#...#...#...#...#...#...#...###...#.#.....#...#...#.....#.#.#...###...#.....#...#.........#...#.#...#.#...###.#...#.#
|
|
||||||
###.#.#.#########.#.#.#.#.#.###.###.#.#.#.#####.###########.#.#####.#.#.#.#######.#.#.#.###.#.#.###.#.#.#.#######.#####.#####.###.###.#.#.#.#
|
|
||||||
###...#.......#...#...#.#.#...#...#...#.#.#.....#...#...###.#.....#.#...#.#.....#...#.#.#...#.#...#...#...###...#.......###...#...#...#.#...#
|
|
||||||
#############.#.#######.#.###.###.#####.#.#.#####.#.#.#.###.#####.#.#####.#.###.#####.#.#.###.###.###########.#.###########.###.###.###.#####
|
|
||||||
#...#...#.....#.###...#...###...#.....#...#.......#...#...#.#...#.#.#.....#.#...#...#.#.#...#...#.............#...#.......#.....#...#...#...#
|
|
||||||
#.#.#.#.#.#####.###.#.#########.#####.###################.#.#.#.#.#.#.#####.#.###.#.#.#.###.###.#################.#.#####.#######.###.###.#.#
|
|
||||||
#.#...#...#...#...#.#...#.....#.....#...#...#.....#.......#...#...#.#...#...#.#...#...#.....#...#...........#...#...#.....###...#.....###.#.#
|
|
||||||
#.#########.#.###.#.###.#.###.#####.###.#.#.#.###.#.###############.###.#.###.#.#############.###.#########.#.#.#####.#######.#.#########.#.#
|
|
||||||
#.....#...#.#...#.#...#.#...#.#...#...#.#.#.#...#...#.........###...#...#...#...#...........#.###.#.......#...#.......#...#...#.....#...#.#.#
|
|
||||||
#####.#.#.#.###.#.###.#.###.#.#.#.###.#.#.#.###.#####.#######.###.###.#####.#####.#########.#.###.#.#####.#############.#.#.#######.#.#.#.#.#
|
|
||||||
#.....#.#...###...###.#.....#...#.....#.#.#...#.###...#.....#.....#...#.....#.....#.......#.#...#.#.#.....#...#...###...#...#.......#.#...#.#
|
|
||||||
#.#####.#############.#################.#.###.#.###.###.###.#######.###.#####.#####.#####.#.###.#.#.#.#####.#.#.#.###.#######.#######.#####.#
|
|
||||||
#.....#.#...........#.......#...#...###...###.#.....#...#...#...#...###.......#...#...#...#...#.#...#.......#...#.....#.......###.....#.....#
|
|
||||||
#####.#.#.#########.#######.#.#.#.#.#########.#######.###.###.#.#.#############.#.###.#.#####.#.#######################.#########.#####.#####
|
|
||||||
#.....#.#.........#.........#.#.#.#.........#.....#...###.....#...#.........#...#.....#.......#.#...#...................#...#...#.....#.....#
|
|
||||||
#.#####.#########.###########.#.#.#########.#####.#.###############.#######.#.#################.#.#.#.###################.#.#.#.#####.#####.#
|
|
||||||
#.......#.........#.........#.#...#...#...#.....#.#.#.............#.......#.#.......#.....#...#...#...#...#...#...#...###.#.#.#.#...#.#.....#
|
|
||||||
#########.#########.#######.#.#####.#.#.#.#####.#.#.#.###########.#######.#.#######.#.###.#.#.#########.#.#.#.#.#.#.#.###.#.#.#.#.#.#.#.#####
|
|
||||||
###.......#...#...#.#.......#.#.....#...#.#...#.#...#.#.......#...#...#...#.........#.#...#.#.....#.....#...#...#...#.....#...#...#...#.....#
|
|
||||||
###.#######.#.#.#.#.#.#######.#.#########.#.#.#.#####.#.#####.#.###.#.#.#############.#.###.#####.#.#######################################.#
|
|
||||||
#...#.......#...#...#.........#.........#...#...#.....#.....#.#.#...#.#.........#...#.#...#...#...#.#.......#.....#.......#...#...#...#...#.#
|
|
||||||
#.###.#################################.#########.#########.#.#.#.###.#########.#.#.#.###.###.#.###.#.#####.#.###.#.#####.#.#.#.#.#.#.#.#.#.#
|
|
||||||
#.....#...#...#...#...#...#...#...#.....#.......#...#.......#...#.#...#.....###...#...###...#.#...#.#.#...#...###...#...#...#.#.#.#.#.#.#...#
|
|
||||||
#######.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#####.#####.###.#.###########.#.###.###.###############.#.###.#.#.#.#.###########.#.#####.#.#.#.#.#.#####
|
|
||||||
#.......#...#.#.#.#.#...#.#.#...#...#...#.#.....#...#.###.....#...#...#...#.#...#...#...###.#...#.#.#...#.#...........#.....#...#.#.#...#...#
|
|
||||||
#.###########.#.#.#.#####.#.#########.#.#.#.#####.###.###.###.#.#####.###.#.#.#.#.#.#.#.###.###.#.#.#####.#.###############.#####.#.#####.#.#
|
|
||||||
#...........#.#.#.#.....#.#.........#.#...#...#...#...#...#...#.....#.#...#.#.#...#.#.#.#...#...#...#.....#.#.......#.....#.....#...#...#.#.#
|
|
||||||
###########.#.#.#.#####.#.#########.#.#######.#.###.###.###.#######.#.#.###.#.#####.#.#.#.###.#######.#####.#.#####.#.###.#####.#####.#.#.#.#
|
|
||||||
#.....#...#.#.#.#.#...#.#.....#...#...#.......#...#.###.#...#.......#.#...#.#.....#...#.#...#.#.....#.......#.....#...###.......#.....#...#.#
|
|
||||||
#.###.#.#.#.#.#.#.#.#.#.#####.#.#.#####.#########.#.###.#.###.#######.###.#.#####.#####.###.#.#.###.#############.###############.#########.#
|
|
||||||
#...#.#.#...#...#...#...#...#...#.....#...#...#...#...#.#.###.......#.#...#.###...#.....###...#...#.............#...#...#.....#...#.........#
|
|
||||||
###.#.#.#################.#.#########.###.#.#.#.#####.#.#.#########.#.#.###.###.###.#############.#############.###.#.#.#.###.#.###.#########
|
|
||||||
#...#.#.........#.....#...#.#.......#...#...#.#.#.....#.#.#...#.....#.#...#.....#...#.....###...#.....#.......#...#...#...#...#.#...#.......#
|
|
||||||
#.###.#########.#.###.#.###.#.#####.###.#####.#.#.#####.#.#.#.#.#####.###.#######.###.###.###.#.#####.#.#####.###.#########.###.#.###.#####.#
|
|
||||||
#...#.#.........#.#...#...#...#...#...#.......#.#.###...#.#.#.#.....#.###.......#...#...#...#.#.......#.#.....###...........#...#.....#...#.#
|
|
||||||
###.#.#.#########.#.#####.#####.#.###.#########.#.###.###.#.#.#####.#.#########.###.###.###.#.#########.#.###################.#########.#.#.#
|
|
||||||
#...#...#...#...#.#...#...###...#.....###...###.#...#...#.#.#.###...#.#...#...#...#...#.#...#.........#.#.#...###...###.......#.....#...#...#
|
|
||||||
#.#######.#.#.#.#.###.#.#####.###########.#.###.###.###.#.#.#.###.###.#.#.#.#.###.###.#.#.###########.#.#.#.#.###.#.###.#######.###.#.#######
|
|
||||||
#.......#.#.#.#.#.#...#.#...#...........#.#...#...#...#.#.#.#...#...#...#...#.###...#...#.#.....#...#...#...#...#.#.#...#.......###.#.......#
|
|
||||||
#######.#.#.#.#.#.#.###.#.#.###########.#.###.###.###.#.#.#.###.###.#########.#####.#####.#.###.#.#.###########.#.#.#.###.#########.#######.#
|
|
||||||
#.......#.#...#.#.#.....#.#.###.......#.#...#.#...#...#.#.#...#...#.#.........#.....#.....#...#.#.#...#.........#.#.#.#...#...#...#.#...#...#
|
|
||||||
#.#######.#####.#.#######.#.###.#####.#.###.#.#.###.###.#.###.###.#.#.#########.#####.#######.#.#.###.#.#########.#.#.#.###.#.#.#.#.#.#.#.###
|
|
||||||
#...#...#.....#...###.....#.....#...#...###.#.#...#.###.#.###...#.#.#.#...#...#.....#.#...###.#.#...#.#.....###...#...#.....#...#.#.#.#.#...#
|
|
||||||
###.#.#.#####.#######.###########.#.#######.#.###.#.###.#.#####.#.#.#.#.#.#.#.#####.#.#.#.###.#.###.#.#####.###.#################.#.#.#.###.#
|
|
||||||
#...#.#...#...#.......#...........#.#...#...#.#...#.#...#.#...#.#...#...#.#.#.#...#.#.#.#...#.#.#...#.#...#...#.#.................#...#.#...#
|
|
||||||
#.###.###.#.###.#######.###########.#.#.#.###.#.###.#.###.#.#.#.#########.#.#.#.#.#.#.#.###.#.#.#.###.#.#.###.#.#.#####################.#.###
|
|
||||||
#...#...#...###.....#...#...........#.#.#...#.#.###.#...#...#.#.......#...#.#.#.#.#.#...###...#.#.###.#.#...#...#.###.................#.#...#
|
|
||||||
###.###.###########.#.###.###########.#.###.#.#.###.###.#####.#######.#.###.#.#.#.#.###########.#.###.#.###.#####.###.###############.#.###.#
|
|
||||||
###...#.#...........#.#...#...#.....#.#...#.#.#.#...#...###...#...#...#...#.#...#.#.....#.......#...#.#.#...#...#.....#...#...........#...#.#
|
|
||||||
#####.#.#.###########.#.###.#.#.###.#.###.#.#.#.#.###.#####.###.#.#.#####.#.#####.#####.#.#########.#.#.#.###.#.#######.#.#.#############.#.#
|
|
||||||
#.....#.#.....#.......#.....#.#.#...#.###.#.#.#.#...#.....#.#...#.#.....#.#...#...#.....#...#...#...#...#...#.#.....#...#.#...###...#...#...#
|
|
||||||
#.#####.#####.#.#############.#.#.###.###.#.#.#.###.#####.#.#.###.#####.#.###.#.###.#######.#.#.#.#########.#.#####.#.###.###.###.#.#.#.#####
|
|
||||||
#...#...#.....#...#...........#.#.#...#...#.#...#...#...#.#.#.###.....#.#.#...#...#.......#.#.#.#...#.......#.....#...###...#.....#...#.....#
|
|
||||||
###.#.###.#######.#.###########.#.#.###.###.#####.###.#.#.#.#.#######.#.#.#.#####.#######.#.#.#.###.#.###########.#########.###############.#
|
|
||||||
#...#...#.#.......#.........#...#.#...#...#...#...#...#.#.#.#.#.......#.#...#.....#.......#...#.....#.....#.....#.....#.....#...#...........#
|
|
||||||
#.#####.#.#.###############.#.###.###.###.###.#.###.###.#.#.#.#.#######.#####.#####.#####################.#.###.#####.#.#####.#.#.###########
|
|
||||||
#...#...#.#.#...............#.#...#...#...#...#...#...#...#.#.#...#...#...###.#...#.....#.......#.........#.#...#...#.#.....#.#.#.........###
|
|
||||||
###.#.###.#.#.###############.#.###.###.###.#####.###.#####.#.###.#.#.###.###.#.#.#####.#.#####.#.#########.#.###.#.#.#####.#.#.#########.###
|
|
||||||
#...#.#...#.#.....#.........#.#...#...#...#...###...#.#...#...#...#.#...#...#.#.#.#.....#.#.....#.........#.#...#.#...#...#...#.#...#...#...#
|
|
||||||
#.###.#.###.#####.#.#######.#.###.###.###.###.#####.#.#.#.#####.###.###.###.#.#.#.#.#####.#.#############.#.###.#.#####.#.#####.#.#.#.#.###.#
|
|
||||||
#...#.#.#...#.....#.###.....#.#...#...###...#.....#.#...#.....#.#...#...#...#.#.#.#.......#.....#.........#...#.#.......#...#...#.#.#.#...#.#
|
|
||||||
###.#.#.#.###.#####.###.#####.#.###.#######.#####.#.#########.#.#.###.###.###.#.#.#############.#.###########.#.###########.#.###.#.#.###.#.#
|
|
||||||
###.#.#.#...#.....#.#...#...#.#...#.#.......#...#.#...#.....#.#...###...#.###...#...#.....#.....#.#...#.....#.#.#.....#.....#.....#.#...#.#.#
|
|
||||||
###.#.#.###.#####.#.#.###.#.#.###.#.#.#######.#.#.###.#.###.#.#########.#.#########.#.###.#.#####.#.#.#.###.#.#.#.###.#.###########.###.#.#.#
|
|
||||||
#...#.#.....#...#.#.#.....#...###...#.#...#...#...###.#...#.#.#.........#...#.......#.###.#.....#...#.#.###...#.#...#.#...........#...#.#.#.#
|
|
||||||
#.###.#######.#.#.#.#################.#.#.#.#########.###.#.#.#.###########.#.#######.###.#####.#####.#.#######.###.#.###########.###.#.#.#.#
|
|
||||||
#...#.#.......#...#.#.................#.#.#.#.....#...#...#...#...#.....#...#...#.....#...#...#.###...#...#.....#...#.#...........###.#.#.#.#
|
|
||||||
###.#.#.###########.#.#################.#.#.#.###.#.###.#########.#.###.#.#####.#.#####.###.#.#.###.#####.#.#####.###.#.#############.#.#.#.#
|
|
||||||
###.#.#...#...#...#.#.........#...#...#.#...#...#.#...#.....#...#...#...#.....#.#.###...#...#.#...#.....#.#.#...#.###...#...###.....#...#...#
|
|
||||||
###.#.###.#.#.#.#.#.#########.#.#.#.#.#.#######.#.###.#####.#.#.#####.#######.#.#.###.###.###.###.#####.#.#.#.#.#.#######.#.###.###.#########
|
|
||||||
#...#.###...#...#...#.........#.#.#.#.#.....#...#.....#...#...#.....#...#...#.#.#.#...#...###...#.#.....#.#...#.#.........#.....#...#...#...#
|
|
||||||
#.###.###############.#########.#.#.#.#####.#.#########.#.#########.###.#.#.#.#.#.#.###.#######.#.#.#####.#####.#################.###.#.#.#.#
|
|
||||||
#.....#...#...........#.......#.#.#.#...#...#...#...#...#.#.........#...#.#.#.#...#...#.###...#...#.#.....#.....#...#...........#.....#...#.#
|
|
||||||
#######.#.#.###########.#####.#.#.#.###.#.#####.#.#.#.###.#.#########.###.#.#.#######.#.###.#.#####.#.#####.#####.#.#.#########.###########.#
|
|
||||||
#.....#.#.#...#...#...#.###...#.#.#.#...#.#.....#.#.#...#.#.....#...#.....#.#.#.......#.....#.#.....#.....#...#...#.#.........#...#.........#
|
|
||||||
#.###.#.#.###.#.#.#.#.#.###.###.#.#.#.###.#.#####.#.###.#.#####.#.#.#######.#.#.#############.#.#########.###.#.###.#########.###.#.#########
|
|
||||||
#...#...#.....#.#.#.#.#.#...#...#.#.#...#.#.#...#.#.#...#.#...#...#.......#.#.#...#...#...#...#...#...#...#...#.#...#...#...#...#.#.........#
|
|
||||||
###.###########.#.#.#.#.#.###.###.#.###.#.#.#.#.#.#.#.###.#.#.###########.#.#.###.#.#.#.#.#.#####.#.#.#.###.###.#.###.#.#.#.###.#.#########.#
|
|
||||||
###.............#...#...#.....###...###...#...#...#...###...#.............#...###...#...#...#####...#...###.....#.....#...#.....#...........#
|
|
||||||
#############################################################################################################################################
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
029A
|
|
||||||
980A
|
|
||||||
179A
|
|
||||||
456A
|
|
||||||
379A
|
|
||||||
2244
Inputs/Day22.txt
2244
Inputs/Day22.txt
File diff suppressed because it is too large
Load Diff
3380
Inputs/Day23.txt
3380
Inputs/Day23.txt
File diff suppressed because it is too large
Load Diff
313
Inputs/Day24.txt
313
Inputs/Day24.txt
@@ -1,313 +0,0 @@
|
|||||||
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
3999
Inputs/Day25.txt
File diff suppressed because it is too large
Load Diff
@@ -1,6 +0,0 @@
|
|||||||
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
140
Inputs/Day4.txt
@@ -1,140 +0,0 @@
|
|||||||
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
1379
Inputs/Day5.txt
File diff suppressed because it is too large
Load Diff
130
Inputs/Day6.txt
130
Inputs/Day6.txt
@@ -1,130 +0,0 @@
|
|||||||
........#...........................#...........#............................................................................#....
|
|
||||||
...........#..............................................##.#....................##.......#.............##..............#........
|
|
||||||
...................#..#........#..#..##.................#......##..................#.....#....#.............#...........#...##....
|
|
||||||
..........#......#..................................................#...................#........#..#.....#.......................
|
|
||||||
.........#...#......#...................................#............#...#........#.............#..#........................#.....
|
|
||||||
..##.#...........#......#.....#.#...#..............#.#......#.......#..............#.............#..................#.......#.....
|
|
||||||
...#.................................####...........#..........#..#.....#........#...........................................#....
|
|
||||||
..........#......................#............................#....................#..............#......#....#.................#.
|
|
||||||
...#.................#.........#.........#.#.....#....#.................................................................#.#.......
|
|
||||||
.......#.......................#...........#..................................#.............#..................#......#.#.........
|
|
||||||
....................#.#.........#.........#................................#........#.#.........................#..#....#.........
|
|
||||||
........#.............#....#.....#................................##.....#..................#.....................#...............
|
|
||||||
..............#...................#..........................................#..........#........................#................
|
|
||||||
...........#...................................................................................#..........#.........##.#..........
|
|
||||||
............#....................#...................#.................................#.......#............#.......#.............
|
|
||||||
..........................................#.....#.............#.#.......................##......#.....#...........................
|
|
||||||
........................#...#..................#......................................................#.#..#......................
|
|
||||||
...#.....#.....................#..........................................#................................................#.....#
|
|
||||||
..##....................................#.....................#.............#.......#.............................................
|
|
||||||
........#..................#......#................................#.......................................................#......
|
|
||||||
.........#................#...............................##.#.....................#...........................#...........#.#....
|
|
||||||
............#.....#..................................#.....#........#................#............................................
|
|
||||||
.....................................................##..............#.....#.....#.......#........................................
|
|
||||||
..........#..#..............#..#...#.......................#..........................................#...........................
|
|
||||||
...............#.............................................................#..#......#.......#..#....................#..........
|
|
||||||
.#......................#....##.#....................#..#...#............................#............................#....#....#.
|
|
||||||
...#...................................................................................................................#.......#..
|
|
||||||
.#....#..............#....................#......................................#.......................#....#..#................
|
|
||||||
........#.....................#............................................#...............#......................................
|
|
||||||
....#........#..........................................................................#..............................###.......#
|
|
||||||
........#..#.....................#..................#..................##..........#..............................................
|
|
||||||
..........................#...#................#....................................................#..#............#.............
|
|
||||||
......#..............#................................#.....................#.................................#............#......
|
|
||||||
...................................................#....................#.................#.....#................................#
|
|
||||||
..........................#...............#....#........................#.............................................#...........
|
|
||||||
##..............#..............................#....#.......................#.................................................#...
|
|
||||||
...........................#.............................................................#.#................#......#........#.##..
|
|
||||||
........#..................#...#..............#..............................#.....#..........#...................................
|
|
||||||
..........#......#.##..#.....#.......##.....#......................................................#..................#...........
|
|
||||||
....#.........#................#............................................#..#...#............#.....#..#........................
|
|
||||||
#.......#..............#.....................#..........#....#......#......................................#........#.............
|
|
||||||
.........#..........................................................................#.........#............................#......
|
|
||||||
..........................#...#.......#...............#..............#.......................#...#................................
|
|
||||||
.......................................................................#.........................................#...............#
|
|
||||||
...................#.....#.......................................................#.............................................#..
|
|
||||||
...##.....................#....#................................#........#...#....#.......##......................................
|
|
||||||
.................................................................#.......#................................#.........#.............
|
|
||||||
#..........................#.#........................#............................................#...#.........#................
|
|
||||||
................#.#........#...................#...............................#.........#............#.........#.................
|
|
||||||
...#...................................#.....................................................................#..#......#..........
|
|
||||||
.................................................#..........................................#....#................................
|
|
||||||
..............##.#...............................................#......................................................##........
|
|
||||||
...........#..............................................#.....................................##.....#.........#................
|
|
||||||
#.......................#..........................#......#...................#.#.................................................
|
|
||||||
..............##..........................#............................................................#................#.........
|
|
||||||
.......................#...#.........#....................................................................#............#..........
|
|
||||||
.....#.................##.................................................#...........#..............#....#.................#.....
|
|
||||||
.........#................................................#....................#.......#.........................##.#.............
|
|
||||||
...........#............#...#...................#.........#....................................................#..................
|
|
||||||
....................#.....................................................................#..........#.#..........................
|
|
||||||
............................##..#.......................#.......#...................#.#..........#..........................#...#.
|
|
||||||
..................#...........#.......#.............................................................#.............................
|
|
||||||
...##......................#....##..................................#...............#.#..#........................................
|
|
||||||
..#..............................##..................................................................#.......#....................
|
|
||||||
...#.......#..........#.#.................................................##....#...............#...............#..........#.....#
|
|
||||||
.....................................................##....................#..#..#...........................#....................
|
|
||||||
...#......................#........#..................#.##..............#..............#....................................#.....
|
|
||||||
...............#..........................#..........................................................#.#..#..............#........
|
|
||||||
....................##....................#..#...................................#................................................
|
|
||||||
...........................#..............#.....................................#.........................##......................
|
|
||||||
...............#.................................................................#.....................#..........................
|
|
||||||
......#..........#...#...........#................................................#...#.................................#..#......
|
|
||||||
..........#............................#.............#.....................#........#............#.........#......................
|
|
||||||
...........#...........#..........#....#......................................................................#........#.........#
|
|
||||||
......................#...............##.................................................................................#.....#..
|
|
||||||
...#................#........#..........#...................#............^...........#.................#.#......##.#.............#
|
|
||||||
.......................##..............#......#.....................................#.....#.........................#.#.#.........
|
|
||||||
.................#..#..........................................#...................#...#.........#................................
|
|
||||||
..#.#.....#.............................................................#.#.......................................................
|
|
||||||
..............................#...............###...............#..........##..........................#...#..#..........##.......
|
|
||||||
.................................#.....#.........#......................................................#................#........
|
|
||||||
...............##.#..................................................#........................#...................#.........#..##.
|
|
||||||
.........#.................................#......#...............................................................................
|
|
||||||
..................#......................#.#.........................................................#.....#......................
|
|
||||||
.#..................#.............................#...............................................................................
|
|
||||||
...................#...................#.#........#......#...........................#......................#..........#..........
|
|
||||||
.............#...................................................................................................#................
|
|
||||||
..........................#................................................#........#..#..........................................
|
|
||||||
.#........................................................#.......#......#..#.....................................................
|
|
||||||
..................##..............#.............#................#...............................#......#......#........#....#.#..
|
|
||||||
#.............#....................................#.....................................................#........................
|
|
||||||
............................#................................................................#....#.....#................#........
|
|
||||||
.........#.......................................................................................................................#
|
|
||||||
..#.........................................................................................#........#.#...........#..............
|
|
||||||
...........#......................#.......#................................#...#.......#...............#..........................
|
|
||||||
.......................#...#..#.......#..................#........#.....#.........#...............................................
|
|
||||||
..#..##...................#..........#................................................#.........#...................#.............
|
|
||||||
........................##..........................#.......#..........................#...#.#....................................
|
|
||||||
..........................................................................................#.............#...........#............#
|
|
||||||
..............................#.............................................................................................#.#..#
|
|
||||||
.............#..........#...........................#.........................#........#.....................#............#......#
|
|
||||||
....................................#..........................................................................................#..
|
|
||||||
.........#.................................#...........................................................................#..........
|
|
||||||
.#..............................#......#......#.#................................#.................#......#....#..#..#...........#
|
|
||||||
.#...#................#.......#............#.........#...#..........#......#.........................#....................#.......
|
|
||||||
..............#........................#................................................................................#.........
|
|
||||||
.........#........#..#.........#........#......#..#..............................................#................#...............
|
|
||||||
...........#......................#.......#..................................#....#...#......#..........#.........................
|
|
||||||
...........#........................................................#.#...........#................#..............................
|
|
||||||
.#...........................#...................#...#..................................................................#........#
|
|
||||||
....................................................................#...................#.....#......#...........................#
|
|
||||||
...#..#..............#......................#......#..#...............#..............#..............#..............#..............
|
|
||||||
...........#........................#............#.#...........#..................................................................
|
|
||||||
............#........................#.................................................#..............#.#....................#....
|
|
||||||
............................#...........................#............................#........#..........................#........
|
|
||||||
#................................................................#...........................#.............#.#........#.#.......#.
|
|
||||||
............#..........#..............#.......#...#................................#.........#.#................#........#....#...
|
|
||||||
...#.....................#..........#.............#....................................................#.#........................
|
|
||||||
...............#..................................................#......................#...............#........................
|
|
||||||
......#............................#..................#.....#...........................................................#...#.#...
|
|
||||||
#................#..........................................................................................#..........#.......#..
|
|
||||||
.................................................................#..............#...................#...................#.#.......
|
|
||||||
...............#..............................................#.................#...............#...........................#.....
|
|
||||||
.............................#...#........................#....................#........#.....................................#.##
|
|
||||||
...............##..#.....#..#....#.#...#...........................................#.#........#........#.......#..................
|
|
||||||
.......#........................#....#..#............................................................#.......#....................
|
|
||||||
........#....................#........#....#.................#........................#.............#.............................
|
|
||||||
#...#...........#......................................................#...............#...........#..#..#....#................#..
|
|
||||||
................................#........................................................#...#..#......#....#.....#....#...#......
|
|
||||||
..#..............#............................#........#....#......#.................................................#............
|
|
||||||
850
Inputs/Day7.txt
850
Inputs/Day7.txt
@@ -1,850 +0,0 @@
|
|||||||
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
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
.....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.....
|
|
||||||
File diff suppressed because one or more lines are too long
15
Program.cs
15
Program.cs
@@ -25,19 +25,6 @@ var selectedDay = AnsiConsole.Prompt(select);
|
|||||||
|
|
||||||
var stopWatch = new Stopwatch();
|
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]Running [yellow]{selectedDay}[/]...[/]\n");
|
||||||
|
|
||||||
AnsiConsole.MarkupLine("[cyan]Part [yellow]1[/] result:[/]");
|
AnsiConsole.MarkupLine("[cyan]Part [yellow]1[/] result:[/]");
|
||||||
@@ -57,9 +44,7 @@ catch (Exception e)
|
|||||||
|
|
||||||
stopWatch.Reset();
|
stopWatch.Reset();
|
||||||
|
|
||||||
// Part 2
|
|
||||||
AnsiConsole.MarkupLine("\n[cyan]Part [yellow]2[/] result:[/]");
|
AnsiConsole.MarkupLine("\n[cyan]Part [yellow]2[/] result:[/]");
|
||||||
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
stopWatch.Start();
|
stopWatch.Start();
|
||||||
|
|||||||
@@ -14,25 +14,4 @@ public static class StringExtensions
|
|||||||
{
|
{
|
||||||
return new StringReader(text).ReadAllLines();
|
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