Sudoku: Difference between revisions

Content deleted Content added
→‎Recursive Backtrack Solution: Aded more fluent code in main()
Line 1,829: Line 1,829:
<!-- By Martin Freedman, 20/11/2021 -->
<!-- By Martin Freedman, 20/11/2021 -->
<lang csharp>using System.Linq;
<lang csharp>using System.Linq;
using System.Linq;
using static System.Linq.Enumerable;
using static System.Linq.Enumerable;
using static System.Console;
using static System.Console;
using System.Collections.Generic;
using System.Collections.Generic;
using System;


namespace Sudoku {
namespace Sudoku {
Line 1,852: Line 1,854:
while (r < 9 && grid[r][c] != 0) {
while (r < 9 && grid[r][c] != 0) {
c = ++c % 9;
c = ++c % 9;
r = c == 0 ? r + 1 : r;
r += c == 0 ? 1 : 0;
}
}
return (r, c);
return (r, c);
Line 1,872: Line 1,874:
else
else
return (true, g);
return (true, g);
}
}
grid[r][c] = 0; //backtrack
grid[r][c] = 0; //backtrack
return (false, grid);
return (false, grid);
}
}


private static U Fwd<T, U>(this T t, Func<T, U> func) => func(t);
static void Main(string[] args) {
static void Main(string[] args) {
var challenge = new string[]{ "970 340 060",
var challenge = new string[]{ "970 340 060",
Line 1,893: Line 1,895:
.ToArray();
.ToArray();


var (success, result) = input.Solve(0, 0);
var report = input.Solve(0, 0) switch {
(true, var result) =>

if (success)
Range(0, 9)
for (var r = 0; r < 9; r++) {
.Select(r => Range(0, 9).Select(c => result[r][c]).Fwd(string.Concat))
for (var c = 0; c < 9; c++) {
.Fwd(s => string.Join('\n', s)),
Write($"{result[r][c]}");
(_, _) =>
}
"No Solution\n"
Write("\n");
};
}
Write(report);
else
WriteLine("No Solution");
ReadLine();
ReadLine();
}
}