Created
September 4, 2025 08:45
-
-
Save chhaugen/c3515bc6a3b976764766a6be02b4b103 to your computer and use it in GitHub Desktop.
WordleHelper
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| using static System.Console; | |
| int aNumber = 0x41; | |
| List<char> letters = Enumerable | |
| .Range(0, 26) | |
| .Select(x => (char)(aNumber + x)) | |
| .ToList(); | |
| List<(char, LetterState)[]> wordleGame = [ | |
| [('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black),], | |
| [('X', LetterState.Black), ('X', LetterState.Yellow), ('X', LetterState.Yellow), ('X', LetterState.Black), ('X', LetterState.Black),], | |
| [('X', LetterState.Yellow), ('X', LetterState.Yellow), ('X', LetterState.Yellow), ('X', LetterState.Black), ('X', LetterState.Black),], | |
| [('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black), ('X', LetterState.Black),], | |
| ]; | |
| // collect all yellow letters | |
| var globalYellows = wordleGame | |
| .SelectMany(r => r) | |
| .Where(x => x.Item2 == LetterState.Yellow) | |
| .Select(x => x.Item1) | |
| .Distinct() | |
| .ToHashSet(); | |
| // remove blacks only if they’re not yellow anywhere | |
| foreach (var (ch, state) in wordleGame.SelectMany(x => x)) | |
| { | |
| if (state == LetterState.Black && !globalYellows.Contains(ch)) | |
| letters.Remove(ch); | |
| } | |
| List<(char, int)> yellowBlocks = []; | |
| foreach (var row in wordleGame) | |
| { | |
| for (int i = 0; i < row.Length; i++) | |
| { | |
| if (row[i].Item2 == LetterState.Yellow) | |
| yellowBlocks.Add((row[i].Item1, i)); | |
| } | |
| } | |
| var yellowLetters = yellowBlocks | |
| .Select(x => x.Item1) | |
| .Distinct() | |
| .ToList(); | |
| List<char[]> answers = []; | |
| foreach (var first in letters) | |
| { | |
| if (yellowBlocks.Contains((first, 0))) | |
| continue; | |
| foreach (var second in letters) | |
| { | |
| if (yellowBlocks.Contains((second, 1))) | |
| continue; | |
| foreach (var third in letters) | |
| { | |
| if (yellowBlocks.Contains((third, 2))) | |
| continue; | |
| foreach (var forth in letters) | |
| { | |
| if (yellowBlocks.Contains((forth, 3))) | |
| continue; | |
| foreach (var fith in letters) | |
| { | |
| if (yellowBlocks.Contains((fith, 4))) | |
| continue; | |
| char[] answer = [first, second, third, forth, fith]; | |
| if (yellowLetters.Any(y => !answer.Contains(y))) | |
| continue; | |
| answers.Add(answer); | |
| } | |
| } | |
| } | |
| } | |
| } | |
| foreach (var answerRow in answers.Chunk(8)) | |
| { | |
| foreach (var answer in answerRow) | |
| { | |
| Write($"{new string(answer)} "); | |
| } | |
| WriteLine(); | |
| } | |
| enum LetterState | |
| { | |
| White = 0, | |
| Black = 1, | |
| Yellow = 2, | |
| Green = 3, | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment