Escreva uma função que utilize uma sequência de letras e espaços (sem necessidade de manipular não letras) e execute o algoritmo de tradução ANUNUNCER VOICE da seguinte maneira:
- Primeiro, coloque tudo em maiúsculas.
- Para cada palavra,
- Alongar cada cluster consoante triplicando cada letra; exceto, se a palavra começar com um cluster consoante, não o alonge. Por exemplo,
other
deve se tornar,OTTTHHHEEERRR
masmother
deve se tornarMOTTTHHHEEERRR
. - Alongar a vogal final, triplicando-a.
- Alongar cada cluster consoante triplicando cada letra; exceto, se a palavra começar com um cluster consoante, não o alonge. Por exemplo,
- Nos dois casos de alongamento , se você está triplicando uma letra, primeiro combine-a com letras duplicadas em ambos os lados. Por exemplo,
hill
deve se tornarHIIILLL
ebookkeeper
deve se tornarBOOKKKEEPPPEEERRR
. - Para os propósitos deste desafio,
y
conta como uma consoante. - Esclarecimento / simplificação: Você pode assumir que cada par de palavras está separado por um único espaço e que a entrada não contém espaços consecutivos e que a entrada não será a sequência vazia.
- O código mais curto vence!
Vetores de teste:
> sunday sunday
SUNNNDDDAAAYYY SUNNNDDDAAAYYY
> mia hamm
MIAAA HAAAMMM
> chester alan arthur
CHESSSTTTEEERRR ALLLAAANNN ARRRTTTHHHUUURRR
> attention please
ATTTENNNTTTIOOONNN PLEASSSEEE
> supercalifragilisticexpialidocious
SUPPPERRRCCCALLLIFFFRRRAGGGILLLISSSTTTICCCEXXXPPPIALLLIDDDOCCCIOUUUSSS
> moo
MOOO
> Aachen
AACCCHHHEEENNN
> Oooh
OOOHHH
> grifffest
GRIFFFEEESSSTTT
> k
K
> aaaabbbbc
AAAABBBBCCC
Aqui está uma implementação de referência que eu gostaria de responder, exceto que a partir desta manhã a pergunta foi encerrada. : P
import itertools,re
def j(s):return re.match('^[AEIOU]+$',s)
def c(s):return ''.join(sum(([h,h,h]for h in[k for k,g in itertools.groupby(s)]),[]))
def v(s):
while len(s)>=2 and s[-2]==s[-1]:s=s[:-1]
return s+s[-1]+s[-1]
def a(n):
r=''
for w in n.split():
if r:r+=' '
ss=re.split('([AEIOU]+)', w.upper())
for i,s in enumerate(ss):
r += [v(s),s][any(j(t) for t in ss[i+1:])]if j(s)else[s,c(s)][i>0]
return r
while 1:print a(raw_input('> '))