Renaissauce

Wyatt Lyon Preul's Portfolio

Lingo Word Solver Source

June 07
by admin 7. June 2008 11:28

 

I wrote the Lingo Solver app in C# using the .NET 2.0 Framework.  So, to really rebuild or extend this application you are going to need Visual Studio 2005.  The source is all there, including the setup project.  If anything, this should serve as a good example of how to use the System.IO namespace and how to work with collections

 

 

Lingo Word Solver

June 07
by admin 7. June 2008 11:25

 

 

I wrote this little app to help solve Lingo puzzles.  This is an extremely straightforward tool, so I am not including any documentation at this point.  All you need to do is put the known letter positions in the red boxes, then if any letters that are known to exist but are in the wrong place should go in the yellow boxes.  The white boxes are reserved for any letters that do not exist in the words.  From this you should be able to solve any 5 letter word from just a couple guesses.  If you find a word does not appear in the list even though it is a known four letter word, then simply place it in the appropriate word file.

 

 

 

Boggle Solver Source

May 28
by Admin 28. May 2008 17:08

There has been interest in the simple algorithm I used for the boggle solver I blogged about previously.  Here is the source for the code behind.  The dictionary file is just a list of words, delimited by a line feed.

protected List<string> _words;
protected List<string> _foundWords;

protected override void OnInit(EventArgs e)
{
this.Submit.Click += new EventHandler(Submit_Click);
base.OnInit(e);
}

void Submit_Click(object sender, EventArgs e)
{
LoadWords();
FoundWords.Text
= string.Empty;
if (_words != null)
{
_foundWords
= new List<string>();

char[,] wordMatrix = new char[5, 5];
wordMatrix[
0, 0] = Char.Parse(a1.Text);
wordMatrix[
0, 1] = Char.Parse(a2.Text);
wordMatrix[
0, 2] = Char.Parse(a3.Text);
wordMatrix[
0, 3] = Char.Parse(a4.Text);
wordMatrix[
0, 4] = Char.Parse(a5.Text);
wordMatrix[
1, 0] = Char.Parse(b1.Text);
wordMatrix[
1, 1] = Char.Parse(b2.Text);
wordMatrix[
1, 2] = Char.Parse(b3.Text);
wordMatrix[
1, 3] = Char.Parse(b4.Text);
wordMatrix[
1, 4] = Char.Parse(b5.Text);
wordMatrix[
2, 0] = Char.Parse(c1.Text);
wordMatrix[
2, 1] = Char.Parse(c2.Text);
wordMatrix[
2, 2] = Char.Parse(c3.Text);
wordMatrix[
2, 3] = Char.Parse(c4.Text);
wordMatrix[
2, 4] = Char.Parse(c5.Text);
wordMatrix[
3, 0] = Char.Parse(d1.Text);
wordMatrix[
3, 1] = Char.Parse(d2.Text);
wordMatrix[
3, 2] = Char.Parse(d3.Text);
wordMatrix[
3, 3] = Char.Parse(d4.Text);
wordMatrix[
3, 4] = Char.Parse(d5.Text);
wordMatrix[
4, 0] = Char.Parse(e1.Text);
wordMatrix[
4, 1] = Char.Parse(e2.Text);
wordMatrix[
4, 2] = Char.Parse(e3.Text);
wordMatrix[
4, 3] = Char.Parse(e4.Text);
wordMatrix[
4, 4] = Char.Parse(e5.Text);

a1.Text
= string.Empty;
a2.Text
= string.Empty;
a3.Text
= string.Empty;
a4.Text
= string.Empty;
a5.Text
= string.Empty;
b1.Text
= string.Empty;
b2.Text
= string.Empty;
b3.Text
= string.Empty;
b4.Text
= string.Empty;
b5.Text
= string.Empty;
c1.Text
= string.Empty;
c2.Text
= string.Empty;
c3.Text
= string.Empty;
c4.Text
= string.Empty;
c5.Text
= string.Empty;
d1.Text
= string.Empty;
d2.Text
= string.Empty;
d3.Text
= string.Empty;
d4.Text
= string.Empty;
d5.Text
= string.Empty;
e1.Text
= string.Empty;
e2.Text
= string.Empty;
e3.Text
= string.Empty;
e4.Text
= string.Empty;
e5.Text
= string.Empty;

foreach (string possibleWord in _words)
{
if (possibleWord == null || possibleWord.Length < 4)
continue;
char startChar = possibleWord[0];
for (int x = 0; x < 5; x++)
for (int y = 0; y < 5; y++)
if (wordMatrix[x, y] == startChar)
{
CheckWord(wordMatrix, x, y, possibleWord);
}
}

foreach (string foundWord in _foundWords)
{
if (string.IsNullOrEmpty(FoundWords.Text))
FoundWords.Text
= foundWord;
else
FoundWords.Text
= string.Format("{0}, {1}", FoundWords.Text, foundWord);
}
}
}

void CheckWord(char[,] wordMatrix, int x, int y, string possibleWord)
{
char[,] used = new char[5, 5];
used[x, y]
= possibleWord[0];
for (int i = 1; i < possibleWord.Length; i++)
{
if (x + 1 < 5 && used[x + 1, y] != possibleWord[i] && possibleWord[i] == wordMatrix[x + 1, y])
{
used[x
+ 1, y] = possibleWord[i];
x
= x + 1;
continue;
}
else if (x - 1 > -1 && used[x - 1, y] != possibleWord[i] && possibleWord[i] == wordMatrix[x - 1, y])
{
used[x
- 1, y] = possibleWord[i];
x
= x - 1;
continue;
}
else if (y + 1 < 5 && used[x, y + 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x, y + 1])
{
used[x, y
+ 1] = possibleWord[i];
y
= y + 1;
continue;
}
else if (y - 1 > -1 && used[x, y - 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x, y - 1])
{
used[x, y
- 1] = possibleWord[i];
y
= y - 1;
continue;
}
else if (x + 1 < 5 && y + 1 < 5 && used[x + 1, y + 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x + 1, y + 1])
{
used[x
+ 1, y + 1] = possibleWord[i];
x
= x + 1;
y
= y + 1;
continue;
}
else if (x - 1 > -1 && y + 1 < 5 && used[x - 1, y + 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x - 1, y + 1])
{
used[x
- 1, y + 1] = possibleWord[i];
x
= x - 1;
y
= y + 1;
continue;
}
else if (x + 1 < 5 && y - 1 > -1 && used[x + 1, y - 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x + 1, y - 1])
{
used[x
+ 1, y - 1] = possibleWord[i];
x
= x + 1;
y
= y - 1;
continue;
}
else if (x - 1 > -1 && y - 1 > -1 && used[x - 1, y - 1] != possibleWord[i] && possibleWord[i] == wordMatrix[x - 1, y - 1])
{
used[x
- 1, y - 1] = possibleWord[i];
x
= x - 1;
y
= y - 1;
continue;
}
else
return;
}

_foundWords.Add(possibleWord);
}

void LoadWords()
{
if (File.Exists(Server.MapPath("dictionary.txt")))
using (FileStream fs = File.OpenRead(Server.MapPath("dictionary.txt")))
{
byte[] b = new byte[1024];
UTF8Encoding temp
= new UTF8Encoding(true);
_words
= new List<string>();

while (fs.Read(b, 0, b.Length) > 0)
{
foreach (string word in temp.GetString(b).Split('\n'))
{
string updatedWord = word.Replace("\r", "");
_words.Add(updatedWord);
}
}
}
}