Find words which contain the most consonants

From Rosetta Code
Revision as of 22:54, 15 February 2021 by Chunes (talk | contribs) (→‎{{header|Factor}}: don't need to include namespace twice)
Find words which contain the most consonants is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
Task

Use the dictionary  unixdict.txt

Find the words which contains most consonants,   but each consonant should appear only once in a word.

The length of any word shown should have a length   >  10.

Factor

<lang factor>USING: assocs formatting io.encodings.ascii io.files kernel math prettyprint prettyprint.config sequences sets sets.extras ; FROM: namespaces => set ;

"unixdict.txt" ascii file-lines [ length 10 > ] filter [ "aeiou" without all-unique? ] filter dup length "Found %d words with unique consonants (length > 10).\n" printf [ [ "aeiou" member? not ] count ] collect-by >alist reverse

9 length-limit set 200 margin set .</lang>

Output:
Found 347 words with unique consonants (length > 10).
{
    { 9 V{ "comprehensible" } }
    { 8 V{ "administrable" "anthropology" "blameworthy" "bluestocking" "boustrophedon" "bricklaying" "chemisorption" "christendom" ~31 more~ } }
    { 7 V{ "acknowledge" "algorithmic" "alphanumeric" "ambidextrous" "amphibology" "anchoritism" "atmospheric" "autobiography" ~122 more~ } }
    { 6 V{ "aboveground" "advantageous" "adventurous" "aerodynamic" "anglophobia" "anisotropic" "archipelago" "automorphic" ~144 more~ } }
    { 5 V{ "acquisition" "acquisitive" "acrimonious" "ceremonious" "deleterious" "diatomaceous" "egalitarian" "equilibrate" ~14 more~ } }
    { 4 V{ "audiovisual" "bourgeoisie" "onomatopoeia" } }
}

Julia

Translation of: Phix

<lang julia>consonant(ch) = !(ch in ['a', 'e', 'i', 'o', 'u']) singlec(consonants) = length(unique(consonants)) == length(consonants) over10sc(word) = length(word) > 10 && singlec(filter(consonant, word)) mostc(word) = [-length(filter(consonant, word)), word] const res = sort(map(mostc, filter(over10sc, split(read("unixdict.txt", String), r"\s+")))) println(length(res), " words found.\n\nWord Consonants\n----------------------") foreach(a -> println(rpad(a[2], 16), -a[1]), res)

</lang>

Output:
347 words found.

Word        Consonants
----------------------
comprehensible  9
administrable   8
anthropology    8
blameworthy     8
bluestocking    8
boustrophedon   8
bricklaying     8
chemisorption   8
christendom     8
claustrophobia  8
compensatory    8
comprehensive   8
counterexample  8

-- multiple lines deleted --

audiovisual     4
bourgeoisie     4
onomatopoeia    4

Phix

<lang Phix>function consonant(integer ch) return find(ch,"aeiou")=0 end function function singlec(string consonants) return length(unique(consonants))=length(consonants) end function function over10sc(string word) return length(word)>10 and singlec(filter(word,consonant)) end function function mostc(string word) return {length(filter(word,consonant)),word} end function sequence res = sort_columns(apply(filter(get_text("demo/unixdict.txt",GT_LF_STRIPPED),over10sc),mostc),{-1,2}) printf(1,"%d most consonant words: %v\n",{length(res),shorten(res,"",2)})</lang>

Output:
347 most consonant words: {{9,"comprehensible"},{8,"administrable"},"...",{4,"bourgeoisie"},{4,"onomatopoeia"}}

REXX

This REXX version doesn't care what order the words in the dictionary are in,   nor does it care what
case  (lower/upper/mixed)  the words are in,   the search for the words is   caseless.

It also allows the minimum length to be specified on the command line (CL) as well as the dictionary file identifier. <lang rexx>/*REXX pgm finds words (within an identified dict.) which contain the most consonants.*/ parse arg minl iFID . /*obtain optional arguments from the CL*/ if minl== | minl=="," then minl= 11 /*Not specified? Then use the default.*/ if iFID== | iFID=="," then iFID='unixdict.txt' /* " " " " " " */

          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. */
          @.#= x                                /*save:  the original case of the word.*/
          end   /*#*/
  1. = # - 1 /*adjust word count because of DO loop.*/

say copies('─', 30) # "words in the dictionary file: " iFID xyz= 'bcdfghjklmnpqrstvwxyz'; upper xyz /*list of the 21 uppercase consonants. */ L= length(xyz) /*number of consonants in the alphabet.*/ maxCnt= 0 /*max # unique consonants in a max set.*/ !.=;  !!.= 0 /* " " " " " " word. */

     do j=1  for #;     $= @.j;     upper $     /*obtain an uppercased word from dict. */
     if length($)<minl         then iterate     /*Is word long enough?   No, then skip.*/
     cnt= 0                                     /*the number of consonants  (so far).  */
        do k=1  for L;  q= substr(xyz, K, 1)    /*examine all consonants for uniqueness*/
        _= pos(q, $)
        if _==0                then iterate     /*Is this consonant present?  No, skip.*/
        if pos(q, $, _ + 1)>0  then iterate j   /*More than 1 same consonant? Then skip*/
        cnt= cnt + 1                            /*bump the number of consonants so far.*/
        end      /*k*/
     !.cnt= !.cnt  @.j                          /*append a word to a specific len list.*/
     !!.cnt= cnt                                /*keep track of # of unique consonants.*/
     maxCnt= max(maxCNT, cnt)                   /*save the maximum count  (so far).    */
     end         /*j*/
                                                /*show sets of words, unique consonants*/
     do m=maxCnt  to 1  by -1;  n= words(!.m)   /*get the number of words in this set. */
     if n==0  then iterate                      /*Any word in this set?  No, then skip.*/
                                say;  say       /*show some blank lines between sets.  */
        do y=1  for n                           /*show individual words in the set.    */
        say right(y, L#)':'     right( left( word(!.m, y), 30),  40)    /*indent words.*/
        end   /*y*/
     say copies('─', 30)    n    " word"s(n)   'found which have '   !!.m   " unique" ,
                                 "consonants and having a minimum word length of: "  minl
     end   /*m*/

exit 0 /*stick a fork in it, we're all done. */ /*──────────────────────────────────────────────────────────────────────────────────────*/ s: if arg(1)==1 then return arg(3); return word( arg(2) 's', 1)</lang>

output   when using the default inputs:

(Shown at three-quarter size.)

────────────────────────────── 25104 words in the dictionary file:  unixdict.txt


    1:           comprehensible
────────────────────────────── 1  word found which have  9  unique consonants and having a minimum word length of:  11


    1:           administrable
    2:           anthropology
    3:           blameworthy
    4:           bluestocking
    5:           boustrophedon
    6:           bricklaying
    7:           chemisorption
    8:           christendom
    9:           claustrophobia
   10:           compensatory
   11:           comprehensive
   12:           counterexample
   13:           demonstrable
   14:           disciplinary
   15:           discriminable
   16:           geochemistry
   17:           hypertensive
   18:           indecipherable
   19:           indecomposable
   20:           indiscoverable
   21:           lexicography
   22:           manslaughter
   23:           misanthropic
   24:           mockingbird
   25:           monkeyflower
   26:           neuropathology
   27:           paralinguistic
   28:           pharmacology
   29:           pitchblende
   30:           playwriting
   31:           shipbuilding
   32:           shortcoming
   33:           springfield
   34:           stenography
   35:           stockholder
   36:           switchblade
   37:           switchboard
   38:           switzerland
   39:           thunderclap
────────────────────────────── 39  words found which have  8  unique consonants and having a minimum word length of:  11


    1:           acknowledge
    2:           algorithmic
    3:           alphanumeric
    4:           ambidextrous
    5:           amphibology
    6:           anchoritism
    7:           atmospheric
    8:           autobiography
    9:           bakersfield
   10:           bartholomew
   11:           bidirectional
   12:           bloodstream
   13:           boardinghouse
   14:           cartilaginous
   15:           centrifugal
   16:           chamberlain
   17:           charlemagne
   18:           clairvoyant
   19:           combinatorial
   20:           compensable
   21:           complaisant
   22:           conflagrate
   23:           conglomerate
   24:           conquistador
   25:           consumptive
   26:           convertible
   27:           cosmopolitan
   28:           counterflow
   29:           countryside
   30:           countrywide
   31:           declamatory
   32:           decomposable
   33:           decomposition
   34:           deliquescent
   35:           description
   36:           descriptive
   37:           dilogarithm
   38:           discernible
   39:           discriminate
   40:           disturbance
   41:           documentary
   42:           earthmoving
   43:           encephalitis
   44:           endothermic
   45:           epistemology
   46:           everlasting
   47:           exchangeable
   48:           exclamatory
   49:           exclusionary
   50:           exculpatory
   51:           explanatory
   52:           extemporaneous
   53:           extravaganza
   54:           filamentary
   55:           fluorescent
   56:           galvanometer
   57:           geophysical
   58:           glycerinate
   59:           groundskeep
   60:           herpetology
   61:           heterozygous
   62:           homebuilding
   63:           honeysuckle
   64:           hydrogenate
   65:           hyperboloid
   66:           impenetrable
   67:           imperceivable
   68:           imperishable
   69:           imponderable
   70:           impregnable
   71:           improvident
   72:           improvisation
   73:           incomparable
   74:           incompatible
   75:           incomputable
   76:           incredulity
   77:           indefatigable
   78:           indigestible
   79:           indisputable
   80:           inexhaustible
   81:           inextricable
   82:           inhospitable
   83:           inscrutable
   84:           jurisdiction
   85:           lawbreaking
   86:           leatherback
   87:           leatherneck
   88:           leavenworth
   89:           logarithmic
   90:           loudspeaking
   91:           maidservant
   92:           malnourished
   93:           marketplace
   94:           merchandise
   95:           methodology
   96:           misanthrope
   97:           mitochondria
   98:           molybdenite
   99:           nearsighted
  100:           obfuscatory
  101:           oceanography
  102:           palindromic
  103:           paradigmatic
  104:           paramagnetic
  105:           perfectible
  106:           phraseology
  107:           politicking
  108:           predicament
  109:           presidential
  110:           problematic
  111:           proclamation
  112:           promiscuity
  113:           providential
  114:           purchasable
  115:           pythagorean
  116:           quasiparticle
  117:           quicksilver
  118:           radiotelephone
  119:           sedimentary
  120:           selfadjoint
  121:           serendipity
  122:           sovereignty
  123:           subjunctive
  124:           superfluity
  125:           terminology
  126:           valedictorian
  127:           valedictory
  128:           verisimilitude
  129:           vigilantism
  130:           voluntarism
────────────────────────────── 130  words found which have  7  unique consonants and having a minimum word length of:  11


    1:           aboveground
    2:           advantageous
    3:           adventurous
    4:           aerodynamic
    5:           anglophobia
    6:           anisotropic
    7:           archipelago
    8:           automorphic
    9:           baltimorean
   10:           beneficiary
   11:           borosilicate
   12:           cabinetmake
   13:           californium
   14:           codetermine
   15:           coextensive
   16:           comparative
   17:           compilation
   18:           composition
   19:           confabulate
   20:           confederate
   21:           considerate
   22:           consolidate
   23:           counterpoise
   24:           countervail
   25:           decisionmake
   26:           declamation
   27:           declaration
   28:           declarative
   29:           deemphasize
   30:           deformation
   31:           deliverance
   32:           demountable
   33:           denumerable
   34:           deoxyribose
   35:           depreciable
   36:           deprivation
   37:           destabilize
   38:           diagnosable
   39:           diamagnetic
   40:           dichotomize
   41:           dichotomous
   42:           disambiguate
   43:           eigenvector
   44:           elizabethan
   45:           encapsulate
   46:           enforceable
   47:           ephemerides
   48:           epidemiology
   49:           evolutionary
   50:           exceptional
   51:           exclamation
   52:           exercisable
   53:           exhaustible
   54:           exoskeleton
   55:           expenditure
   56:           experiential
   57:           exploration
   58:           fluorescein
   59:           geometrician
   60:           hemosiderin
   61:           hereinbelow
   62:           hermeneutic
   63:           heterogamous
   64:           heterogeneous
   65:           heterosexual
   66:           hexadecimal
   67:           hexafluoride
   68:           homebuilder
   69:           homogeneity
   70:           housebroken
   71:           icosahedral
   72:           icosahedron
   73:           impersonate
   74:           imprecision
   75:           improvisate
   76:           inadvisable
   77:           increasable
   78:           incredulous
   79:           indivisible
   80:           indomitable
   81:           ineradicable
   82:           inescapable
   83:           inestimable
   84:           inexcusable
   85:           infelicitous
   86:           informatica
   87:           informative
   88:           inseparable
   89:           insuperable
   90:           ionospheric
   91:           justiciable
   92:           kaleidescope
   93:           kaleidoscope
   94:           legerdemain
   95:           liquefaction
   96:           loudspeaker
   97:           machinelike
   98:           magisterial
   99:           maladaptive
  100:           mantlepiece
  101:           manufacture
  102:           masterpiece
  103:           meetinghouse
  104:           meteorology
  105:           minesweeper
  106:           ministerial
  107:           multifarious
  108:           musculature
  109:           observation
  110:           patrimonial
  111:           peasanthood
  112:           pediatrician
  113:           persecution
  114:           pertinacious
  115:           picturesque
  116:           planetarium
  117:           pleistocene
  118:           pomegranate
  119:           predominate
  120:           prejudicial
  121:           prohibition
  122:           prohibitive
  123:           prolegomena
  124:           prosecution
  125:           provisional
  126:           provocation
  127:           publication
  128:           quasiperiodic
  129:           reclamation
  130:           religiosity
  131:           renegotiable
  132:           residential
  133:           rooseveltian
  134:           safekeeping
  135:           saloonkeeper
  136:           serviceable
  137:           speedometer
  138:           subrogation
  139:           sulfonamide
  140:           superficial
  141:           superlative
  142:           teaspoonful
  143:           trapezoidal
  144:           tridiagonal
  145:           troublesome
  146:           vainglorious
  147:           valediction
  148:           venturesome
  149:           vermiculite
  150:           vocabularian
  151:           warehouseman
  152:           wisenheimer
────────────────────────────── 152  words found which have  6  unique consonants and having a minimum word length of:  11


    1:           acquisition
    2:           acquisitive
    3:           acrimonious
    4:           ceremonious
    5:           deleterious
    6:           diatomaceous
    7:           egalitarian
    8:           equilibrate
    9:           equilibrium
   10:           equinoctial
   11:           expeditious
   12:           hereinabove
   13:           homogeneous
   14:           inequitable
   15:           injudicious
   16:           inoperative
   17:           inquisitive
   18:           interviewee
   19:           leeuwenhoek
   20:           onomatopoeic
   21:           radioactive
   22:           requisition
────────────────────────────── 22  words found which have  5  unique consonants and having a minimum word length of:  11


    1:           audiovisual
    2:           bourgeoisie
    3:           onomatopoeia
────────────────────────────── 3  words found which have  4  unique consonants and having a minimum word length of:  11

Ring

<lang ring> load "stdlib.ring"

cStr = read("unixdict.txt") wordList = str2list(cStr) consonants = [] result = [] num = 0

see "working..." + nl

ln = len(wordList) for n = ln to 1 step -1

   if len(wordList[n]) < 11
      del(wordList,n)
   ok

next

for n = 1 to len(wordList)

   flag = 1
   numcon = 0
   str = wordList[n]
   for m = 1 to len(str) - 1
       for p = m+1 to len(str)
           if not isvowel(str[m]) and (str[m] = str[p])
              flag = 0
              exit 2
           ok
       next
   next 
   if flag = 1
      add(consonants,wordList[n])
   ok

next

for n = 1 to len(consonants)

   con = 0
   str = consonants[n]
   for m = 1 to len(str)
       if not isvowel(str[m])
          con = con + 1
       ok
   next
   add(result,[consonants[n],con])

next

result = sort(result,2) result = reverse(result)

for n = 1 to len(result)

   see "" + n + ". " + result[n][1] + " " + result[n][2] + nl

next

see "done..." + nl </lang>

Output:
working...
1. comprehensible 9
2. indecipherable 8
3. boustrophedon 8
4. bricklaying 8
5. demonstrable 8
6. chemisorption 8
7. indecomposable 8
8. indiscoverable 8
9. discriminable 8
10. shipbuilding 8
....
50. deliquescent 7
51. inscrutable 7
52. declamatory 7
53. decomposition 7
54. decomposable 7
55. leatherback 7
56. exclusionary 7
57. convertible 7
58. exculpatory 7
59. loudspeaking 7
60. consumptive 7
...
180. eigenvector 6
181. exceptional 6
182. archipelago 6
183. anisotropic 6
184. encapsulate 6
185. evolutionary 6
186. elizabethan 6
187. declaration 6
188. declarative 6
189. declamation 6
190. comparative 6
...
330. equilibrium 5
331. equinoctial 5
332. onomatopoeic 5
333. inequitable 5
334. requisition 5
335. diatomaceous 5
336. homogeneous 5
337. radioactive 5
338. deleterious 5
339. inoperative 5
340. inquisitive 5
....
345. audiovisual 4
346. onomatopoeia 4
347. bourgeoisie 4
done...