Anonymous user
Sudoku: Difference between revisions
m
→"Smart" Recursive Backtrack Solution
Line 1,826:
}</lang>
=== Best First Search "Smart"
<!-- By Martin Freedman, 20/11/2021 -->
<lang csharp>using System.Linq;
Line 1,834:
using System.Runtime.CompilerServices;
namespace
internal static class
[MethodImpl(MethodImplOptions.AggressiveInlining)]
private static int RowCol(int rc) => rc <= 2 ? 0 : rc <= 5 ? 3 : 6;
private static IEnumerable<int> GetBox(
from r in Range(RowCol(row), 3) from c in Range(RowCol(col), 3) select grid[r][c];
select grid[r][c];▼
private static readonly int[] range = Range(1, 9).ToArray();
private static bool Solve(this int[][] grid,
if (
return true;
var (
foreach (var i in range.Except(
grid[
if (grid.Solve(
return true;
}
grid[
return false;
}
Line 1,862 ⟶ 1,860:
private static readonly int[] domain = Range(0, 9).ToArray();
private static IEnumerable<int>
grid[row]
.Union(domain.Select(r => grid[r][col]))
.Union(
.Except(Unmarked);
private static IEnumerable<(IEnumerable<int> constraints,int row, int col)> SortedCells(this int[][] grid) =>
from row in domain
from col in domain
private static int[][] Parse(string input) =>
Line 1,887 ⟶ 1,886:
public static int[][] Run(string input) {
var grid = Parse(input);
}
}
|