about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2021-12-06 01:00:14 -0500
committerBen Harris <ben@tilde.team>2021-12-06 01:00:14 -0500
commit08e67ecace269c07d0f40333e2d0ede51f9a6161 (patch)
tree2c27db0ef91b8db89d971e34e2f32e575ffbf246
parent93e61904ac932d63089ac6d0659aef866d2d2e98 (diff)
day 6 part 2
-rw-r--r--aoc2021.test/DayTests.cs3
-rw-r--r--aoc2021/Day06.cs44
2 files changed, 20 insertions, 27 deletions
diff --git a/aoc2021.test/DayTests.cs b/aoc2021.test/DayTests.cs
index c57eead..b5cad43 100644
--- a/aoc2021.test/DayTests.cs
+++ b/aoc2021.test/DayTests.cs
@@ -9,6 +9,7 @@ public class DayTests
     [DataRow(typeof(Day03), "3009600", "6940518")]
     [DataRow(typeof(Day04), "8580", "9576")]
     [DataRow(typeof(Day05), "7318", "19939")]
+    [DataRow(typeof(Day06), "362740", "1644874076764")]
     public void CheckAllDays(Type dayType, string part1, string part2)
     {
         var s = Stopwatch.StartNew();
@@ -44,7 +45,7 @@ public class DayTests
     [DataRow(typeof(Day03), "198", "230")]
     [DataRow(typeof(Day04), "4512", "1924")]
     [DataRow(typeof(Day05), "5", "12")]
-    [DataRow(typeof(Day06), "5934", "")]
+    [DataRow(typeof(Day06), "5934", "26984457539")]
     public void CheckTestInputs(Type dayType, string part1, string part2)
     {
         Day.UseTestInput = true;
diff --git a/aoc2021/Day06.cs b/aoc2021/Day06.cs
index 5783a44..60687c5 100644
--- a/aoc2021/Day06.cs
+++ b/aoc2021/Day06.cs
@@ -5,39 +5,31 @@
 /// </summary>
 public sealed class Day06 : Day
 {
-    private readonly List<int> _fishes;
-    public Day06() : base(6, "Lanternfish")
-    {
-        //UseTestInput = true;
-        _fishes = Input.First().Split(',').Select(int.Parse).ToList();
-    }
+    private readonly long _p1, _p2;
 
-    private static List<int> DayStep(List<int> state)
+    public Day06() : base(6, "Lanternfish")
     {
-        List<int> result = new();
+        var fishes = Input.First().Split(',').Select(long.Parse).ToList();
+        Dictionary<long, long> counts = new();
         
-        foreach (var fish in state)
+        for (var i = 0; i <= 8; i++)
+            counts[i] = fishes.Count(x => x == i);
+        
+        for (var i = 0; i < 256; i++)
         {
-            switch (fish)
-            {
-                case 0:
-                    result.Add(6);
-                    result.Add(8);
-                    break;
-                default:
-                    result.Add(fish - 1);
-                    break;
-            }
+            var breeders = counts[0];
+            for (var j = 0; j < 8; j++)
+                counts[j] = counts[j + 1];
+            counts[6] += breeders;
+            counts[8] = breeders;
+
+            if (i == 79) _p1 = counts.Values.Sum();
         }
 
-        return result;
+        _p2 = counts.Values.Sum();
     }
 
-    public override string Part1()
-    {
-        var fishes = Enumerable.Range(0, 80).Aggregate(_fishes, (current, _) => DayStep(current));
-        return $"{fishes.Count}";
-    }
+    public override string Part1() => $"{_p1}";
 
-    public override string Part2() => "";
+    public override string Part2() => $"{_p2}";
 }