Author Topic: Word ladder - Rosetta Code  (Read 9513 times)

0 Members and 1 Guest are viewing this topic.

Marked as best answer by bplus on September 16, 2021, 01:36:12 pm

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #75 on: September 16, 2021, 05:32:17 pm »
OK readjusted array sizes for maximum efficiency, probably running close to customizing to data set. Definitely customized to the unixdict.txt file.

Now runs are about .74 sec average on my system>

Code: QB64: [Select]
  1. _Title "Word ladder v 2021-09-16" '2021-09-10 david has already improved his first version!
  2. ' ref:  https://www.qb64.org/forum/index.php?topic=4157.msg135293#msg135293
  3. ' get original version above, I am modifying below to study
  4. ' 2021-09-11 in v3 b+ mod david_uwi I modify to compare whole set to my orignal whole set
  5. ' 2021-09-11 in v4 I think I can load the words faster
  6. ' 2021-09-12 in v5 lets just call the external file once, use david's idea instead of _continue,
  7. ' I think it looks cleaner without _continue which tool out skipping a For loop by a THEN (GOTO) line #.
  8. ' Ave of 5 runs before this (mod 4) was 11.27.. see if we improve still more, also DefLng A-Z  oh wow.
  9. ' Ave of 5 runs now 8.74 another 2.5 secs shaved off
  10. ' 2021-09-12 in v6 though using asc instead of mid$ might go faster.
  11. ' Ave of 5 runs now is 4.45 secs another 4.29 sec off!
  12.  
  13. ' 2021-09-13 v7 b+ mod david_uwi = v6 b+ mod but I will attempt to translate letter variables into
  14. ' more meaningful in attempts to understand what is being done in his code.
  15. ' Shaved significant time by making store$ (used to be q4) not fixed!
  16. ' Yes run a quick check that target word connects to something does save us so much time that
  17. ' we get a better overall time for the whole set even though we added a tiny bit of time to
  18. ' the ones that do connect.
  19. ' Ave of 5 runs is now 2.57 sec another 1.88 secs shaved off.
  20.  
  21. ' Steve's mods, mainy with $checking:off saves about .3 sec for me with ave 2.27
  22.  
  23. ' v david_uwi 2021-09-14 tried to work in Steves mods with david_uwi's latest improvement
  24. ' plus I insist the shortest path is the one that sorts out first alphabetically :)
  25. ' Running an average of 2.01 secs for my (bplus) system.
  26.  
  27. ' v 2021-09-16 can we get 6 letters going?  I can't seem to get more that a 3 word connect by eye
  28. ' ah goot! seaman to skater works  Hurray! with the added 6 letter words to ladder it is taking even
  29. ' less time than before I generalized to do more than 5 letter words. This is because w() array no
  30. ' longer is fixed String * 5 but now variable length. Also reason #3 why we have to load the n letter
  31. ' words every time is because we change w(i) with starUsed$ signal as we go through it to
  32. ' indicate we've processed this word already. Average 1.49 secs per run!!!
  33. ' Holy moley! another 2 huge cuts in time!!! both storage and changes arrays don't have to be 10000 long!
  34. ' Now .67 secs average on my (b+) older laptop
  35.  
  36. ' v 2021-09-16 fix Dang something happened when I cut the arrays to 100 instead of 10000??? girl to lady
  37. ' got 2 words longer and alien to drool picked up a word and an alternate path.
  38. ' Cause: when $checking:off No error when subscript goes out of range in both  changes and store arrays.
  39. ' So found minimum that lets our set work 615.  OK now my (b+) average is .74 secs.
  40.  
  41. DefLng A-Z ' 2 secs off from old Single default!
  42. ReDim Shared Fwords$(1 To 1), UBF ' ubound of Fwords$
  43. start! = Timer(.001)
  44.  
  45. ' do just once for all ladder calls, Fwords$() contain the entire list of dictionary
  46. Open "unixdict.txt" For Binary As #1 ' take the file in a gulp
  47. buf$ = Space$(LOF(1))
  48. Get #1, , buf$
  49. Split buf$, Chr$(10), Fwords$()
  50. UBF = UBound(fwords$) ' track the ubound of Fwords$
  51.  
  52. ' gets some intell on the word file
  53. 'Print UBF ' 25,105 words
  54. 'Dim lcount(3 To 10) ' what is largest word list I need?
  55. 'For i = 1 To UBF
  56. '    lw = Len(Fwords$(i))
  57. '    If lw > 2 And lw <= 10 Then lcount(lw) = lcount(lw) + 1
  58. 'Next
  59. 'For i = 3 To 10
  60. '    Print i, lcount(i) ' 4060 is maximum words for a letter
  61. 'Next
  62. 'End
  63.  
  64.  
  65. ' test set of ladder calls
  66. ladder "boy", "man" '     quick
  67. ladder "girl", "lady" '   this takes awhile
  68. ladder "john", "jane" '   quick enough
  69. ladder "alien", "drool" ' cool but takes a long long time!
  70. ladder "child", "adult" ' and this takes awhile
  71. ladder "play", "ball" '   goes quick
  72. ladder "fun", "job" '     ditto
  73. ' These 6 letter words added to our test set to show it has been generalized past 5 letter words.
  74. ladder "cheese", "butter" ' Steve challnges to do more than 5 letter words  not going to connect
  75. ladder "seaman", "skater" ' I think this will connect
  76. Print: Print "Total time including one disk file access:"; Timer(.001) - start!
  77.  
  78. Sub ladder (q1$, q2$)
  79.     tt! = Timer(.001) ' time each ladder call, doesn't include one time download of words to Fwords$()
  80.     Dim w(4060) As String '* 5   <<< no fixed string huge time savings!!!! w() contains all words of Len(q1$)  max words = 4060 for 7 letters
  81.     Dim store$(615, 100) ' wow  went from fixed string storing connect words to not fixed string and shaved a sec off time!!!
  82.     Dim storeIndexs(100) ' tracking indexes to changes
  83.     Dim changes(615, 100) As String ' tracking the change letter and position going from one word to next
  84.     ' does changes have to be 10000? no! and another huge time cut!!! but more than 100
  85.     ' does store$ have to be 10000? no! and another huge time cut!!!
  86.     FI = 1
  87.     wordLength = Len(q1$)
  88.     'If wordLength < 5 Then q1$ = q1$ + Space$(5 - wordLength): q2$ = q2$ + Space$(5 - wordLength)
  89.     starUsed$ = String$(wordLength, "*") ' this is signal that word is used
  90.     While FI <= UBF
  91.         If Len(Fwords$(FI)) = wordLength Then
  92.             maxWordIndex = maxWordIndex + 1
  93.             If Fwords$(FI) = q1$ Then w(maxWordIndex) = starUsed$ Else w(maxWordIndex) = Fwords$(FI)
  94.         End If
  95.         FI = FI + 1
  96.     Wend
  97.  
  98.     'q2$ needs to have at least one connect or skip to end
  99.     '(this block will add a little more time to each ladder but save over a sec on adult or any target word with no connects)
  100.     For i = 1 To maxWordIndex
  101.         If w(i) <> q2$ Then ' just check before entering loop
  102.             cnt = 0
  103.             For j = 1 To wordLength
  104.                 If Asc(w(i), j) <> Asc(q2$, j) Then cnt = cnt + 1
  105.             Next j
  106.             If cnt = 1 Then ' q2$ has a connect good to go
  107.                 targetOK = -1: Exit For
  108.             End If
  109.         End If
  110.     Next i
  111.     If targetOK = 0 Then Print "No path found! from "; q1$; " to "; q2$: GoTo skip
  112.  
  113.     ' carry on with david_uwi's original algo modified by b+ for more general use and speed help from SMcNeill
  114.     jk = 1
  115.     storeIndexs(jk) = 1
  116.     store$(1, 1) = q1$
  117.     Do
  118.         For i = 1 To maxWordIndex
  119.             If w(i) <> starUsed$ Then
  120.                 cnt = 0
  121.                 For kk = 1 To storeIndexs(jk)
  122.                     cnt = 0
  123.                     For j = 1 To wordLength
  124.                         If Asc(w(i), j) = Asc(store$(kk, jk), j) Then cnt = cnt + 1 Else zz = j
  125.                     Next j
  126.                     If cnt = wordLength - 1 Then
  127.                         t = jk + 1
  128.                         storeIndexs(t) = storeIndexs(t) + 1
  129.                         store$(storeIndexs(t), t) = w(i)
  130.                         changes(storeIndexs(t), t) = changes(kk, jk) + Mid$(w(i), zz, 1) + Chr$(zz) + " " ' try Steve's T substitution version
  131.                         w(i) = starUsed$
  132.                     End If
  133.                 Next kk
  134.             End If
  135.         Next i
  136.         kflag = 0
  137.         ''*****new routine!!! by david_uwi
  138.         cnu = 0
  139.         For i = storeIndexs(t) To 1 Step -1 ' b+ reversed this for shortest path alphabetically
  140.             cnu = 0
  141.             For iq = 1 To wordLength
  142.                 If Asc(store$(i, t), iq) = Asc(q2$, iq) Then cnu = cnu + 1
  143.             Next iq
  144.             If cnu = wordLength - 1 Then kflag = 99: final$ = changes(i, t)
  145.         Next i
  146.  
  147.         If storeIndexs(t) = 0 Then kflag = 99
  148.         jk = jk + 1
  149.         If jk > 100 Then Print "No path found! from "; q1$; " to "; q2$: GoTo skip 'b+ added this for words that wont connect else error's out
  150.         If kflag = 99 Then Exit Do
  151.     Loop
  152.     If storeIndexs(jk) = 0 Then Print "No path found! from "; q1$; " to "; q2$ ' b+ removed a print blank line
  153.     If storeIndexs(jk) > 0 Then ' this is Steve's t substitution for david_uwi's jk + 1 using Asc instead of Mid$
  154.         xlen = Len(final$)
  155.         t$ = q1$
  156.         For i = 1 To xlen Step 3
  157.             c1 = Asc(final$, i)
  158.             c2 = Asc(final$, i + 1)
  159.             Asc(q1$, c2) = c1
  160.             t$ = t$ + " " + q1$
  161.         Next i
  162.         Print t$; " "; q2$
  163.     End If
  164.     skip:
  165.     Print "time taken = "; Timer(.001) - tt!; " seconds"
  166.  
  167. Sub Split (SplitMeString As String, delim As String, loadMeArray() As String)
  168.     Dim curpos As Long, arrpos As Long, LD As Long, dpos As Long 'fix use the Lbound the array already has
  169.     curpos = 1: arrpos = LBound(loadMeArray): LD = Len(delim)
  170.     dpos = InStr(curpos, SplitMeString, delim)
  171.     Do Until dpos = 0
  172.         loadMeArray(arrpos) = Mid$(SplitMeString, curpos, dpos - curpos)
  173.         arrpos = arrpos + 1
  174.         If arrpos > UBound(loadMeArray) Then ReDim _Preserve loadMeArray(LBound(loadMeArray) To UBound(loadMeArray) + 1000) As String
  175.         curpos = dpos + LD
  176.         dpos = InStr(curpos, SplitMeString, delim)
  177.     Loop
  178.     loadMeArray(arrpos) = Mid$(SplitMeString, curpos)
  179.     ReDim _Preserve loadMeArray(LBound(loadMeArray) To arrpos) As String 'get the ubound correct
  180.  
  181.  

