using System.Collections.Generic;
public static void Main()
new char[]{'5','3','.','.','7','.','.','.','.'}
, new char[]{'6','.','.','1','9','5','.','.','.'}
, new char[]{'.','9','8','.','.','.','.','6','.'}
, new char[]{'8','.','.','.','6','.','.','.','3'}
, new char[]{'4','.','.','8','.','3','.','.','1'}
, new char[]{'7','.','.','.','2','.','.','.','6'}
, new char[]{'.','6','.','.','.','.','2','8','.'}
, new char[]{'.','.','.','4','1','9','.','.','5'}
, new char[]{'.','.','.','.','8','.','.','7','9'}
Console.WriteLine("Resultado: " + IsSudokuValid(board));
public static bool IsSudokuValid(char[][] board)
var lines = new char[9][];
var columns = new char[9][];
var nines = new char[9][];
for (var i = 0; i < board.Length; i++) {
var l = new ArraySegment<char>(board[i]);
for (var j = 0; j < board[i].Length; j++) {
lines[i][j] = board[i][j];
if (nines[currentNine] == null)
nines[currentNine] = new char[9];
for (var j = 0; j < 2; j++) {
var slicedLine = l.Slice(j * 3, 3);
nines[currentNine] = slicedLine.ToArray();
for (var i = 0; i < nines.Length; i++) {
Console.WriteLine(lines[0]);
Console.WriteLine(nines[0]);