diff --git a/AdventOfCode/2022/Day16/Day16.cs b/AdventOfCode/2022/Day16/Day16.cs index 55ff6ef..6204aa5 100644 --- a/AdventOfCode/2022/Day16/Day16.cs +++ b/AdventOfCode/2022/Day16/Day16.cs @@ -11,6 +11,8 @@ namespace AdventOfCode.Year2022 { + //TODO - Finish my implementation + public class Day16 : Day { diff --git a/AdventOfCode/2022/Day17/Day17.cs b/AdventOfCode/2022/Day17/Day17.cs index 844dbb2..04609af 100644 --- a/AdventOfCode/2022/Day17/Day17.cs +++ b/AdventOfCode/2022/Day17/Day17.cs @@ -11,7 +11,8 @@ namespace AdventOfCode.Year2022 { public class Day17 : Day { - + //TODO - Finish my implementation + public Day17(int today) : base(today) { diff --git a/AdventOfCode/2022/Day18/Day18.cs b/AdventOfCode/2022/Day18/Day18.cs new file mode 100644 index 0000000..6a77e19 --- /dev/null +++ b/AdventOfCode/2022/Day18/Day18.cs @@ -0,0 +1,276 @@ +using AdventOfCode.Common; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; + +namespace AdventOfCode.Year2022 +{ + public class Day18 : Day + { + + public Day18(int today) : base(today) + { + + } + public override void RunPart1(ArgumentType argumentType) + { + string[] data = argumentType == ArgumentType.Sample ? Sample : Full; + LavaScanner scanner = new LavaScanner(data); + result = scanner.sides.ToString(); + Console.WriteLine(result); + } + public override void RunPart2(ArgumentType argumentType) + { + string[] data = argumentType == ArgumentType.Sample ? Sample : Full; + LavaScanner scanner = new LavaScanner(data, true); + scanner.FillInternalVoids(); + result = scanner.sides.ToString(); + Console.WriteLine(result); + } + } + public class LavaScanner + { + public int sides => lavaCubes.Aggregate(0, (acc, x) => acc + x.Value.OpenSides); + public (int x, int y, int z) LowerRange { get; set; } = (int.MaxValue, int.MaxValue, int.MaxValue); + public (int x, int y, int z) UpperRange { get; set; } = (int.MinValue, int.MinValue, int.MinValue); + public bool UpgradeActive { get; set; } = false; + + public Dictionary lavaCubes = new Dictionary(); + public Dictionary> x_cubes = new Dictionary>(); + public Dictionary> y_cubes = new Dictionary>(); + public Dictionary> z_cubes = new Dictionary>(); + public Dictionary> Adjacencies = new Dictionary>(); + public LavaScanner(string[] data, bool Upgrade = false) + { + for (int y = 0; y < data.Length; y++) + { + LavaCube cube = new LavaCube(data[y], y); + + if (Upgrade) + UpdateScanFieldRanges(cube); + + lavaCubes.Add(cube.ID, cube); + if (!x_cubes.ContainsKey(cube.x)) + { + x_cubes.Add(cube.x, new List()); + } + x_cubes[cube.x].Add(cube); + if (!y_cubes.ContainsKey(cube.y)) + { + y_cubes.Add(cube.y, new List()); + } + y_cubes[cube.y].Add(cube); + if (!z_cubes.ContainsKey(cube.z)) + { + z_cubes.Add(cube.z, new List()); + } + z_cubes[cube.z].Add(cube); + } + if(!Upgrade) + CalculateAdjacentCubes(); + } + public override string ToString() + { + return $"Contains {lavaCubes.Count} cubes with {sides} sides"; + } + public void UpdateScanFieldRanges(LavaCube cube) + { + if (cube.x < LowerRange.x) + { + LowerRange = (cube.x, LowerRange.y, LowerRange.z); + } + if (cube.y < LowerRange.y) + { + LowerRange = (LowerRange.x, cube.y, LowerRange.z); + } + if (cube.z < LowerRange.z) + { + LowerRange = (LowerRange.x, LowerRange.y, cube.z); + } + if (cube.x > UpperRange.x) + { + UpperRange = (cube.x, UpperRange.y, UpperRange.z); + } + if (cube.y > UpperRange.y) + { + UpperRange = (UpperRange.x, cube.y, UpperRange.z); + } + if (cube.z > UpperRange.z) + { + UpperRange = (UpperRange.x, UpperRange.y, cube.z); + } + } + public void FillInternalVoids() + { + HashSet<(int x, int y, int z)> ScanTarget = new(); + //Search for line gaps in straight lines bewteen cubes in the x plane + foreach (var x in x_cubes.Keys) + { + var cubes = x_cubes[x].OrderBy(c => c.y).ToList(); + foreach (int z in cubes.Select(c => c.z).Distinct()) + { + var zcubes = cubes.Where(c => c.z == z).ToList(); + for (int i = 0; i < zcubes.Count - 1; i++) + { + if (zcubes[i].y + 1 != zcubes[i + 1].y) + { + ScanTarget.Add((x, zcubes[i].y + 1, z)); + } + } + } + cubes = x_cubes[x].OrderBy(c => c.z).ToList(); + foreach (int y in cubes.Select(c => c.y).Distinct()) + { + var ycubes = cubes.Where(c => c.y == y).ToList(); + for (int i = 0; i < ycubes.Count - 1; i++) + { + if (ycubes[i].z + 1 != ycubes[i + 1].z) + { + ScanTarget.Add((x, y, ycubes[i].z + 1)); + } + } + } + } + + + int[][] Directions = new int[][] { new int[] { 1, 0, 0 }, new int[] { -1, 0, 0 }, new int[] { 0, 1, 0 }, new int[] { 0, -1, 0 }, new int[] { 0, 0, 1 }, new int[] { 0, 0, -1 } }; + HashSet<(int x, int y, int z)> Visited = new(); + + foreach (var target in ScanTarget) + { + if(Visited.Contains(target)) + continue; + + HashSet<(int x, int y, int z)> NewArea = new(); + //bfs to see if we can reach the edge of the scanfield + Queue<(int x, int y, int z)> ToProcess = new Queue<(int x, int y, int z)>(); + ToProcess.Enqueue(target); + while (ToProcess.Count > 0) + { + var current = ToProcess.Dequeue(); + //check if any point has reached either the upper or lower limit of the space + if (NewArea.Contains(current)) + continue; + if (current.x == LowerRange.x || current.x == UpperRange.x || current.y == LowerRange.y || current.y == UpperRange.y || current.z == LowerRange.z || current.z == UpperRange.z) + { + //if so, the area is not internal + NewArea.Clear(); + ToProcess.Clear(); + break; + } + //check if current already exists in LavaCubes by searching for it in the x_cubes dictionary + + Visited.Add(current); + NewArea.Add(current); + foreach (var direction in Directions) + { + (int x, int y, int z) NextDirection = (current.x + direction[0], current.y + direction[1], current.z + direction[2]); + if (x_cubes[NextDirection.x].Exists(x => x.y == NextDirection.y && x.z == NextDirection.z)) + continue; + ToProcess.Enqueue(NextDirection); + } + } + if (NewArea.Count > 0) + { + foreach((int x, int y, int z) item in NewArea) + { + LavaCube cube = new LavaCube(item, lavaCubes.Count()); + lavaCubes.Add(cube.ID, cube); + if (!x_cubes.ContainsKey(cube.x)) + { + x_cubes.Add(cube.x, new List()); + } + x_cubes[cube.x].Add(cube); + if (!y_cubes.ContainsKey(cube.y)) + { + y_cubes.Add(cube.y, new List()); + } + y_cubes[cube.y].Add(cube); + if (!z_cubes.ContainsKey(cube.z)) + { + z_cubes.Add(cube.z, new List()); + } + z_cubes[cube.z].Add(cube); + } + } + } + CalculateAdjacentCubes(); + } + + + public void CalculateAdjacentCubes() + { + foreach (LavaCube cube in lavaCubes.Values) + { + foreach (LavaCube other in x_cubes[cube.x]) + { + if (other.ID != cube.ID && !other.AdjacentCubes.Contains(cube.ID) + && (((other.y == cube.y - 1 || other.y == cube.y + 1) && other.z == cube.z) + || ((other.z == cube.z - 1 || other.z == cube.z + 1) && other.y == cube.y))) + { + cube.AdjacentCubes.Add(other.ID); + other.AdjacentCubes.Add(cube.ID); + } + } + foreach (LavaCube other in y_cubes[cube.y]) + { + if (other.ID != cube.ID && !other.AdjacentCubes.Contains(cube.ID) + && (((other.x == cube.x - 1 || other.x == cube.x + 1) && other.z == cube.z) + || ((other.z == cube.z - 1 || other.z == cube.z + 1) && other.x == cube.x))) + { + cube.AdjacentCubes.Add(other.ID); + other.AdjacentCubes.Add(cube.ID); + } + } + foreach (LavaCube other in z_cubes[cube.z]) + { + if (other.ID != cube.ID && !other.AdjacentCubes.Contains(cube.ID) + && (((other.x == cube.x - 1 || other.x == cube.x + 1) && other.y == cube.y) + || ((other.y == cube.y - 1 || other.y == cube.y + 1) && other.x == cube.x))) + { + cube.AdjacentCubes.Add(other.ID); + other.AdjacentCubes.Add(cube.ID); + } + } + if (cube.AdjacentCubes.Count() > 6) + throw new Exception("Too many adjacent cubes"); + } + } + + public class LavaCube + { + //add unique id + public int ID { get; set; } + public int x { get; set; } + public int y { get; set; } + public int z { get; set; } + public List AdjacentCubes { get; set; } = new List(); + public int OpenSides => 6 - AdjacentCubes.Count(); + public override string ToString() + { + return $"(ID: {ID} => {x},{y},{z} with {OpenSides} sides open"; + } + public LavaCube((int x, int y, int z)point, int id) + { + x = point.x; + y = point.y; + z = point.z; + ID = id; + } + public LavaCube(string data, int id) + { + //data input format is like "2,2,2" where x,y,z are integers + //parse "2 ,2,2" into x,y, z using regex + string pattern = @"(\d+),(\d+),(\d+)"; + var match = Regex.Match(data, pattern); + x = int.Parse(match.Groups[1].Value); + y = int.Parse(match.Groups[2].Value); + z = int.Parse(match.Groups[3].Value); + ID = id; + } + } + } +} \ No newline at end of file diff --git a/AdventOfCode/2022/Day18/Full.txt b/AdventOfCode/2022/Day18/Full.txt new file mode 100644 index 0000000..bd77eb6 --- /dev/null +++ b/AdventOfCode/2022/Day18/Full.txt @@ -0,0 +1,2825 @@ +12,18,4 +6,14,18 +13,4,14 +2,10,9 +8,6,5 +4,11,16 +10,17,15 +8,12,2 +7,14,17 +18,4,10 +15,4,14 +4,13,17 +3,7,12 +15,6,4 +6,4,5 +15,11,17 +6,16,16 +11,16,18 +5,8,18 +3,13,8 +11,17,7 +2,11,12 +18,13,6 +4,15,15 +17,14,16 +12,19,12 +5,6,4 +13,1,11 +6,4,10 +8,12,19 +16,4,13 +17,5,8 +10,14,19 +17,10,4 +11,3,12 +4,6,13 +16,17,6 +17,14,9 +15,17,5 +12,3,6 +5,17,12 +7,3,15 +11,20,10 +14,13,4 +15,11,18 +20,11,7 +14,19,15 +5,8,6 +12,18,16 +5,7,15 +6,16,13 +2,11,11 +8,14,5 +10,12,19 +7,5,6 +4,12,5 +2,10,10 +9,2,6 +11,8,18 +8,15,17 +3,10,14 +9,10,2 +20,10,8 +9,19,12 +5,17,16 +9,8,4 +14,5,13 +18,15,11 +16,17,12 +5,9,5 +4,6,7 +2,5,8 +12,19,6 +6,19,9 +11,11,20 +6,17,15 +13,14,17 +16,5,15 +18,14,8 +5,16,13 +12,3,8 +5,9,17 +15,7,3 +18,12,8 +15,13,18 +14,12,18 +19,7,12 +18,9,5 +6,6,10 +8,13,17 +5,4,13 +12,9,18 +12,20,12 +8,17,15 +14,8,5 +3,12,15 +10,11,19 +14,18,15 +15,17,14 +5,12,7 +11,4,10 +12,14,4 +10,8,18 +7,8,18 +2,10,14 +2,9,15 +6,10,17 +18,12,15 +19,11,15 +5,17,11 +8,16,5 +5,17,14 +13,18,7 +13,11,19 +9,19,4 +14,15,3 +18,10,6 +14,18,7 +3,7,15 +18,15,8 +10,15,18 +3,10,7 +5,6,7 +17,5,10 +2,13,10 +16,15,7 +12,19,13 +5,8,16 +19,10,10 +16,5,14 +12,6,19 +19,8,11 +20,11,11 +13,16,4 +10,7,3 +1,11,7 +7,2,12 +5,7,7 +4,11,8 +17,16,11 +14,9,17 +17,11,6 +12,3,10 +11,6,5 +8,3,14 +7,11,4 +5,5,6 +17,15,9 +17,16,8 +13,15,14 +10,5,16 +11,17,16 +6,12,4 +11,2,12 +15,6,16 +15,8,3 +10,2,5 +4,4,15 +6,18,10 +10,3,15 +13,18,8 +14,12,19 +8,18,15 +14,10,18 +5,17,8 +9,15,3 +2,13,12 +10,12,20 +5,3,11 +14,19,13 +12,4,4 +6,18,9 +7,5,5 +14,5,15 +9,20,9 +13,18,13 +16,7,4 +17,7,6 +16,18,11 +12,2,13 +17,15,8 +12,17,15 +5,15,15 +4,15,16 +7,3,13 +7,14,18 +7,8,2 +6,9,18 +10,7,19 +9,5,18 +9,20,10 +5,10,18 +4,14,16 +12,2,9 +10,17,16 +6,10,3 +6,13,3 +5,4,9 +9,9,3 +12,4,16 +2,8,14 +16,4,14 +16,5,12 +5,5,11 +18,13,8 +11,5,17 +20,10,9 +13,3,11 +4,5,12 +3,8,9 +3,14,14 +8,1,7 +11,3,6 +7,5,16 +18,12,16 +10,12,4 +6,4,13 +7,16,7 +4,5,11 +12,17,16 +8,18,12 +16,12,5 +8,13,4 +2,10,7 +7,16,17 +13,18,14 +13,15,4 +13,17,4 +2,10,16 +7,3,6 +15,17,10 +16,15,12 +17,9,16 +19,8,12 +9,16,4 +7,3,12 +5,16,6 +7,12,18 +17,13,14 +11,3,17 +18,10,7 +7,6,16 +3,8,14 +17,15,15 +15,4,16 +5,4,12 +10,16,6 +16,15,9 +8,2,9 +2,9,8 +11,7,4 +6,6,14 +14,2,8 +3,8,8 +19,10,15 +16,16,14 +18,11,13 +12,7,2 +4,15,12 +3,15,14 +6,13,18 +14,9,16 +15,16,8 +10,3,8 +6,2,12 +3,10,15 +18,13,12 +5,4,8 +5,12,4 +17,10,12 +16,10,4 +18,7,5 +11,14,2 +17,11,17 +2,11,7 +15,7,5 +5,14,7 +9,3,12 +14,4,16 +10,3,6 +17,16,10 +9,17,5 +4,7,15 +17,7,13 +11,13,3 +6,13,4 +7,17,13 +13,7,3 +4,5,8 +13,14,3 +7,10,19 +4,15,13 +12,5,16 +19,14,9 +5,8,7 +6,4,14 +12,20,11 +11,15,2 +9,9,2 +8,17,9 +17,15,16 +13,6,18 +19,11,10 +3,15,6 +4,4,14 +8,3,11 +14,5,16 +17,5,12 +18,8,7 +8,4,11 +16,9,17 +13,18,10 +16,4,10 +12,6,2 +14,5,4 +5,5,12 +15,17,12 +14,14,3 +5,9,6 +5,12,17 +4,8,16 +9,10,1 +2,12,10 +3,10,16 +4,14,15 +14,1,9 +11,15,18 +10,14,16 +12,17,6 +9,16,3 +17,14,6 +14,4,7 +11,19,12 +18,14,15 +5,6,11 +16,5,17 +5,11,4 +13,9,3 +11,10,20 +5,9,16 +19,12,7 +6,5,17 +5,17,7 +19,11,9 +14,3,8 +6,7,18 +3,8,12 +7,15,5 +3,13,13 +4,7,16 +3,12,9 +19,13,10 +7,5,13 +16,10,16 +15,14,5 +4,4,7 +15,5,14 +7,18,7 +8,20,8 +17,8,9 +10,20,12 +16,17,9 +16,12,3 +9,6,3 +7,13,4 +14,12,3 +3,9,10 +11,19,7 +5,18,14 +19,13,8 +4,17,8 +18,8,9 +14,3,12 +16,2,14 +3,8,10 +6,15,16 +9,18,14 +15,11,2 +19,7,10 +9,3,7 +4,10,13 +8,3,9 +6,8,18 +3,13,11 +18,6,8 +14,16,16 +12,3,15 +15,12,2 +18,11,6 +3,5,8 +17,3,12 +20,10,10 +2,12,15 +14,7,4 +13,18,11 +4,14,12 +18,8,14 +3,14,8 +14,17,7 +9,10,3 +7,9,18 +4,10,5 +17,10,18 +9,11,3 +3,6,12 +10,2,9 +3,11,15 +7,16,8 +3,12,6 +6,5,16 +10,18,14 +14,18,8 +10,1,9 +3,9,7 +19,10,11 +17,8,13 +8,17,5 +4,13,4 +8,6,16 +6,6,4 +2,10,8 +19,10,14 +5,11,14 +9,19,8 +5,10,16 +6,6,13 +7,10,17 +14,18,12 +6,9,17 +12,18,15 +19,7,14 +16,16,16 +16,4,11 +7,11,18 +20,10,13 +9,15,5 +16,15,5 +3,7,10 +8,17,14 +18,6,14 +14,4,11 +10,12,18 +4,8,14 +1,11,12 +9,17,14 +18,16,10 +9,13,2 +12,18,8 +16,9,6 +4,16,9 +12,15,3 +11,1,12 +13,2,11 +14,13,3 +9,10,20 +9,3,5 +16,18,7 +0,11,11 +13,18,9 +3,14,11 +9,3,6 +6,12,7 +6,4,15 +18,5,7 +12,6,5 +13,15,17 +4,15,5 +7,5,4 +14,19,12 +17,4,13 +2,11,13 +17,10,17 +11,18,7 +12,15,6 +14,13,14 +6,6,16 +12,17,5 +13,14,4 +10,15,4 +4,9,16 +16,12,7 +6,16,14 +7,10,18 +10,3,16 +6,7,6 +19,8,10 +10,5,7 +15,10,16 +7,18,10 +17,7,9 +17,10,16 +14,6,16 +17,11,4 +12,17,14 +10,19,12 +17,8,5 +5,16,9 +16,5,13 +4,10,6 +18,15,15 +5,18,7 +11,2,9 +13,12,19 +19,12,9 +16,14,5 +4,15,14 +13,12,2 +14,8,8 +4,3,9 +11,18,14 +12,15,18 +8,6,17 +13,4,10 +7,6,3 +10,19,7 +4,11,5 +8,17,16 +13,13,19 +2,7,7 +4,8,6 +11,4,7 +5,17,13 +7,16,6 +15,6,5 +3,12,13 +12,2,8 +15,16,5 +12,16,18 +17,7,17 +11,5,16 +11,14,15 +15,13,3 +8,7,3 +7,11,17 +5,6,16 +9,15,4 +15,4,8 +9,18,11 +8,3,12 +4,6,6 +4,5,9 +14,6,5 +6,10,18 +14,16,17 +4,14,9 +18,6,11 +19,12,8 +5,9,4 +14,17,6 +4,13,6 +14,18,10 +6,3,10 +10,13,18 +11,9,19 +4,15,8 +10,18,12 +1,11,11 +7,3,14 +13,4,5 +3,7,11 +8,9,20 +6,7,15 +8,19,9 +11,12,18 +12,8,5 +14,2,12 +12,14,2 +2,13,8 +10,10,18 +12,12,1 +11,16,16 +12,16,17 +3,10,9 +9,20,7 +14,13,2 +13,13,1 +4,16,12 +17,13,8 +14,11,18 +16,17,10 +17,7,12 +15,5,5 +10,4,16 +15,3,14 +9,18,10 +13,13,3 +8,16,4 +3,15,7 +4,12,4 +5,5,14 +6,11,18 +8,10,18 +7,13,19 +13,18,12 +9,17,13 +9,9,19 +3,5,14 +11,3,14 +3,11,11 +11,18,6 +12,3,4 +8,13,19 +13,10,1 +4,4,11 +17,13,16 +7,3,11 +11,18,15 +9,5,4 +8,2,14 +19,8,13 +9,4,7 +7,1,11 +17,3,9 +18,4,11 +4,16,10 +3,14,12 +16,5,10 +8,19,12 +18,12,9 +18,9,7 +7,9,17 +15,11,5 +13,2,13 +3,11,10 +4,17,9 +12,20,9 +4,12,15 +7,15,16 +7,7,6 +18,4,12 +4,8,15 +11,17,6 +8,14,17 +2,6,9 +17,15,12 +8,9,2 +3,6,9 +5,4,17 +17,6,16 +16,12,4 +7,14,16 +4,13,5 +7,15,18 +9,18,8 +13,2,10 +5,14,17 +7,5,17 +12,8,17 +5,11,3 +15,6,17 +20,10,12 +18,7,7 +12,7,20 +18,14,12 +6,16,17 +4,14,6 +14,4,14 +14,3,10 +15,2,10 +4,10,4 +13,11,20 +15,17,16 +4,6,9 +14,10,3 +7,10,16 +2,14,11 +2,7,14 +3,10,6 +5,15,17 +15,15,8 +3,9,16 +16,12,6 +6,15,4 +3,14,6 +2,12,7 +7,10,3 +6,4,11 +6,12,2 +14,17,14 +5,11,17 +9,4,4 +11,10,19 +11,5,4 +13,3,8 +12,19,8 +5,10,3 +8,4,15 +14,7,2 +2,11,10 +11,7,19 +4,15,9 +5,19,14 +8,12,18 +5,5,15 +10,4,15 +19,10,9 +10,4,5 +7,4,6 +18,13,17 +12,12,17 +7,13,2 +17,11,5 +7,2,8 +14,6,15 +10,20,8 +5,8,17 +19,10,13 +12,7,19 +14,6,14 +6,3,8 +17,17,9 +4,11,3 +17,5,6 +9,18,7 +9,17,16 +8,10,2 +19,10,7 +4,10,8 +20,14,10 +10,3,11 +3,13,12 +9,10,19 +2,16,10 +8,3,5 +11,17,5 +16,8,15 +12,19,7 +10,15,2 +2,11,9 +6,8,4 +13,20,12 +3,13,9 +11,3,9 +3,17,12 +11,5,5 +6,18,6 +4,8,18 +6,3,11 +13,11,3 +11,6,2 +2,14,12 +14,5,17 +13,8,3 +12,19,10 +18,15,14 +8,11,21 +2,15,12 +8,20,12 +17,18,13 +14,7,16 +11,7,18 +16,10,17 +18,15,7 +4,11,17 +14,17,8 +5,15,4 +15,5,10 +11,5,7 +14,3,13 +9,19,14 +12,7,3 +20,14,11 +3,7,14 +8,2,10 +7,12,17 +13,11,2 +16,13,15 +8,10,1 +12,12,19 +11,4,12 +8,3,15 +3,6,10 +17,8,15 +13,4,6 +8,5,5 +8,18,6 +16,14,4 +15,19,11 +16,4,9 +15,2,11 +11,3,16 +8,16,3 +8,5,6 +9,17,15 +5,5,7 +10,3,14 +14,4,8 +10,4,13 +15,13,2 +12,10,20 +6,18,8 +11,4,5 +8,16,17 +19,15,13 +7,15,17 +15,7,17 +15,16,12 +7,2,10 +5,14,5 +9,6,5 +9,18,13 +16,10,6 +10,6,17 +17,8,3 +9,18,6 +16,11,18 +16,9,4 +10,18,16 +13,3,9 +13,19,11 +6,5,15 +11,11,3 +9,19,9 +15,3,10 +12,19,14 +7,7,15 +20,10,11 +13,15,3 +5,4,11 +11,1,11 +3,10,13 +7,4,16 +6,7,16 +10,4,14 +14,6,18 +6,17,12 +2,10,11 +8,18,14 +2,8,7 +16,8,18 +17,13,12 +7,14,19 +18,8,16 +4,13,15 +11,8,1 +9,5,5 +4,16,5 +13,9,2 +5,6,14 +20,12,12 +18,9,9 +13,5,4 +18,11,14 +9,15,18 +12,2,12 +5,17,5 +12,9,19 +3,8,6 +14,7,3 +18,10,16 +16,11,14 +16,6,5 +8,4,17 +11,7,3 +15,2,7 +14,6,6 +7,12,4 +7,16,16 +3,9,14 +18,16,13 +4,17,13 +19,13,6 +11,12,19 +4,4,12 +4,15,10 +13,10,3 +12,9,2 +15,11,4 +20,11,13 +17,10,6 +10,2,6 +4,14,5 +11,5,3 +16,11,17 +14,11,17 +7,15,4 +9,1,10 +5,15,8 +7,15,11 +15,5,7 +13,3,10 +3,15,10 +4,5,7 +9,4,16 +8,4,12 +11,20,11 +15,13,5 +5,9,3 +13,19,8 +19,12,12 +7,7,4 +12,19,11 +17,18,12 +16,14,17 +9,5,3 +9,12,2 +5,14,13 +6,3,9 +14,10,19 +15,16,4 +17,10,19 +7,13,18 +15,11,15 +17,8,16 +17,14,4 +4,5,14 +14,8,19 +8,9,1 +4,4,8 +6,5,5 +17,5,9 +2,9,10 +18,7,6 +6,12,17 +7,7,3 +14,5,9 +20,14,12 +8,4,4 +11,10,18 +8,15,16 +15,15,16 +11,15,6 +15,15,5 +14,16,5 +15,19,10 +17,7,16 +6,6,18 +3,12,14 +4,12,14 +7,19,10 +6,11,4 +5,6,15 +14,6,17 +11,2,6 +18,16,11 +6,9,16 +8,13,2 +15,19,9 +14,12,17 +10,6,18 +8,18,7 +15,7,4 +16,8,5 +9,13,18 +6,18,7 +19,9,9 +6,11,3 +14,4,6 +16,15,8 +18,10,13 +15,14,17 +9,16,17 +15,9,18 +8,19,6 +6,12,3 +4,11,9 +3,15,12 +18,6,15 +3,11,8 +6,2,10 +2,10,13 +8,1,10 +13,3,13 +7,18,6 +15,4,5 +6,18,12 +18,8,13 +16,14,15 +13,10,2 +15,6,15 +18,9,10 +4,9,6 +16,16,15 +3,8,7 +16,16,7 +2,14,10 +15,5,6 +5,17,10 +16,18,8 +19,12,11 +11,4,6 +8,3,13 +5,16,11 +16,16,9 +9,4,18 +6,13,5 +16,12,16 +9,7,3 +13,18,15 +14,10,2 +6,3,12 +17,14,5 +12,16,16 +4,17,11 +11,17,4 +2,7,8 +7,18,11 +2,7,10 +6,14,4 +9,2,13 +13,12,18 +15,5,11 +5,8,5 +12,6,16 +8,18,13 +7,12,2 +17,17,11 +13,16,17 +15,15,18 +7,15,3 +7,3,7 +10,9,19 +9,11,2 +13,8,16 +4,8,13 +10,5,17 +12,12,3 +15,17,6 +7,17,12 +7,17,7 +10,16,2 +5,13,15 +11,1,13 +5,6,6 +11,15,4 +8,5,16 +9,14,20 +3,9,13 +2,12,14 +18,8,12 +9,16,5 +11,4,16 +11,8,19 +16,14,16 +16,8,7 +6,15,18 +12,10,1 +4,9,15 +13,7,5 +6,4,12 +12,17,9 +5,9,19 +19,7,9 +12,5,18 +14,17,12 +5,5,5 +2,13,13 +8,11,2 +10,2,10 +12,11,4 +6,10,2 +6,15,17 +2,8,13 +7,4,15 +18,14,9 +10,19,13 +9,11,19 +7,5,10 +16,7,16 +18,7,8 +16,6,15 +11,8,3 +12,12,2 +15,9,2 +20,13,11 +15,18,13 +9,4,14 +2,12,8 +12,18,10 +15,17,15 +14,16,3 +12,8,19 +4,7,9 +7,17,15 +7,9,2 +18,7,12 +7,14,4 +12,16,4 +12,4,15 +2,9,12 +11,17,17 +5,12,6 +16,9,7 +16,5,9 +3,14,9 +2,8,6 +18,7,11 +17,12,5 +11,2,13 +17,10,5 +12,4,3 +3,6,8 +14,17,5 +10,15,19 +15,18,14 +17,12,16 +2,11,15 +12,3,16 +11,11,2 +9,17,4 +18,10,8 +11,13,4 +10,12,1 +9,16,6 +4,9,10 +14,4,17 +8,15,18 +1,11,10 +6,14,12 +15,10,7 +5,8,12 +10,11,2 +10,18,15 +4,12,11 +5,7,5 +10,7,4 +12,3,14 +16,17,14 +17,7,15 +3,17,10 +2,8,9 +15,5,13 +17,16,14 +7,11,3 +15,8,19 +10,4,17 +8,5,17 +18,7,10 +7,4,9 +12,4,6 +14,19,10 +5,12,5 +5,13,17 +12,16,5 +8,8,3 +18,13,14 +9,9,18 +17,9,15 +16,7,5 +12,0,13 +6,5,7 +4,14,8 +10,19,11 +13,5,18 +12,18,13 +13,13,18 +5,11,18 +5,2,9 +17,16,9 +7,10,4 +17,7,5 +12,13,17 +10,5,19 +18,9,15 +18,11,7 +7,9,16 +11,14,18 +5,13,5 +4,8,5 +3,7,13 +5,7,4 +19,9,5 +16,16,13 +13,19,12 +11,4,9 +15,9,17 +7,16,5 +8,9,4 +11,3,5 +16,15,17 +10,6,3 +13,10,19 +8,15,15 +11,19,13 +20,11,10 +12,7,1 +17,15,11 +13,13,2 +17,6,12 +14,2,13 +17,13,11 +10,2,7 +11,18,10 +15,3,11 +13,19,7 +16,15,15 +20,9,9 +11,5,19 +14,19,7 +18,12,18 +7,19,9 +8,14,2 +6,4,9 +3,6,14 +12,12,4 +17,6,5 +4,16,13 +9,18,15 +11,6,4 +2,15,13 +18,8,11 +17,6,7 +19,9,13 +11,19,8 +6,15,6 +7,3,10 +2,14,13 +17,5,11 +3,9,11 +9,4,15 +8,14,3 +13,16,2 +16,7,6 +17,8,7 +10,14,4 +13,18,5 +6,17,13 +11,4,17 +7,4,14 +7,4,5 +2,8,15 +9,2,12 +15,11,19 +19,6,9 +15,18,9 +14,19,11 +12,16,3 +15,13,19 +15,4,7 +3,6,7 +8,5,3 +3,11,6 +18,9,14 +12,19,5 +18,12,4 +10,6,2 +15,9,3 +7,17,16 +6,6,17 +7,3,9 +19,11,8 +7,18,9 +11,20,13 +8,18,10 +5,8,4 +16,11,3 +15,15,17 +16,16,6 +18,10,9 +3,15,16 +8,4,6 +8,10,19 +7,4,11 +16,6,16 +14,4,9 +11,19,9 +11,14,3 +14,6,4 +6,10,5 +3,15,9 +15,12,3 +13,4,7 +6,3,15 +19,10,16 +10,7,18 +7,17,9 +4,17,12 +15,17,11 +18,6,13 +19,14,11 +9,2,8 +4,10,16 +9,16,18 +12,17,11 +11,17,18 +7,18,13 +13,16,5 +19,13,13 +6,6,6 +9,14,17 +16,11,16 +10,13,2 +11,6,6 +12,2,15 +4,10,12 +10,9,1 +10,18,13 +11,13,1 +14,5,11 +10,11,20 +11,14,4 +3,11,7 +9,14,18 +14,14,18 +13,3,6 +16,5,7 +8,6,2 +13,11,4 +8,5,4 +8,3,10 +5,10,4 +15,16,16 +17,8,6 +16,4,12 +15,7,18 +6,6,8 +4,5,13 +11,14,19 +20,11,12 +2,16,11 +13,7,17 +10,3,13 +14,7,19 +2,12,13 +15,8,4 +17,10,8 +17,11,3 +18,9,8 +10,5,4 +11,5,8 +17,8,11 +8,6,4 +6,5,10 +13,2,7 +18,11,12 +17,13,13 +14,18,14 +13,18,6 +13,4,8 +19,13,7 +19,8,8 +9,8,3 +5,16,12 +5,7,16 +19,10,8 +19,15,7 +12,5,5 +14,17,15 +16,15,6 +10,19,10 +17,9,14 +8,2,12 +16,13,4 +13,3,7 +11,15,3 +7,12,3 +10,16,14 +3,9,5 +19,11,13 +6,8,3 +4,13,10 +10,7,2 +2,10,6 +17,13,6 +13,8,19 +12,11,19 +5,8,10 +6,15,14 +17,8,4 +8,8,1 +18,14,6 +17,12,11 +10,18,5 +8,19,7 +2,9,7 +9,8,18 +5,17,9 +2,8,12 +12,5,2 +11,3,11 +3,11,12 +17,6,13 +5,4,14 +7,19,6 +5,13,3 +9,3,14 +15,6,9 +2,13,9 +4,5,10 +15,15,4 +6,11,2 +13,19,14 +3,12,12 +6,17,9 +14,9,2 +6,7,5 +12,3,9 +12,12,20 +14,6,8 +8,6,18 +17,9,12 +9,9,1 +15,19,7 +13,18,17 +12,4,5 +2,7,9 +14,8,18 +17,18,9 +14,14,17 +10,11,3 +10,9,3 +18,16,7 +12,4,17 +5,10,15 +18,12,12 +15,2,14 +6,17,8 +9,10,18 +10,14,3 +9,19,11 +12,11,2 +17,13,7 +14,8,3 +16,16,8 +11,4,4 +4,16,7 +3,12,16 +10,16,17 +5,14,12 +14,2,11 +12,16,15 +5,5,4 +10,16,3 +5,12,16 +6,14,8 +6,8,17 +10,13,5 +2,13,6 +10,17,5 +6,16,15 +11,9,2 +7,2,13 +1,7,10 +12,4,12 +15,17,13 +6,12,16 +9,14,3 +8,17,8 +17,6,8 +15,14,15 +13,10,18 +14,11,3 +10,16,18 +6,15,15 +17,6,6 +20,7,7 +3,16,11 +6,18,13 +13,3,16 +12,9,3 +9,18,4 +11,6,18 +14,16,4 +6,5,11 +20,12,14 +19,11,7 +8,11,19 +10,18,7 +10,9,18 +6,16,3 +13,6,17 +4,13,16 +9,2,16 +1,7,11 +17,10,15 +12,10,19 +17,4,9 +3,13,14 +13,2,12 +13,16,16 +15,16,6 +10,12,2 +13,13,5 +12,3,5 +5,3,8 +5,5,10 +11,18,11 +19,9,11 +14,12,4 +20,13,7 +7,4,7 +8,15,4 +14,13,19 +7,6,6 +10,4,18 +9,8,19 +10,14,1 +12,15,2 +7,8,17 +7,16,13 +10,10,19 +8,4,5 +10,5,18 +6,5,14 +4,9,4 +5,7,11 +16,10,3 +12,18,14 +16,16,4 +17,9,11 +13,7,18 +10,17,14 +15,16,15 +14,16,18 +7,2,6 +12,13,18 +8,1,8 +16,12,18 +20,9,10 +12,19,9 +6,8,5 +11,12,1 +7,8,16 +17,9,6 +8,3,6 +9,18,12 +8,4,16 +2,8,10 +13,14,19 +17,14,14 +13,4,12 +6,18,14 +14,18,11 +7,9,4 +14,14,6 +13,15,5 +19,11,14 +13,7,2 +12,15,16 +3,12,11 +10,1,10 +13,17,5 +8,11,18 +11,5,18 +19,8,7 +7,11,2 +11,19,15 +18,15,9 +6,19,10 +15,16,14 +16,3,11 +4,6,10 +11,18,5 +10,9,2 +4,8,12 +6,5,4 +5,13,12 +7,17,11 +13,2,9 +5,7,14 +18,11,10 +14,3,7 +3,5,11 +10,4,6 +13,11,17 +10,18,4 +5,14,19 +4,9,5 +6,7,4 +5,14,14 +20,8,15 +17,14,10 +8,5,15 +10,10,1 +13,17,12 +6,4,16 +18,10,5 +19,9,8 +17,7,7 +7,14,6 +5,14,6 +19,13,9 +14,16,8 +10,12,3 +15,8,16 +5,16,15 +6,16,8 +12,14,18 +5,7,3 +1,9,8 +14,14,16 +8,8,19 +3,8,5 +16,6,14 +16,10,5 +8,19,11 +14,5,6 +12,13,3 +11,18,13 +10,3,10 +12,8,18 +18,8,10 +9,7,6 +18,13,13 +17,14,8 +19,7,11 +16,18,10 +8,7,4 +17,11,16 +5,15,16 +15,10,19 +18,14,13 +6,16,7 +13,16,9 +16,15,14 +15,12,18 +9,3,15 +10,6,16 +8,2,11 +9,4,13 +10,13,17 +16,17,7 +17,6,10 +8,13,18 +10,16,15 +5,12,14 +7,8,3 +19,8,15 +15,17,8 +7,7,16 +5,11,15 +12,2,6 +3,7,8 +14,7,5 +5,4,15 +13,12,4 +6,5,9 +5,15,5 +14,9,19 +6,8,16 +1,12,11 +10,2,14 +19,14,12 +3,11,9 +11,2,8 +8,3,7 +16,8,6 +14,3,5 +9,19,7 +8,8,18 +18,12,14 +16,13,14 +14,17,9 +8,12,1 +7,6,17 +14,15,14 +9,19,16 +16,16,5 +7,5,15 +4,4,13 +3,9,8 +11,4,15 +19,9,10 +5,15,14 +13,5,6 +3,14,16 +7,17,4 +4,12,9 +20,7,12 +11,3,15 +12,14,3 +12,6,18 +2,13,15 +19,6,13 +9,7,18 +5,4,7 +14,18,13 +4,12,12 +4,15,6 +5,11,16 +16,8,17 +15,15,11 +11,6,17 +17,16,12 +11,3,13 +11,10,17 +8,2,5 +1,11,14 +15,13,17 +5,12,3 +10,11,0 +18,14,14 +17,17,8 +14,11,19 +13,5,17 +4,9,17 +12,1,8 +2,7,11 +3,15,13 +5,5,16 +2,12,11 +9,13,20 +3,12,7 +3,13,15 +10,13,19 +10,18,6 +14,7,17 +5,6,13 +8,2,7 +9,8,8 +9,3,9 +18,12,17 +13,8,20 +17,6,15 +6,9,2 +8,2,8 +9,11,18 +7,6,4 +17,4,7 +17,9,18 +2,6,11 +14,15,4 +7,11,20 +8,17,4 +16,11,4 +4,7,13 +12,7,4 +9,7,17 +15,3,16 +14,5,5 +8,19,10 +4,16,11 +8,4,7 +15,6,18 +14,5,18 +5,16,14 +16,10,15 +15,16,7 +16,7,13 +9,3,11 +7,7,19 +18,9,12 +17,14,15 +4,14,7 +17,12,6 +8,9,18 +12,13,19 +6,16,6 +14,19,14 +17,11,7 +14,3,14 +10,8,3 +15,17,7 +14,4,15 +20,12,9 +17,14,7 +4,9,12 +3,16,12 +9,18,9 +10,19,9 +4,12,16 +1,9,10 +17,17,12 +18,5,6 +17,15,10 +11,8,20 +17,14,13 +17,8,17 +16,6,13 +16,17,15 +1,13,13 +15,4,15 +16,19,9 +10,2,12 +4,6,17 +18,16,14 +15,10,1 +19,15,10 +16,10,18 +11,15,19 +4,14,14 +6,2,13 +17,16,13 +11,11,19 +7,17,5 +16,6,6 +2,16,12 +9,18,16 +13,15,19 +2,9,9 +18,5,12 +10,6,20 +9,7,2 +12,17,7 +16,3,9 +10,2,13 +17,8,8 +3,13,6 +4,13,8 +15,3,8 +18,7,9 +4,12,17 +10,15,17 +13,15,18 +5,19,12 +6,9,4 +9,6,18 +19,16,10 +4,16,8 +5,14,15 +14,2,14 +19,13,11 +16,7,12 +9,13,19 +18,11,11 +2,11,5 +13,4,13 +12,4,13 +15,4,11 +11,6,19 +19,6,10 +6,14,15 +7,17,6 +18,10,11 +17,14,11 +3,5,9 +15,6,3 +14,13,15 +3,7,5 +6,14,3 +18,8,6 +17,9,4 +19,9,14 +15,4,12 +12,17,10 +14,11,4 +15,14,18 +17,10,3 +8,7,5 +18,6,12 +18,15,10 +7,18,14 +13,8,17 +20,9,11 +14,18,9 +8,6,3 +13,19,10 +4,10,3 +8,16,18 +12,6,4 +8,18,11 +12,12,18 +8,5,7 +3,8,11 +5,16,10 +4,10,18 +12,20,10 +5,14,4 +10,15,3 +18,8,15 +5,4,6 +5,7,13 +8,3,8 +18,10,12 +16,15,11 +8,17,6 +3,7,7 +9,6,16 +19,11,11 +18,9,11 +13,12,3 +17,12,14 +12,4,11 +14,14,15 +17,17,14 +14,19,8 +7,16,4 +11,6,3 +3,11,16 +3,13,10 +16,9,16 +9,19,15 +9,2,9 +14,3,6 +9,7,16 +19,7,13 +17,13,5 +13,4,4 +12,18,11 +2,8,8 +6,11,17 +4,6,4 +16,11,5 +10,7,15 +11,1,8 +10,3,17 +13,15,2 +17,13,15 +15,14,6 +4,7,8 +15,3,7 +7,10,2 +2,14,8 +6,5,8 +6,13,13 +3,18,10 +14,17,17 +3,10,5 +16,12,17 +11,19,10 +12,6,17 +18,13,16 +11,17,14 +19,6,12 +1,14,11 +2,15,11 +13,17,6 +7,12,1 +15,9,8 +17,16,15 +14,2,7 +6,17,10 +2,15,7 +14,15,5 +16,3,10 +3,5,10 +16,5,5 +13,17,16 +12,8,4 +11,10,21 +15,10,2 +11,9,3 +2,5,9 +15,8,2 +10,17,12 +7,5,14 +12,5,17 +2,11,16 +5,16,8 +14,13,18 +11,10,2 +4,17,14 +5,3,10 +11,7,2 +4,9,18 +4,9,13 +4,10,17 +13,1,10 +11,13,17 +5,6,17 +9,7,20 +13,5,13 +11,4,13 +8,18,9 +2,13,11 +18,5,10 +3,14,10 +18,8,17 +10,18,9 +15,16,18 +13,19,13 +13,11,18 +19,12,5 +12,8,16 +15,5,4 +16,15,13 +15,3,9 +6,11,6 +14,2,9 +1,7,14 +9,4,6 +8,2,13 +18,11,15 +3,14,15 +15,18,8 +4,16,14 +18,9,13 +13,5,5 +18,10,18 +15,18,10 +12,16,10 +5,10,5 +14,15,15 +9,8,2 +9,11,20 +2,6,10 +13,15,15 +13,2,8 +10,11,18 +3,16,8 +17,11,15 +13,18,4 +9,14,1 +3,9,6 +15,12,16 +6,14,16 +9,4,5 +17,15,13 +6,17,11 +18,8,4 +14,17,11 +4,6,8 +5,14,16 +7,18,12 +12,14,1 +10,7,16 +11,18,4 +4,6,12 +8,6,7 +4,12,8 +11,4,14 +19,8,9 +7,13,17 +12,10,3 +15,18,5 +7,14,5 +6,17,7 +10,16,4 +14,14,5 +14,15,18 +12,17,13 +10,8,19 +11,12,20 +14,3,15 +8,10,17 +18,5,8 +18,12,5 +12,16,9 +10,17,17 +10,4,4 +1,9,13 +16,15,16 +11,18,8 +4,12,10 +9,15,2 +15,16,17 +11,14,17 +17,15,6 +2,10,15 +12,1,12 +7,6,5 +15,10,17 +3,12,5 +14,16,6 +6,10,16 +15,14,3 +19,14,14 +13,17,15 +18,7,13 +14,5,7 +18,16,6 +17,12,7 +3,15,8 +13,13,20 +13,3,12 +18,9,17 +10,18,10 +10,14,2 +6,5,13 +15,5,8 +9,6,17 +20,8,10 +1,7,12 +14,11,2 +9,4,17 +10,2,15 +5,4,10 +4,4,9 +8,7,19 +19,11,12 +7,16,3 +17,16,7 +15,2,12 +12,3,7 +5,7,17 +14,13,17 +12,3,11 +6,5,12 +12,18,12 +11,7,5 +1,10,15 +18,10,14 +16,6,7 +2,14,14 +14,9,3 +6,3,7 +8,8,6 +16,18,9 +9,7,19 +13,17,10 +6,20,11 +6,6,15 +17,7,14 +18,11,8 +10,20,10 +19,13,14 +7,5,7 +4,17,10 +19,12,10 +6,17,14 +4,7,10 +13,9,19 +9,3,16 +16,17,8 +15,4,18 +4,3,8 +13,8,4 +15,10,3 +7,11,19 +11,3,10 +12,6,3 +6,6,3 +3,17,9 +18,8,5 +9,19,13 +6,5,6 +8,7,17 +14,15,16 +3,11,13 +5,6,8 +3,5,12 +5,15,11 +7,18,15 +8,19,14 +18,11,4 +8,9,17 +17,12,9 +10,5,6 +2,9,13 +15,12,17 +6,14,17 +7,17,14 +3,9,15 +8,14,4 +8,2,6 +9,17,11 +12,1,10 +17,12,15 +16,5,16 +15,5,16 +9,3,13 +5,3,13 +11,12,2 +16,4,8 +11,2,14 +11,5,15 +13,7,16 +10,17,7 +8,11,3 +18,6,10 +12,3,12 +4,11,14 +19,11,6 +10,14,18 +12,10,2 +8,7,18 +16,17,13 +12,7,7 +8,13,3 +5,5,17 +6,14,5 +13,20,13 +9,3,10 +3,7,6 +17,4,8 +13,19,6 +9,16,15 +17,9,7 +15,10,5 +16,17,11 +10,16,5 +11,2,10 +13,14,2 +5,18,12 +19,14,13 +8,7,2 +7,16,15 +9,7,4 +4,15,11 +4,18,9 +5,3,12 +6,18,11 +17,17,7 +19,10,12 +11,18,16 +19,14,10 +7,19,13 +7,16,18 +1,14,9 +4,8,17 +18,11,5 +14,5,10 +5,6,5 +17,12,4 +7,7,18 +18,12,7 +11,19,6 +10,8,20 +11,19,11 +19,14,8 +15,9,19 +2,11,6 +4,13,12 +11,15,17 +12,14,19 +15,16,3 +7,4,10 +10,20,11 +18,13,7 +18,6,6 +14,7,6 +6,13,19 +2,11,8 +3,14,13 +7,12,19 +10,19,15 +15,12,19 +18,13,4 +11,20,9 +5,13,6 +10,1,11 +13,14,18 +7,15,2 +4,7,11 +6,8,11 +6,16,4 +8,1,11 +10,13,3 +16,13,17 +7,3,5 +1,9,12 +2,12,12 +14,9,4 +10,19,8 +1,11,9 +13,4,9 +7,6,2 +17,5,13 +17,16,6 +16,14,7 +14,17,16 +18,17,10 +10,15,20 +7,7,17 +10,19,6 +18,9,16 +4,8,7 +9,17,17 +9,0,11 +8,17,7 +11,20,6 +11,12,3 +14,16,15 +17,4,12 +18,17,13 +4,6,5 +15,11,3 +7,12,5 +12,5,6 +10,10,20 +12,11,20 +15,10,18 +3,16,9 +16,16,12 +16,4,5 +8,20,10 +4,12,6 +12,3,13 +3,4,11 +17,7,10 +13,1,8 +15,10,15 +5,3,14 +6,7,3 +8,15,3 +8,12,5 +6,4,7 +4,3,10 +9,14,2 +3,10,4 +4,4,10 +14,4,13 +10,2,8 +5,15,6 +14,7,18 +6,8,19 +14,14,19 +16,11,8 +16,8,4 +12,17,17 +13,3,15 +5,17,15 +17,17,10 +2,7,12 +7,19,11 +12,18,9 +8,15,5 +18,6,9 +9,5,14 +18,13,15 +4,14,13 +11,9,18 +3,5,13 +13,7,19 +18,10,4 +15,7,8 +5,16,7 +13,5,3 +7,4,12 +13,17,17 +6,19,8 +3,9,9 +18,17,9 +5,5,9 +18,15,16 +3,16,10 +5,10,17 +8,13,16 +6,12,6 +6,4,6 +12,4,10 +5,12,18 +4,8,11 +2,10,12 +7,2,9 +17,5,7 +10,20,13 +12,7,18 +8,11,1 +15,3,12 +13,8,18 +11,1,10 +9,1,11 +9,20,12 +16,3,12 +3,6,16 +6,9,3 +17,4,11 +2,13,7 +17,9,17 +9,3,8 +7,18,8 +11,9,1 +4,6,11 +6,7,14 +13,15,16 +16,6,11 +14,18,6 +17,13,4 +9,14,4 +16,7,7 +10,16,16 +12,5,3 +12,2,14 +18,14,16 +6,8,2 +9,12,3 +18,10,15 +14,3,9 +7,4,4 +18,12,10 +7,16,12 +19,15,12 +14,8,4 +13,3,4 +8,17,17 +5,16,5 +2,14,9 +1,9,11 +16,14,6 +15,5,15 +7,4,8 +16,13,6 +8,10,3 +18,15,13 +3,6,11 +11,18,12 +8,16,6 +18,5,11 +6,4,8 +9,5,6 +6,17,6 +10,5,5 +3,15,11 +20,9,14 +7,9,3 +16,8,16 +15,4,6 +2,9,11 +15,7,14 +10,1,12 +1,9,9 +18,15,12 +15,7,16 +13,17,11 +1,12,12 +14,15,17 +5,18,13 +19,12,14 +5,18,9 +17,14,17 +16,5,11 +3,9,12 +4,8,9 +17,11,8 +9,1,14 +13,9,18 +8,1,12 +13,7,1 +14,9,1 +10,17,3 +15,11,20 +7,2,7 +15,14,16 +13,6,15 +10,11,1 +14,4,12 +4,18,10 +14,9,18 +16,8,3 +5,15,9 +12,17,3 +10,5,9 +12,10,18 +15,15,10 +15,17,9 +11,4,18 +4,7,4 +10,19,14 +13,2,14 +11,2,7 +3,6,13 +3,10,12 +8,6,19 +16,7,18 +12,11,1 +6,15,5 +14,19,9 +18,12,6 +4,6,14 +4,13,14 +11,16,5 +12,13,2 +16,9,18 +4,17,7 +6,7,19 +5,18,8 +16,9,3 +2,12,6 +4,6,15 +3,11,14 +17,8,14 +12,15,19 +15,18,12 +7,8,4 +8,17,10 +16,9,5 +15,8,18 +8,9,3 +11,20,12 +17,15,14 +18,6,7 +12,8,3 +19,12,15 +10,17,8 +19,6,11 +18,13,10 +7,3,8 +4,18,11 +15,4,13 +12,8,2 +17,17,13 +18,7,14 +9,5,15 +4,7,6 +18,8,8 +3,3,12 +15,9,4 +6,13,17 +11,13,19 +9,19,10 +13,4,15 +20,12,10 +13,6,16 +4,11,13 +6,12,19 +17,7,8 +19,12,6 +12,20,8 +6,6,5 +16,10,14 +13,19,9 +8,14,19 +12,17,12 +4,12,7 +4,14,17 +2,12,9 +11,16,4 +20,12,8 +16,15,10 +10,8,1 +3,11,5 +4,8,4 +13,20,11 +8,18,4 +10,15,5 +5,15,7 +8,16,14 +1,10,11 +6,13,2 +6,6,7 +15,10,6 +11,10,1 +10,6,4 +3,12,8 +3,8,13 +12,2,10 +11,16,14 +15,7,15 +10,9,20 +5,3,9 +9,2,10 +5,15,10 +6,15,3 +6,13,16 +10,3,9 +16,15,4 +13,13,17 +17,9,5 +7,19,12 +11,13,2 +16,15,18 +13,16,3 +3,6,15 +7,7,1 +12,9,20 +17,9,10 +5,18,10 +13,8,2 +13,4,11 +8,5,18 +12,17,4 +11,2,11 +8,13,1 +3,11,17 +11,9,20 +6,14,6 +5,6,12 +8,8,2 +13,17,13 +6,12,18 +8,6,6 +4,11,4 +1,14,10 +20,8,11 +17,16,16 +18,14,11 +12,18,5 +11,20,7 +6,10,19 +8,16,16 +4,13,3 +13,16,19 +13,16,6 +3,12,10 +9,18,5 +12,5,4 +5,7,6 +10,10,2 +9,12,17 +3,10,8 +3,9,4 +12,13,4 +19,14,15 +11,17,9 +15,1,8 +7,15,10 +15,14,4 +10,18,11 +5,15,12 +9,14,19 +5,8,14 +19,9,7 +5,10,14 +8,4,13 +7,2,15 +15,4,9 +14,12,2 +3,5,7 +11,13,18 +12,1,15 +5,13,19 +2,6,8 +13,4,16 +13,2,5 +18,13,9 +10,19,5 +11,3,8 +13,18,16 +15,2,9 +3,14,7 +13,17,14 +15,8,17 +13,11,1 +8,4,14 +1,10,12 +17,6,14 +16,13,7 +16,19,12 +14,20,12 +11,11,1 +8,9,19 +20,14,9 +16,7,14 +9,5,16 +6,15,13 +12,15,17 +20,12,15 +6,11,19 +10,13,4 +12,1,11 +13,16,18 +17,12,3 +15,9,15 +15,6,13 +15,12,15 +7,13,3 +14,16,13 +10,7,17 +11,7,17 +17,4,10 +16,17,16 +8,8,17 +1,13,11 +10,15,16 +15,15,3 +7,17,17 +8,19,15 +19,6,8 +13,17,7 +13,7,15 +6,10,4 +8,19,13 +16,6,12 +1,13,12 +17,12,8 +16,7,15 +10,13,16 +16,7,17 +16,3,8 +6,7,17 +9,12,18 +13,13,16 +12,18,6 +7,2,11 +15,19,13 +10,20,7 +3,7,16 +17,5,14 +7,13,20 +1,12,9 +9,5,17 +9,20,13 +5,14,9 +5,6,9 +6,16,10 +14,12,6 +15,18,7 +12,1,6 +14,20,9 +10,8,2 +12,8,1 +16,18,13 +14,8,2 +8,14,18 +5,10,6 +1,7,9 +17,18,11 +8,5,11 +3,11,4 +2,10,5 +12,16,13 +8,17,3 +9,5,8 +1,11,6 +14,1,11 +14,13,7 +10,9,4 +20,8,14 +16,5,6 +18,4,9 +10,7,5 +15,12,5 +15,12,6 +13,4,17 +14,16,14 +6,14,19 +7,5,8 +9,13,3 +4,5,6 +12,4,18 +5,13,4 +10,14,5 +17,3,10 +7,9,19 +17,10,10 +19,12,13 +16,8,8 +16,9,14 +14,11,1 +9,15,17 +18,13,5 +17,9,8 +19,13,5 +15,19,12 +5,5,13 +13,4,3 +15,10,4 +9,6,4 +12,14,17 +4,13,13 +10,3,7 +5,9,18 +8,12,3 +4,3,14 +13,6,7 +14,5,3 +9,1,9 +0,10,9 +14,16,7 +10,8,17 +17,2,11 +5,11,19 +2,15,9 +15,18,6 +9,15,7 +11,6,16 +5,13,16 +14,15,8 +14,11,5 +6,14,14 +5,10,2 +12,10,21 +12,14,14 +9,13,16 +16,16,11 +13,16,15 +4,7,12 +7,15,19 +4,10,15 +16,4,7 +6,10,6 +12,2,7 +12,7,17 +2,4,10 +11,12,4 +10,3,5 +12,15,5 +11,6,20 +11,11,18 +9,2,11 +10,19,16 +14,6,3 +9,17,8 +16,14,18 +9,1,13 +10,17,6 +15,15,15 +19,9,12 +16,15,3 +16,10,7 +9,4,9 +12,16,8 +8,1,9 +2,15,10 +13,6,3 +15,3,6 +6,3,13 +12,4,7 +12,9,4 +12,16,6 +19,5,12 +16,18,12 +14,4,10 +15,3,13 +17,15,7 +15,13,4 +15,12,14 +18,10,17 +14,12,16 +10,5,15 +5,3,7 +13,14,1 +13,20,9 +7,19,14 +18,14,7 +9,4,8 +10,4,7 +21,8,9 +5,9,7 +6,19,14 +1,10,7 +8,18,8 +7,1,12 +18,17,7 +20,8,8 +6,7,13 +9,3,17 +3,17,14 +3,13,7 +16,9,15 +8,17,12 +14,17,10 +12,5,15 +16,11,15 +10,17,4 +18,16,12 +8,15,2 +9,20,8 +5,16,4 +18,12,11 +5,4,5 +13,12,20 +10,16,13 +4,5,16 +13,5,7 +15,15,6 +6,6,12 +5,11,5 +18,18,12 +8,3,16 +9,12,19 +3,10,10 +1,7,7 +5,16,16 \ No newline at end of file diff --git a/AdventOfCode/2022/Day18/Sample.txt b/AdventOfCode/2022/Day18/Sample.txt new file mode 100644 index 0000000..b2206d1 --- /dev/null +++ b/AdventOfCode/2022/Day18/Sample.txt @@ -0,0 +1,13 @@ +2,2,2 +1,2,2 +3,2,2 +2,1,2 +2,3,2 +2,2,1 +2,2,3 +2,2,4 +2,2,6 +1,2,5 +3,2,5 +2,1,5 +2,3,5 \ No newline at end of file diff --git a/AdventOfCode/AdventOfCode.csproj b/AdventOfCode/AdventOfCode.csproj index 8b8f471..cf4a3c5 100644 --- a/AdventOfCode/AdventOfCode.csproj +++ b/AdventOfCode/AdventOfCode.csproj @@ -38,6 +38,12 @@ Always + + Always + + + Always + Always diff --git a/AdventOfCode/Program.cs b/AdventOfCode/Program.cs index 59d4781..63ef053 100644 --- a/AdventOfCode/Program.cs +++ b/AdventOfCode/Program.cs @@ -6,5 +6,5 @@ using System.Text; -var day = new Day17(17); -day.RunPart1(ArgumentType.Full); \ No newline at end of file +var day = new Day18(18); +day.RunPart2(ArgumentType.Full); \ No newline at end of file diff --git a/AdventOfTests/2022_Tests/Day17_Tests/Day17_Test.cs b/AdventOfTests/2022_Tests/Day17_Tests/Day17_Test.cs index 818ab7c..dad13f9 100644 --- a/AdventOfTests/2022_Tests/Day17_Tests/Day17_Test.cs +++ b/AdventOfTests/2022_Tests/Day17_Tests/Day17_Test.cs @@ -37,7 +37,7 @@ public void RunPartTwoSample() public void RunPartTwoFull() { day.RunPart2(ArgumentType.Full); - Assert.That(day.result, Is.EqualTo("1562536022955")); + Assert.That(day.result, Is.EqualTo("1589142857183")); } } diff --git a/AdventOfTests/2022_Tests/Day18_Tests/Day18_Test.cs b/AdventOfTests/2022_Tests/Day18_Tests/Day18_Test.cs new file mode 100644 index 0000000..1a6f1a5 --- /dev/null +++ b/AdventOfTests/2022_Tests/Day18_Tests/Day18_Test.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using AdventOfCode.Year2022; + +namespace AdventOfTests._2022_Tests.Day18_Tests +{ + public class Day18_Test + { + Day day; + [SetUp] + public void Setup() + { + day = new Day18(18); + } + [Test] + public void RunPartOneSample() + { + day.RunPart1(ArgumentType.Sample); + Assert.That(day.result, Is.EqualTo("64")); + } + [Test] + public void RunPartOneFull() + { + day.RunPart1(ArgumentType.Full); + Assert.That(day.result, Is.EqualTo("4348")); + } + [Test] + public void RunPartTwoSample() + { + day.RunPart2(ArgumentType.Sample); + Assert.That(day.result, Is.EqualTo("58")); + } + [Test] + public void RunPartTwoFull() + { + day.RunPart2(ArgumentType.Full); + Assert.That(day.result, Is.EqualTo("2546")); + } + } +}