about summary refs log tree commit diff
diff options
context:
space:
mode:
authorBen Harris <ben@tilde.team>2021-12-01 14:56:16 -0500
committerBen Harris <ben@tilde.team>2021-12-01 14:56:16 -0500
commitd56f59b19b137d068d2d89a7f680ff7dca4f0757 (patch)
tree61158cf2da9ca90c4e51d3d8764cac3a17b6467e
parent212278cc640901f93b4d0bd1ffdccd6c67bfbac4 (diff)
fix some warnings and switch to target-type new()
-rw-r--r--aoc2019/Day01.cs8
-rw-r--r--aoc2019/Day02.cs5
-rw-r--r--aoc2019/Day03.cs12
-rw-r--r--aoc2019/Day04.cs19
-rw-r--r--aoc2019/Day05.cs3
-rw-r--r--aoc2019/Day06.cs6
-rw-r--r--aoc2019/Day07.cs2
-rw-r--r--aoc2019/Day09.cs2
-rw-r--r--aoc2019/Day11.cs28
-rw-r--r--aoc2019/Day12.cs56
-rw-r--r--aoc2019/Day13.cs3
-rw-r--r--aoc2019/Day14.cs31
-rw-r--r--aoc2019/Day15.cs10
-rw-r--r--aoc2019/Day16.cs4
-rw-r--r--aoc2019/Day17.cs2
-rw-r--r--aoc2019/Day19.cs2
-rw-r--r--aoc2019/Day21.cs2
-rw-r--r--aoc2019/IntCodeVM.cs12
18 files changed, 94 insertions, 113 deletions
diff --git a/aoc2019/Day01.cs b/aoc2019/Day01.cs
index aa2bc8e..aee6da8 100644
--- a/aoc2019/Day01.cs
+++ b/aoc2019/Day01.cs
@@ -16,12 +16,12 @@ public sealed class Day01 : Day
 
     private static int FullCost(int cost)
     {
-        int total = 0, newcost, tmp = cost;
+        int total = 0, newCost, tmp = cost;
 
-        while ((newcost = FuelCost(tmp)) >= 0)
+        while ((newCost = FuelCost(tmp)) >= 0)
         {
-            total += newcost;
-            tmp = newcost;
+            total += newCost;
+            tmp = newCost;
         }
 
         return total;
diff --git a/aoc2019/Day02.cs b/aoc2019/Day02.cs
index 89d349e..71c7bab 100644
--- a/aoc2019/Day02.cs
+++ b/aoc2019/Day02.cs
@@ -9,7 +9,7 @@ public sealed class Day02 : Day
         input = Input.First().Split(',').Select(int.Parse);
     }
 
