public Moon(int x, int y, int z) { Coordinate = new Coordinate(x, y, z); InitialCoordinates.Add(new Coordinate(Coordinate.X, Coordinate.Y, Coordinate.Z)); Velocity = new Coordinate(0, 0, 0); InitialVelocities.Add(new Coordinate(Velocity.X, Velocity.Y, Velocity.Z)); }
public long IsInExample1Steps() { var checkStepsExample1 = new List <long>() { 924, 1848, 2772 }; var belongSteps = new List <BelongingSteps>(); var coords = new List <Coordinate>(); var zeroStateCoordinate = InitialCoordinates[0]; var zeroStateVelocity = InitialVelocities[0]; var zeroStateCoordinates = InitialCoordinates.Where(x => checkStepsExample1.Contains(x.CoordinateIndex)); if (zeroStateCoordinates != null && zeroStateCoordinates.Any()) { //var getAllVelocitiesByindex = zeroStateCoordinates.Select(x => x.CoordinateIndex).ToHashSet(); var velocity = InitialVelocities.Where(x => checkStepsExample1.Contains(x.CoordinateIndex)).ToList(); var coordSteps = InitialCoordinates.Where(x => checkStepsExample1.Contains(x.CoordinateIndex)).ToList(); var i = 0; foreach (var step in checkStepsExample1) { Debug.WriteLine($"{step}\t{coordSteps[i].X}-{coordSteps[i].Y}-{coordSteps[i].Z}\t{velocity[i].X}-{velocity[i].Y}-{velocity[i].Z}"); i++; } } return(2); // recurrentIndexes.Distinct().ToList(); }
internal void ApplyVelocity() { Coordinate.X += Velocity.X; Coordinate.Y += Velocity.Y; Coordinate.Z += Velocity.Z; InitialCoordinates.Add(new Coordinate(Coordinate.X, Coordinate.Y, Coordinate.Z, CoordinateIndex)); }
public long IsInZeroState() { var belongSteps = new List <BelongingSteps>(); var coords = new List <Coordinate>(); var zeroStateCoordinate = InitialCoordinates[0]; var zeroStateVelocity = InitialVelocities[0]; var zeroStateCoordinates = InitialCoordinates.Where(x => x.X == zeroStateCoordinate.X && x.Y == zeroStateCoordinate.Y && x.Z == zeroStateCoordinate.Z); if (zeroStateCoordinates != null && zeroStateCoordinates.Any()) { var getAllVelocitiesByindex = zeroStateCoordinates.Select(x => x.CoordinateIndex).ToHashSet(); var velocity = InitialVelocities.Where(x => getAllVelocitiesByindex.Contains(x.CoordinateIndex)); var belongstoVelocitites = velocity.GroupBy(x => new { x.X, x.Y, x.Z }); if (belongstoVelocitites.Any(g => g.Count() > 1)) { var allvelos = belongstoVelocitites.Where(g => g.Key.X == zeroStateVelocity.X && g.Key.Y == zeroStateVelocity.Y && zeroStateVelocity.Z == g.Key.Z).SelectMany(y => y.Select(z => z)).ToList(); coords.AddRange(allvelos); } } return(2); // recurrentIndexes.Distinct().ToList(); }
public long IsInPreviousState() { var belongSteps = new List <BelongingSteps>(); var groupedCoordinates = InitialCoordinates.GroupBy(x => new { x.X, x.Y, x.Z }); var coordinateExists = groupedCoordinates.Where(g => g.Count() > 1).ToHashSet(); var isValid = false; var recurrentIndexes = new List <long>(); var stepcount = (long)0; var dicStepCount = new Dictionary <long, int>(); if (coordinateExists.Any()) { foreach (var coordinateGroup in coordinateExists) { var alleCoorinatesToCheck = InitialCoordinates.Where(x => coordinateGroup.Key.X == x.X && coordinateGroup.Key.Y == x.Y && coordinateGroup.Key.Z == x.Z).ToHashSet(); foreach (var coord in alleCoorinatesToCheck) { var getAllVelocitiesByindex = alleCoorinatesToCheck.Select(x => x.CoordinateIndex).ToHashSet(); var velocity = InitialVelocities.Where(x => getAllVelocitiesByindex.Contains(x.CoordinateIndex)); var belongstoVelocitites = velocity.GroupBy(x => new { x.X, x.Y, x.Z }); if (!isValid && belongstoVelocitites.Any(g => g.Count() > 1)) { var allvelos = belongstoVelocitites.Where(g => g.Count() > 1).SelectMany(y => y.Select(z => z.CoordinateIndex)).ToList(); stepcount = allvelos.Skip(1).Take(1).FirstOrDefault() - allvelos.Take(1).FirstOrDefault(); belongSteps.Add(new BelongingSteps() { first = allvelos.Take(1).FirstOrDefault(), second = allvelos.Skip(1).Take(1).FirstOrDefault() }); if (!dicStepCount.TryAdd(stepcount, 1)) { dicStepCount[stepcount] += 1; } ; if (dicStepCount.Count == 3) { break; } //break; recurrentIndexes.AddRange(allvelos); } } if (dicStepCount.Count == 3) { break; } //if (stepcount != 0) break; } } foreach (var belongstep in belongSteps) { Debug.WriteLine($"{belongstep.first}\t{belongstep.second}"); } foreach (var step in dicStepCount) { Debug.WriteLine($"{step}"); } return(stepcount); // recurrentIndexes.Distinct().ToList(); }