public static string[] SplitKey(ushort[] key, int players, int required) { int keyLengthInBits = key.Length * 16; int polynomsCount = key.Length; var polynoms = PolynomGenerator.GeneratePolynomsMatrix(key, polynomsCount, required - 1); //Console.WriteLine("Generated matrix:"); //for (int i = 0; i < polynoms.GetLength(0); i++) //{ // for (int j = 0; j < polynoms.GetLength(1); j++) // { // Console.Write("{0} ", polynoms[i, j]); // } // Console.WriteLine(); //} var playerPoints = new uint[players, polynomsCount, 2]; var currentPolynomPoints = new uint[players, 2]; var currentPolynom = new ushort[required]; for (int i = 0; i < polynomsCount; i++) { currentPolynom = polynoms.GetRow(i); currentPolynomPoints = PolynomSolver.GetRandomPoints(currentPolynom, players); for (int j = 0; j < players; j++) { playerPoints[j, i, 0] = currentPolynomPoints[j, 0]; playerPoints[j, i, 1] = currentPolynomPoints[j, 1]; } } //for (int i = 0; i < playerPoints.GetLength(0); i++) //{ // for (int j = 0; j < playerPoints.GetLength(1); j++) // { // Console.Write("({0}, {1}) ", playerPoints[i, j, 0], playerPoints[i, j, 1]); // } // Console.WriteLine(); //} var geneneratedHexes = new string[players]; var currentPlayerPoints = new uint[polynomsCount * 2]; var counter = 0; for (int i = 0; i < playerPoints.GetLength(0); i++) { for (int j = 0; j < playerPoints.GetLength(1); j++) { currentPlayerPoints[counter] = playerPoints[i, j, 0]; counter++; currentPlayerPoints[counter] = playerPoints[i, j, 1]; counter++; } counter = 0; geneneratedHexes[i] = HexConverter.NumbersArrToHexString(currentPlayerPoints, '-'); //Console.WriteLine(geneneratedHexes[i]); //Console.WriteLine(); } return(geneneratedHexes); }