Find words with alternating vowels and consonants: Difference between revisions

From Rosetta Code
Content added Content deleted
mNo edit summary
(Add Factor)
Line 6: Line 6:


The length of any word shown should have a length &nbsp; <big>'''> 9</big>.
The length of any word shown should have a length &nbsp; <big>'''> 9</big>.



=={{header|Factor}}==
{{works with|Factor|0.99 2020-08-14}}
<lang factor>USING: grouping.extras io.encodings.ascii io.files kernel math
prettyprint sequences ;

"unixdict.txt" ascii file-lines
[ length 9 > ] filter
[ dup [ "aeiou" member? ] group-by [ length ] bi@ = ] filter .</lang>
{{out}}
<pre style="height:20em">
{
"aboriginal"
"apologetic"
"bimolecular"
"borosilicate"
"calorimeter"
"capacitate"
"capacitive"
"capitoline"
"capitulate"
"caricature"
"colatitude"
"coloratura"
"colorimeter"
"debilitate"
"decelerate"
"decolonize"
"definitive"
"degenerate"
"deliberate"
"demodulate"
"denominate"
"denotative"
"deregulate"
"desiderata"
"desideratum"
"dilapidate"
"diminutive"
"epigenetic"
"facilitate"
"hemosiderin"
"heretofore"
"hexadecimal"
"homogenate"
"inoperative"
"judicature"
"latitudinal"
"legitimate"
"lepidolite"
"literature"
"locomotive"
"manipulate"
"metabolite"
"nicotinamide"
"oratorical"
"paragonite"
"pejorative"
"peridotite"
"peripatetic"
"polarimeter"
"recitative"
"recuperate"
"rehabilitate"
"rejuvenate"
"remunerate"
"repetitive"
"reticulate"
"savonarola"
"similitude"
"solicitude"
"tananarive"
"telekinesis"
"teratogenic"
"topologize"
"unilateral"
"unimodular"
"uninominal"
"verisimilitude"
}
</pre>


=={{header|Julia}}==
=={{header|Julia}}==

Revision as of 10:47, 3 January 2021

Find words with alternating vowels and 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

Using the dictionary   unixdict.txt,   find words which odd letters are consonants and even letters are vowels or vice versa.
Display the words here (on this page).

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


Factor

Works with: Factor version 0.99 2020-08-14

<lang factor>USING: grouping.extras io.encodings.ascii io.files kernel math prettyprint sequences ;

"unixdict.txt" ascii file-lines [ length 9 > ] filter [ dup [ "aeiou" member? ] group-by [ length ] bi@ = ] filter .</lang>

Output:
{
    "aboriginal"
    "apologetic"
    "bimolecular"
    "borosilicate"
    "calorimeter"
    "capacitate"
    "capacitive"
    "capitoline"
    "capitulate"
    "caricature"
    "colatitude"
    "coloratura"
    "colorimeter"
    "debilitate"
    "decelerate"
    "decolonize"
    "definitive"
    "degenerate"
    "deliberate"
    "demodulate"
    "denominate"
    "denotative"
    "deregulate"
    "desiderata"
    "desideratum"
    "dilapidate"
    "diminutive"
    "epigenetic"
    "facilitate"
    "hemosiderin"
    "heretofore"
    "hexadecimal"
    "homogenate"
    "inoperative"
    "judicature"
    "latitudinal"
    "legitimate"
    "lepidolite"
    "literature"
    "locomotive"
    "manipulate"
    "metabolite"
    "nicotinamide"
    "oratorical"
    "paragonite"
    "pejorative"
    "peridotite"
    "peripatetic"
    "polarimeter"
    "recitative"
    "recuperate"
    "rehabilitate"
    "rejuvenate"
    "remunerate"
    "repetitive"
    "reticulate"
    "savonarola"
    "similitude"
    "solicitude"
    "tananarive"
    "telekinesis"
    "teratogenic"
    "topologize"
    "unilateral"
    "unimodular"
    "uninominal"
    "verisimilitude"
}

Julia

There have been a lot of "filter the dictionary" tasks almost identical to this one added to the wiki already. All call for filtering a word list, where the results of the filtering test depend on the characters in the word and its length, and may optionally also depend on what other words are in the same dictionary. Something like the generic function below can be used in most of these tasks. <lang julia>function foreachword(wordfile::String, condition::Function; minlen = 0, colwidth = 15, numcols = 6, toshow = 0)

   println("Word source: $wordfile\n")
   words = split(read(wordfile, String), r"\s+")
   dict, shown = Dict(w => 1 for w in words), 0
   for word in words
       if condition(word, dict) && (minlen < 1 || length(word) >= minlen)
           shown += 1
           print(rpad(word, colwidth), shown % numcols == 0 ? "\n" : "")
           toshow > 0 && toshow < shown && break
       end
   end

