Use a dictionary to help create a mnemonic
I was using a program that was yet another TLA and I wanted to create a mnemonic to help me remember what it was. One of the letters was “k”, so I wanted to find a word that starts with “k”
Simple: load a dictionary, search for words starting with “k” and browse through them: “Killer” sounded fine!
The Dictionary dll (that you can download from the link below) actually contains 2 separate dictionaries in 679k bytes! The big one (Dictnum=1) has 171,201 words. The smaller (DictNum=2) has 53,869. These dictionaries are spelling dictionaries from the last century.
The samples below also demonstrate a simple LINQ query on the data:
I wanted to use common words, so I used the smaller one.
Fox code:
x=CREATEOBJECT("dictionary.dict")
x.Dictnum=2 && small dictionary
?x.FindMatches("k*")
cnt=x.words.count
CREATE CURSOR words (word c(20))
FOR i = 0 TO cnt-1
?x.Words.Item(i)
INSERT INTO words (word) VALUES (x.words.item(i))
ENDFOR
SELECT * FROM words WHERE AT("ill",word)>0
For VB code, Start VS, File->New->Project->VB->WindowsApplication->Console Application
We don’t have to reference the DLL (unless you want intellisense or use queries directly on the word collection) because late binding works.
(Since the DLL is 32 bit, if you’re using a 64 bit OS, make sure you make Project->Properties->Compile->Advanced Compiler Settings->Target CPU x86)
Module Module1
Sub Main()
Dim x = CreateObject("dictionary.dict")
'Dim x = New Dictionary.CDict ' use early binding: add a ref to Dictionary 1.0 Type Library
x.DictNum = 2 ' small dictionary
x.FindMatches("k*")
Dim col As New List(Of String) ' for late bindinq queries, we'll add to a list
For Each word In x.words
Debug.WriteLine(word)
col.Add(word)
Next
For Each word In From a In col Where a.Contains("ill")
Debug.WriteLine(word)
Next
End Sub
End Module
For C#, add a reference to “Dictionary 1.0 Type Library” in the COM tab.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
var x = new Dictionary.CDictClass();
x.DictNum = 2;
x.FindMatches("k*");
foreach (var word in x.Words)
{
System.Diagnostics.Debug.WriteLine(word);
}
var q = from string a in x.Words where a.Contains("ill") select a;
foreach (var w in q)
{
System.Diagnostics.Debug.WriteLine(w);
}
}
}
}
Download the dictionary from here: A Discounter Introduces Reductions: Multiple Anagrams
You can create many word related games.
More word games:
Carburetor is a car part, but prosecutable is not
What mnemonic can you create from your phone number? See Phone Number Challenge update
Comments
Anonymous
June 20, 2008
Hi Calvin, How to use vb6 to implement such functionality? I had some errors when using vb6 to execut this. ThanksAnonymous
June 23, 2008
Is something like this at all possible in VFP? http://www.codeplex.com/hawkeye