コード例 #1
0
        public void TestCircularOK()
        {
            MovableCircularList <int> movable = new MovableCircularList <int>()
            {
                1, 2, 3, 4
            };

            Assert.AreEqual(1, movable[movable.Count]);
        }
コード例 #2
0
        public void TestMovableSetOK()
        {
            MovableCircularList <int> m1 = new MovableCircularList <int>()
            {
                1, 2, 3, 4
            };

            m1[2] = 5;
            Assert.AreEqual(5, m1[2]);
        }
コード例 #3
0
        public Knot(List <int> code)
        {
            GaussCode = new MovableCircularList <int>(code);

            if (!IsGaussCodeCorrect())
            {
                throw new ArgumentException("Gauss Code is not valid");
            }

            RemapGaussCode();
            this.IsSolved = false;
        }
コード例 #4
0
        public void TestMovable2OK()
        {
            MovableCircularList <int> movable = new MovableCircularList <int>()
            {
                1, 2, 3, 4
            };

            movable.Move(0, 6);
            Assert.AreEqual(2, movable[0]);
            Assert.AreEqual(3, movable[1]);
            Assert.AreEqual(1, movable[2]);
            Assert.AreEqual(4, movable[3]);
        }
コード例 #5
0
        private void RemapGaussCode()
        {
            //remap gauss code to keep consistency with names
            MovableCircularList <int> kGauss = new MovableCircularList <int>(GaussCode);
            int        indexCross            = 1;
            List <int> avoidPosition         = new List <int>();

            for (int i = 0; i < kGauss.Count; i++)
            {
                if (!avoidPosition.Contains(i))
                {
                    int index = GaussCode.IndexOf(-GaussCode[i]);
                    int sign  = GaussCode[i] < 0 ? -1 : 1;
                    kGauss[i]     = sign * indexCross;
                    kGauss[index] = -kGauss[i];
                    avoidPosition.Add(index);
                    avoidPosition.Add(i);
                    indexCross++;
                }
            }
            GaussCode = kGauss;
        }
コード例 #6
0
        public void TestMovableEqualsOK()
        {
            MovableCircularList <int> m1 = new MovableCircularList <int>()
            {
                1, 2, 3, 4
            };
            MovableCircularList <int> m2 = new MovableCircularList <int>()
            {
                2, 3, 4, 1
            };
            MovableCircularList <int> m3 = new MovableCircularList <int>()
            {
                3, 4, 1, 2
            };
            MovableCircularList <int> m4 = new MovableCircularList <int>()
            {
                4, 1, 2, 3
            };

            Assert.AreEqual(m1, m2);
            Assert.AreEqual(m2, m3);
            Assert.AreEqual(m3, m4);
        }
コード例 #7
0
        private bool IsValidTangle(Tangle t)
        {
            MovableCircularList <int> crosses = new MovableCircularList <int>();

            foreach (int c in t.Crosses)
            {
                crosses.Add(this.GaussCode.IndexOf(c));
                crosses.Add(this.GaussCode.IndexOf(-c));
            }

            crosses.Sort();

            int leaps = 0;

            for (int i = 0; i < crosses.Count - 1; i++)
            {
                if (Tools.Mod(crosses[i] + 1, this.GaussCode.Count) != crosses[i + 1])
                {
                    leaps++;
                }
            }

            return(leaps < 2);
        }
コード例 #8
0
 public Knot()
 {
     GaussCode     = new MovableCircularList <int>();
     this.IsSolved = false;
 }