Changeable words: Difference between revisions

m
→‎{{header|REXX}}: moved the reading and filtering the dictionary to a subroutine.
m (→‎{{header|REXX}}: elided a duplicate filter for the words, changed whitespace, moved an assignment statement.)
m (→‎{{header|REXX}}: moved the reading and filtering the dictionary to a subroutine.)
Line 863:
if minL=='' | minL=="," then minL= 12 /*Not specified? Then use the default.*/
if iFID=='' | iFID=="," then iFID='unixdict.txt' /* " " " " " " */
@.= call readDict /*defaultread value& ofprocess/filter anythe dictionary word.*/
wc= 0 /*WC: the word count of usable words.*/
do #=1 while lines(iFID)\==0 /*read each word in the file (word=X).*/
x= strip( linein( iFID) ) /*pick off a word from the input line. */
if length(x)<minL then iterate /*Is the word too short? Then skip it.*/
if \datatype(x, 'M') then iterate /* " " " not alphabetic? Skip it.*/
wc= wc+1; $.wc= x; upper x; @.x= $.wc /*bump word counter; save original case*/
end /*#*/ /* [↑] semaphore name is uppercased. */
 
say copies('─', 30) # "words ("wc 'usable words) in the dictionary file: ' iFID
abc= 'abcdefghijklmnopqrstuvwxyz'; upper abc /*alphabet ordered by frequency of use.*/
Labc= length(abc) /*the length of the alphabet to be used*/
finds= 0 /*count of the changeable words found.*/
do j=1 for wcn; L= length($.j) /*process all the words that were found*/
x= $.j; upper x /*get an uppercased version of the word*/
 
pad= left('', 9) /*PAD: used for indenting the output.*/
do k=1 for L; y= substr(x, k, 1) /*Y: the current letter being changed.*/
do c=1 for Labc /* [↓] change the Y letter to another.*/
?= substr(abc, c, 1) /*get a new char to replace one in word*/
if ?==y then iterate /*Is this the same char? Then use next*/
new= overlay(?, x, k); upper new /*create a spanking new (changed) word.*/
if @.new=='' then iterate /*ifNew theword newnot wordin isn'tdictionary? a word, skipSkip it.*/
finds= finds + 1 /*bump count of changeable words found.*/
say pad right(left($.j, 30), 40) @.new /*indent original word for readability.*/
end /*c*/
end /*k*/
end /*j*/
say copies('─', 30) finds ' changeable words found with a minimum length of ' minL</lang>
exit 0 pad= left('', 9) /*PAD:stick a fork usedin forit, indenting thewe're outputall done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
wc= 0 readDict: n=0; @.= /*WCN: the word count of usable words. */
do #=1 while lines(iFID)\==0 /*read each word in the file (word=X).*/
x= strip( linein( iFID) ) /*pick off a word from the input line. */
if length(x)<minL then iterate /*Is the word too short? Then skip it.*/
if \datatype(x, 'M') then iterate /* " " " not alphabetic? Skip it.*/
wc n= wcn + 1; $.wcn= x; upper x; @.x= $.wc /*bump the word counter; save originalassign to $. case*/
upper x; @.x= $.n /*assign uppercased word ───► array. */
end /*#*/ end /*#*/ /* [↑] semaphore name is uppercased. */
say copies('─', 30) # "words ("wcn 'usable words) in the dictionary file: ' iFID
return</lang>
{{out|output|text=&nbsp; when using the default inputs:}}
<pre>