Esempio n. 1
0
        private bool MultiSwapeRecurence(int[] level, int LevelCount, MultiList <T, K> multiList)
        {
            if (++LevelCount >= level.Length)
            {
                return(false);
            }
            for (int i = 0; i < MaxRandom; i++)
            {
                int TrySwapIndex = Rand(multiList, level, LevelCount);
                level[LevelCount - 1] = TrySwapIndex;

                if (ValidNext(level, LevelCount, multiList))
                {
                    if (ValidInFirst(level, LevelCount, multiList))
                    {
                        SetDate(multiList, level, LevelCount);
                        return(true);
                    }
                    else
                    {
                        if (MultiSwapeRecurence(level, LevelCount, multiList))
                        {
                            return(true);
                        }
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
        private bool ValidIn(MultiList <T, K> multiList, int Index, int CheckIndex)
        {
            var listElement = multiList[Index];
            var ListParent  = multiList.GetParrent(CheckIndex);

            return(Validate(ListParent, listElement));
        }
Esempio n. 3
0
        private void SetDate(MultiList <T, K> multiList, int[] level, int levelCount)
        {
            K tmp = default(K), z = multiList[level[0]];

            for (int i = 0; i < levelCount - 1; i++)
            {
                tmp = multiList[level[i + 1]];
                multiList[level[i + 1]] = z;
                z = tmp;
            }
            multiList[level[0]] = tmp;
        }
Esempio n. 4
0
        public void Run(List <T> ValidationColection)
        {
            MultiList <T, K> multiList = new MultiList <T, K>(Tranform, ValidationColection);

            for (int i = 0; i < multiList.Count; i++)
            {
                if (!ValidIn(multiList, i, i))
                {
                    MultiSwape(i, multiList);
                }
            }
        }
Esempio n. 5
0
 private void MultiSwape(int First, MultiList <T, K> multiList)
 {
     int[] ArreySwap = new int[MaxSwap];
     ArreySwap[0] = First;
     for (int i = 0; i < RotAttempt; i++)
     {
         if (MultiSwapeRecurence(ArreySwap, 1, multiList))
         {
             return;
         }
     }
     throw new TimeoutException($"dont find corect state int {RotAttempt}");
 }
Esempio n. 6
0
        private static int Rand(MultiList <T, K> multiList, int[] level, int LevelCount)
        {
            HashSet <int> t = new HashSet <int>(level.Skip(1).Take(LevelCount));

            while (true)
            {
                int tmp = GraKarciana.RandCards.Random.Next(multiList.Count);
                if (!t.Contains(tmp))
                {
                    return(tmp);
                }
            }
        }
Esempio n. 7
0
 private bool ValidNext(int[] level, int LevelCount, MultiList <T, K> multiList)
 {
     return(ValidIn(multiList, level[LevelCount - 2], level[LevelCount - 1]));
 }