From d56f59b19b137d068d2d89a7f680ff7dca4f0757 Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 1 Dec 2021 14:56:16 -0500 Subject: [PATCH] fix some warnings and switch to target-type new() --- aoc2019/Day01.cs | 8 +++---- aoc2019/Day02.cs | 5 ++-- aoc2019/Day03.cs | 12 +++++----- aoc2019/Day04.cs | 19 +++++---------- aoc2019/Day05.cs | 3 +-- aoc2019/Day06.cs | 6 ++--- aoc2019/Day07.cs | 2 +- aoc2019/Day09.cs | 2 +- aoc2019/Day11.cs | 28 +++++++--------------- aoc2019/Day12.cs | 56 +++++++++++++++++++++++--------------------- aoc2019/Day13.cs | 3 +-- aoc2019/Day14.cs | 31 ++++++++++++------------ aoc2019/Day15.cs | 10 ++++---- aoc2019/Day16.cs | 4 ++-- aoc2019/Day17.cs | 2 +- aoc2019/Day19.cs | 2 +- aoc2019/Day21.cs | 2 +- aoc2019/IntCodeVM.cs | 12 +++++----- 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 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 v, int input) + private void RunIntCode(IList 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 siblings; - public int x, y, z; + private int x, y, z; public Position(IList 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 positions) + public void SetSiblings(IEnumerable positions) { siblings = positions.Where(p => p != this).ToList(); } public override string ToString() { - return $"pos= vel="; + return $"pos= vel="; } 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 { { "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 { { "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 input, IList 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(); - Output = new Queue(); + 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}"); } }