Tulis fungsi yang mengambil string huruf dan spasi (tidak perlu menangani non-huruf) dan melakukan algoritma terjemahan ANNOUNCER VOICE sebagai berikut:
- Pertama, huruf besar semuanya.
- Untuk setiap kata,
- Rentangkan setiap gugus konsonan dengan melipattigakan tiga huruf; kecuali, jika kata dimulai dengan gugus konsonan, jangan memanjang gugus itu. Misalnya,
other
harus menjadiOTTTHHHEEERRR
tetapimother
harus menjadiMOTTTHHHEEERRR
. - Rentangkan vokal terakhir dengan tiga kali lipat.
- Rentangkan setiap gugus konsonan dengan melipattigakan tiga huruf; kecuali, jika kata dimulai dengan gugus konsonan, jangan memanjang gugus itu. Misalnya,
- Dalam kedua kasus perpanjangan , jika Anda melipattigakan tiga surat, pertama satukan dengan surat duplikat di kedua sisi. Misalnya,
hill
harus menjadiHIIILLL
danbookkeeper
harus menjadiBOOKKKEEPPPEEERRR
. - Untuk keperluan tantangan ini,
y
dianggap sebagai konsonan. - Klarifikasi / penyederhanaan: Anda dapat mengasumsikan bahwa setiap pasangan kata dipisahkan oleh satu spasi, dan bahwa input tidak mengandung spasi berurutan, dan bahwa input tidak akan menjadi string kosong.
- Kode terpendek menang!
Vektor uji:
> 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
Berikut adalah implementasi referensi yang saya akan pindah ke jawaban kecuali bahwa pada pagi ini pertanyaan sudah ditutup. : 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('> '))