-    public int RunIntCode(int noun, int verb)
+    private int RunIntCode(int noun, int verb)
     {
         var v = input.ToList();
         v[1] = noun;
@@ -19,7 +19,8 @@ public sealed class Day02 : Day
             v[v[i + 3]] = v[i] switch
             {
                 1 => v[v[i + 1]] + v[v[i + 2]],
-                2 => v[v[i + 1]] * v[v[i + 2]]
+                2 => v[v[i + 1]] * v[v[i + 2]],
+                _ => throw new ArgumentOutOfRangeException(nameof(verb))
             };
 
         return v[0];
diff --git a/aoc2019/Day03.cs b/aoc2019/Day03.cs
index 91f7a57..5b61849 100644
--- a/aoc2019/Day03.cs
+++ b/aoc2019/Day03.cs
@@ -25,24 +25,24 @@ public sealed class Day03 : Day
     private static Dictionary<(int, int), int> ParseWire(string line)
     {
         var r = new Dictionary<(int, int), int>();
-        int x = 0, y = 0, c = 0, i;
+        int x = 0, y = 0, c = 0;
 
         foreach (var step in line.Split(','))
         {
-            var d = int.Parse(step[1..]);
+            int i = 0, d = int.Parse(step[1..]);
             switch (step[0])
             {
                 case 'U':
-                    for (i = 0; i < d; i++) r.TryAdd((x, ++y), c++);
+                    for (; i < d; i++) r.TryAdd((x, ++y), c++);
                     break;
                 case 'D':
-                    for (i = 0; i < d; i++) r.TryAdd((x, --y), c++);
+                    for (; i < d; i++) r.TryAdd((x, --y), c++);
                     break;
                 case 'R':
-                    for (i = 0; i < d; i++) r.TryAdd((++x, y), c++);
+                    for (; i < d; i++) r.TryAdd((++x, y), c++);
                     break;
                 case 'L':
-                    for (i = 0; i < d; i++) r.TryAdd((--x, y), c++);
+                    for (; i < d; i++) r.TryAdd((--x, y), c++);
                     break;
             }
         }
diff --git a/aoc2019/Day04.cs b/aoc2019/Day04.cs
index dcf6eb7..fcf63c3 100644
--- a/aoc2019/Day04.cs
+++ b/aoc2019/Day04.cs
@@ -2,9 +2,7 @@
 
 public sealed class Day04 : Day
 {
-    private readonly int end;
-
-    private readonly int start;
+    private readonly int start, end;
 
     public Day04() : base(4, "Secure Container")
     {
@@ -17,9 +15,8 @@ public sealed class Day04 : Day
     {
         var prev = 0;
         var hasDup = false;
-        foreach (var c in i.ToString())
+        foreach (var curr in i.ToString().Select(c => c - '0'))
         {
-            var curr = c - '0';
             if (curr < prev) return false;
             if (curr == prev) hasDup = true;
             prev = curr;
@@ -34,13 +31,9 @@ public sealed class Day04 : Day
         return IsValid(i) && s.Select(c => s.Count(j => j == c)).Any(c => c == 2);
     }
 
-    public override string Part1()
-    {
-        return $"{Enumerable.Range(start, end).Count(IsValid)}";
-    }
+    public override string Part1() =>
+        $"{Enumerable.Range(start, end).Count(IsValid)}";
 
-    public override string Part2()
-    {
-        return $"{Enumerable.Range(start, end).Count(HasOnePair)}";
-    }
+    public override string Part2() => 
+        $"{Enumerable.Range(start, end).Count(HasOnePair)}";
 }
diff --git a/aoc2019/Day05.cs b/aoc2019/Day05.cs
index b91089e..051ed8a 100644
--- a/aoc2019/Day05.cs
+++ b/aoc2019/Day05.cs
@@ -3,7 +3,6 @@
 public sealed class Day05 : Day
 {
     private readonly IEnumerable<int> tape;
-
     private int output;
 
     public Day05() : base(5, "Sunny with a Chance of Asteroids")
@@ -11,7 +10,7 @@ public sealed class Day05 : Day
         tape = Input.First().Split(',').Select(int.Parse);
     }
 
-    public void RunIntCode(List<int> v, int input)
+    private void RunIntCode(IList<int> v, int input)
     {
         var i = 0;
         while (i < v.Count && v[i] != 99)
diff --git a/aoc2019/Day06.cs b/aoc2019/Day06.cs
index 1e7e3be..9cdbde4 100644
--- a/aoc2019/Day06.cs
+++ b/aoc2019/Day06.cs
@@ -18,10 +18,8 @@ public sealed class Day06 : Day
         return res;
     }
 
-    public override string Part1()
-    {
-        return $"{input.Keys.Sum(o => GetParents(o).Count - 1)}";
-    }
+    public override string Part1() =>
+        $"{input.Keys.Sum(o => GetParents(o).Count - 1)}";
 
     public override string Part2()
     {
diff --git a/aoc2019/Day07.cs b/aoc2019/Day07.cs
index 8beedb2..20b387b 100644
--- a/aoc2019/Day07.cs
+++ b/aoc2019/Day07.cs
@@ -6,7 +6,7 @@ public sealed class Day07 : Day
 
     public Day07() : base(7, "Amplification Circuit")
     {
-        for (var i = 0; i < 5; i++) amplifiers[i] = new IntCodeVM(Input.First());
+        for (var i = 0; i < 5; i++) amplifiers[i] = new(Input.First());
     }
 
     public override string Part1()
diff --git a/aoc2019/Day09.cs b/aoc2019/Day09.cs
index 951e7eb..3799a01 100644
--- a/aoc2019/Day09.cs
+++ b/aoc2019/Day09.cs
@@ -6,7 +6,7 @@ public sealed class Day09 : Day
 
     public Day09() : base(9, "Sensor Boost")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
     }
 
     public override string Part1()
diff --git a/aoc2019/Day11.cs b/aoc2019/Day11.cs
index fe86a4c..65fed5d 100644
--- a/aoc2019/Day11.cs
+++ b/aoc2019/Day11.cs
@@ -8,7 +8,7 @@ public sealed class Day11 : Day
 
     public Day11() : base(11, "Space Police")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
     }
 
     private void Move()
@@ -34,21 +34,14 @@ public sealed class Day11 : Day
 
     private void Turn(long direction)
     {
-        switch (heading)
+        heading = heading switch
         {
-            case Direction.Up:
-                heading = direction == 0 ? Direction.Left : Direction.Right;
-                break;
-            case Direction.Down:
-                heading = direction == 0 ? Direction.Right : Direction.Left;
-                break;
-            case Direction.Left:
-                heading = direction == 0 ? Direction.Down : Direction.Up;
-                break;
-            case Direction.Right:
-                heading = direction == 0 ? Direction.Up : Direction.Down;
-                break;
-        }
+            Direction.Up    => direction == 0 ? Direction.Left : Direction.Right,
+            Direction.Down  => direction == 0 ? Direction.Right : Direction.Left,
+            Direction.Left  => direction == 0 ? Direction.Down : Direction.Up,
+            Direction.Right => direction == 0 ? Direction.Up : Direction.Down,
+            _ => heading
+        };
 
         Move();
     }
@@ -73,10 +66,7 @@ public sealed class Day11 : Day
         return map;
     }
 
-    public override string Part1()
-    {
-        return $"{PaintShip(0).Count}";
-    }
+    public override string Part1() => $"{PaintShip(0).Count}";
 
     public override string Part2()
     {
diff --git a/aoc2019/Day12.cs b/aoc2019/Day12.cs
index 79b6a11..86d1981 100644
--- a/aoc2019/Day12.cs
+++ b/aoc2019/Day12.cs
@@ -22,15 +22,17 @@ public sealed class Day12 : Day
             moon.SetSiblings(moons);
     }
 
-    public static long LCM(long a, long b)
-    {
-        return a * b / GCD(a, b);
-    }
+    private static long Lcm(long a, long b) => a * b / Gcd(a, b);
 
-    public static long GCD(long a, long b)
+    private static long Gcd(long a, long b)
     {
-        if (b == 0) return a;
-        return GCD(b, a % b);
+        while (true)
+        {
+            if (b == 0) return a;
+            var a1 = a;
+            a = b;
+            b = a1 % b;
+        }
     }
 
     private void Step()
@@ -59,65 +61,65 @@ public sealed class Day12 : Day
         while (cycleX == 0 || cycleY == 0 || cycleZ == 0)
         {
             Step();
-            if (cycleX == 0 && moons.All(m => m.dx == 0)) cycleX = step * 2;
-            if (cycleY == 0 && moons.All(m => m.dy == 0)) cycleY = step * 2;
-            if (cycleZ == 0 && moons.All(m => m.dz == 0)) cycleZ = step * 2;
+            if (cycleX == 0 && moons.All(m => m.Dx == 0)) cycleX = step * 2;
+            if (cycleY == 0 && moons.All(m => m.Dy == 0)) cycleY = step * 2;
+            if (cycleZ == 0 && moons.All(m => m.Dz == 0)) cycleZ = step * 2;
         }
 
-        return $"{LCM(cycleX, LCM(cycleY, cycleZ))}";
+        return $"{Lcm(cycleX, Lcm(cycleY, cycleZ))}";
     }
 
     public class Position
     {
-        public int dx, dy, dz;
+        public int Dx, Dy, Dz;
         private List<Position> siblings;
-        public int x, y, z;
+        private int x, y, z;
 
         public Position(IList<int> moon)
         {
             x = moon[0];
             y = moon[1];
             z = moon[2];
-            dx = 0;
-            dy = 0;
-            dz = 0;
+            Dx = 0;
+            Dy = 0;
+            Dz = 0;
             siblings = new();
         }
 
-        internal int KineticEnergy =>
+        private int KineticEnergy =>
             Math.Abs(x) + Math.Abs(y) + Math.Abs(z);
 
-        internal int PotentialEnergy =>
-            Math.Abs(dx) + Math.Abs(dy) + Math.Abs(dz);
+        private int PotentialEnergy =>
+            Math.Abs(Dx) + Math.Abs(Dy) + Math.Abs(Dz);
 
         internal int TotalEnergy =>
             KineticEnergy * PotentialEnergy;
 
-        public void SetSiblings(List<Position> positions)
+        public void SetSiblings(IEnumerable<Position> positions)
         {
             siblings = positions.Where(p => p != this).ToList();
         }
 
         public override string ToString()
         {
-            return $"pos=<x={x}, y={y}, z={z}> vel=<x={dx}, y={dy}, z={dz}>";
+            return $"pos=<x={x}, y={y}, z={z}> vel=<x={Dx}, y={Dy}, z={Dz}>";
         }
 
         internal void Gravitate()
         {
             foreach (var m in siblings)
             {
-                if (x != m.x) dx += x > m.x ? -1 : 1;
-                if (y != m.y) dy += y > m.y ? -1 : 1;
-                if (z != m.z) dz += z > m.z ? -1 : 1;
+                if (x != m.x) Dx += x > m.x ? -1 : 1;
+                if (y != m.y) Dy += y > m.y ? -1 : 1;
+                if (z != m.z) Dz += z > m.z ? -1 : 1;
             }
         }
 
         internal void Move()
         {
-            x += dx;
-            y += dy;
-            z += dz;
+            x += Dx;
+            y += Dy;
+            z += Dz;
         }
     }
 }
