( Syllable Challenge )
: upper ( ch -- CH ) 95 and ;
: vowel? ( ch -- f )
upper dup [char] A = over [char] E = or over [char] I = or
over [char] O = or over [char] U = or swap [char] Y = or ;
: vowel# ( a n -- n ) 0 swap 0 do over i + c@ vowel? if 1+ then loop nip ;
: stem ( a n -- )
2dup vowel# 0= if type exit then
2dup vowel# 2 < if type space exit then
dup 5 <= if
2dup vowel# over 2 + 2/ >= if type space exit then
then
2dup 2/ recurse
dup dup 2/ - >r 2/ + r> recurse
;
: test bl parse 2dup type space space stem cr ;
test big
test robot
test caterpillar
test sundial
test fungible
big big
robot ro bot
caterpillar ca ter pil lar
sundial sun di al
fungible fung ib le
general gen er al
Robert Rob ert
tangential ta nge ntial
presidential pre sid ent ial
robotic rob ot ic
fight fight
valley val ley
tangled tan gled
troubled trou bled
loose loose
pill pill
seen se en
language lang uage
syllable syll ab le
greenery gree ne ry
tragedy tra ge dy
comedy com edy
playbill play bill
endurance en du ra nce
nightly nig htly