optimize day 12
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
a0b13e3276
commit
16a5eff3bd
4
Day1.cs
4
Day1.cs
|
@ -27,8 +27,8 @@ namespace aoc2019
|
||||||
return total;
|
return total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public override string Part1() => $"{masses.Select(FuelCost).Sum()}";
|
public override string Part1() => $"{masses.Sum(FuelCost)}";
|
||||||
|
|
||||||
public override string Part2() => $"{masses.Select(FullCost).Sum()}";
|
public override string Part2() => $"{masses.Sum(FullCost)}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
35
Day12.cs
35
Day12.cs
|
@ -109,40 +109,17 @@ namespace aoc2019
|
||||||
|
|
||||||
public override string Part2()
|
public override string Part2()
|
||||||
{
|
{
|
||||||
moons = startingPositions;
|
int cycleX = 0, cycleY = 0, cycleZ = 0;
|
||||||
step = 0;
|
|
||||||
var seenX = new HashSet<string>();
|
|
||||||
var seenY = new HashSet<string>();
|
|
||||||
var seenZ = new HashSet<string>();
|
|
||||||
int repX = 0, repY = 0, repZ = 0;
|
|
||||||
|
|
||||||
while (true)
|
while (cycleX == 0 || cycleY == 0 || cycleZ == 0) {
|
||||||
{
|
|
||||||
if (repX != 0 && repY != 0 && repZ != 0) break;
|
|
||||||
Step();
|
Step();
|
||||||
|
|
||||||
if (repX == 0)
|
|
||||||
{
|
|
||||||
var xcoords = moons.Select(m => (m.x, m.dx)).ToDelimitedString();
|
|
||||||
if (seenX.Contains(xcoords)) repX = step;
|
|
||||||
seenX.Add(xcoords);
|
|
||||||
}
|
|
||||||
if (repY == 0)
|
|
||||||
{
|
|
||||||
var ycoords = moons.Select(m => (m.y, m.dy)).ToDelimitedString();
|
|
||||||
if (seenY.Contains(ycoords)) repY = step;
|
|
||||||
seenY.Add(ycoords);
|
|
||||||
}
|
|
||||||
if (repZ == 0)
|
|
||||||
{
|
|
||||||
var zcoords = moons.Select(m => (m.z, m.dz)).ToDelimitedString();
|
|
||||||
if (seenZ.Contains(zcoords)) repZ = step;
|
|
||||||
seenZ.Add(zcoords);
|
|
||||||
}
|
|
||||||
step++;
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
return $"{LCM(repX, LCM(repY, repZ))}";
|
return $"{LCM(cycleX, LCM(cycleY, cycleZ))}";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue