bool sudoku2(char[][] grid) { var columnList = new List<Dictionary<char, int>>(); var rowList = new List<Dictionary<char, int>>(); var nineList = new List<Dictionary<char, int>>(); foreach (var t in grid) { var dict = new Dictionary<char, int>(); for (var j = 0; j < grid[0].Length; j++) if (dict.ContainsKey(t[j])) dict[t[j]]++; else dict[t[j]] = 1; rowList.Add(dict); } if (rowList.Any(d => d.Count(pair => pair.Key != '.' && pair.Value > 1) > 0)) return false; for (var i = 0; i < grid.Length; i++) { var dict = new Dictionary<char, int>(); for (var j = 0; j < grid[0].Length; j++) if (dict.ContainsKey(grid[j][i])) dict[grid[j][i]]++; else dict[grid[j][i]] = 1; columnList.Add(dict); } if (columnList.Any(d => d.Count(pair => pair.Key != '.' && pair.Value > 1) > 0)) return false; for (var i = 0; i < grid.Length / 3; i++) { for (var j = 0; j < grid[0].Length / 3; j++) { var dict = new Dictionary<char, int>(); if (dict.ContainsKey(grid[i * 3][j * 3])) dict[grid[i * 3][j * 3]]++; else dict[grid[i * 3][j * 3]] = 1; if (dict.ContainsKey(grid[i * 3][j * 3 + 1])) dict[grid[i * 3][j * 3 + 1]]++; else dict[grid[i * 3][j * 3 + 1]] = 1; if (dict.ContainsKey(grid[i * 3][j * 3 + 2])) dict[grid[i * 3][j * 3 + 2]]++; else dict[grid[i * 3][j * 3 + 2]] = 1; if (dict.ContainsKey(grid[i * 3 + 1][j * 3])) dict[grid[i * 3 + 1][j * 3]]++; else dict[grid[i * 3 + 1][j * 3]] = 1; if (dict.ContainsKey(grid[i * 3 + 1][j * 3 + 1])) dict[grid[i * 3 + 1][j * 3 + 1]]++; else dict[grid[i * 3 + 1][j * 3 + 1]] = 1; if (dict.ContainsKey(grid[i * 3 + 1][j * 3 + 2])) dict[grid[i * 3 + 1][j * 3 + 2]]++; else dict[grid[i * 3 + 1][j * 3 + 2]] = 1; if (dict.ContainsKey(grid[i * 3 + 2][j * 3])) dict[grid[i * 3 + 2][j * 3]]++; else dict[grid[i * 3 + 2][j * 3]] = 1; if (dict.ContainsKey(grid[i * 3 + 2][j * 3 + 1])) dict[grid[i * 3 + 2][j * 3 + 1]]++; else dict[grid[i * 3 + 2][j * 3 + 1]] = 1; if (dict.ContainsKey(grid[i * 3 + 2][j * 3 + 2])) dict[grid[i * 3 + 2][j * 3 + 2]]++; else dict[grid[i * 3 + 2][j * 3 + 2]] = 1; nineList.Add(dict); } } return !nineList.Any(d => d.Count(pair => pair.Key != '.' && pair.Value > 1) > 0); }
Previous Next