Exemplo n.º 1
0
        public Squama[] Float(Squama[] dice)
        {
            int length = 7;
            var matrix = GetMatrix(dice, length);
            var deg = GetArrayFromMatrix(matrix, length);
            int first = GetFirstPoint(deg);
            var ringSquama = GetRingSquama(deg);

            if (ringSquama == null)
                return null;

            if (ringSquama.X != -1 && ringSquama.Y != -1)
            {
                SetRingSquama(matrix, ringSquama);
            }
            else if (ringSquama.X != -1 ^ ringSquama.Y != -1)
            {
                return null;
            }

            List<int> res = GetQueuePoints(first, matrix, length);

            if (ringSquama.X != -1)
            {
                RemoveRingSquama(ref res, ringSquama);
            }

            return (!ValidMatrix(matrix, length)) ? null : ToResult(res);
        }
Exemplo n.º 2
0
 private int[,] GetMatrix(Squama[] squama, int length)
 {
     var matrix = new int[length, length];
     for (int i = 0; i < squama.Length; i++)
     {
         matrix[squama[i].X, squama[i].Y] += 1;
         matrix[squama[i].Y, squama[i].X] += 1;
     }
     return matrix;
 }
Exemplo n.º 3
0
 private bool TryParseSquamas(string text, out Squama[] squamas)
 {
     squamas = null;
     var list = new List<Squama>();
     var set = text.Replace(" ", "").Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
     if (set.Length == set.Count(x => x.Length == 2))
     {
         foreach (var item in set)
         {
             int x = Convert.ToInt32(item[0].ToString());
             int y = Convert.ToInt32(item[1].ToString());
             if (x < 0 || x > 6 || y < 0 || y > 6)
             {
                 return false;
             }
             list.Add(new Squama(x, y));
         }
         squamas = list.ToArray();
         return true;
     }
     return false;
 }
Exemplo n.º 4
0
 private Squama[] ToResult(List<int> res)
 {
     var set = new Squama[res.Count - 1];
     for (int i = 0; i < res.Count - 1; i++)
     {
         set[i] = new Squama(res[i], res[i + 1]);
     }
     return set;
 }
Exemplo n.º 5
0
 private void SetRingSquama(int[,] matrix, Squama squama)
 {
     ++matrix[squama.X, squama.Y];
     ++matrix[squama.Y, squama.X];
 }
Exemplo n.º 6
0
 private void RemoveRingSquama(ref List<int> points, Squama squama)
 {
     for (int i = 0; i + 1 < points.Count; ++i)
     {
         if (points[i] == squama.X && points[i + 1] == squama.Y
             || points[i] == squama.Y && points[i + 1] == squama.X)
         {
             List<int> temp = new List<int>();
             for (int j = i + 1; j < points.Count; ++j)
                 temp.Add(points[j]);
             for (int j = 1; j <= i; ++j)
                 temp.Add(points[j]);
             points = temp;
             break;
         }
     }
 }
Exemplo n.º 7
0
 private Squama GetRingSquama(int[] array)
 {
     var squama = new Squama(-1, -1);
     for (int i = 0; i < array.Length; ++i)
     {
         if ((array[i] & 1) == 1)
         {
             if (squama.X == -1)
                 squama.X = i;
             else if (squama.Y == -1)
                 squama.Y = i;
             else
                 return null;
         }
     }
     return squama;
 }
Exemplo n.º 8
0
 private string SquamasToString(Squama[] squamas)
 {
     return string.Join("-", squamas.Select(x => string.Format("{0}{1}", x.X, x.Y)));
 }