With the familiar paths:
 
v 2021-09-16.PNG
« Last Edit: September 16, 2021, 05:34:51 pm by bplus »

Offline johnno56

  • Forum Resident
  • Posts: 1270
  • Live long and prosper.
Re: Word ladder - Rosetta Code
« Reply #76 on: September 17, 2021, 12:24:06 am »
0.644... I am impressed! Well done!
Logic is the beginning of wisdom.

Offline SpriggsySpriggs

  • Forum Resident
  • Posts: 1145
  • Larger than life
    • GitHub
Re: Word ladder - Rosetta Code
« Reply #77 on: September 17, 2021, 10:45:08 am »
Is this going to be used for like an auto-correct or auto-suggestion algorithm?
Shuwatch!

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #78 on: September 17, 2021, 11:24:41 am »
What an interesting idea, a use for this ;-))

I think in your standard magazine of word puzzles, Word Ladders are fun specially with connecting related words like boy and man, fun and job, ...

So I think the next challenge here would be to find all of them that have some middle word at least. EDIT: oh alternate paths might be more fun here!

How long would that take for 3 letter words < 1000 and less than a sec to check?
Need an array copier and pull Steve's ideas in about skipping all non connecting words.



« Last Edit: September 17, 2021, 11:26:16 am by bplus »

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • Steve’s QB64 Archive Forum
Re: Word ladder - Rosetta Code
« Reply #79 on: September 17, 2021, 12:47:32 pm »
If you’re going that route, check out my spell checker program in the samples.  It works excellently well for autocomplete and autosuggestion — especially with a limited comparison list.  In its case, it shoots for words that are X percent a match to each other, so the more words you have, the larger a list of false-matches it’s going to create.

