From 323bb83e560282d7197e516561148feb64fdfabc Mon Sep 17 00:00:00 2001 From: Eveldee Date: Fri, 24 Jan 2025 10:19:11 +0100 Subject: [PATCH] Add day 5 --- AdventOfCode.csproj | 4 + Days/Day5.cs | 122 ++++ Inputs/Day5.txt | 1379 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 1505 insertions(+) create mode 100644 Days/Day5.cs create mode 100644 Inputs/Day5.txt diff --git a/AdventOfCode.csproj b/AdventOfCode.csproj index 17d5e9e..590a043 100644 --- a/AdventOfCode.csproj +++ b/AdventOfCode.csproj @@ -18,4 +18,8 @@ + + + + diff --git a/Days/Day5.cs b/Days/Day5.cs new file mode 100644 index 0000000..4ca9c16 --- /dev/null +++ b/Days/Day5.cs @@ -0,0 +1,122 @@ +using Spectre.Console; + +namespace AdventOfCode.Days; + +public class Day5 : Day +{ + public override int Number => 5; + public override string Name => "Print Queue"; + + public override void RunPart1(bool display = true) + { + var result = 0; + + var precedences = new HashSet?[100]; + + var readingPrecedences = true; + foreach (var line in Input.ReadAllLines()) + { + if (string.IsNullOrWhiteSpace(line)) + { + readingPrecedences = false; + + continue; + } + + var span = line.AsSpan(); + if (readingPrecedences) + { + var split = span.Split('|'); + split.MoveNext(); + + var ruleTarget = int.Parse(span[split.Current]); + + split.MoveNext(); + + var ruleNumber = int.Parse(span[split.Current]); + + if (precedences[ruleTarget] is not { } precedenceSet) + { + precedenceSet = [ ruleNumber ]; + precedences[ruleTarget] = precedenceSet; + } + else + { + precedenceSet.Add(ruleNumber); + } + } + else + { + result += CheckLine(span); + } + } + + if (display) + { + AnsiConsole.MarkupLine($"[green]Sum of middle page numbers: [yellow]{result}[/][/]"); + } + + return; + + int CheckLine(ReadOnlySpan line) + { + Span positions = stackalloc int[100]; + + // Read line to get positions + var position = 1; + foreach (var range in line.Split(',')) + { + var number = int.Parse(line[range]); + + positions[number] = position; + + position++; + } + + 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) + { + // if (display) + // { + // AnsiConsole.MarkupLine($"[green]Number of safe reports: [yellow]{xmasCount}[/][/]"); + // } + } +} \ No newline at end of file diff --git a/Inputs/Day5.txt b/Inputs/Day5.txt new file mode 100644 index 0000000..53df5e5 --- /dev/null +++ b/Inputs/Day5.txt @@ -0,0 +1,1379 @@ +91|88 +92|39 +92|57 +32|64 +32|59 +32|77 +79|66 +79|42 +79|89 +79|37 +74|32 +74|92 +74|83 +74|66 +74|41 +39|91 +39|81 +39|11 +39|71 +39|72 +39|78 +89|92 +89|35 +89|44 +89|19 +89|57 +89|42 +89|17 +78|96 +78|64 +78|44 +78|47 +78|38 +78|83 +78|63 +78|43 +28|94 +28|39 +28|89 +28|19 +28|92 +28|41 +28|35 +28|66 +28|37 +61|81 +61|96 +61|44 +61|71 +61|19 +61|63 +61|57 +61|59 +61|91 +61|77 +33|37 +33|93 +33|27 +33|79 +33|29 +33|41 +33|34 +33|97 +33|28 +33|26 +33|61 +67|78 +67|72 +67|41 +67|37 +67|17 +67|97 +67|57 +67|39 +67|42 +67|19 +67|92 +67|96 +77|27 +77|29 +77|88 +77|81 +77|11 +77|38 +77|57 +77|64 +77|63 +77|47 +77|95 +77|34 +77|28 +98|81 +98|44 +98|94 +98|54 +98|72 +98|47 +98|61 +98|71 +98|57 +98|53 +98|17 +98|11 +98|93 +98|96 +97|96 +97|19 +97|94 +97|17 +97|44 +97|64 +97|77 +97|39 +97|55 +97|37 +97|72 +97|61 +97|98 +97|92 +97|71 +42|39 +42|96 +42|64 +42|98 +42|32 +42|57 +42|35 +42|26 +42|44 +42|11 +42|19 +42|93 +42|37 +42|63 +42|94 +42|53 +19|74 +19|34 +19|79 +19|64 +19|18 +19|43 +19|11 +19|63 +19|91 +19|47 +19|83 +19|88 +19|59 +19|38 +19|81 +19|96 +19|95 +55|44 +55|71 +55|72 +55|39 +55|96 +55|98 +55|93 +55|63 +55|32 +55|61 +55|94 +55|54 +55|35 +55|26 +55|57 +55|17 +55|78 +55|81 +64|38 +64|43 +64|81 +64|67 +64|63 +64|83 +64|27 +64|29 +64|56 +64|53 +64|95 +64|33 +64|59 +64|28 +64|79 +64|66 +64|47 +64|88 +64|11 +43|26 +43|89 +43|34 +43|66 +43|97 +43|56 +43|83 +43|18 +43|32 +43|42 +43|88 +43|28 +43|27 +43|41 +43|92 +43|79 +43|37 +43|67 +43|55 +43|95 +44|74 +44|64 +44|28 +44|63 +44|53 +44|57 +44|95 +44|59 +44|29 +44|43 +44|77 +44|54 +44|83 +44|81 +44|18 +44|33 +44|79 +44|11 +44|56 +44|88 +44|47 +59|89 +59|97 +59|34 +59|27 +59|37 +59|28 +59|74 +59|88 +59|42 +59|83 +59|55 +59|29 +59|67 +59|43 +59|56 +59|33 +59|41 +59|92 +59|66 +59|26 +59|18 +59|98 +83|37 +83|29 +83|55 +83|35 +83|97 +83|56 +83|88 +83|33 +83|92 +83|28 +83|66 +83|79 +83|42 +83|89 +83|41 +83|61 +83|67 +83|32 +83|17 +83|39 +83|98 +83|26 +83|27 +37|47 +37|63 +37|93 +37|64 +37|98 +37|81 +37|11 +37|57 +37|26 +37|96 +37|32 +37|54 +37|35 +37|77 +37|71 +37|19 +37|53 +37|44 +37|94 +37|72 +37|78 +37|17 +37|39 +37|61 +57|64 +57|38 +57|29 +57|83 +57|59 +57|18 +57|79 +57|33 +57|81 +57|54 +57|27 +57|53 +57|34 +57|91 +57|66 +57|47 +57|88 +57|74 +57|28 +57|95 +57|63 +57|43 +57|11 +57|56 +53|33 +53|74 +53|18 +53|67 +53|56 +53|89 +53|43 +53|95 +53|88 +53|66 +53|63 +53|54 +53|59 +53|27 +53|34 +53|83 +53|11 +53|91 +53|47 +53|38 +53|28 +53|29 +53|81 +53|79 +54|28 +54|33 +54|43 +54|38 +54|97 +54|27 +54|89 +54|67 +54|88 +54|74 +54|42 +54|29 +54|59 +54|34 +54|18 +54|91 +54|81 +54|95 +54|79 +54|56 +54|66 +54|41 +54|83 +54|47 +63|56 +63|28 +63|67 +63|34 +63|95 +63|79 +63|33 +63|83 +63|27 +63|54 +63|88 +63|81 +63|66 +63|91 +63|89 +63|29 +63|43 +63|97 +63|38 +63|74 +63|59 +63|18 +63|47 +63|11 +71|19 +71|94 +71|91 +71|88 +71|59 +71|77 +71|33 +71|44 +71|18 +71|53 +71|38 +71|96 +71|57 +71|81 +71|43 +71|74 +71|72 +71|64 +71|83 +71|54 +71|63 +71|95 +71|11 +71|47 +94|81 +94|63 +94|91 +94|33 +94|96 +94|43 +94|57 +94|53 +94|29 +94|54 +94|19 +94|72 +94|95 +94|64 +94|11 +94|18 +94|59 +94|47 +94|88 +94|83 +94|74 +94|44 +94|38 +94|77 +47|74 +47|56 +47|29 +47|28 +47|67 +47|95 +47|91 +47|97 +47|92 +47|18 +47|59 +47|55 +47|41 +47|38 +47|42 +47|79 +47|27 +47|89 +47|43 +47|88 +47|34 +47|33 +47|83 +47|66 +93|78 +93|96 +93|38 +93|43 +93|11 +93|64 +93|72 +93|44 +93|77 +93|19 +93|59 +93|95 +93|94 +93|53 +93|71 +93|83 +93|47 +93|18 +93|91 +93|54 +93|74 +93|81 +93|57 +93|63 +26|61 +26|32 +26|19 +26|72 +26|78 +26|39 +26|54 +26|93 +26|53 +26|71 +26|38 +26|91 +26|81 +26|94 +26|44 +26|77 +26|57 +26|35 +26|17 +26|11 +26|64 +26|96 +26|63 +26|47 +56|71 +56|67 +56|93 +56|32 +56|42 +56|39 +56|55 +56|97 +56|27 +56|28 +56|61 +56|41 +56|89 +56|17 +56|19 +56|35 +56|26 +56|66 +56|37 +56|92 +56|72 +56|98 +56|78 +56|94 +34|39 +34|66 +34|98 +34|89 +34|78 +34|37 +34|94 +34|17 +34|67 +34|92 +34|71 +34|35 +34|32 +34|27 +34|93 +34|26 +34|42 +34|97 +34|61 +34|56 +34|28 +34|41 +34|55 +34|79 +18|88 +18|32 +18|83 +18|34 +18|27 +18|79 +18|67 +18|74 +18|28 +18|26 +18|33 +18|37 +18|41 +18|42 +18|98 +18|92 +18|97 +18|39 +18|29 +18|89 +18|66 +18|95 +18|56 +18|55 +95|41 +95|26 +95|56 +95|79 +95|92 +95|28 +95|39 +95|88 +95|97 +95|42 +95|89 +95|27 +95|34 +95|83 +95|35 +95|37 +95|55 +95|67 +95|74 +95|66 +95|32 +95|98 +95|29 +95|33 +66|67 +66|17 +66|94 +66|42 +66|61 +66|93 +66|97 +66|19 +66|71 +66|32 +66|98 +66|37 +66|96 +66|35 +66|89 +66|72 +66|77 +66|39 +66|44 +66|92 +66|41 +66|26 +66|55 +66|78 +38|74 +38|88 +38|92 +38|59 +38|34 +38|79 +38|29 +38|89 +38|42 +38|33 +38|95 +38|41 +38|66 +38|97 +38|18 +38|91 +38|56 +38|37 +38|28 +38|43 +38|83 +38|67 +38|55 +38|27 +72|11 +72|83 +72|59 +72|96 +72|53 +72|57 +72|34 +72|81 +72|77 +72|47 +72|33 +72|88 +72|38 +72|63 +72|19 +72|95 +72|64 +72|91 +72|54 +72|29 +72|74 +72|18 +72|44 +72|43 +81|41 +81|88 +81|66 +81|74 +81|95 +81|43 +81|18 +81|56 +81|38 +81|91 +81|27 +81|59 +81|42 +81|28 +81|33 +81|92 +81|34 +81|47 +81|79 +81|67 +81|83 +81|97 +81|89 +81|29 +88|93 +88|55 +88|32 +88|97 +88|27 +88|41 +88|61 +88|66 +88|28 +88|34 +88|26 +88|79 +88|33 +88|29 +88|39 +88|98 +88|89 +88|17 +88|37 +88|42 +88|35 +88|56 +88|67 +88|92 +17|94 +17|96 +17|93 +17|38 +17|81 +17|44 +17|53 +17|54 +17|59 +17|47 +17|63 +17|78 +17|95 +17|72 +17|43 +17|57 +17|18 +17|64 +17|61 +17|91 +17|71 +17|77 +17|19 +17|11 +27|41 +27|55 +27|92 +27|39 +27|42 +27|93 +27|72 +27|89 +27|66 +27|97 +27|67 +27|35 +27|37 +27|98 +27|71 +27|17 +27|78 +27|26 +27|96 +27|94 +27|19 +27|44 +27|61 +27|32 +35|81 +35|71 +35|11 +35|17 +35|57 +35|19 +35|77 +35|72 +35|59 +35|91 +35|54 +35|44 +35|78 +35|18 +35|64 +35|47 +35|53 +35|94 +35|61 +35|96 +35|38 +35|43 +35|93 +35|63 +29|32 +29|42 +29|28 +29|78 +29|67 +29|61 +29|17 +29|27 +29|35 +29|92 +29|26 +29|79 +29|66 +29|34 +29|55 +29|71 +29|37 +29|56 +29|93 +29|97 +29|39 +29|89 +29|41 +29|98 +96|53 +96|79 +96|56 +96|44 +96|91 +96|57 +96|83 +96|64 +96|54 +96|33 +96|47 +96|34 +96|18 +96|59 +96|95 +96|81 +96|43 +96|77 +96|88 +96|11 +96|74 +96|29 +96|63 +96|38 +11|28 +11|47 +11|67 +11|41 +11|34 +11|89 +11|97 +11|56 +11|95 +11|88 +11|38 +11|79 +11|81 +11|27 +11|91 +11|74 +11|33 +11|18 +11|29 +11|54 +11|66 +11|83 +11|43 +11|59 +41|17 +41|39 +41|53 +41|94 +41|61 +41|44 +41|98 +41|32 +41|92 +41|78 +41|63 +41|77 +41|57 +41|42 +41|71 +41|96 +41|35 +41|64 +41|37 +41|72 +41|19 +41|26 +41|93 +41|55 +91|59 +91|66 +91|92 +91|79 +91|18 +91|67 +91|97 +91|56 +91|95 +91|89 +91|28 +91|83 +91|98 +91|37 +91|27 +91|43 +91|55 +91|33 +91|29 +91|42 +91|41 +91|34 +91|74 +92|78 +92|44 +92|55 +92|26 +92|77 +92|11 +92|54 +92|19 +92|53 +92|72 +92|17 +92|32 +92|37 +92|71 +92|35 +92|94 +92|61 +92|63 +92|93 +92|96 +92|98 +92|64 +32|96 +32|94 +32|35 +32|19 +32|53 +32|11 +32|93 +32|61 +32|47 +32|57 +32|44 +32|78 +32|71 +32|54 +32|91 +32|38 +32|81 +32|63 +32|17 +32|72 +32|39 +79|94 +79|32 +79|56 +79|93 +79|92 +79|71 +79|17 +79|27 +79|39 +79|55 +79|78 +79|41 +79|97 +79|98 +79|61 +79|72 +79|67 +79|26 +79|35 +79|28 +74|55 +74|67 +74|56 +74|26 +74|98 +74|37 +74|17 +74|79 +74|33 +74|28 +74|97 +74|89 +74|88 +74|42 +74|27 +74|29 +74|34 +74|35 +74|39 +39|47 +39|64 +39|35 +39|63 +39|54 +39|96 +39|38 +39|19 +39|44 +39|77 +39|59 +39|94 +39|53 +39|17 +39|61 +39|43 +39|93 +39|57 +89|97 +89|77 +89|72 +89|94 +89|39 +89|78 +89|93 +89|26 +89|37 +89|98 +89|71 +89|96 +89|41 +89|61 +89|55 +89|64 +89|32 +78|74 +78|19 +78|18 +78|95 +78|94 +78|91 +78|72 +78|59 +78|53 +78|88 +78|54 +78|77 +78|11 +78|57 +78|71 +78|81 +28|17 +28|71 +28|97 +28|27 +28|93 +28|78 +28|98 +28|72 +28|67 +28|96 +28|55 +28|26 +28|42 +28|32 +28|61 +61|93 +61|74 +61|11 +61|43 +61|18 +61|94 +61|64 +61|38 +61|47 +61|78 +61|72 +61|95 +61|54 +61|53 +33|32 +33|78 +33|92 +33|55 +33|66 +33|39 +33|35 +33|89 +33|17 +33|42 +33|67 +33|56 +33|98 +67|93 +67|61 +67|98 +67|55 +67|44 +67|77 +67|26 +67|71 +67|94 +67|32 +67|89 +67|35 +77|43 +77|33 +77|54 +77|79 +77|83 +77|56 +77|18 +77|53 +77|74 +77|91 +77|59 +98|38 +98|35 +98|63 +98|77 +98|39 +98|19 +98|26 +98|64 +98|32 +98|78 +97|57 +97|78 +97|53 +97|26 +97|35 +97|93 +97|42 +97|41 +97|32 +42|55 +42|17 +42|78 +42|77 +42|92 +42|71 +42|72 +42|61 +19|29 +19|33 +19|57 +19|53 +19|54 +19|44 +19|77 +55|19 +55|11 +55|77 +55|37 +55|64 +55|53 +64|34 +64|18 +64|91 +64|74 +64|54 +43|74 +43|33 +43|29 +43|98 +44|34 +44|38 +44|91 +59|79 +59|95 +83|34 + +33,27,67,97,92,32,93 +26,11,53,72,61,92,17,77,37 +63,95,74,83,33,79,56,28,89 +89,26,32,39,61,71,19 +41,26,61,19,57,64,53 +96,43,78,17,63,81,54,64,72,53,35 +81,38,59,43,18,83,88,29,79,56,27,66,67,41,42 +17,55,97,71,77,37,78,94,39,89,44,42,35,32,19 +32,33,92,39,42,37,61,98,17,66,41,79,67,35,26,29,34,89,93,55,27 +66,55,26,93,78,72,44 +92,55,37,32,35,17,61,93,71,94,19,57,64,53,11 +59,43,18,74,83,88,33,29,34,79,67,89,41,42,92,37,98 +67,98,26,35,17,93,94 +32,39,35,78,19,77,63,38,91 +96,44,77,57,63,54,81,47,43,18,88,33,29 +47,54,63,83,43,88,96,94,81,33,57 +26,32,27,17,94,41,66 +95,74,83,34,79,56,28,27,66,97,41,42,55,37,98,32,39 +26,32,93,78,96,44,63,47,38 +95,74,83,88,33,29,34,79,56,28,27,66,67,89,97,41,42,92,55,37,26,32,39 +77,28,91,38,11,64,34 +96,91,47,74,53,43,34,38,81,54,44,77,95,19,64 +83,18,89,43,28,95,34,41,97,79,98,27,67,92,37,66,74,42,29,56,88,55,26 +39,61,35,96,17,92,66,32,72,67,89,71,97,78,42,93,98,26,94,41,37 +19,77,97,78,37,64,98,92,96,61,17,71,72,26,93,94,55,57,39 +81,47,38,91,59,43,18,95,74,83,88,33,29,34,56,28,27,66,67,89,97,41,42 +64,53,63,81,43,18,95,74,29,34,66 +71,42,98,17,37,97,96,55,89,39,78,35,66,19,44,92,94,32,72,41,93,26,61 +79,34,37,28,66,97,32,26,42,71,92,55,39 +57,11,81,47,38,91,59,43,18,83,88,34,79,28,27 +56,34,35,66,28,32,55,42,98,97,92,17,37,41,29,39,79,88,26,61,27 +53,27,63,95,29,38,67 +29,34,56,66,67,97,41,55,37,98,26,32,61 +61,64,53,71,37,19,39,72,42,78,26,57,92 +33,29,79,41,39,35,17,61,93 +35,74,83,55,89,41,66,32,79,56,88,92,27,34,29,97,33 +35,44,77,53,63,17,11,71,43 +28,27,66,67,97,55,37,32,39,35,17,61,78,94,19 +33,29,56,28,66,67,89,97,41,42,92,55,98,26,32,39,35,17,93 +98,32,39,78,71,19,96,57,53,63,11,81,47 +55,37,32,17,78,71,72,19,63 +71,97,17,92,67,93,27,56,78,41,61,79,28,42,34,39,66,37,35,26,98,89,32 +55,92,56,67,29,38,33 +35,17,61,93,78,71,94,72,19,96,44,77,64,53,11,54,81,47,38,91,43 +95,83,88,33,29,79,67,89,92,55,37,26,32 +88,33,29,79,27,66,41,42,55,37,26,32,61 +96,26,71,41,53,42,94,19,77 +32,29,79,42,39 +92,55,37,98,26,32,39,35,17,61,93,78,71,94,72,19,44,77,57,64,53,63,11 +67,97,42,55,98,26,32,39,35,61,93,78,19,96,77 +43,88,33,29,34,79,28,27,66,89,97,41,92 +72,98,67,89,92,77,26 +54,91,59,74,88,34,28 +88,77,19,95,53 +39,61,93,78,71,94,19,96,44,77,57,64,53,63,11,54,81,47,91 +19,44,77,57,64,11,81,38,91,43,88,33,34 +74,42,29,59,34,41,97,66,38,83,56,89,79,28,18 +53,63,11,54,47,38,59,43,18,95,74,29,34,79,27 +37,98,32,35,17,93,71,19,44,53,63,11,81 +38,91,59,43,18,95,74,83,88,33,34,79,56,28,27,66,67,89,97,41,42,92,55 +77,57,64,53,63,11,81,38,91,59,43,18,74,83,88,29,34,56,28 +54,81,47,59,43,95,74,83,88,33,29,34,79,67,89,97,41 +93,19,44,57,64,53,63,47,38,91,18,95,74 +59,43,18,74,83,88,33,79,56,28,27,66,67,89,97,41,42,92,55,37,98 +97,41,78,67,71,27,92,94,61,17,26,96,93,37,98 +61,78,77,53,63,11,54,47,59,18,95 +28,27,66,67,89,97,41,92,55,37,98,32,39,35,61,93,78,71,94,72,19 +11,81,59,18,95,34,97 +26,35,19,77,54,47,38 +59,33,18,91,88,97,28,41,43,74,54 +81,38,43,18,95,74,83,88,29,34,79,56,28,27,66,67,89 +57,53,47,59,74,88,56,28,27 +17,61,93,78,94,72,19,96,44,77,57,64,53,11,81,47,91,43,18 +98,26,39,35,17,61,71,94,72,19,96,77,57,64,53,63,54,81,47 +38,91,59,18,29,79,27,66,89,97,41 +44,64,33,95,94,72,54 +18,74,27,89,92,98,32 +53,64,11,93,38,43,72,47,71,54,94,81,77,91,95,19,63 +57,64,81,47,38,91,95,74,33,34,27 +78,61,66,27,56 +42,55,37,98,26,32,39,17,61,93,78,94,72,19,44,77,57,64,63 +19,18,47,59,64,54,74,72,78,57,91,43,96,94,95,77,71,53,11,38,81 +53,54,47,83,34,56,67 +29,95,74,54,38,88,83,27,59,28,91,33,66,43,11,53,34,56,64 +26,28,71,97,92,32,56,67,61,72,89,55,39,27,98,17,35,37,93,78,66,41,42 +42,55,37,98,26,32,39,35,17,61,93,71,94,72,19,77,64,53,63 +39,93,94,72,44,64,47,91,59 +72,19,96,57,64,11,54,81,38,91,18,83,88,33,29 +33,29,34,79,56,28,27,67,89,97,41,92,37,98,26,32,17,61,93 +64,53,63,54,81,47,38,91,43,18,74,83,33,29,79,56,28 +47,34,81,56,88,91,57,29,77,28,74 +56,92,37,93,78,71,72 +96,32,72,57,93,71,19,81,37 +91,43,18,95,74,88,29,34,56,28,27,67,89,97,41,42,92,55,37 +38,43,18,95,33,29,34,79,56,28,27,66,97,42,55 +72,19,96,57,53,11,81,38,91,59,43,95,74,88,29 +79,56,28,27,67,89,97,41,92,37,98,39,17,93,94 +19,39,97,72,35,92,93,17,37,64,61,41,94 +54,81,47,38,91,59,43,18,95,74,83,88,33,29,34,79,66,67,89,97,41 +81,47,38,95,74,83,88,33,29,34,79,56,28,66,67,89,97,41,42 +53,71,95,38,59,83,77,78,47 +44,83,63,74,29,19,47,72,88,54,81,53,43,96,95,59,33,11,57 +77,64,11,54,47,91,43,95,74,83,33 +64,61,35,63,98,72,55,44,57 +67,18,88,98,55,41,97 +91,59,43,18,95,74,83,88,33,29,34,79,56,28,27,66,67,89,97,41,42,55,37 +32,35,17,61,19 +83,33,29,28,27,67,37,98,17 +74,89,28,27,83,92,79,59,41,56,95,18,38,34,97,42,29,67,47,33,91 +95,74,83,88,33,29,79,28,27,66,67,89,97,41,42,92,55,37,26,32,39 +47,26,19,11,57,61,81,94,78,39,72,38,77,63,17,53,64 +33,11,34,19,44,77,83 +81,38,91,59,18,95,83,88,33,29,34,79,56,28,27,66,67,89,97 +55,98,39,35,17,93,78,94,19,77,64,53,63,11,54 +28,17,35,32,42,97,71 +19,94,61,96,67,41,44,97,42,26,71,72,39,37,35 +63,83,38,77,59,53,57,28,18,64,56 +77,64,53,63,54,81,38,91,59,95,74,83,88,33,34,56,28 +28,66,89,97,92,37,98,39,35,17,93,71,19 +39,32,29,95,33,37,28,27,26,66,89 +94,72,44,77,57,64,53,11,38,59,43,18,74,83,33 +57,64,63,11,81,38,91,59,43,18,95,74,83,88,33,29,34,79,56,28,27 +55,98,26,35,17,61,93,71,94,19,44,77,57,64,53,63,54 +61,72,63,53,64,71,96,44,38,93,57,94,17,26,19,54,47 +96,44,53,81,59,43,95 +33,11,77,81,96,47,38,91,43,83,57,44,29,54,63,19,88,53,18,59,74,64,72 +47,95,83,66,89 +37,98,26,32,39,61,93,78,71,94,72,19,96,44,77,57,64,63,11,54,81 +63,18,95,79,33,81,44,77,88,59,29,74,47,11,34,56,43,53,57 +29,95,33,59,64,18,81,53,28,43,63,34,56,74,91,54,57,11,47,83,27,79,38 +91,43,95,88,56,66,67,89,97,92,55 +35,61,93,71,94,72,19,96,57,64,53,63,81,47,91,59,43 +28,66,55,98,26,39,17,61,78,71,94 +74,28,81,97,47,59,88,38,67,18,34,54,11,79,95,89,91 +78,97,55,19,37,27,93,39,94,98,32,35,42,28,89,92,72 +71,94,72,96,44,77,57,64,53,63,11,91,59,18,95,83,88 +95,74,33,34,79,28,89,41,39 +71,94,96,57,63 +28,18,92,29,26,67,97,32,74,27,89 +56,27,66,67,89,97,42,92,55,37,26,32,35,17,61,93,78,94,72 +47,95,96,54,63,77,29,88,18,91,74,83,81,57,59,38,64,34,44,33,79 +53,63,11,54,81,47,38,91,59,43,18,88,79,56,28,66,67 +44,77,53,63,11,81,47,38,91,59,43,18,95,74,83,88,33,29,34,79,56 +63,11,81,18,74,28,89 +34,56,66,89,42,92,17,61,71 +79,74,43,38,27,55,29 +96,78,11,81,83,77,71 +57,77,11,44,38,34,53,88,47,91,56 +74,29,34,79,56,28,66,67,89,41,42,92,55,37,98,26,32,39,35 +63,47,81,17,53,72,94,39,35,64,77,61,93,78,11,98,57 +96,44,77,57,64,53,63,11,54,81,38,91,59,43,18,95,74,83,88,33,29,34,79 +67,89,97,41,42,92,55,37,98,26,32,39,35,17,61,93,71,94,72,19,96,44,77 +19,44,77,53,81,47,38,91,43,18,95,74,83,88,29 +94,96,93,63,57,81,95,78,44,53,11,77,71,54,43,64,19,91,59,47,74,72,38 +56,28,27,97,41,42,37,26,32,39,35,17,61,93,78 +17,93,78,94,72,53,11,43,18 +29,54,18,59,63,34,38,74,83,28,57,95,77,79,81,47,91 +66,92,55,26,17,72,44 +28,61,92,97,56,29,67,27,78,98,55,26,42,79,17,41,39,89,34 +95,74,83,33,29,34,79,56,67,89,41,42,92,55,98,32,39 +67,89,92,55,98,32,17,78,71 +71,72,44,77,63,54,47,38,59,43,18,74,88 +35,17,61,93,78,71,94,72,96,44,77,57,64,53,63,11,54,81,47,38,91,59,43 +17,71,19,44,77 +18,64,47,59,72,93,94,95,57,54,38,81,91,44,63,53,78,61,71,43,11 +83,56,98,95,55,28,97,59,34,27,18,79,43,74,37 +78,57,44,61,39,59,38,63,17,81,72 +64,18,95,74,88,34,66 +66,67,37,98,61 +64,47,38,91,59,43,74,88,34,28,66 +71,94,72,19,96,44,77,53,63,54,47,38,59,43,18,95,74,83,88 +47,38,59,43,18,95,74,83,88,33,29,34,79,56,28,27,66,67,89,97,41,42,92 +97,41,92,26,61,93,71,94,19,44,64 +41,55,53,61,44,42,39,77,37,98,72,92,94 +19,59,74,78,47,71,94,95,38,91,53,93,64,11,57,43,44 +78,71,19,44,77,57,64,63,11,54,81,47,38,91,43,74,83 +17,66,27,88,28,35,56,33,67,32,92,89,34,37,41,26,83,29,79,42,97,98,39 +39,42,32,17,92,27,98,55,41,71,67,96,35 +26,32,35,17,61,93,78,72,19,96,44,77,57,64,53,63,11,54,81,47,38 +44,11,93,43,74,53,91,54,95,64,63,81,96 +42,18,83,88,27 +39,17,93,44,57,64,63,81,59 +89,98,17,78,19,96,57 +55,98,89,71,93,42,35,92,79,61,37,66,97,78,39,26,34 +53,63,11,54,81,47,38,91,59,43,95,74,83,88,33,29,34,79,56,28,27,66,67 +96,42,17,35,92,44,89,55,94,57,61 +79,64,96,63,54,47,83,88,18,43,74,44,59 +39,35,41,61,97,42,37 +56,28,97,42,92,37,26,17,78 +27,55,18,88,74,38,56,67,91,83,42,79,41,43,28,66,92 +42,92,26,61,93,72,19 +44,77,53,63,11,54,47,38,91,43,18,95,83,88,34 +32,39,35,17,61,93,78,71,94,72,19,96,44,77,57,53,63,11,54,81,47,38,91 +53,83,29,33,63,34,27,56,79,81,47 +44,93,89,32,61,92,94,26,66,42,55,78,96,97,17 +92,55,98,61,94,96,77,57,53,63,11 +42,88,92,89,74,27,98,28,33,41,83,18,66,79,97,43,55,59,34,37,29,56,95 +44,77,57,53,63,54,43,18,95,88,34 +41,93,26,42,39,35,97 +18,64,74,88,96,59,81,38,95,83,77 +56,28,27,67,89,97,41,42,92,55,37,98,39,35,17,61,93,78,71,94,72 +98,39,55,19,78,67,27,96,72,37,66 \ No newline at end of file