diff --git a/aoc2019/Day13.cs b/aoc2019/Day13.cs
index 35e2dd7..dd6f8c6 100644
--- a/aoc2019/Day13.cs
+++ b/aoc2019/Day13.cs
@@ -3,12 +3,11 @@ namespace aoc2019;
 public sealed class Day13 : Day
 {
     private readonly Dictionary<(int x, int y), int> board;
-
     private readonly IntCodeVM vm;
 
     public Day13() : base(13, "Care Package")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
         board = new Dictionary<(int, int), int>();
     }
 
diff --git a/aoc2019/Day14.cs b/aoc2019/Day14.cs
index 9a34702..f6b5077 100644
--- a/aoc2019/Day14.cs
+++ b/aoc2019/Day14.cs
@@ -10,7 +10,7 @@ public sealed class Day14 : Day
     {
         reactions = Input
             .Select(Reaction.Parse)
-            .ToDictionary(r => r.product.Name);
+            .ToDictionary(r => r.Product.Name);
         
         available = new();
     }
@@ -36,19 +36,18 @@ public sealed class Day14 : Day
             return false;
 
         var reaction = reactions[chem];
-        var reactionCount = (long)Math.Ceiling((double)quantity / reaction.product.Quantity);
+        var reactionCount = (long)Math.Ceiling((double)quantity / reaction.Product.Quantity);
 
