Try to create the largest (most letters used)
Double Word Square where
each letter in the square is
distinct. All words used must be English words which are not strictly proper nouns (capitalized), interjections or slang. The words do not all need be common.
As more than one possibility can exist, score the word square of your submission as a sum of the values of each across word using the normal letter values of the
English-language edition of Scrabble ® + 100*
o, where
o is the order of the word square*:
1 : A, E, I, L, N, O, R, S, T, U
2 : D, G
3 : B, C, M, P
4 : F, H, V, W, Y
5 : K
8 : J, X
10: Q, Z
* A word square of order 3 is a square 3x3, a word square of order 4 is a square 4x4, etc.
I figured a 5x5 would be impossible due to an insufficient availability of vowels, and excruciatingly long in run time, and so kept it to 4x4's. At that it took 7 or 8 hours to run, after debugging using 3x3's (not carried out to the end).
The scores to the right of each set are just the totals of the values of the letters used. I think the directions call for adding 400 to this as these are 4x4.
The largest score shown is 37, but I can't find "upby" in a legitimate dictionary. I had used a word list from the internet.
The 34-pointer uses some obscure, but legitimate, words, with definitions shown here from the Random House unabridged dictionary:
chid = one form of the past tense of chide
wany = waning or decreasing; also descriptive of wood containing many defects
murk = darkness, gloom
sloe = the small, sour, blackish fruit of the blackthorn
cwms = cirques (i.e., circles or rings)
haul = pull, drag
inro = a small lacquer box with compartments for medicines, cosmetics, etc., worn on the waist sash of the traditional Japanese costume.
dyke = dike: an embankment for controlling or holding back the waters of the sea or a river
Note that capitalized words are not used below: particularly, "bach" is an informal term for bachelor, and not the proper name of the composer.
bach
ruly
item
gown 32
bach
ruly
item
sown 31
bash
ruly
item
gown 30
caph
ruly
item
sown 31
chid
wany
murk
sloe 34
chit
wany
murk
sloe 33
chow
ruby
agin
pets 32
chug
oily
frap
tens 30
fash
ruly
item
gown 31
flow
ruby
agin
pets 30
gash
ruly
item
down 29
glib
yuca
prow
send 30
grid
yuca
plow
sent 28
irks
tune
clag
hypo 31
irks
tuna
clod
hype 31
irks
tuna
clog
hype 31
kaph
ruly
item
sown 33
meow
upby
chin
kats 37
nags
ecru
whim
typo 32
pash
ruly
item
gown 30
slid
yuca
prof
hent 30
slid
yuca
prow
hent 30
tick
ogre
plan
hubs 30
tick
ogre
play
hubs 33
tick
ogre
plan
hums 30
tick
ogre
play
hums 33
tidy
ogre
plan
hubs 28
tidy
ogre
plan
hums 28
The program is written to handle only 3x3 or 4x4, by changing the value of the variable order:
DECLARE FUNCTION isWord& (wrd$)
DECLARE SUB chooseCol (p%)
DEFINT A-Z
DATA aeilnorstu,dg,bcmp,fhvwy,k,,,jx,,qz
DIM SHARED letval(26)
FOR v = 1 TO 10
READ vl$
FOR i = 1 TO LEN(vl$)
letval(ASC(MID$(vl$, i, 1)) - 96) = v
NEXT
NEXT v
FOR i = 1 TO 26: PRINT letval(i); : NEXT
DIM SHARED used(26), order, w$, w0$, wc$(5)
order = 4
filen$ = "\words\words" + LTRIM$(STR$(order))
OPEN filen$ + ".txt" FOR BINARY AS #1
OPEN filen$ + ".idx" FOR BINARY AS #2
w$ = SPACE$(order)
DO
p$ = w$
GET #1, , w$
wct = wct + 1
IF EOF(1) THEN EXIT DO
IF LEFT$(w$, 1) <> LEFT$(p$, 1) THEN
PUT #2, , wct
END IF
LOOP
CLOSE
OPEN filen$ + ".txt" FOR BINARY AS #1
OPEN filen$ + ".idx" FOR BINARY AS #2
OPEN filen$ + ".txt" FOR BINARY AS #3
OPEN "dblwrdsq.txt" FOR OUTPUT AS #4
DO
GET #1, , w$
IF EOF(1) THEN EXIT DO
wprv$ = w0$
IF LEFT$(w$, 1) > LEFT$(wprv$, 1) THEN PRINT LEFT$(w$, 1)
w0$ = w$
good = 1
FOR i = 1 TO order - 1
IF INSTR(MID$(w0$, i + 1), MID$(w0$, i, 1)) THEN good = 0: EXIT FOR
NEXT
IF good THEN
FOR i = 1 TO order
used(ASC(MID$(w0$, i, 1)) - 96) = 1
NEXT
chooseCol 1
FOR i = 1 TO order
used(ASC(MID$(w0$, i, 1)) - 96) = 0
NEXT
END IF
LOOP
CLOSE
SUB chooseCol (p)
psn = (ASC(MID$(w0$, p, 1)) - 96) * 2 - 1
GET #2, psn, bgnwnum
wdpos& = (bgnwnum - 1) * order + 1
DO
GET #3, wdpos&, w$
IF EOF(3) THEN EXIT DO
IF LEFT$(w$, 1) <> MID$(w0$, p, 1) THEN EXIT DO
good = 1
IF p = 1 THEN
IF MID$(w$, 2, 1) <= MID$(w0$, 2, 1) THEN good = 0
END IF
FOR i = 1 TO LEN(w$) - 1
IF INSTR(MID$(w$, i + 1), MID$(w$, i, 1)) THEN good = 0: EXIT FOR
NEXT
IF good THEN
FOR i = 2 TO LEN(w$)
j = ASC(MID$(w$, i, 1)) - 96
IF used(j) THEN good = 0: EXIT FOR
NEXT
IF good THEN
FOR i = 2 TO LEN(w$)
j = ASC(MID$(w$, i, 1)) - 96
used(j) = 1
NEXT
wc$(p) = w$
IF p = order THEN
tst2$ = MID$(wc$(1), 2, 1) + MID$(wc$(2), 2, 1) + MID$(wc$(3), 2, 1) + MID$(wc$(4), 2, 1)
tst3$ = MID$(wc$(1), 3, 1) + MID$(wc$(2), 3, 1) + MID$(wc$(3), 3, 1) + MID$(wc$(4), 3, 1)
tst4$ = MID$(wc$(1), 4, 1) + MID$(wc$(2), 4, 1) + MID$(wc$(3), 4, 1) + MID$(wc$(4), 4, 1)
tst2$ = LTRIM$(RTRIM$(tst2$))
tst3$ = LTRIM$(RTRIM$(tst3$))
tst4$ = LTRIM$(RTRIM$(tst4$))
IF isWord(tst2$) THEN
IF isWord(tst3$) THEN
IF order = 3 THEN
ok = 1
ELSEIF isWord(tst4$) THEN
ok = 1
ELSE
ok = 0
END IF
IF ok THEN
totpts = 0
FOR i = 1 TO 26
IF used(i) THEN
totpts = totpts + letval(i)
END IF
NEXT
PRINT w0$
PRINT tst2$
PRINT tst3$
PRINT tst4$, totpts
PRINT
PRINT #4, w0$
PRINT #4, tst2$
PRINT #4, tst3$
PRINT #4, tst4$, totpts
PRINT #4,
END IF
END IF
END IF
ELSE
chooseCol p + 1
END IF
FOR i = 2 TO LEN(wc$(p))
j = ASC(MID$(wc$(p), i, 1)) - 96
used(j) = 0
NEXT
END IF
END IF
wdpos& = wdpos& + order
LOOP
END SUB
DEFLNG A-Z
FUNCTION isWord (wrd$)
n = LEN(wrd$)
wrd1$ = SPACE$(n)
l = LOF(1) / n
low = 1: high = l
DO
mid = INT((low + high) / 2)
GET #3, (mid - 1) * n + 1, wrd1$
IF wrd1$ = wrd$ THEN isWord = -1: EXIT FUNCTION
IF wrd1$ < wrd$ THEN low = mid + 1: ELSE high = mid - 1
LOOP UNTIL low > high
isWord = 0
END FUNCTION
|
Posted by Charlie
on 2011-10-08 01:40:50 |