Find words with alternating vowels and consonants: Difference between revisions

Added Prolog Solution
(C code made more readable)
(Added Prolog Solution)
Line 1,558:
uninominal
verisimilitude
</pre>
 
=={{header|Prolog}}==
{{works with|SWI Prolog}}
<lang prolog>main:-
open("unixdict.txt", read, Stream),
main(Stream, 0),
close(Stream).
 
main(Stream, Count):-
read_line_to_string(Stream, String),
String \= end_of_file,
!,
process_line(String, Count, Count1),
main(Stream, Count1).
main(_, _).
 
process_line(String, Count, Count1):-
string_chars(String, Chars),
length(Chars, Length),
Length > 9,
alternating_vowels_and_consonants(Chars),
!,
Count1 is Count + 1,
writef('%3r: %w\n', [Count1, String]).
process_line(_, Count, Count).
 
vowel('a').
vowel('e').
vowel('i').
vowel('o').
vowel('u').
 
alternating_vowels_and_consonants([]):-!.
alternating_vowels_and_consonants([_]):-!.
alternating_vowels_and_consonants([Ch1, Ch2|Chars]):-
(vowel(Ch1) -> \+vowel(Ch2) ; vowel(Ch2)),
alternating_vowels_and_consonants([Ch2|Chars]).</lang>
 
{{out}}
<pre style="height:30em">
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
</pre>
 
1,777

edits