For something like the QB64 IDE, it’d work amazingly well.  Fast enough to run with real time typing without lag.  Small enough data set to keep false results to a trivial level of a bare minimum. 

When I came up with my simple spell checker, I made it for a teacher to use with their class assignments.  A quiz on the 50 states, for example, and the question might be: “Which state has Jackson as its capitol?”

The answer, of course, is “Mississippi”, which is 100% correct.

The problem is a lot of students can’t spell that!  Even if they *know* the correct answer, their spelling is off…

And so the algorithm returns a percent match.  100% match is a perfect match.  90% match is an “acceptable” match (Mississipi would be close enough), where the test counts the question as right, but marks half points off for spelling.  Below the set variance level, the answer is wrong completely.
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #80 on: September 17, 2021, 01:22:11 pm »
If you are interested in Steve's SpellChecker definately check this out:
https://www.qb64.org/forum/index.php?topic=2265.msg114998#msg114998

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #81 on: September 18, 2021, 08:54:47 pm »
That crazy b+ ran all ladders possible of 3 letter words (without digits or punctuation marks = 753).

This amounts to (753 * 752)/2 = 283,128 word ladders to check.

The longest path had 11 words; there are 51 of them (not counting their reverse):
Code: [Select]
btu btl bel bee bye aye abe abc nbc nyc nyu
ceq seq see bee bye aye abe abc nbc nyc nyu
chi phi phd pad pan ian inn inc icc fcc fmc
chi phi phd pad pan ian inn inc icc fcc fpc
chi phi phd pad pan ian inn inc icc icy ivy
chi phi phd pad par ear err era ira irs mrs
chi phi phd pod cod cos cbs nbs nbc nyc nyu
egg ego ago age ace acm scm sci sri uri urn
eng erg ere are ace acm scm sci sri uri urn
fcc icc inc inn ian pan pad phd phi psi lsi
fcc icc inc inn ion bon boa goa gsa usa usc
fcc icc ice ace acm scm sci sri uri urn usn
fmc fcc icc inc inn ian can cap gap gnp gnu
fmc ftc etc eta pta pea pee poe poi psi lsi
fmc fcc icc ice ace acm scm sci sri uri urn
fmc fcc icc inc inn ion bon boa goa gsa usa
fmc ftc etc eta pta pea pee see sse use usc
fmc ftc etc eta pta pea pee see sse use usn
fpc fcc icc inc inn ian can cap gap gnp gnu
fpc ftc etc eta pta pea pee poe poi psi lsi
fpc fcc icc ice ace acm scm sci sri uri urn
fpc fcc icc inc inn ion bon boa goa gsa usa
fpc ftc etc eta pta pea pee see sse use usc
fpc ftc etc eta pta pea pee see sse use usn
ftc fcc icc ice ace acm scm sci sri uri urn
gnu gnp gap cap can ian inn inc icc icy ivy
iii vii vie die dye aye abe abc nbc nyc nyu
imp amp ama aaa faa fad pad phd phi psi lsi
imp amp alp ale ace acm scm sci sri uri urn
imp amp ama aaa faa fad gad god goa gsa usa
imp amp alp ale aye bye bee see sse use usc
imp amp alp ale aye bye bee see sse use usn
ivy icy ice ace aye dye doe poe poi psi lsi
ivy icy icc inc inn ion bon boa goa gsa usa
ivy icy ice ace aye bye bee see sse use usc
ivy icy ice ace acm scm sci sri uri urn usn
lsi psi poi pot cot crt art are ire irs mrs
lsi psi poi pod cod cos cbs nbs nbc nyc nyu
mrs irs ire are ace acm scm sci sri uri urn
mrs irs irk ink inn ion bon boa goa gsa usa
mrs irs ire are aye bye bee see sse use usc
mrs irs ire are aye bye bee see sse use usn
nco ncr nor nod cod cos cbs nbs nbc nyc nyu
nyu nyc nrc arc arm acm scm sci sri uri urn
nyu nyc nbc nbs cbs cos cod god goa gsa usa
nyu nyc nbc nbs pbs pus sus sue sse use usc
nyu nyc nbc nbs pbs pus sus sue sse use usn
old odd add aid aim acm scm sci sri uri urn
rca rna ana ant act acm scm sci sri uri urn
rca rna ana ant tnt tot got goa gsa usa usc
rca rna ana ant tnt tot got goa gsa usa usn
 51


