예제 #1
0
        public static void Normalize(ref Stone[,] t)
        {
            // original
            // 12
            // 34
            var mincfg = t.Copy();

            // mirror-hori
            // 21
            // 43
            t.MirrorHorizontal();
            if (t.LessThan(mincfg))
            {
                mincfg = t.Copy();
            }

            // mirror-verti
            // 43
            // 21
            t.MirrorVertical();
            if (t.LessThan(mincfg))
            {
                mincfg = t.Copy();
            }

            // mirror-hori
            // 34
            // 12
            t.MirrorHorizontal();
            if (t.LessThan(mincfg))
            {
                mincfg = t.Copy();
            }

            if (t.GetLength(0) == t.GetLength(1))
            {
                // transpose
                // 31
                // 42
                t.Transpose();
                if (t.LessThan(mincfg))
                {
                    mincfg = t.Copy();
                }

                // mirror-hori
                // 13
                // 24
                t.MirrorHorizontal();
                if (t.LessThan(mincfg))
                {
                    mincfg = t.Copy();
                }

                // mirror-verti
                // 24
                // 13
                t.MirrorVertical();
                if (t.LessThan(mincfg))
                {
                    mincfg = t.Copy();
                }

                // mirror-hori
                // 42
                // 31
                t.MirrorHorizontal();
                if (t.LessThan(mincfg))
                {
                    mincfg = t.Copy();
                }
            }

            t = mincfg;
        }