diff --git a/AdventOfCode2022/AdventOfCode2022.Runner/AdventOfCode2022.Runner.csproj b/AdventOfCode2022/AdventOfCode2022.Runner/AdventOfCode2022.Runner.csproj index 4ce5051..2baf4b2 100644 --- a/AdventOfCode2022/AdventOfCode2022.Runner/AdventOfCode2022.Runner.csproj +++ b/AdventOfCode2022/AdventOfCode2022.Runner/AdventOfCode2022.Runner.csproj @@ -48,6 +48,10 @@ Inputs\DayTen\input.txt Always + + Inputs\DayThirteen\input.txt + Always + Inputs\DayThree\input.txt Always diff --git a/AdventOfCode2022/AdventOfCode2022.Runner/Program.cs b/AdventOfCode2022/AdventOfCode2022.Runner/Program.cs index f0b74e5..163bb12 100644 --- a/AdventOfCode2022/AdventOfCode2022.Runner/Program.cs +++ b/AdventOfCode2022/AdventOfCode2022.Runner/Program.cs @@ -7,15 +7,16 @@ using AdventOfCode2022.Solutions.DaySeven; using AdventOfCode2022.Solutions.DaySix; using AdventOfCode2022.Solutions.DayTen; +using AdventOfCode2022.Solutions.DayThirteen; using AdventOfCode2022.Solutions.DayThree; using AdventOfCode2022.Solutions.DayTwelve; using AdventOfCode2022.Solutions.DayTwo; IEnumerable GetInput(string dayName) { - var dayOneInputFile = $@".\Inputs\{dayName}\input.txt"; + var inputFile = $@".\Inputs\{dayName}\input.txt"; - return File.ReadAllLines(dayOneInputFile); + return File.ReadAllLines(inputFile); } void SolveDayOne() @@ -185,6 +186,22 @@ void SolveDayTwelve() Console.WriteLine($"Day twelve solution (Part Two): {dayTwelveSolutionPartTwo}"); } +void SolveDayThirteen() +{ + var dayThirteenSolutionPartOne = DayThirteen.SumIndicesOfCorrectlyOrderedPairs( + GetInput(nameof(DayThirteen)).ToArray()); + + var dayThirteenSolutionPartTwo = DayThirteen.GetDecoderKey(GetInput(nameof(DayThirteen))); + + const int actualAnswerToPart2 = 23049; // Got this from another solution :( + + Console.WriteLine($"Day thirteen solution (Part One): {dayThirteenSolutionPartOne}"); + + Console.WriteLine(dayThirteenSolutionPartTwo != actualAnswerToPart2 + ? $"Day thirteen solution (Part Two): {dayThirteenSolutionPartTwo}, but should be {actualAnswerToPart2}" + : $"Day thirteen solution (Part Two): {dayThirteenSolutionPartTwo}. Why haven't you changed this conditional yet?"); +} + SolveDayOne(); SolveDayTwo(); SolveDayThree(); @@ -197,3 +214,4 @@ void SolveDayTwelve() SolveDayTen(); SolveDayEleven(); SolveDayTwelve(); +SolveDayThirteen(); diff --git a/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/BubbleSorter.cs b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/BubbleSorter.cs new file mode 100644 index 0000000..cd7a96a --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/BubbleSorter.cs @@ -0,0 +1,29 @@ +namespace AdventOfCode2022.Solutions.DayThirteen; + +using System.Collections; + +public class BubbleSorter +{ + private readonly IComparer _comparer; + + public BubbleSorter(IComparer comparer) + { + _comparer = comparer; + } + + public void Sort(List> input) + { + var size = input.Count; + + for (var i = 0; i < size - 1; i++) + { + for (var j = 0; j < size - i - 1; j++) + { + if (_comparer.Compare(input[j], input[j + 1]) == -1) + { + (input[j], input[j + 1]) = (input[j + 1], input[j]); + } + } + } + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/DayThirteen.cs b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/DayThirteen.cs new file mode 100644 index 0000000..e79fc93 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/DayThirteen.cs @@ -0,0 +1,44 @@ +namespace AdventOfCode2022.Solutions.DayThirteen; + +public static class DayThirteen +{ + public static int SumIndicesOfCorrectlyOrderedPairs(string[] input) + { + var comparer = new PairComparer(); + var parsedPairs = PacketPairParser.ParsePairs(input); + var correctlyOrderedPairs = new List(); + + for (var i = 0; i < parsedPairs.Count; i++) + { + var pair = parsedPairs[i]; + if (comparer.Compare(pair.Item1, pair.Item2) == 1) + { + correctlyOrderedPairs.Add(i + 1); + } + } + + return correctlyOrderedPairs.Sum(); + } + + public static int GetDecoderKey(IEnumerable input) + { + var divider1 = new List { new List { 2 } }; + var divider2 = new List { new List { 6 } }; + + var lists = input + .Where(i => !string.IsNullOrWhiteSpace(i)) + .Select(PacketPairParser.Parse) + .Append(divider1) + .Append(divider2) + .ToList(); + + var sorter = new BubbleSorter(new PairComparer()); + + sorter.Sort(lists); + + var indexOfDivider1 = lists.IndexOf(divider1) + 1; + var indexOfDivider2 = lists.IndexOf(divider2) + 1; + + return indexOfDivider1 * indexOfDivider2; + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PacketPairParser.cs b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PacketPairParser.cs new file mode 100644 index 0000000..f4c0548 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PacketPairParser.cs @@ -0,0 +1,88 @@ +namespace AdventOfCode2022.Solutions.DayThirteen; + +public static class PacketPairParser +{ + public static List, List>> ParsePairs(string[] input) + { + var output = new List, List>>(); + + for (var i = 0; i < input.Length; i += 3) + { + if (string.IsNullOrEmpty(input[i]) || string.IsNullOrEmpty(input[i + 1])) + { + continue; + } + + var item1 = Parse(input[i]); + var item2 = Parse(input[i + 1]); + + output.Add(Tuple.Create(item1, item2)); + } + + return output; + } + + public static List Parse(string input) + { + var result = new List(); + var currentList = result; + var stack = new Stack>(); + var number = ""; + + for (var i = 0; i < input.Length; i++) + { + var c = input[i]; + + if (c == '[' && i != 0) + { + if (!string.IsNullOrEmpty(number)) + { + AddAndResetNumber(currentList, ref number); + } + + var newList = new List(); + currentList.Add(newList); + stack.Push(currentList); + currentList = newList; + } + else if (c == ',') + { + if (string.IsNullOrEmpty(number)) + { + continue; + } + + AddAndResetNumber(currentList, ref number); + } + else if (c == ']') + { + if (!string.IsNullOrEmpty(number)) + { + AddAndResetNumber(currentList, ref number); + } + + if (stack.Count > 0) + { + currentList = stack.Pop(); + } + } + else if (char.IsDigit(c)) + { + number += c; + } + } + + if (!string.IsNullOrEmpty(number)) + { + currentList.Add(int.Parse(number)); + } + + return result; + } + + private static void AddAndResetNumber(ICollection currentList, ref string number) + { + currentList.Add(int.Parse(number)); + number = ""; + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PairComparer.cs b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PairComparer.cs new file mode 100644 index 0000000..b2e2fc2 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Solutions/DayThirteen/PairComparer.cs @@ -0,0 +1,64 @@ +using System.Collections; + +namespace AdventOfCode2022.Solutions.DayThirteen; + +public class PairComparer : IComparer +{ + public int Compare(object? x, object? y) + { + while (true) + { + var list1 = ToList(x); + var list2 = ToList(y); + + var longerList = list1.Count >= list2.Count ? list1 : list2; + var shorterList = list1.Count < list2.Count ? list1 : list2; + + var countToAdd = longerList.Count - shorterList.Count; + var fillerElements = Enumerable.Repeat(null, countToAdd); + + shorterList.AddRange(fillerElements); + + for (var i = 0; i < list2.Count; i++) + { + if (list1[i] is int int1 && list2[i] is int int2) + { + if (int1 == int2) + { + continue; + } + + return int2 >= int1 ? 1 : -1; + } + + if (list1[i] is not null && list2[i] is null) + { + return -1; + } + + if (list1[i] is null && list2[i] is not null) + { + return 1; + } + + return Compare(list1[i], list2[i]); + } + + return 1; + } + } + + private static List ToList(object? item) => + !IsList(item) + ? new List + { + item + } + : ((IList)item!).Cast() + .ToList(); + + private static bool IsList(object? o) => + o is IList && + o.GetType().IsGenericType && + o.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>)); +} diff --git a/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/DayThirteenTests.cs b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/DayThirteenTests.cs new file mode 100644 index 0000000..1985e73 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/DayThirteenTests.cs @@ -0,0 +1,52 @@ +namespace AdventOfCode2022.Tests.DayThirteenTests; + +using AdventOfCode2022.Solutions.DayThirteen; + +public class DayThirteenTests +{ + private static readonly string[] ExampleInput = { + "[1,1,3,1,1]", + "[1,1,5,1,1]", + "", + "[[1],[2,3,4]]", + "[[1],4]", + "", + "[9]", + "[[8,7,6]]", + "", + "[[4,4],4,4]", + "[[4,4],4,4,4]", + "", + "[7,7,7,7]", + "[7,7,7]", + "", + "[]", + "[3]", + "", + "[[[]]]", + "[[]]", + "", + "[1,[2,[3,[4,[5,6,7]]]],8,9]", + "[1,[2,[3,[4,[5,6,0]]]],8,9]", + }; + + [Test] + public void SumIndicesOfCorrectlyOrderedPairs_GivenInputFromExample_SolvesCorrectly() + { + const int expected = 13; + + var actual = DayThirteen.SumIndicesOfCorrectlyOrderedPairs(ExampleInput); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void GetDecoderKey_GivenInputFromExample_SolvesCorrectly() + { + const int expected = 140; + + var actual = DayThirteen.GetDecoderKey(ExampleInput); + + Assert.That(actual, Is.EqualTo(expected)); + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PacketPairParserTests.cs b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PacketPairParserTests.cs new file mode 100644 index 0000000..2e11fc9 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PacketPairParserTests.cs @@ -0,0 +1,224 @@ +namespace AdventOfCode2022.Tests.DayThirteenTests; + +using AdventOfCode2022.Solutions.DayThirteen; + +public class PacketPairParserTests +{ + private static readonly string[] ExampleInput = { + "[1,1,3,1,1]", + "[1,1,5,1,1]", + "", + "[[1],[2,3,4]]", + "[[1],4]", + "", + "[9]", + "[[8,7,6]]", + "", + "[[4,4],4,4]", + "[[4,4],4,4,4]", + "", + "[7,7,7,7]", + "[7,7,7]", + "", + "[]", + "[3]", + "", + "[[[]]]", + "[[]]", + "", + "[1,[2,[3,[4,[5,6,7]]]],8,9]", + "[1,[2,[3,[4,[5,6,0]]]],8,9]", + }; + + [Test] + public void ParsePairs_GivenInputFromExample_ParsesPairsCorrectly() + { + var expected = new List, List>> + { + new(new List { 1, 1, 3, 1, 1, }, new List { 1, 1, 5, 1, 1 }), + new(new List { new List { 1 }, new List { 2, 3, 4 } }, + new List { new List { 1 }, 4 }), + new(new List { 9 }, new List { new List { 8, 7, 6 } }), + new(new List { new List { 4, 4 }, 4, 4 }, + new List { new List { 4, 4 }, 4, 4, 4 }), + new(new List { 7, 7, 7, 7 }, new List { 7, 7, 7 }), + new(new List(), new List { 3 }), + new(new List { new List { new List() } }, new List { new List() }), + new(new List { 1, new List { 2, new List { 3 , new List { 4, new List { 5, 6, 7 }, }}}, 8, 9}, + new List { 1, new List { 2, new List { 3 , new List { 4, new List { 5, 6, 0 } }}}, 8, 9}), + }; + + var actual = PacketPairParser.ParsePairs(ExampleInput); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenEmptyInput_ReturnsEmptyList() + { + const string input = "[]"; + var expected = new List(); + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithSingleInt_ReturnsListWithInt() + { + const string input = "[2]"; + var expected = new List { 2 }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithDoubleDigitInt_ReturnsListWithInt() + { + const string input = "[20]"; + var expected = new List { 20 }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithTripleDigitInt_ReturnsListWithInt() + { + const string input = "[200]"; + var expected = new List { 200 }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithManyInts_ReturnsListWithInts() + { + const string input = "[2, 3, 7]"; + var expected = new List { 2, 3, 7 }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithInnerEmptyList_ReturnsListWithList() + { + const string input = "[[]]"; + var expected = new List { new List() }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithInnerListWithSingleInt_ReturnsListInnerList() + { + const string input = "[[1]]"; + var expected = new List { new List { 1 } }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithInnerListWithMultipleInts_ReturnsListInnerList() + { + const string input = "[[1, 5, 3]]"; + var expected = new List { new List { 1, 5, 3 } }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithListAndInts_ParsesCorrectly() + { + const string input = "[[1, 5, 3], 4, 5]"; + var expected = new List + { + new List { 1, 5, 3 }, + 4, + 5, + }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithManyLists_ParsesCorrectly() + { + const string input = "[[1], [4], [5]]"; + var expected = new List + { + new List { 1 }, + new List { 4 }, + new List { 5 }, + }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenListWithDeeplyNestedList_ParsesCorrectly() + { + const string input = "[[[[[1]]]]]"; + var expected = new List + { + new List + { + new List + { + new List + { + new List { 1 }, + } + } + }, + }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } + + [Test] + public void Parse_GivenAnotherNestedList_ParsesCorrectly() + { + const string input = "[[1,[2,[3]]]]"; + + var expected = new List + { + new List + { + 1, + new List + { + 2, + new List + { + 3 + } + } + } + }; + + var actual = PacketPairParser.Parse(input); + + Assert.That(actual, Is.EqualTo(expected)); + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PairComparerTests.cs b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PairComparerTests.cs new file mode 100644 index 0000000..bf6b002 --- /dev/null +++ b/AdventOfCode2022/AdventOfCode2022.Tests/DayThirteenTests/PairComparerTests.cs @@ -0,0 +1,239 @@ +namespace AdventOfCode2022.Tests.DayThirteenTests; + +using AdventOfCode2022.Solutions.DayThirteen; + +public class PairComparerTests +{ + private PairComparer _pairComparer = null!; + + [SetUp] + public void SetUp() + { + _pairComparer = new PairComparer(); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoEmptyPairs_ReturnsTrue() + { + var pairs = new Tuple( + new List(), + new List()); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenSameInts_ReturnsTrue() + { + var pairs = new Tuple( + new List { 1 }, + new List { 1 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenIntsInCorrectOrder_ReturnsTrue() + { + var pairs = new Tuple( + new List { 1, 2, 3 }, + new List { 4, 5, 6 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenIntsInWrongOrder_ReturnsFalse() + { + var pairs = new Tuple( + new List { 4, 5, 6 }, + new List { 1, 2, 3 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoEmptyLists_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List() }, + new List { new List() }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoNestedEmptyLists_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { new List() } }, + new List { new List { new List() } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoIdenticalLists_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { 1 } }, + new List { new List { 1 } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoListsWithIntsInCorrectOrder_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { 1, 1, 3, 1, 1 } }, + new List { new List { 1, 1, 5, 1, 1 } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenTwoListsWithIntsInWrongOrder_ReturnsFalse() + { + var pairs = new Tuple( + new List { new List { 4, 5, 6 } }, + new List { new List { 1, 2, 3 } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_WhenRightSideRunsOutOfItems_ReturnsFalse() + { + var pairs = new Tuple( + new List { 7, 7, 7, 7 }, + new List { 7, 7, 7 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_WhenLeftSideRunsOutOfItems_ReturnsTrue() + { + var pairs = new Tuple( + new List(), + new List { 3 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenMixedListInCorrectOrder_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { 4, 4 }, 4, 4 }, + new List { new List { 4, 4 }, 4, 4, 4 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenEmptyListsWhenRightSideRunsOutFirst_ReturnsFalse() + { + var pairs = new Tuple( + new List { new List { new List() } }, + new List { new List() }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_GivenEmptyListsWhenLeftSideRunsOutFirst_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List() }, + new List { new List { new List() } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenListsWithIntsWhenLeftSideRunsOutFirst_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { 1, 2 } }, + new List { new List { new List { 1, 2, 3 } } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } + + [Test] + public void PairsInCorrectOrder_GivenListsWithIntsWhenRightSideRunsOutFirst_ReturnsFalse() + { + var pairs = new Tuple( + new List { new List { new List { 1, 2, 3 } } }, + new List { new List { 1, 2 } }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_GivenDeeplyNestedListsInWrongOrder_ReturnsFalse() + { + var pairs = new Tuple( + new List + { + 1, + new List { 2, new List { 3, new List { 4, new List { 5, 6, 7 }, } } }, + 8, 9 + }, + new List + { + 1, new List { 2, new List { 3, new List { 4, new List { 5, 6, 0 } } } }, + 8, 9 + }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(-1)); + } + + [Test] + public void PairsInCorrectOrder_GivenMixedListsInCorrectOrder_ReturnsTrue() + { + var pairs = new Tuple( + new List { new List { 1 }, new List { 2, 3, 4 } }, + new List { new List { 1 }, 4 }); + + var actual = _pairComparer.Compare(pairs.Item1, pairs.Item2); + + Assert.That(actual, Is.EqualTo(1)); + } +} diff --git a/AdventOfCode2022/AdventOfCode2022.sln.DotSettings.user b/AdventOfCode2022/AdventOfCode2022.sln.DotSettings.user index 981b69a..656e93d 100644 --- a/AdventOfCode2022/AdventOfCode2022.sln.DotSettings.user +++ b/AdventOfCode2022/AdventOfCode2022.sln.DotSettings.user @@ -1,7 +1,8 @@  - <SessionState ContinuousTestingMode="0" IsActive="True" Name="FindFewestStepsToGoal_GivenInputFromExample_SolvesCorrectly" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + <SessionState ContinuousTestingMode="0" Name="FindFewestStepsToGoal_GivenInputFromExample_SolvesCorrectly" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <TestAncestor> <TestId>NUnit3x::61B53EED-67D8-40DC-B8FD-CF3BA01B8428::net7.0::AdventOfCode2022.Tests.DayTwelveTests.DayTwelveTests</TestId> + <TestId>NUnit3x::61B53EED-67D8-40DC-B8FD-CF3BA01B8428::net7.0::AdventOfCode2022.Tests.DayThirteenTests.DayThirteenTests.SumOfIndicesOfPairsInRightOrder_GivenInputFromExample_SolvesCorrectly</TestId> </TestAncestor> </SessionState> @@ -11,7 +12,8 @@ - <SessionState ContinuousTestingMode="0" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> + + <SessionState ContinuousTestingIsOn="True" ContinuousTestingMode="1" IsActive="True" Name="All tests from Solution" xmlns="urn:schemas-jetbrains-com:jetbrains-ut-session"> <Solution /> </SessionState> diff --git a/AdventOfCode2022/Inputs/DayThirteen/input.txt b/AdventOfCode2022/Inputs/DayThirteen/input.txt new file mode 100644 index 0000000..3f53d90 --- /dev/null +++ b/AdventOfCode2022/Inputs/DayThirteen/input.txt @@ -0,0 +1,449 @@ +[[9,8,[4,[3,10,7,7,7],[10,4,0],4,[4,2,5]],[[8,8],2,[8,2],9],[8,1]]] +[[],[7,8,9,2,5],[[9,[8,2,1,4,8],[7],6],[[8],[8,10,6,0],10,4,3],[7],9],[[[3,7],5],[[7,3,2,0,4],0,[2,2,8,0,1],[5]]],[[[],[],[5]],8,10,[],[[8,9,3,1]]]] + +[[[],0,[],[[],9,5,1]],[[],0],[[],0,3],[7,0,9,5]] +[[],[3],[[[6,0,0,10,0],0,10,[1,1]],7,[8,[9,6,3],[3,4],4]],[],[[[0,7,8,9],[9],[3],[8,2,10,1],[2,0,5]]]] + +[[[],5,8,[]],[[10,5,[],10,0],7,[],2],[]] +[[[[]],[6,9],[[0,7],3],[[2,9],[3,6,0],[],0],[]],[2,[[2,6,1,10,1],[8,9,7,6],4,[]],0,9,[[],[9,2,1,7],[9,10,0,6],[9,8,9]]],[[3,10,[4,10,0,9,3]],5,[9,8,[7,5,7]],3,7],[],[]] + +[[],[[6],1,[10,10]],[1,[3,[7],[10,7,4,4],4,[7,3]]],[0],[7]] +[[[[6,3,8,10,5],[6,4,9],[6],9],5],[2,1,7,4]] + +[[[[4,6,7,9],[10]],3,5,[4,[7,3,6],[0,9,8,6]]],[[]]] +[[[4,2,[1,6,5],[8,9,0,6],[0,7]]],[7]] + +[[[0,2,5]],[3,7,[5],[4,[6,6,3,1],[8,10]]],[8,5,6],[3,3,[8],3]] +[[10,8,6,10],[10],[],[[[],7]]] + +[[7,[[4,10],5],7,6,1],[[],10,6,[]],[[7,[3],[7,6,1,8,1],5,[]],[5,2,[7,2,8,3],7]]] +[[4,10,9]] + +[[[[7,9],10,9,[3,9,1]],7,[[3,7,10,3,10],[3,10,9,8,8],[8,8,8],[4,10,5,10,3]],[5],8]] +[[[0],0,9,4],[8,10,6,4,[[0,2,5,9]]],[[],[[10,10],5,[6],4],[[4,7,0,2,1],[5,9,7],[]],9]] + +[[],[5,[9,1]],[[1,[10,0,0,9],0],4,[],1,[3,2,8]],[8,[[3,1,3]]],[2]] +[[9,[0,0,[1,1,2,6,0],5]],[[[6,9,1,5],0,6,0],3,[]]] + +[[[],5,[[5,2],[2,3,2,8],[2,5,6,2],6],[2,[1,7,0],[8,9,8,8,7],1],4],[8,[2,1,[]],9]] +[[10]] + +[[],[[[5,7]],[8,[9,4,2,3],2,4],[],6],[]] +[[[[3,9]],[6,9,[10,6]]],[[9,0,[3,7,7]]]] + +[] +[[2,6,[[8,10,3,7,4],7],[]],[[[2],[2,9,9,1],[]],[2],2,[[6,7],9,[9,9,1]],0],[2,4,6,5,9],[[0,8],7,[6,9],[],[[],[6,4,9,0],8,[4,9,5]]]] + +[[[7,1,5,2,9]],[[[0,9],6,[1,7],[4],4],[[7,3],[9,10],[2,0,0]],0,7,[[],[9],[10]]],[0,[[8,1,2,6,0],1,10],4,[10,[10,4,6],1,8]],[[],[4,[]]]] +[[8,7,7,3],[[10],[[0,6,9]],[[5,7],10,[5,7,7],[9,4,0,3]],[8,[6,9,9,9,10]],[]],[[[],[8,4,8,6,0]],9,[[]],[]]] + +[[3,[6,[1]],[3,[0,0,6,4],5]]] +[[[2,[]],[6,9,[],[3]],8,4]] + +[[[[2,5,6],7],3,5],[],[[],9]] +[[6,9,5]] + +[[7],[],[[[],[3],0],1,4],[4,[9,9,7,[7,0,0],2],[2,[0,9],4,[3],[7,3]],1]] +[[7,[3,9,9],[],[[],1]]] + +[[10],[[],3,5,8,4],[2]] +[[6],[0,[3,[0,8,8,2],1]]] + +[[[[9,6,1,8,9],[1]]],[[[5],[6,8,7,5,10]],4,[7,[4,6,7,1,2]]],[[[2]],9,7],[8,6,[[0,2,2,7,10],[0,1,10,4],[4,3,0,9,3]]]] +[[0]] + +[[[0,[3,5,2,0,8]],1,[[3,7,7,8,5],10,[7,10,3,5,3],[8,7,5,9,8],[8,0,3,4,2]]]] +[[5,[],[[0,3,4,0,7],0,[9,4,1,1]],[]],[9,[3,[0,2,0,8,10],[7]],8,9,[[7,8,1],3,[2,10],[4]]]] + +[[3,[],[5,[4],9,[1,6,8,1],1],[9,[0,10,2,0,6],8],8],[[9,[9,8]],[]],[[4,2,8],1,10,[[5,4]],0],[[5,7,[0,5,8],[10],0]],[9]] +[[0],[9,8]] + +[[],[3]] +[[6,[],7],[4,2,8],[[[2,1,0],[3,7,4,5,6],8],[[6],[10,9,6,4],[3,1],[9,8,10,6,2]],[1,4,1]],[9,4,[[],[0,4,6,7],10],0,[[0,8,6,6,9]]]] + +[[2,4,[3,6,2,5],4]] +[[],[7,10],[2,[[2,1,7,2,8],7]],[[[4]],0,[2,4,1,4],[5,[6,6,10,8,2],9,4],[8,[6,8,10]]]] + +[[9,1,[6,7,[],4],[]],[],[10,[8,[5]],[[0,5,5]],[6]],[1],[[[0],4,[7,7],7],8,[8,[7,1,9,9,2],0,[3,8],[]],[10,9,3,[7,7,3]]]] +[[9,2],[]] + +[[9,[[1,6,6,3],5,4],[],[2,[5,1]]],[3,[9,[],[6,4,3],10,1]],[9],[]] +[[],[[[],[7],1,[0,7]],[],[4,2]],[5,6,[2]]] + +[[[[0,2,0],[10,7,9],10,[10],3],7,[[8],[5,10,3,0],10,5,1]],[9],[],[0,10,7,9,2],[9,2,0,7]] +[[3,4],[0,[[0],9,6,10],[6]]] + +[[0,[[4,5,9],[],1,[5]],[[4,4,8],[],[1,6,2,1],[],1],9],[[],[3,1]]] +[[[3,3,[10,5]],[[9,0,10,1]],[10]],[0],[[[1,2]],[[3],[4,4,4,8,6],[3,6,2,10]]],[[10,[10],[7,0]],[[0,8],[4,1,4,6],3,[],[0,5]]],[[4,[9,2]],[[2,4,6,8,9],6,8,[8,6]],[[2,8,10],[10,8,0,7,3],[1],2,3]]] + +[[9,[10,[0,8,7,3],9,[9,10,3],[4,7,4,1,5]]],[1],[],[[[],[8],7,[9,1],[8,2]]],[0,8,2,0,1]] +[[7,[[0,1],3,6,4,6],[[9,4,2],[1,8,3,8,10],[3,0,1,6],[5,6,5,9,4]],9,[[3,9,3,3,3],[2]]],[[[2,5,3],[3,1,7],[4,10],2],7,[5],3],[4,[1,1,1,0,[6,9,9]]],[10,[[0,8,5,6,5],6,[2,8]],8,[],6]] + +[[[[3,9]],[[9],8]],[[1,10,0,6],[[3,7,5,8,4],7],[6,2],9,[[10,7,4]]],[[8,[],[6,4,8],[2,6,4]]],[7,[6,1,[2,3,4],3,4],6,4,3]] +[[[9,[7,3,0,9,5],[4,10],4]]] + +[[[0],0,[[],8,10,1,[9,3,1]],[[0,0,6,2,3],[8,3,10]],[[8,1,5,8,1],[0,5,1,10],[8]]],[[[9,7,10,1],[0,8]],[],6],[],[1,[6]]] +[[[[5,4,1,1],0,[]],[8,3,[10,3,3],[7,3]]],[],[[[9,2,8,5],[],1,[]],[[3,10,1,7,6],6],[[6]]],[9,10]] + +[[[7,9,6],[],2,[0,[],2,1],[9]],[8],[4,6,[1,[4],[3]],3],[[],2,1,[],[4,[3,0,0,3,0]]]] +[[[]]] + +[[[8,9,5,[6],6],[[],7],[[4,6,6,9,0],[0,0,9],10],[[7],5,8,[4]],9],[5,[[10,10,1,10],[9,2,10,5],[10,10],1],4,0,5],[[6,[6,1,3,4],5]],[[7,4,[3,3,7,4],[1,0],7],7,[10,0,3,[10,0]],1]] +[[3],[[[],[1,2]],7,[1,[6,10,4,8],[10,5,0],2,[4,2,5]]],[]] + +[[7,5,[4],[[8,1,7,5],[3],1,[],3]],[2]] +[[8,[],[[4,2,5,8,2],2,8,[]]],[1,3,[10]],[3,[[0,5]],1,[1,9,[3,6,3,8,7],6],[]],[4,[6],[10,[],[6,1],0],[7,[],6]]] + +[[6,[[3,7,7],[1,10,10,1,5],7],0],[9,9,10,[5],[[0,0,6,9],4,7]],[[],[[],7]],[[[10,8,6],[],1,[4,1,6,8]],6,[[],[6],[7]],[[3,5,10,5],10,0,1,4],10]] +[[[2,[2,4,5,4]],0,[],[[4,5,0,1,2],8],7],[[],[3,[],10,[4]]]] + +[[[[6,2,8,3,5],9],10,5],[0,9,[[10,0,3,10],[9,8],10,[]]],[[[],3,[],[]],[],[[3,6,6,1],8,2],0],[[8],7]] +[[6,10,[]],[9]] + +[[3],[[[]],[[3,5],1,3],[],[0,[7,9,4,0],[2]],8],[]] +[[]] + +[[0,[3,0,9,[8,6],8],4,3]] +[[6],[2,5,[5,7,7,10,[4,8,2,9]]],[3,6,[0,[3],[3,6],5],1,[[10],1,7,3,[7,9,9,5,6]]]] + +[[10,[8],[[8],2,9]],[3,10],[1,1,10,[2,[3,6,6,2],[],[0,2,1,3],2],[[3],2,[3,9]]],[[7,[],[10],[6,6],[6,4,6,9]],5,1,[[4,9,6,2,8],7,[10,10,2],1,[9,8,10,0]]]] +[[1],[9,6,6,[],7],[8]] + +[[[10,[1,6,0,9]]],[[7,[10,1,6,6],[2,0,1],8],4],[10],[[],1],[[9,2,[9,10,10,7,5]],5,[],10,[[3,9,3,1,1]]]] +[[],[[1,10,[6,3,2],[10,9,1,4,10],1],[[3],[6,3],[4,8],[]]],[[6,[1,1,9,8,0],[7,5]]],[[[],8,0,[10,10],0],0,2,[],[6,[3,9,9]]],[1,[],8]] + +[[[[8,1],2,9]],[[[5,7,4],[6,9,7,9,9],[3,2]],0,0,[],[7,[7,10,6,3,3],[10,2,3]]],[[0,2,[0,6,3],5,[0,4,4]],10,[[10]]]] +[[],[[],4,6,5,10]] + +[[[0,6,[0,4,7,10,8],6],1],[2,8,0],[[7,4],8,[[6,6],2,[],[4,1,6,8,1]],2,10]] +[[[6,6,5],[[7],[4,10]],[[],[7,6]],0],[],[],[[[0,2,3,2],8,8,[3,6,6,10,1],2],2,[7,[]]],[[5,[],3,3,8],[[5,0,3,3,3],[1]],10]] + +[[[5],5],[]] +[[],[[[4],8,[3,1,5,0,9],6],10]] + +[[9,[[7],2,[0,8,2,8,8],8,[8,10,0]],6,[2],3],[]] +[[[4,[2,3,1,0]],1],[],[0,[9,7,3,[4,2,0,8,10],[3,0]]],[2,[6,[8],7,[10,5],8],9,9],[10,[[1,3,4],[4,5]],[[],[6,6,1,5],[9,10,6],[1,5]]]] + +[[[[9,0,2,1,3],4,[2,7],6,2],[7,10,[],8,[10]],[[9,3,3,3],[7,5],[0],[4,0,0,6,4],[2,5,10,4,5]],[5,3]]] +[[1,9,2],[7],[[8,5],[3,[4],9]]] + +[[[7,4,[10,5]],7,[[6]],4,[[8,7,9,0],3,6,0]]] +[[[],2],[],[8,[[8,5]],[[4],9,[0],7,7],[[],[0,9,3,2]]]] + +[[[]],[],[[],5],[],[]] +[[[[]],10],[[7,3,[4],3,[7,0,1]],1],[0,[10,[9,10,4,5],4,[]],[1,[1,2],1,2]]] + +[[10,[[]],5,[[8,1,3,5],[0]]],[[[5,3,4,2],[]],[[1],7,[]]],[[[4,0,2]],9],[7,4,[5],[[2],10]]] +[[],[3,9,[],1,1]] + +[[[[9],[0,10,8,6,3]]],[],[[[0],3,[3,4,0,5,5]],[10],3,[2,2,[],[10,3],[10,6]]],[[9,[4,1,7,6],8,[]],[8,1,7,2,1],[[4],[3,6,4,1],[2,7,5,7,10],4]],[]] +[[8,4],[1,2,[10,0,[5,2,3,9]]],[7,7,8,[[],1]]] + +[[5,7,9],[[10,6,5,[0,4]]],[[[4]],[]],[[[1,2,4,8]],9,[3,[],[8,9],9,3],1],[[],3,2,[[]]]] +[[2,[[9,3,8,3,2],5],[[],4,[],1,1],3,0]] + +[[3,[[6,3]],3,[[10,0,2,8,2],9],7],[10,[[0,5,1],6],[]]] +[[10,[[],[1,7],7,5],9],[0,6],[],[[[4],6]]] + +[[],[9,[5,[10,10,3],[8,2,8]],[3,[],4],0],[],[2,[9,5]],[10,3]] +[[[[9,9,9],[3],[]],[1]],[]] + +[[[[1,8,4],[7,5,3,3,5],[1,6,7,4],[1,6]],[5]]] +[[[],8,7],[[10,[],0,[0,5,6,7,10]],8,[[4,5,2,7,10]],6,3],[1,[10,[9],[6,8,5,3],0],9,3,[[1,8,5],10]],[[7],[],4],[7,[[0,9,3,7,10]]]] + +[[[[9,10,1,3],[8,4],[1,4],[4],7]],[],[]] +[[[1,[2],[9,3,3,3],5,[6]],[[6],4,9,1,1],[4,[8,8,4,8,4],[],[0,8]]],[9,1,4,[[9,2,2,1,8],2]],[9],[]] + +[[],[4]] +[[[[5,5,4],[3,1,6,8],0],[[7],[5,6,4,0,2],6,[]],[[2,9,4],7,10,[5,3,7,7],4],2],[6,[]]] + +[[1,6]] +[[[],2,[[],6,0]],[[[]],8,10],[[],8,9,0],[3,3,0,[4,[2,4,2,6],[2],[1,9,4,6,9]],[[9,2,10,9],3,8]]] + +[[[[10,6,4],10],10],[[[10,1,4,6],7,[5,1,1]],10,[9,1]]] +[[[[2,4,2],[8],4,[0,4],7],0],[],[[[1,8],[1,2],7,10,[7,5,7,6,3]],[[7,2,6,2,1],7],8]] + +[[9,[9,[5,2,9,10],[0,2,6,4],[0,1,5,6]],8,6,6],[6],[],[4,9,5,1,[1,[],2,8]],[[4,[7],[],[9,1]],[],4]] +[[],[],[[],[[5,5],[1,10,7],[],9],4],[]] + +[[4],[10,8,[[7],[5,5,7,5],[1],[8,0,0],[]]],[[0,3,[10,4,10,9,5],7],6],[[8,3,1,0,[10,4,5,9]]],[6]] +[[3,[]],[4,[[0,9,5,6,1],2,0,[2],[4,9,10]]],[8,[8,[]],5],[[9,8,[5,1]],2,5],[5]] + +[[1,7,[4,10]],[[[10,6,3],[]],[3,1,[1,8]],[],0,2]] +[[2,1,6],[[[1,0,2],[10],[],1,[9,1,10]]],[]] + +[7,5,1,1,2] +[7,5,1,1] + +[[[9,[0],[6,4]],3,0,7,[9,[8,7,2,6,6],[8,9,5],8,[6,0,1,7]]],[[3,4],[]],[[6,[10,9,5,3,0],[8,2,6,9],10,[1,2,6,8]]]] +[[[],0,[3,[2,2,2],9,[9,1,6],[7,8]],0,4],[[5,[9,10,9,9],6,[5,0,6]],4,[[2,1],[2],4,[]],0,8],[0,[0,[1,0]],[8,[4,2]]],[2,[[3,6,10,9,4],3,8,2,10],[6,[7,5,9,5]],[0,[6,7,1,2],[0],[],[1,2]],[[6],4,[6,10,4,2],4,[5,3,4,3]]],[]] + +[[],[],[[4,8,5],5,8,1,[]],[[[],9],[[6],1,0]]] +[[[[],9,[6,9]],4,8,10],[8]] + +[[0],[7,[[],8],5,[[4,10,2,8,9],[3],6,[7,5,3,0,10]],[[],3]],[[],[3,[8]],[],5],[[],9,[[5,1,7,1,1],[0],5,[5]],[[6,5,2,3,10]],[[2,0,8,2],0,2,6]]] +[[7],[[3,[5,0,9,8],[10,1,9,10]],[],[2,8,[10,8,3,2,4]]],[[3],6],[[[6,3],[7,8,10],1,3,[8,10]],1],[5,[6,4],1,6,[1]]] + +[[4,[1]],[[[3,8,10],[3,3],0,8],6,3,3],[[4,9,7],[],8]] +[[2],[],[[],6,[[6,3,3,7],[0],7,[3,0,7,6]],7],[[[0,7,7,6],8],10,[],[6,6,4,6]],[5,0,2,[[1,3,6,6],8]]] + +[[[[0,5,4]]],[[],8,[[7,1],[6,1,3,2],1],[[8]]],[[],[8,7,[4,9]],[6,[],10,10,6],[5,5,[0],1,[6,6,5]]]] +[[],[],[]] + +[[2,10],[5,0]] +[[[0,6,10,2,[]],4,0,[6,[8]]],[[],[3,[9,2],8,9,[10,3,2,1]],0],[[[6,8,3,2,9],[7,1]],[[6,10,7,4],[6,5]],[5,3,1,7,[0,3]],0],[[[8,10,3,7],[1,2,7,5],1,0,[8]],[0,[7,9,7,3]],[[]]]] + +[[9,[0,0,[10,1]],3,[[0,10,5],[7,8,0,3,5],5,0,5]],[8],[[],10,2,10,3],[3,[8,3,[8,10,8],0,[]],[[7,8,8,2,7],[],[0,2]],[[5,1,3],3],1],[0,[[4,8,10],[]],3,5,6]] +[[[[5,4],0],[[6],3,5,[10,0,7],7],[[6],[1,10,2],5],[9,[7,1],10,[8,4,8,5,0],10],8],[[[0],8,3,10],2,6,[],9],[1,[6,2,9],[[1,0,1,10,0],[0,3,2,4],[10]],[]],[]] + +[[3],[[4]],[[[],9,[7,1,3]],[],[5],[9,[8,1,10,10],7,8,[3,1,1,10,1]]],[[[],[0,1],[],3],[[0,8,1,10,6],0,1]],[[6,10],[],[],[2,[4],7],0]] +[[],[7,[10,[10,1],7,4],[8,1,1],[[7,3],[2,9,0,6],[0,3,8],4,[4,7,5,8]],10],[3],[6,10,[[4,4,4],[3],[5,6,7]],[[4,8,1,9,5],[],[4,8,2],[3]]],[]] + +[[2,[[]],2,[[5],[5,5,9,7,3],[10,1,2,10]]],[],[10],[]] +[[9,10,5],[],[[[1,0]]]] + +[[7,4],[4],[[1,[0,0,5,9],[8,6]],[],[[],4,7,6]]] +[[0,[9],[6,5,[],8,[0,2,4]]],[[],5,[[],[1,4,3,8],9,9]],[[0,8,2,4,[5,5,0]],[9,5,3,[],8],7,[10,[5,3,8,7,9],[4],8,7],4]] + +[[[5],6,[4,[10],9,1],[7,[9,4,2,6,1],[3,10,0,5],9,3],4],[[3,7,2,[3]],[],[[]]],[6,1,[[1,9,7,2,7],[10,2,10,3],[9,8,7]],[8,1,9,[0,7,0,2]]],[[[2,4,1,1,2]],[7,2,[7],7],7,6],[0,8,[7,4,0],1,3]] +[[[[7,1,10]],10,[8,8]],[[[],[4],4,[4,2,6,8]],[[2,1,3,1,1],[1,10,9,5],[0,4]],[],[[],[],[4,10,10],3,[2,0,4]],[3]],[2,6],[7,4,6],[[5,9,[2,5,0,4,1],[5,7,2,8,5]],[[4,4,8,10]],[[4],[0]],[],[[3,8,10,4,1],[10,2,8,6],7,[6]]]] + +[[[],3,8,[[5,8,4,6]],[[],[9,10],1,8,8]]] +[[[8]],[8,[[1,0,6,1,6],[1,0,7],8,8,0],[5,[0,1,10,1,5]],[[2,6,3,4,10]]]] + +[[3,3,3,[1,6,4],0],[5,[4,8],0,6,1]] +[[6],[[[9],1,8]]] + +[[],[[[7,4,7,7],5]],[[[8,7,5],9,1,1]]] +[[[[10,3,5],3,8,[3,9,6]]],[]] + +[[6,[[4,6,2,10,2],[10,3,6]],8],[2],[[1,6,[8,6,9,10,4],1],[1]],[1,8,[1]],[[]]] +[[[],10,[[0,8,1],[5,7,3]]],[6,[],9,[[7],2]],[5,[[],[],[6,0,5],1,3]],[[[3,7,4,10],[9,6,10],5,8],[0,[5,2,0,3]],[[4,2],5]]] + +[[[[3,7,7,4,7],[],0],[],1],[[10,10,2],[[2],0,[10,3,3,2,5],[6],[10,1,0]],[5]],[]] +[[0,[0,2,[1,10,4,9,3],[1,8,0,2,8],[]]],[2,0,2],[7,[7,6],2],[10]] + +[[4,4,[2,[7,7],[2],[9,6,1,0,5]]],[[],7,8,1],[[1,[],[3],[5,7,1,10],[7,6,5]],2,[]],[]] +[[10,[],[[9,1,5,9,7],1,7,[]]],[[[9],[10],8,9,8]],[[[8,4,0,4],2],[[7],[],[10,0]],0,[8,3,[3]]],[],[[[8,2],[1,1,2,8],7,[],[0,10,0,7,0]],8,4,10,1]] + +[[],[6,[[6,6,8]],2],[0,[1,7,1],[[2,8,7],[5,4]],2,[[4],1]],[10,[[4,1,1],6,5,[9,6,3,1,10],7],[],0],[]] +[[[4,2,[2,3,3,8],[]],8]] + +[[8,3,6],[],[[]],[[[2,9,1,1],5,4,8],6],[[[7],7,[4,7],[3,4,3,6,8],[4,6,7]]]] +[[],[]] + +[[],[[[3,5],[6],2,8],0,4,1],[],[5,10,8],[]] +[[1,8,1,[[5,3],[7],[7,9,9,4,6],[7,8,1,1],5]],[[]],[[[8,9,2]],[[5]],9,[4,[],[3,5,0]]],[6,10,7,7],[]] + +[[[]],[]] +[[3,7],[],[[[7,7,7,6],5,7,2]],[[[1,5,0,0,4]],5,3],[10]] + +[[[3,[5],[9],0],1,[[],[]],[2,5]],[7],[],[[3,[1],5],[[],6,4],0],[[],[7,10,2,[7,3]],9,2,[]]] +[[[[7,0,8,0],[2,10,1,0,2],[],[8,5,5,3]],[10]],[],[3,[[8],0,[2],6],0,[[3,7,5],[7,3,9,2,1],6],[[],[0,2,1,5],7,[]]]] + +[[5,1,[[6,2,8,4,4],4,8],10],[[3,[],8,8,[6]],1,[[5,7,0,1,7],8,3],[6,[0,3,7,7,3]],[6]]] +[[],[],[[],3,[1,[0,0,9,1],0],[0,[8,4]],[[],6]],[[[0],[5],8],[[7,8,6,3,0],9,[5,3,10],[7,5,2,4,4],0],[9,1,10,2],2],[5,[[4,6,4,3],[2,6],[7,10,0,0],5]]] + +[[3,5,4,6,[[10,0,2],4,4,[],2]],[[[3],[8,1,7,3],[6,0,8,9,9],7]],[6,9,[[3,8,2,2,3],6,[5],[8,5],[10]],3,[4,2,1,8,6]],[8,[[3],2],1]] +[[10,1,4,[2]],[[7,3,[9,10,1],7,[6,0,2]],[],0,1,7],[[[6,10,6,9],[6],[5,2],[8,9,9,1,3],[9,7,10]],[2,[4,2,1,5,5]]]] + +[[[],7,[[3,0,2],[1,0,10,1],0],3,10],[[7,[6,5],4],3,[[0]]],[],[[0],[[10,0,2,0,8],2]],[7,[2,[5,9,0,7],[1],2,[8,9,4,9]],8,[[1,3,7,10,2],2],9]] +[[1,[[5,9],1],5],[[6,[9,6],[9,8,3,3],[7,1,5]],7,5,0]] + +[[],[1,0,[6,4,8],8,1]] +[[[5,[0,5],[0,6,9,8,3],2]]] + +[[],[[2],[[8,10,0]],3,[],[1,[]]],[7,[]],[]] +[[3,3],[[[7,2,10],1,[1,4]],10,[5,7,0]]] + +[[5,[2],8,[],[5]],[3,1,[[],[10,9]]]] +[[[3,9,[7,6,2,2,7],9,[10,5,1,3,8]],[],[6,[5],3],8,[2,6,9,7,10]],[[[6,0],[3,6,2]],0,3,3,4],[10,8]] + +[[9,[0,[3,7,2,4,3]],3,6,10]] +[[1,9,[0],8],[6,[],4],[9,9,[8,1,[5,9,10,7]],5]] + +[[],[[2,10,[6,9,6,4]],0,[],6],[],[],[1,[],[1,[0,1,3,5],[6,7,8],8,7],[[8,3,5,9],4],[]]] +[[[9],[10,[7,3,5],7]],[10,[1,[6,5,10,1],[7,3,2],7,[8,10,1]],1,[4,1,2,9],10],[7],[[10,2,1,[1,6,8,10],0]],[[4,[10]],[]]] + +[[[6,[9],8,8],[7],6]] +[[[0]],[],[[],2,[0,[7,2,5]],0],[4,[3,3,1,3,5],9,[9,[],7,2],0],[[1,[2,1,4],8],10,3,7,[[3,8],[6,5,3],[8,9,2],1]]] + +[[2,[],2,8,0],[4,[[10,8,9]],1],[[8,[4,4,9,10,6]],[[],[],9],[]],[],[]] +[[[[5,8,6,3],[6,10]],10,[5,[8,10,7,6,9],8,[],[1,1,6,8,4]]]] + +[[[1,[],[4,3]]],[5,[[8,3,0,3,3],6]],[],[[3,[5,5,4,3,1],[10,8,7,5],[4,9,9,4,3]]],[8,[[7,9],10,4]]] +[[5,2,[3,6,0,[4],0],2],[2,[[8,10,5],8,[9,5],[3,2,1,4,2],4],[[6,5,2,1],[6,10,2]],10,[[4,4],[8,4],2]],[[[4,1]]],[5,9,0,[],[[5,1,1,9,7]]]] + +[[[[9,5,4,9],[9,8,5,6,3],[5,10,8,4,8]],[7,0,[3,6],9,1],4]] +[[5,8,[[8,7,3,3,10],[5,3]],5],[0,5,7,[],[]],[],[[7,[3,7,7,0,6],[],4,5]]] + +[3,0,0,2] +[3,0,0,2,6] + +[[[[7,9,1,8],[0,0]],[5,[2,1,1,10,3],[6,7,10,1,5]],7,6],[[[10,3],[9,2],6,[9,2,9]],[7,[0,5],8,1],[[5,1],9,[],[7,6],8]],[[[],[1,4,4,1,4],10]]] +[[[0,[],[9,5]]],[[6,1],3,[]],[[],[[]],[[8,3,7],3,3,[10,4,10]],10,1],[5,5,0],[[2,[3,7,1],[10,9,9,5],7,[7]],3,4,1]] + +[[[]],[],[4,[]],[10,[[10,1],8]],[[[5,9,7,6]],10,0]] +[[[1,7,[0,1],1],9,7,[4,[0,8,3,1,8]],0],[1,6,[[4]],6],[7,7,1,[8]],[[0],[5],[2,10,9,[4,0,10,6,9],2]],[6,9,[7,[]],[[9,0,8,10],10,[6,0,10,9,7],7],4]] + +[[[[2,9,3,5],[8,7],[],7],8,[[2],[],[],2,8]],[[9],[10,[0],[9,4,10,6,9],[8,8,2]],8,[[],1,[0],3,[]],[[5],2,[0]]],[[[10,0,4],[10,0,1,7,2]],3,3],[4,[1,[],3,[5,7]],8,[],[9,9,5,[6],[5,0,4]]]] +[[[5],[2,3],[[],5,[2,8]]],[],[7,8,[[7],9,[]],[7,[],2],2],[[9,[10,7],1],9,[[5]]],[2,[3,4,8],5,10,4]] + +[[[[5,2],[3,0,3,1,0],[0,1,5,7]],1,4],[[4,3],[[],[],[7,9,5],[4,10,2],8],[3],3],[],[[]]] +[[[[6,9,0,4,10],[],3,[3,7,0,0,1],[8,9,3]],[]]] + +[[[[10,6]],1,[2,3],0,3],[7,10,[],9,[[],1,[]]]] +[[9,3,7,[4,[2],6,3],0],[[],5,1,[[8,0],6,[4],[4,4]]]] + +[[[[],9]],[6],[[[5,0,6],[6,7,3,1,0],[3,4,4,0]]]] +[[3,[],[8,[],4,6],[5,6,1,3,[]]],[[[2],4],[[0],[3,2,7,9]]]] + +[[8,3,[],9,[[2,0,10],1]],[7,0,[9],4]] +[[[4,[]],[[7]],[[0,2,3]],4,[[9],[0,2,4],[2],[4,0,4,3,5],[2,2,5]]],[8,[[6,2,6,8],4,[5,0],1,[9,3,10,3]],[1],[[8],[10,1,9],3]]] + +[[9,[[10,5],6,8],[],[[]],[1,[3,1],8,[0,10,10,10],2]]] +[[[0,5],[[8,10,1],6,[2,7,7,1],[8,4,1,4]],[],4,[]]] + +[[],[3,[[6,4],5,9],[],2,[[],4,[5,9,8,3,1],1,[8,5,8,1]]],[1,[4,0,[1,3]],[3,[6],[7,0,0,6],1,10],[]]] +[[1],[[1,[4,7,0,2],8],3],[9,7],[[[5,1,1,5,9],7,7,[0,5],[4,3,6,10]],2,0],[6,9,[],9]] + +[[],[4,10,8,[2,9,4]],[[0]]] +[[8,[[3,8,2]],7],[[9,4,[2,4,9],[],[3,7,4,2,8]],9,5,[[10],5,[1,5,10,1,10],[8,4],7]],[5]] + +[[[[],10],[[6,3,4]]],[[[0,7,3,10],[0,4,4],3,0,[1,10,3,1,7]],[[3,6,1],[4,2,1,3,1]],[[2,2,9]],[[10,8,8],10,4,[1,2]]],[8],[],[]] +[[[[0,3,3,7,6],4,1,[7,6],[9]],[5],0,6],[],[[10,[1,1]],[8,10,[1,10,7,3],[9,4],[]],[[0,2,3,10,10],3,5,[4,7],9],8]] + +[[8,[2,[10,5],4],4],[4,1,[],1],[4,[3],8]] +[[[[6],[5,7,2],[6,3,2,10,7]],7,8,9,[]]] + +[[],[8,[[4,8],1,0,[6,10,2],7],[[5,6,6],[3,7,8],[5,5]],0,[[5,5,0,7],5,9]]] +[[[[9,0,8],0,[9,6,5,0,6]],7,[],[9,10,[7],[8,4],7]],[[],[],5,[3,5,[10,4,9,7],[],9]],[5,[6,[5,5,1,7]],[[9,9,2,4,0],[8,5]],10],[[5,[]],2,[8,[6,7,3]]]] + +[[],[[7,5,9,3,8]],[[10,2,9,7,3],1,[10,4,1,10]]] +[[],[9],[],[7,6],[3,3]] + +[[[1],[0],7,[9],[6,[2,9],[]]],[[[4,9,8,0,2],1,1,0,[7]],[1],4,[6,2,[1]]],[6,[]],[[9,[6,3],[7,5,10],2]],[9,[[8,7,1,3,7],0,[2,5,0,4]],0,1,6]] +[[[7,3],[3],[[9,5,2],[5],[2],[6,8,10],1]],[],[6,10,6],[[[6,2,9,5],[2,9,1,6,0]],[[],4,6,7,[8,7,3]],[7,1,7,3],5],[[9,[8,4,7,10]],[]]] + +[[[[1],[],5,9,5],[],3],[3,[]],[],[1]] +[[6,0,8],[[8,1,8,7],6,[[],1],4],[1,7],[[],5,3,[]],[]] + +[[7]] +[[[2,5],[[8,2,4,5,2],9]]] + +[[5,[[10],0],5,[5,[5,5]],[6,[],[4,7,0,8,1]]],[[[],4],2,[[1],10],[3]]] +[[8,0,[]],[[8,[10,4,10,2,9]]],[[[7,3]]],[[[9,1,1],[2,0,5,0],7],[],[[2],[2,4],[1],[],0],10]] + +[[7],[[9,3],[7],[[],6,[8,3,7,10],0]],[0,[[2,8,4],9,7],[[3,9,4,6,4]],[]],[[9,2,5,[0,7,1]],6,5,7]] +[[6,8,[[2,2]],4,[10]],[0,1,[[9,5,0]],[8,1,[5,7,6,1,2],[3,4],[10,9,2,4,1]],[]],[],[[2,9,5,9,3],[7,[8,4]]],[0]] + +[[[[4,1,5,2]],[8,4],10,2,[0]],[[0,[10,8],6]]] +[[],[4,[[5,10],9],0,[[8,6,3],7,[6,5]]],[]] + +[[[4,[9,4,2],[5,6],[9]],0,8,9,[[2,0]]],[[[0,0,3,0,10],10,6,6]],[[[0,0],[5],[7,8,2],2]]] +[[[3,10,7,[]],1,2],[[2,9,6,2,0],2,9,[[2],[10,8],9,[1,10,1,7,10]],[[],[8],2,7,[7,0,0,2]]],[6,2,1,[3,[10,1,10,0,2]],[]]] + +[[[]],[[[10],9]],[[10,4,[6,0,0,3]],[[4,2,2],7,9,9],5,[3,[7,9,0,4,4],[10,10,1],[6,9,6]]]] +[[1,[[8],[5,9,7,6,6]],[5,[6,3],[0,6,5],4,[4,0,6,0]],[[3,5,10,3,2],4,6],6],[]] + +[[[0,8,[],[]],9,[10],[7,4,7,[10,5]],[]],[1],[8,10,[]],[],[5,8,[[0,1,10],6,5,4]]] +[[1,[[7,9,4,9]],[[8],[],6,4,[10,9,10,5,10]]],[3,2,8,7],[[7,6,1],[[],2,[0],5],[[0,9]],8,[]],[],[7]] + +[[[],7,[[3,5],[1,1,5],[8],0]],[2,[2,5],[8],[[1],8,[9,2],7,0]],[],[7,[5,[3,6,4,6,10],[10,7,7,5,9]],[],6,6],[9,5,0,6]] +[[6,[0,[5,2,9,8],1],[0],[[6]],[1]],[3,3,7,[[10,5,9,7],7,5,[2,7,4,3,1]],9],[[6,[]],[]]] + +[[[10],[],9,[[6,9],8,8,[8]],[[3],[0,8]]],[[8,[1,6,7,4],[5,8],[1,5,2,5,9]]],[10,[]],[6,[2,9,[3,5],1,[2,9,0]],3,8,10],[[[4,7]]]] +[[[6,6,4],4,0],[[],[],10,4,4],[[]]] + +[[[4,3],1,[4,7,[1,10,10,4,7]],[[2,3],[3,5,1,1,1],6,[4,10,7,4,0]]],[[8],8,8,0,[4,[6,2,9],[8,1,5,7,3],[3,0]]],[[]],[3,9],[[6,6],8,1,[4]]] +[[[[1,3,9,4,0]]]] + +[[[[10,3,3],[5,10,2],[]]],[0,0,[3,8,[6,1,0],1],[[0,1,8],5]],[9,[[]],[4,0],8],[2]] +[[[2,6,6,[10,10,5],2]]] + +[[1,6,2],[],[],[]] +[[[5],[],10,[[8,3],[],[1,2,8,0,2]],[[3],[9,8]]],[2,[[10,2,1],[2,9],8,0],[9,4,4],6,[10,4,4]]] + +[[6,[7],7]] +[[9,[[9,10,2,10,9],2,[2],4]],[[]]] + +[[],[7,9,[9],[1,10,[2,8],10]],[[8],[[2,6],2,1,6,[10]],6,8]] +[[2,[[10,7,1,6,6],[9,0,7,10,8],[4]]],[3,10,2,[8,3,[],4]],[5,10,3,9,[[10,1,3],[4,4,7,10,3],5]],[7,[],3,[7,2,1,[8,10,2,0,1],[5,4,1]]],[[0,[1,4],[0,5,7]],[6],[5,[6,7,3,10,8]],5,[[],[2,2,8,2,0],[9,10,10,9,5],[1,6,0,7]]]] + +[[1],[]] +[[[[9,8,9,9,9],[]],0,4],[7],[[1],6]] + +[[],[6,[],[],[5,8,1],3],[[[7,6],3,[1,7,2,10,7],[6,1,6,3],8],[3,[7],[6,10],[5,0,7,5,10]]],[[4],6],[[],[[4,10]],4,[9]]] +[[1],[5]] + +[[[],[7,4,[0,3],[5],1],[0,[0,0,3,4,8],[],10],[[7,10,1,10],4]],[[5,2,[3,9,9,4,4],[8,9,9],[]]],[8,7,[4]],[[9,4,2,[2,1,10]],[[9,4,0,2,5],7,[4],1]],[]] +[[0,[],1,[1,[7,4,0,3,4],[4,1,5,0,3],[5,9,7,3,8],[8]],[[1,6],[7,4,1,6,4],[4,1,10,0],[]]],[[0,4,3],5,[0,[5,0,8],[7,8,9,7],[2,4,1,8,4],3],[[2],[3,6,10],[2],[],6]]] + +[[],[],[[],4,[10,[0],[8,5,2,5,7],[6,9],0],2,6],[]] +[[10,[0,[3,1]],[]],[1,2],[[[],2,[9,2,3],6,8],10,4,5,8],[[8,[6,4],1],[],4,[[9],[0,5,6,6,6]],1],[8,10,[8,0,6],0]] + +[[10,[[8,0]],9],[10],[6],[2,5,10,[[],3,[3,7,4,4],0,[4,3,9,5,9]]],[7]] +[[],[9,10,9,[[4,10,4,4],6,[8,7,6,3],[8]],3],[[[8,4,0],9,3],5],[]] + +[[[],10,[],[]],[6,[3,[4,7,7,5],[7,4,4,0]],[[10,7],[10,0,5,2]],6]] +[[9,[[2,5,5,3,5],[4,6,1],[8,1,5],[]],[[7]]]] + +[[[],[[],[],[0],[],[0]]],[[[8,10]],2,[[8]],[[],[2,3],7,[5]]],[[]],[]] +[[[6],2],[[10,8,0,10,[8,3,10]],2]] + +[[[],10,7,[[10],0,[9,3,6,0],[2]]],[[6,5,1,0,[5,0]],[[6,3,10],5,1,4]],[4,[9,8],7],[9,9,[9,8,[6],[8]],[[4,2,8,0,4],[8],5]]] +[[[8],5,1]] + +[[[[]],[[6,1,6,6],[],[9,2,9,4],[0,1,6,0]],6,[[2],7,[7,8]]],[2,[6,[]],[3,2],[]],[[],2,1,[[0,1,8],[],[5,3,3]]],[[[1,6,4,9,8],3,2],[]]] +[[8,[[7],3,4],7,6],[[7,[3,4],2,[3]],6,[10],3],[0,[8,0,0,7,[]],7,[[0],3]]] + +[[[[4,0,0,0,0],1,[]],4,[[10,7,10]],[[9,1],[0,10,8,5,0]],[[],3,[4,1,4,4]]],[[[2,9,7,8,3],4,6],[2]],[2,[],8],[2,[],[],[[1],8,[4,1,7,3],10],3],[4]] +[[[5],[[10,4],[9]]],[7,[10],[[7,4,3],[2,8,0,6],[6,10,1,3],9,[1,4]]],[4],[],[9]] + +[[6,[[0],8,[1,3,8]],6,8],[[4,3,[1,1,1]],3,[2,6,10,4],7],[[6,7,[1,8,4]],0],[9,2]] +[[[7,7,7],[[7,5,3],[6,1],8,[6,0],0],10],[[],10,2],[],[4,[7,[3,2,2],7,[]],7,4],[[[0,9,9,10,0],[3,3,8,10,0]],[1,[4]],3]] + +[[],[[[],[4,5,7,9,1]],[6,[8,1,1,3],2,2],7]] +[[3],[[[4,8],[6,1,2,8],9],5,4],[2,6]] + +[[5,[],[[1,7,8,10,1],10,2,[6,3,9,1]],[[],3],9],[0]] +[[],[10,[10],[6,0],2],[4,[]]] + +[[[],4],[[[6,10]],6,0,[[1,8,9,4,3]]],[[[8,4,2,1],7,3,0,4]],[[8,[9,5,5,3,9],3],[],5]] +[[10,[6,8,7],[1,9],4,7],[[[]],3,3]] + +[[[8,[5,5],6,0,3],[1,10,8,0],3,[0,[1,2]]],[[[8,9],[8,7,8,7]],[],[[],8],[[4,1]]],[],[[[6],9,[],[],[9,0]]],[]] +[[1,5]] + +[[[[0,5,9,7],0,7,7]]] +[[[7,8,[],[2,5,2,10],[5,5,8,5]],[],[2,0,0],[1,7,3,3],9],[[[4,7,1,10]],7,9],[],[7,[[5],[6,6,2,3],1],0]] + +[[[4,0,9,8,0],[[5,5,9,0]]],[9]] +[[],[[[9,2,4,9],2],[],5]] + +[[[]],[1,[[0,8,8],5,8,[1,7,0,10,7]],8],[[[6],5],[9,3,10,[0,4,2]],0,[[],[]]],[4,[[8,0,4,4],[8,8],[9,5,3,5]],[8,8,3,0,8],9,[[3,4],9,5,6]],[7]] +[[5,[[]],6],[3,4,[9],[]],[[2],[[3,1],0,3,[5],4],[6,[5,6,0,1,8]]]] + +[[[[3,7],[3,8],[]],[],0],[],[1,[],[9,1],0,[[10,6,6,6,8],[10,10,10,8,7],[6,1,10,6,9],[7,4,7,8,8],[0]]],[],[[3,9,2],7]] +[[3,[3,9,5,6,[7]],[[5,1]]],[2,[8,[4,10,4]]]] + +[[7],[1],[[3],[8,[2,4,9,6,3],[2,9]],2,[]]] +[[[10,[3,9],3],0,[8]],[]] + +[[6],[[2,[4,8,7,8],[10],4],1,[[4,6,7,7,2],10,[]],3],[2,[]],[4,5],[1,[[],[0,9,3],[],9,[8,6,10,5]],10]] +[[[[4,1,1,8,8],5,[],[7,6,4,6,5],3],[[9,0],3],[[4,2,6]],[8,5,[10,6]],[[0,7,3]]],[],[],[1],[[0,[0],9,[]],2,1,10]] + +[[8,5,1,[[1,8,5,8,4],[6,5,9,4],0],6]] +[[],[8,[[10,8,7],[],4],[10,[5,1,8,1],8]],[3,5,3,9,[]]] + +[[],[7,0,[9,[7]],[[3,6]],5]] +[[[2,2,0,[2,10,4,6,9]],[6,[6,10],[3],5,[]],7],[[]],[[4,0,8,2,1],0],[]] + +[[[7,4,4,5,8],[[7,5,7,7,10],[4],5,[],[9,10]],2,4,[5,[5,8,7]]],[7,[[10,1,8],[3]],[[],1,9]],[6,[[7,7,0],[],8,2,3],[]],[],[[[3,6,9,5,9],[8]],5,9,[[1,6,7,0,7],[6,3,0,4,2],5,3,8],10]] +[[3,10,[5]]] + +[[],[[10,[8,8,2,2],1]]] +[[9,[4,[4,4,6,5],4],7,8]] + +[[[[1,7,9,2,2],[10,9,9,2]],[5,[],1]],[[],3,1,[[1,8,2],1,[]],7],[[[],3,1,1,3],[5,[9,6,7,7,0],10],1,5,[3,[6,5,7,5,10],[4,2],[10,9,8,5,9],[1,9,5]]]] +[[[4,10,[0],0],5],[4,10,2,[0],[7]],[[4,[9,2]],6,5,7,8]]