private static List <ISquareCollection> BuildRows(
            int[] tiles, Action <BoardSquare> squareCreatedAction)
        {
            var rows  = new List <ISquareCollection>();
            int count = 0;
            int row   = 0;

            while (count < tiles.Length)
            {
                var squareCollection = new SquareCollection();
                var rowTiles         = tiles.Skip(count).Take(10).ToList();
                for (int column = 0; column < rowTiles.Count; column++)
                {
                    if (rowTiles[column] == -1)
                    {
                        continue;
                    }
                    var square = CreateSquare(rowTiles[column], row, column);
                    squareCreatedAction(square);
                    squareCollection.AddSquare(square);
                }
                rows.Add(squareCollection);
                count += 10;
                row++;
            }
            return(rows);
        }
        private static IEnumerable <ISquareCollection> BuildLeftDiagnals(List <ISquareCollection> rows)
        {
            var leftDiagnals = new List <ISquareCollection>();
            int column       = 0;

            for (int i = 0; i < 10; i++)
            {
                var diagnal = new SquareCollection();
                foreach (var row in rows)
                {
                    var square = row[column];
                    if (square != null)
                    {
                        diagnal.AddSquare(square);
                    }
                    column++;
                }
                if (diagnal.Length >= 5)
                {
                    leftDiagnals.Add(diagnal);
                }
                else
                {
                    break;
                }
                column = i + 1;
            }
            var reversedRows = rows.ToList();

            reversedRows.Reverse();
            column = 8;
            for (int i = 8; i > 0; i--)
            {
                var diagnal = new SquareCollection();
                foreach (var row in reversedRows)
                {
                    var square = row[column];
                    if (square != null)
                    {
                        diagnal.AddSquare(square);
                    }
                    column--;
                }
                if (diagnal.Length >= 5)
                {
                    leftDiagnals.Add(diagnal);
                }
                else
                {
                    break;
                }
                column = i - 1;
            }
            return(leftDiagnals);
        }
 private static IEnumerable<ISquareCollection> BuildColumns(List<ISquareCollection> rows)
 {
     var columns = new List<ISquareCollection>();
     for (int column = 0; column < 10; column++)
     {
         var squareCollection = new SquareCollection();
         columns.Add(rows.Aggregate(squareCollection,
             (newCollection, x) =>
             {
                 var square = x[column];
                 if (square != null)
                     newCollection.AddSquare(square);
                 return newCollection;
             }));
     }
     return columns;
 }
 private static IEnumerable<ISquareCollection> BuildLeftDiagnals(List<ISquareCollection> rows)
 {
     var leftDiagnals = new List<ISquareCollection>();
     int column = 0;
     for (int i = 0; i < 10; i++)
     {
         var diagnal = new SquareCollection();
         foreach (var row in rows)
         {
             var square = row[column];
             if (square != null)
             {
                 diagnal.AddSquare(square);
             }
             column++;
         }
         if (diagnal.Length >= 5)
             leftDiagnals.Add(diagnal);
         else
             break;
         column = i + 1;
     }
     var reversedRows = rows.ToList();
     reversedRows.Reverse();
     column = 8;
     for (int i = 8; i > 0; i--)
     {
         var diagnal = new SquareCollection();
         foreach (var row in reversedRows)
         {
             var square = row[column];
             if (square != null)
             {
                 diagnal.AddSquare(square);
             }
             column--;
         }
         if (diagnal.Length >= 5)
             leftDiagnals.Add(diagnal);
         else
             break;
         column = i - 1;
     }
     return leftDiagnals;
 }
        private static IEnumerable <ISquareCollection> BuildColumns(List <ISquareCollection> rows)
        {
            var columns = new List <ISquareCollection>();

            for (int column = 0; column < 10; column++)
            {
                var squareCollection = new SquareCollection();
                columns.Add(rows.Aggregate(squareCollection,
                                           (newCollection, x) =>
                {
                    var square = x[column];
                    if (square != null)
                    {
                        newCollection.AddSquare(square);
                    }
                    return(newCollection);
                }));
            }
            return(columns);
        }
 private static List<ISquareCollection> BuildRows(
     int[] tiles, Action<BoardSquare> squareCreatedAction)
 {
     var rows = new List<ISquareCollection>();
     int count = 0;
     int row = 0;
     while (count < tiles.Length)
     {
         var squareCollection = new SquareCollection();
         var rowTiles = tiles.Skip(count).Take(10).ToList();
         for (int column = 0; column < rowTiles.Count; column++)
         {
             if (rowTiles[column] == -1) continue;
             var square = CreateSquare(rowTiles[column], row, column);
             squareCreatedAction(square);
             squareCollection.AddSquare(square);
         }
         rows.Add(squareCollection);
         count += 10;
         row++;
     }
     return rows;
 }