_Title "Wordiff - Rosetta Code" 'b+ 2021-09-02 ref: http://rosettacode.org/wiki/Wordiff Const nWords
= 24819 ' precounted for unixdict.txt word list Dim Shared words$
(1 To nWords
), used$
(1 To 1000), nUsed
, players$
(1 To 100), nPlayers
, nextPlayer
Q$(0) = "Good!": Q$(1) = "used already.": Q$(2) = "not in dictionary.": Q$(3) = "bad minus letter."
Q$(4) = "bad letter change.": Q$(5) = "bad add letter.": Q$(6) = "bad length."
LoadWords
getPlayers
nextPlayer = 1
newRound:
lastWord$ = StartWord$
Print players$
(nextPlayer
);
Input ", please enter your try "; try$
badtry = bad%(lastWord$, try$)
Print try$
+ " is " + Q$
(badtry
) nUsed = nUsed + 1
used$(nUsed) = try$
lastWord$ = try$
nextPlayer = nextPlayer + 1
If nextPlayer
> nPlayers
Then nextPlayer
= 1 Print "Wordiffs found for " + lastWord$
+ " are:" finds lastWord$
ok = -1
If ok
Then i
= i
+ 1: words$
(i
) = wd$
nPlayers = 0
Input "Enter a player name or nothing to finish list "; player$
If player$
<> "" Then nPlayers
= nPlayers
+ 1: players$
(nPlayers
) = player$
StartWord$
= words$
(Int(Rnd * nWords
) + 1) OK = -1
For i
= 1 To nUsed
' let us at least not start with a word used in last game If used$
(i
) = StartWord$
Then OK
= 0 If OK
Then Erase used$: nUsed
= 1: used$
(1) = StartWord$
Function wordFound%
(word$
) ' is the word 3 or more letters in dictionary lo = 1: hi = nWords
test
= Int((hi
+ lo
) / 2) lo = test + 1
hi = test - 1
Function oneLess%
(last$
, test$
) ' is word one letter less than last word lastfind = 1
find
= InStr(lastfind
, last$
, Mid$(test$
, i
, 1)) oneLess% = -1
Function oneMore%
(last$
, test$
) ' is word one letter more than last word lastfind = 1
find
= InStr(lastfind
, test$
, Mid$(last$
, i
, 1)) ' typo fix 2021-09-03 oneMore% = -1
If strike
= 1 Then oneChange%
= -1
If oneLess%
(last$
, test$
) = 0 Then bad%
= 3 If oneChange%
(last$
, test$
) = 0 Then bad%
= 4 If oneMore%
(last$
, test$
) = 0 Then bad%
= 5 bad% = 6
Sub finds
(last$
) ' find all words that would have worked test$ = words$(i)
If test$
= used$
(j
) Then GoTo skip
'_continue didn't work skip: