Prime words
A word is a prime one if its letters ASCII codes are primes.
REXX
<lang rexx>/*REXX pg finds words whose ASCI code for its letters (within an identified dictionary).*/ parse arg iFID . /*obtain optional arguments from the CL*/ if iFID== | iFID=="," then iFID='unixdict.txt' /*Not specified? Then use the default.*/ call genPrimes /*generate all primes less than 256. */ say 'reading the dictionary file: ' iFID /*show which dictionary is being read. */ say
- = 0 /*count of prime words found (so far).*/
do recs=0 while lines(iFID)\==0 /*read each word in the file (word=X).*/ x= strip( linein( iFID) ) /*pick off a word from the input line. */
do j=1 for length(x) /*examine each letter (char) in word. */ _= c2d( substr(x, j, 1) ) /*convert each letter to a decimal num.*/ if \@._ then iterate recs /*is this ASCII code letter a prime ? */ end /*j*/ say x /*display a prime word to the terminal.*/ #= # + 1 /*bump the count of prime words. */ end /*recs*/ /* [↑] semaphore name is uppercased. */
say say copies('─', 30) recs "usable words in the dictionary file: " iFID say 'found ' # " prime words in the dictionary." exit 0 /*stick a fork in it, we're all done. */ /*──────────────────────────────────────────────────────────────────────────────────────*/ genPrimes: p= 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 ,
67 71 73 79 83 89 97 101 103 107 109 113 127 131 137 139 149 151 , 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241 251 @.= 0; do j=1 for words(p); _= word(p, j); @._= 1; end /*j*/; return</lang>
- output when using the default input:
reading the dictionary file: unixdict.txt a aaa age agee ak am ama e egg eke em emma g ga gag gage gam game gamma ge gee gem gemma gm k keg m ma mae magma make mamma me meek meg q ────────────────────────────── 25104 usable words in the dictionary file: unixdict.txt found 36 prime words in the dictionary.
Ring
<lang ring> load "stdlib.ring"
cStr = read("unixdict.txt") wordList = str2list(cStr) Words = []
for n = 1 to len(wordList)
num = 0 len = len(wordList[n]) for m = 1 to len asc = ascii(wordList[n][m]) if isprime(asc) num = num + 1 else exit ok next if num = len and len > 2 add(Words,wordList[n]) ok
next
see "Prime words are:" + nl see Words </lang> Output:
Prime words are: aaa age agee ama egg eke emma gag gage gam game gamma gee gem gemma keg mae magma make mamma meek meg