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; }