-        foreach (var reactant in reaction.reactants)
-            if (!Consume(reactant.Name, reactionCount * reactant.Quantity))
-                return false;
+        if (reaction.Reactants.Any(reactant => !Consume(reactant.Name, reactionCount * reactant.Quantity)))
+            return false;
 
-        available[chem] = available.GetValueOrDefault(chem) + reactionCount * reaction.product.Quantity;
+        available[chem] = available.GetValueOrDefault(chem) + reactionCount * reaction.Product.Quantity;
         return true;
     }
 
     public override string Part1()
     {
-        available = new Dictionary<string, long> { { "ORE", long.MaxValue } };
+        available = new() { { "ORE", long.MaxValue } };
         Consume("FUEL", 1);
         return $"{long.MaxValue - available["ORE"]}";
     }
@@ -56,7 +55,7 @@ public sealed class Day14 : Day
     public override string Part2()
     {
         const long capacity = 1_000_000_000_000;
-        available = new Dictionary<string, long> { { "ORE", capacity } };
+        available = new() { { "ORE", capacity } };
         Consume("FUEL", 1);
 
         var oreConsumed = capacity - available["ORE"];
@@ -69,26 +68,26 @@ public sealed class Day14 : Day
 
     private struct Component
     {
-        public string Name { get; set; }
-        public int Quantity { get; set; }
+        public string Name { get; init; }
+        public int Quantity { get; init; }
     }
 
     private class Reaction
     {
-        public readonly Component product;
-        public readonly Component[] reactants;
+        public readonly Component Product;
+        public readonly Component[] Reactants;
 
         private Reaction(Component[] reactants, Component product)
         {
-            this.reactants = reactants;
-            this.product = product;
+            Reactants = reactants;
+            Product = product;
         }
 
         public static Reaction Parse(string s)
         {
             var ss = s.Split(new[] { ", ", " => " }, StringSplitOptions.None);
 
-            return new Reaction(
+            return new(
                 ss.Take(ss.Length - 1).Select(ParseComponent).ToArray(),
                 ParseComponent(ss[^1])
             );
@@ -96,7 +95,7 @@ public sealed class Day14 : Day
             static Component ParseComponent(string s)
             {
                 var spl = s.Split(' ', 2);
-                return new Component
+                return new()
                 {
                     Quantity = int.Parse(spl[0]),
                     Name = spl[1]
diff --git a/aoc2019/Day15.cs b/aoc2019/Day15.cs
index f68533d..b4ec7c2 100644
--- a/aoc2019/Day15.cs
+++ b/aoc2019/Day15.cs
@@ -7,7 +7,7 @@ public sealed class Day15 : Day
 
     public Day15() : base(15, "Oxygen System")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
     }
 
     public override string Part1()
@@ -30,13 +30,13 @@ public sealed class Day15 : Day
                             _ = new Location(x, y, Location.Opposites[direction], Location.Wall);
                             break;
                         case Location.Empty:
-                            currentLocation = new Location(x, y, Location.Opposites[direction]);
+                            currentLocation = new(x, y, Location.Opposites[direction]);
                             break;
                         case Location.System:
-                            currentLocation = new Location(x, y, Location.Opposites[direction], Location.System);
+                            currentLocation = new(x, y, Location.Opposites[direction], Location.System);
                             break;
                         default:
-                            throw new Exception($"Unknown IntCodeVM response: {vm.Result}");
+                            throw new($"Unknown IntCodeVM response: {vm.Result}");
                     }
                 }
             }
@@ -49,7 +49,7 @@ public sealed class Day15 : Day
                     currentLocation = vm.Result switch
                     {
                         Location.Empty or Location.System => Location.GetLocation(currentLocation.Neighbor(direction)),
-                        _ => throw new Exception($"Unknown or unexpected response for previous room: {vm.Result}")
+                        _ => throw new($"Unknown or unexpected response for previous room: {vm.Result}")
                     };
                 }
                 else
diff --git a/aoc2019/Day16.cs b/aoc2019/Day16.cs
index 1c5481e..a85b251 100644
--- a/aoc2019/Day16.cs
+++ b/aoc2019/Day16.cs
@@ -19,7 +19,7 @@ public sealed class Day16 : Day
         for (var i = 0; i < phaseCount; i++)
             CalculateSignal(i % 2 == 0 ? signal0 : signal1, i % 2 == 0 ? signal1 : signal0);
 
-        return new string(
+        return new(
             signal0.Take(8).Select(c => (char)(c + '0'))
                 .ToArray());
     }
@@ -37,7 +37,7 @@ public sealed class Day16 : Day
                 signal[i] = (signal[i + 1] + signal[i]) % 10;
         }
 
