Ver Fonte

Day 4 solution for part 2

Lukas Angerer há 2 anos atrás
pai
commit
e0b300b295
2 ficheiros alterados com 30 adições e 3 exclusões
  1. 24 2
      Day4/Program.cs
  2. 6 1
      Day4/ScratchCard.cs

+ 24 - 2
Day4/Program.cs

@@ -8,16 +8,38 @@ if (args.Length < 1)
 
 var inputFile = args[0];
 var parser = new ScratchParser();
+var cards = parser.Parse(inputFile).ToList();
 
 var sum = 0;
-foreach (var card in parser.Parse(inputFile))
+foreach (var card in cards)
 {
     var score = card.GetScore();
-    Console.WriteLine($"{card.Id}: {score}");
     sum += score;
 }
 
 Console.WriteLine();
 Console.WriteLine($"Total Score: {sum}");
 
+var copies = new Dictionary<int, int>();
+sum = 0;
+foreach (var item in cards.Select((c, i) => (card: c, index: i)))
+{
+    var matches = item.card.GetMatches();
+    var copyCount = copies.GetValueOrDefault(item.index, 0) + 1;
+    Console.WriteLine($"{item.index}: {matches} matches - {copyCount} copies");
+    for (var i = 1; i <= matches; i++)
+    {
+        if (!copies.ContainsKey(item.index + i))
+        {
+            copies[item.index + i] = 0;
+        }
+
+        copies[item.index + i] += copyCount;
+    }
+    sum += copyCount;
+}
+
+Console.WriteLine();
+Console.WriteLine($"Card Count: {sum}");
+
 return 0;

+ 6 - 1
Day4/ScratchCard.cs

@@ -10,10 +10,15 @@ public class ScratchCard
     {
         Id = id;
     }
+    
+    public int GetMatches()
+    {
+        return Draw.Select(draw => Winning.Contains(draw) ? 1 : 0).Sum();
+    }
 
     public int GetScore()
     {
-        var matches = Draw.Select(draw => Winning.Contains(draw) ? 1 : 0).Sum();
+        var matches = GetMatches();
         return matches > 0 ? (int)Math.Pow(2, matches - 1) : 0;
     }
 }