Time was 2091.75 secs or 35 mins. rounded.
« Last Edit: September 18, 2021, 09:01:10 pm by bplus »

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • Steve’s QB64 Archive Forum
Re: Word ladder - Rosetta Code
« Reply #82 on: September 18, 2021, 10:57:02 pm »
Now, just do that for all the other words (run it before going to bed, see results in the morning) and save that solved file.  Instant answers right at your fingertips after that!  LOL
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline david_uwi

  • Newbie
  • Posts: 71
Re: Word ladder - Rosetta Code
« Reply #83 on: September 19, 2021, 02:30:55 am »
sse, gsa, btl - I would not count these as words (and there are many others which may be abbreviations or acronyns).
I think we need a better word list.

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #84 on: September 19, 2021, 11:27:46 am »
sse, gsa, btl - I would not count these as words (and there are many others which may be abbreviations or acronyns).
I think we need a better word list.

Agreed specially searching for fun paths; avis, ames, aden are all names:

Longest 4 letter paths from unixdict.txt
Code: [Select]
jibe gibe give five fine find bind bend bead brad grad grid arid avid avis axis axes ames amen aden eden even oven
numb dumb dump bump burp burn bern bean bead brad grad grid arid avid avis axis axes ames amen aden eden even oven
oven even eden aden amen ames axes axis avis avid arid grid grad brad bead bean bern burn burp bump dump duma puma
oven even eden aden amen ames axes axis avis avid arid grid grad goad goat gout glut glue clue club chub chug thug
 4
