From 21c4fbb2d13ab81ce24a020efaa9e69d8b02f2bc Mon Sep 17 00:00:00 2001 From: LE COURTOIS Sylvain Date: Mon, 14 Aug 2023 23:19:08 +0200 Subject: [PATCH] sudoku --- AdventOfCode2022/Puzzles/Sudoku.cs | 5 +- .../Pages/DefaultPuzzleView.razor | 1 - AdventOfCode2022web/Pages/Index.razor | 1 + AdventOfCode2022web/Pages/Puzzle.razor | 6 +- AdventOfCode2022web/Pages/SudokuView.razor | 76 +++++++++++++++++++ AdventOfCode2022web/Shared/NavMenu.razor | 2 + 6 files changed, 85 insertions(+), 6 deletions(-) create mode 100644 AdventOfCode2022web/Pages/SudokuView.razor diff --git a/AdventOfCode2022/Puzzles/Sudoku.cs b/AdventOfCode2022/Puzzles/Sudoku.cs index f5585c72..f51ad5a9 100644 --- a/AdventOfCode2022/Puzzles/Sudoku.cs +++ b/AdventOfCode2022/Puzzles/Sudoku.cs @@ -11,7 +11,7 @@ public void Setup(string input) PuzzleState = _puzzleInput; } - private string Entropy(int position) + public string Entropy(int position) { var res = new HashSet(); var (col, row) = (position % 9, position / 9); @@ -41,7 +41,10 @@ public IEnumerable SolveFirstPart() var slotsWithMinimalEntropy = emptySlots.Select(x => (p: x, e: Entropy(x))).OrderBy(x => x.e.Length).ThenBy(x => x.p).ToArray(); var slot = slotsWithMinimalEntropy[0]; if (slot.e == string.Empty) + { + yield return FormatPuzzleState(); continue; + } var sb = new StringBuilder(PuzzleState); for (var i = 0; iYes it is possible to create a Web SPA application in C#, thanks to WebAssembly !

Here you will find my solutions to Advent of Code 2022 puzzles.

Some puzzles require a lot of computing power and it's not very compatible with the use of a web browser.

+

Day 27 is a Sudoku Solver, with no relation with Advent of Code !

diff --git a/AdventOfCode2022web/Pages/Puzzle.razor b/AdventOfCode2022web/Pages/Puzzle.razor index 1cc0e5c5..b6d1eaa9 100644 --- a/AdventOfCode2022web/Pages/Puzzle.razor +++ b/AdventOfCode2022web/Pages/Puzzle.razor @@ -11,13 +11,13 @@
- +
@Output1
- +
@Output2
@@ -30,8 +30,6 @@ private string? Input; private string? Output1; private string? Output2; - private bool IsTask1Running; - private bool IsTask2Running; protected override async Task OnParametersSetAsync() { var puzzle = puzzleHelper.Puzzles[PuzzleNumber]; diff --git a/AdventOfCode2022web/Pages/SudokuView.razor b/AdventOfCode2022web/Pages/SudokuView.razor new file mode 100644 index 00000000..be280cd7 --- /dev/null +++ b/AdventOfCode2022web/Pages/SudokuView.razor @@ -0,0 +1,76 @@ +@page "/SudokuView/{PuzzleNumber:int}" +@inject PuzzleHelper puzzleHelper; +@inject HttpClient Http + +

+ This is a Sudoku solver, and it has really no relation with Advent Of Code ! +

+ + + + + + + + + + + + + + + + + + @{ + if ( _solver != null && _solver.PuzzleState.Length == 81) + { + var s = _solver.PuzzleState; + foreach (var y in Enumerable.Range(0, 9)) + foreach (var x in Enumerable.Range(0, 9)) + { + var c = s[x + y * 9]; + if (c == '.') + { + c = ' '; + var r = _solver.Entropy(x + y * 9).Length; + if ( r == 0) + { + + } + else + { + var e = (double)(10 - r) / 9; + + + @r + + } + } + + + @c + + + } + } + } + + + + +@code { + [Parameter] + public int PuzzleNumber { get; set; } + private string? _input { get; set; } + private Sudoku? _solver; + public void UpdateView(int animationDuration) => StateHasChanged(); + + protected override async Task OnInitializedAsync() + { + var puzzle = puzzleHelper.Puzzles[PuzzleNumber]; + _solver = new Sudoku(); + _input = (await Http.GetStringAsync($"sample-data/{puzzle.Type.Name}.txt")).Replace("\r", ""); + _solver.Setup(_input); + } +} diff --git a/AdventOfCode2022web/Shared/NavMenu.razor b/AdventOfCode2022web/Shared/NavMenu.razor index d4b27c23..9b406905 100644 --- a/AdventOfCode2022web/Shared/NavMenu.razor +++ b/AdventOfCode2022web/Shared/NavMenu.razor @@ -36,6 +36,8 @@ pageName = $"BlizzardBasinView/{item.Number}"; if (item.Type == typeof(UnstableDiffusion)) pageName = "UnstableDiffusionView"; + if (item.Type == typeof(Sudoku)) + pageName = $"SudokuView/{item.Number}";