Hi there
I'm trying to create an anagram solver and have written the following code. It basically prompts for a string and then matches individual chars in that string to chars in words in a simple dictionary (just in a normal table).
I can get it to work but to ensure no additional letters from the dictionary word gets matched to the string in question a matching word has to a) be shorter (so all are required to match) and b) no letter can be the same within the word to any other, thus preventing 'loo' matching 'lops' for example (word is shorther but 'o' matches twice in the string). However, sometimes words of course contain legitimate letter duplication. My code prevents such words being matched.
Would someone mind taking a look at the code and telling me if there's a way of fixing that without matching spurious values, please? Any help much appreciated!! Code below; dictionary just very straightforward English word list.
Note: table = Anagram, column = word. feed_me_letters = prompt for string.
SELECT word
FROM Anagram
WHERE word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=2 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=3 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,mid(word,2,1)) not in
(instr(feed_me_letters,right(word,1)),
instr(feed_me_letters,left(word,1))) and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=4 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1)) and
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,mid(word,3,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and instr(feed_me_letters,mid(word,2,1))
not in(
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=5 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1))
and instr(feed_me_letters,mid(word,3,1))
and instr(feed_me_letters,mid(word,4,1))
and
instr(feed_me_letters,mid(word,4,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,mid(word,3,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,mid(word,4,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,mid(word,2,1))
not in(
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,mid(word,4,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,4,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,4,1))
)
Regards
Matt
I'm trying to create an anagram solver and have written the following code. It basically prompts for a string and then matches individual chars in that string to chars in words in a simple dictionary (just in a normal table).
I can get it to work but to ensure no additional letters from the dictionary word gets matched to the string in question a matching word has to a) be shorter (so all are required to match) and b) no letter can be the same within the word to any other, thus preventing 'loo' matching 'lops' for example (word is shorther but 'o' matches twice in the string). However, sometimes words of course contain legitimate letter duplication. My code prevents such words being matched.
Would someone mind taking a look at the code and telling me if there's a way of fixing that without matching spurious values, please? Any help much appreciated!! Code below; dictionary just very straightforward English word list.
Note: table = Anagram, column = word. feed_me_letters = prompt for string.
SELECT word
FROM Anagram
WHERE word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=2 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=3 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,mid(word,2,1)) not in
(instr(feed_me_letters,right(word,1)),
instr(feed_me_letters,left(word,1))) and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=4 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1)) and
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,mid(word,3,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and instr(feed_me_letters,mid(word,2,1))
not in(
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
)
or
word in
(select word from anagram where len(feed_me_letters)>len(word) and len(word)=5 and
instr(feed_me_letters,left(word,1)) and
instr(feed_me_letters,right(word,1)) and
instr(feed_me_letters,mid(word,2,1))
and instr(feed_me_letters,mid(word,3,1))
and instr(feed_me_letters,mid(word,4,1))
and
instr(feed_me_letters,mid(word,4,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,mid(word,3,1))
not in(
instr(feed_me_letters,mid(word,2,1)),
instr(feed_me_letters,mid(word,4,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,mid(word,2,1))
not in(
instr(feed_me_letters,mid(word,3,1)),
instr(feed_me_letters,mid(word,4,1)),
instr(feed_me_letters,left(word,1)),
instr(feed_me_letters,right(word,1)))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,right(word,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,left(word,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,2,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,3,1))
and
instr(feed_me_letters,left(word,1)) <>
instr(feed_me_letters,mid(word,4,1))
and
instr(feed_me_letters,right(word,1)) <>
instr(feed_me_letters,mid(word,4,1))
)
Regards
Matt