Took all night and timing messed up by midnight problem, not going to run again. Have to run these things first time with $Checking:Off in case arrays or something fails. 2,366,400 ladders to check.

I have old Scrabble dictionary, I think it's from Steve's Spellchecker, just learned they are going to start allowing proper names.

Offline jack

  • Seasoned Forum Regular
  • Posts: 408
Re: Word ladder - Rosetta Code
« Reply #85 on: September 19, 2021, 11:43:10 am »
@bplus
you could possibly speed things up quite a bit by adding -O2 to the makeline_win.txt if you are on Windows, sometimes your program runs 2 times faster
makeline_win.txt is found in qb64\internal\c
change it to
Quote
c_compiler\bin\g++ -s -O2 -fopenmp -Wfatal-errors -w -Wall qbx.cpp -lws2_32 -lwinspool parts\core\os\win\src.a -lopengl32 -lglu32 -lwinmm -lgdi32 -mwindows -static-libgcc -static-libstdc++ -D GLEW_STATIC -D FREEGLUT_STATIC -lksguid -lole32 -lwinmm -ldxguid -o ..\..\

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #86 on: September 19, 2021, 12:46:35 pm »
Try a run with Scrabble Word List 2006.txt (I think Steve and I used these for Anagrams). There are 1015 3 letter words (no digits or punctuation) maybe fewer acronyms but already there is problem word aas. 1015 words needs to check 514,605 word ladders.

An ani is a bird.

The football game is starting before this will be done...

Offline SMcNeill

  • QB64 Developer
  • Forum Resident
  • Posts: 3972
    • Steve’s QB64 Archive Forum
Re: Word ladder - Rosetta Code
« Reply #87 on: September 19, 2021, 12:49:44 pm »
Agreed specially searching for fun paths; avis, ames, aden are all names:

avis is plural of avi, which is recognized short speak for avatar.  “I don’t use photos of myself in my avis, and I don’t use my name in my handles.”

aden is a word element basically for “gland”.  Ex: adenovirus, adenopathy, adenocarcinoma. (Glandular virus, pain in the glands, glandular cancer)

If you’d count “pre” as a word (preschool, premeditation, premenopausal), then aden counts as well by being the the same structure; a word prefix/building block.