end

isvowel(c) = c in ['a', 'e', 'i', 'o', 'u'] # NB. leaves out 'α' and similar unicode vowels, and what about y? onlyodds(f, s) = all(c -> f(c), s[1:2:length(s)]) && !any(c -> f(c), s[2:2:length(s)]) onlyevens(f, s) = !any(c -> f(c), s[1:2:length(s)]) && all(c -> f(c), s[2:2:length(s)]) eitheronlyvowels(w, _) = onlyodds(isvowel, w) || onlyevens(isvowel, w)

foreachword("unixdict.txt", eitheronlyvowels, minlen = 10)

</lang>

Output:
aboriginal     apologetic     bimolecular    borosilicate   calorimeter    capacitate
capacitive     capitoline     capitulate     caricature     colatitude     coloratura     
colorimeter    debilitate     decelerate     decolonize     definitive     degenerate
deliberate     demodulate     denominate     denotative     deregulate     desiderata
desideratum    dilapidate     diminutive     epigenetic     facilitate     hemosiderin
heretofore     hexadecimal    homogenate     inoperative    judicature     latitudinal    
legitimate     lepidolite     literature     locomotive     manipulate     metabolite
nicotinamide   oratorical     paragonite     pejorative     peridotite     peripatetic
polarimeter    recitative     recuperate     rehabilitate   rejuvenate     remunerate
repetitive     reticulate     savonarola     similitude     solicitude     tananarive     
telekinesis    teratogenic    topologize     unilateral     unimodular     uninominal
verisimilitude

Ring

<lang ring> cStr = read("unixdict.txt") wordList = str2list(cStr) words = [] num = 0 vowels = "aeiou" consonants = "bcdfghjklmnpqrstvwxyz"

see "working..." + nl

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

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

next

see "Words are:" + nl + nl

for n = 1 to len(wordList)

   cflag = 0
   vflag = 0
   len = len(wordList[n])
   for m = 1 to len
       if m % 2 = 1
          cons = substr(consonants,wordList[n][m])
          if cons > 0
             cflag = 1
          else
             cflag = 0
             exit
          ok           
       ok
       if m % 2 = 0
          cons = substr(vowels,wordList[n][m])
          if cons > 0
             vflag = 1
          else
             vflag = 0
             exit
          ok           
       ok
   next
   if cflag = 1 and vflag = 1
      add(words,wordList[n])
   ok

next

for n = 1 to len(wordList)

   cflag = 0
   vflag = 0
   len = len(wordList[n])
   for m = 1 to len
       if m % 2 = 1
          cons = substr(vowels,wordList[n][m])
          if cons > 0
             cflag = 1
          else
             cflag = 0
             exit
          ok           
       ok
       if m % 2 = 0
          cons = substr(consonants,wordList[n][m])
          if cons > 0
             vflag = 1
          else
             vflag = 0
             exit
          ok           
       ok
   next
   if cflag = 1 and vflag = 1
      add(words,wordList[n])
   ok

next

words = sort(words)

for n = 1 to len(words)

   see "" + n + ". " + words[n] + nl

next

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

working...
Words are:

1. aboriginal
2. apologetic
3. bimolecular
4. borosilicate
5. calorimeter
6. capacitate
7. capacitive
8. capitoline
9. capitulate
10. caricature
11. colatitude
12. coloratura
13. colorimeter
14. debilitate
15. decelerate
16. decolonize
17. definitive
18. degenerate
19. deliberate
20. demodulate
21. denominate
22. denotative
23. deregulate
24. desiderata
25. desideratum
26. dilapidate
27. diminutive
28. epigenetic
29. facilitate
30. hemosiderin
31. heretofore
32. hexadecimal
33. homogenate
34. inoperative
35. judicature
36. latitudinal
37. legitimate
38. lepidolite
39. literature
40. locomotive
41. manipulate
42. metabolite
43. nicotinamide
44. oratorical
45. paragonite
46. pejorative
47. peridotite
48. peripatetic
49. polarimeter
50. recitative
51. recuperate
52. rehabilitate
53. rejuvenate
54. remunerate
55. repetitive
56. reticulate
57. savonarola
58. similitude
59. solicitude
60. tananarive
61. telekinesis
62. teratogenic
63. topologize
64. unilateral
65. unimodular
66. uninominal
67. verisimilitude
done...