From 36bb28af87e81a9b3cab1abd79d11106cd610f6c Mon Sep 17 00:00:00 2001 From: Ben Harris Date: Wed, 2 Dec 2020 00:36:24 -0500 Subject: update gitignore and run resharper cleanup --- Day12.cs | 123 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 65 insertions(+), 58 deletions(-) (limited to 'Day12.cs') diff --git a/Day12.cs b/Day12.cs index efb380a..b04426d 100644 --- a/Day12.cs +++ b/Day12.cs @@ -1,4 +1,3 @@ -using aoc2019.lib; using System; using System.Collections.Generic; using System.Linq; @@ -7,21 +6,20 @@ namespace aoc2019 { internal sealed class Day12 : Day { - public override int DayNumber => 12; - - private List moons; private readonly List startingPositions; + + private readonly List moons; private int step; public Day12() { moons = Input - .Select(moon => + .Select(moon => moon - .TrimStart('<') - .TrimEnd('>') - .Split(",") - .Select(val => int.Parse(val.Split("=").Last())) + .TrimStart('<') + .TrimEnd('>') + .Split(",") + .Select(val => int.Parse(val.Split("=").Last())) ) .Select(moon => new Position(moon.ToList())) .ToList(); @@ -32,56 +30,11 @@ namespace aoc2019 startingPositions = moons; } - public class Position - { - public int x, y, z; - public int dx, dy, dz; - List siblings; - - public Position(IList moon) - { - x = moon[0]; - y = moon[1]; - z = moon[2]; - dx = 0; dy = 0; dz = 0; - } - - public void SetSiblings(List positions) - { - siblings = positions.Where(p => p != this).ToList(); - } - - public override string ToString() => - $"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; - } - } - - internal void Move() - { - x += dx; - y += dy; - z += dz; - } - - internal int KineticEnergy => - Math.Abs(x) + Math.Abs(y) + Math.Abs(z); - internal int PotentialEnergy => - Math.Abs(dx) + Math.Abs(dy) + Math.Abs(dz); - internal int TotalEnergy => - KineticEnergy * PotentialEnergy; - } + public override int DayNumber => 12; public static long LCM(long a, long b) { - return (a * b) / GCD(a, b); + return a * b / GCD(a, b); } public static long GCD(long a, long b) @@ -113,7 +66,8 @@ namespace aoc2019 { int cycleX = 0, cycleY = 0, cycleZ = 0; - while (cycleX == 0 || cycleY == 0 || cycleZ == 0) { + 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; @@ -122,5 +76,58 @@ namespace aoc2019 return $"{LCM(cycleX, LCM(cycleY, cycleZ))}"; } + + public class Position + { + public int dx, dy, dz; + private List siblings; + public int x, y, z; + + public Position(IList moon) + { + x = moon[0]; + y = moon[1]; + z = moon[2]; + dx = 0; + dy = 0; + dz = 0; + } + + internal int KineticEnergy => + Math.Abs(x) + Math.Abs(y) + Math.Abs(z); + + internal int PotentialEnergy => + Math.Abs(dx) + Math.Abs(dy) + Math.Abs(dz); + + internal int TotalEnergy => + KineticEnergy * PotentialEnergy; + + public void SetSiblings(List positions) + { + siblings = positions.Where(p => p != this).ToList(); + } + + public override string ToString() + { + 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; + } + } + + internal void Move() + { + x += dx; + y += dy; + z += dz; + } + } } -} +} \ No newline at end of file -- cgit 1.4.1