As for ames, I have no idea what it represents, except as a name.  I don’t know any ame either, so unless it’s a pleural form of am (which it actually would be in my neck of the woods via, “Mam, we ames hungry,”. — Appalachian English is funny like that), I can’t see why it’s actually in a word list when other, more common, names aren’t.
https://github.com/SteveMcNeill/Steve64 — A github collection of all things Steve!

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #88 on: September 19, 2021, 12:54:15 pm »
I found aden in Urban slang:
Quote
Aden
Aden is one of the kindest people you will ever meet. He’s sometimes shy and feels insecure, but a very great listener and is very open and accepting to everyone around him. Though you may not see it, you’ll need him more than you think. He is great to talk to and hangout with and will never fail to make you laugh when you need it most. He is also highly intelligent in more than one way. Aden is the complete opposite of self centered, and always puts others before himself. Overall, if you know an Aden, become friends with him. If you’re already friends, make sure to let him know how much you care.

Offline bplus

  • Global Moderator
  • Forum Resident
  • Posts: 8053
  • b = b + ...
Re: Word ladder - Rosetta Code
« Reply #89 on: September 19, 2021, 03:43:33 pm »
60 paths of 10 3-letter words from Scrabble:
Code: [Select]
cru cry cay bay bal aal all alp amp imp
cru cry coy con ion inn ink ick icy ivy
cru cry cay bay bas aas ars ark auk suk
cru cry cay bay bal aal all alp amp ump
cru cry cay bay bas aas ars ark auk yuk
cwm cum cue due dye aye ace ice icy ivy
gym gam gat git ait act ace ice icy ivy
igg egg erg era bra baa bam ham hmm umm
imp amp alp als aas fas fes feu fou sou
imp amp alp als aas fas fes feu flu ulu
imp amp alp als aas fas fes feu fou you
ivy icy ice ire ere err brr bur bum lum
ivy icy ick ink inn ion fon foy fly ply
ivy icy ick ink inn ion con coy cry pry
ivy icy ice ire ere err brr bur bum rum
ivy icy ice ire ere err ear lar lac sac
ivy icy ice ire ere era bra baa bad sad
ivy icy ice ire ere era bra baa bag sag
ivy icy ice ire ere era bra baa bap sap
ivy icy ick ink inn ion con can caw saw
ivy icy ick ink inn ion fon foy fly sly
ivy icy ice ire ere err brr bur bum sum
ivy icy ice ire ere era bra baa bad tad
ivy icy ice ire ere era bra baa bag tag
ivy icy ice ace aye kye kae hae haj taj
ivy icy ice ire ere era bra baa bam tam
ivy icy ice ace aye kye kae hae hao tao
ivy icy ice ire ere era bra baa bap tap
ivy icy ice ire ere err ear lar lav tav
ivy icy ick ink inn ion con can caw taw
ivy icy ick ink inn ion con coy cry try
ivy icy ice ace aye lye lee lex lux tux
ivy icy ick ink inn ion fon fou flu ulu
ivy icy ice ace act ait aim him hmm umm
ivy icy ice ire ere err ear lar lac vac
ivy icy ice ire ere err ear lar lav vav
ivy icy ick ink inn ion con can caw vaw
ivy icy ice ire ere err brr bur bum vum
ivy icy ice ire ere era bra baa bad wad
ivy icy ice ire ere era bra baa bag wag
ivy icy ice ire ere era bra baa bap wap
ivy icy ick ink inn ion con can caw waw
ivy icy ick ink inn ion con coy cry wry
ivy icy ice ire ere era bra baa bag yag
ivy icy ice ire ere era bra baa bam yam
ivy icy ice ire ere era bra baa bap yap
ivy icy ick ink inn ion con can caw yaw
ivy icy ice ire ere err brr bur bum yum
ivy icy ice ire ere era bra baa bag zag
ivy icy ice ire ere era bra baa bap zap
oxy oxo oho mho moo mod mud dud dui tui
sou fou foe doe dye aye are ark auk suk
sou fou foe doe dye aye ale alp amp ump
sou fou foe doe dye aye are ark auk yuk
suk auk ark ars aas fas fes feu flu ulu
suk auk ark ars aas fas fes feu fou you
ulu flu fly fay fas aas als alp amp ump
ulu flu fly fay fas aas ars ark auk yuk
ump amp alp als aas fas fes feu fou you
you fou foe doe dye aye are ark auk yuk
 60


Quote
Yes, suk is in the scrabble dictionary
...and is worth 8 points.
find more words you can make below
+ feedback
Sponsored
suk
Know an interesting fact about the word suk? Let us know
noun
1. Alternative spelling of souq.

+ improve definition

Quote
What is the meaning of souq?
Filters. A street market, particularly in Arabic- and Somali-speaking countries; a place where people buy and sell goods; a bazaar.