Skip to content

Instantly share code, notes, and snippets.

@chhaugen
Created September 4, 2025 08:45
Show Gist options
  • Select an option

  • Save chhaugen/c3515bc6a3b976764766a6be02b4b103 to your computer and use it in GitHub Desktop.

Select an option

Save chhaugen/c3515bc6a3b976764766a6be02b4b103 to your computer and use it in GitHub Desktop.
WordleHelper
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