-        return new string(signal.Take(8).Select(c => (char)(c + '0')).ToArray());
+        return new(signal.Take(8).Select(c => (char)(c + '0')).ToArray());
     }
 
     private static void CalculateSignal(IReadOnlyList<int> input, IList<int> output)
diff --git a/aoc2019/Day17.cs b/aoc2019/Day17.cs
index 8d97693..c92d076 100644
--- a/aoc2019/Day17.cs
+++ b/aoc2019/Day17.cs
@@ -6,7 +6,7 @@ public sealed class Day17 : Day
 
     public Day17() : base(17, "Set and Forget")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
     }
 
     public override string Part1()
diff --git a/aoc2019/Day19.cs b/aoc2019/Day19.cs
index 2136bcb..9183371 100644
--- a/aoc2019/Day19.cs
+++ b/aoc2019/Day19.cs
@@ -7,7 +7,7 @@ public sealed class Day19 : Day
 
     public Day19() : base(19, "Tractor Beam")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
         grid = new long[50, 50];
     }
 
diff --git a/aoc2019/Day21.cs b/aoc2019/Day21.cs
index d81c114..d2ad752 100644
--- a/aoc2019/Day21.cs
+++ b/aoc2019/Day21.cs
@@ -6,7 +6,7 @@ public sealed class Day21 : Day
 
     public Day21() : base(21, "Springdroid Adventure")
     {
-        vm = new IntCodeVM(Input.First());
+        vm = new(Input.First());
     }
 
     public override string Part1()
diff --git a/aoc2019/IntCodeVM.cs b/aoc2019/IntCodeVM.cs
index 74e433d..14d85c1 100644
--- a/aoc2019/IntCodeVM.cs
+++ b/aoc2019/IntCodeVM.cs
@@ -22,8 +22,8 @@ public class IntCodeVM
         relativeBase = 0;
         program = tape.Split(',').Select(long.Parse).ToArray();
         Memory = program;
-        input = new Queue<long>();
-        Output = new Queue<long>();
+        input = new();
+        Output = new();
     }
 
     public long Result => Output.Dequeue();
@@ -76,7 +76,7 @@ public class IntCodeVM
             0 => MemGet(param),
             1 => param,
             2 => MemGet(relativeBase + param),
-            _ => throw new Exception("invalid parameter mode")
+            _ => throw new("invalid parameter mode")
         };
     }
 
@@ -88,11 +88,11 @@ public class IntCodeVM
             case 0:
                 MemSet(param, val);
                 break;
-            case 1: throw new Exception("cannot set in immediate mode");
+            case 1: throw new("cannot set in immediate mode");
             case 2:
                 MemSet(relativeBase + param, val);
                 break;
-            default: throw new Exception("invalid parameter mode");
+            default: throw new("invalid parameter mode");
         }
     }
 
@@ -148,7 +148,7 @@ public class IntCodeVM
                 case 99:
                     return HaltType.Terminate;
                 default:
-                    throw new Exception($"unknown op {op} at {i}");
+                    throw new($"unknown op {op} at {i}");
             }
         }