Schreiben Sie eine Funktion, die eine Folge von Buchstaben und Leerzeichen benötigt (es ist nicht erforderlich, mit Nicht-Buchstaben umzugehen) und den Übersetzungsalgorithmus ANNOUNCER VOICE wie folgt ausführt:
- Zuerst alles in Großbuchstaben.
- Für jedes Wort
- Verlängern Sie jeden Konsonantencluster, indem Sie jeden Buchstaben verdreifachen. Wenn das Wort jedoch mit einem Konsonantencluster beginnt , verlängern Sie diesen Cluster nicht. Zum Beispiel
othersollte werden , sollteOTTTHHHEEERRRabermotherwerdenMOTTTHHHEEERRR. - Verlängern Sie den letzten Vokal, indem Sie ihn verdreifachen.
- Verlängern Sie jeden Konsonantencluster, indem Sie jeden Buchstaben verdreifachen. Wenn das Wort jedoch mit einem Konsonantencluster beginnt , verlängern Sie diesen Cluster nicht. Zum Beispiel
- In beiden Fällen der Dehnung , wenn Sie Verdreifachung einen Brief, erste coalesce es mit doppelten Buchstaben auf beiden Seiten. Zum Beispiel
hillsollHIIILLLundbookkeepersoll werdenBOOKKKEEPPPEEERRR. - Für die Zwecke dieser Herausforderung gilt
yals Konsonant. - Erläuterung / Vereinfachung: Sie können davon ausgehen, dass jedes Wortpaar durch ein einzelnes Leerzeichen getrennt ist und dass die Eingabe keine aufeinander folgenden Leerzeichen enthält und dass es sich bei der Eingabe nicht um eine leere Zeichenfolge handelt.
- Kürzester Code gewinnt!
Testvektoren:
> 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
Hier ist eine Referenzimplementierung, auf die ich eine Antwort geben möchte, mit der Ausnahme, dass die Frage seit heute Morgen geschlossen ist. : 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('> '))