Напишіть функцію, яка займає рядок літер та пробілів (не потрібно обробляти не букви) та виконує алгоритм перекладу ANNOUNCER VOICE наступним чином:
- По-перше, великі регістри все.
- Для кожного слова
- Подовжте кожен приголосний кластер, утроюючи кожну букву; за винятком випадків, якщо слово починається з приголосного скупчення, не продовжуйте його . Наприклад,
otherповинен стати,OTTTHHHEEERRRалеmotherповинен статиMOTTTHHHEEERRR. - Витягніть остаточну голосну, подвоївши її.
- Подовжте кожен приголосний кластер, утроюючи кожну букву; за винятком випадків, якщо слово починається з приголосного скупчення, не продовжуйте його . Наприклад,
- В обох випадках подовження , якщо ви утроюєте лист, спочатку з'єднайте його з подвійними літерами з обох боків. Наприклад,
hillповинен статиHIIILLLіbookkeeperповинен статиBOOKKKEEPPPEEERRR. - Для цілей цього виклику
yвважається приголосним. - Уточнення / спрощення: Ви можете припустити, що кожна пара слів розділена одним пробілом, і що ввід не містить послідовних пробілів, і що вхід не буде порожнім рядком.
- Найкоротший код виграє!
Тестові вектори:
> 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
Ось посилання на реалізацію, на яку я хотів би відповісти, за винятком того, що станом на сьогоднішній день питання було закрито. : 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('> '))