문자와 공백으로 된 문자열 (문자 이외의 문자를 처리 할 필요가 없음)을 작성하고 다음과 같이 ANNOUNCER VOICE 변환 알고리즘을 수행하는 함수를 작성하십시오.
- 먼저 대문자를 모두 사용하십시오.
- 각 단어마다
- 연장 각 문자를 세 겹으로 각 자음 클러스터를; 단, 단어 가 자음 클러스터로 시작 하는 경우를 제외하고 해당 클러스터를 늘리지 마십시오. 예를 들어
other
되어야OTTTHHHEEERRR
하지만mother
되어야합니다MOTTTHHHEEERRR
. - 연장 을 배로하여 최종 모음입니다.
- 연장 각 문자를 세 겹으로 각 자음 클러스터를; 단, 단어 가 자음 클러스터로 시작 하는 경우를 제외하고 해당 클러스터를 늘리지 마십시오. 예를 들어
- 연신율의 두 경우 모두 , 편지를 3 중으로 묶는 경우 먼저 양쪽에 중복 된 글자와 병합하십시오. 예를 들어
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
오늘 아침에 질문이 마감되었다는 것을 제외하고는 대답으로 이동하는 참조 구현이 있습니다. :피
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('> '))