एक फ़ंक्शन लिखें जो अक्षरों और रिक्त स्थान की एक स्ट्रिंग लेता है (गैर-पत्रों को संभालने की कोई आवश्यकता नहीं है) और निम्न के रूप में 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
यहां एक संदर्भ कार्यान्वयन है जिसे मैं एक उत्तर के लिए स्थानांतरित कर दूंगा, क्योंकि आज सुबह तक यह प्रश्न बंद हो गया है। : पी
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('> '))