Ejemplo n.º 1
0
 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));
 }
Ejemplo n.º 2
0
            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();
            }
Ejemplo n.º 3
0
 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));
 }
Ejemplo n.º 4
0
            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();
            }
Ejemplo n.º 5
0
            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();
            }