ANNNOUNNNCCCEEERRR VOICCCEEE


18

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

2
भविष्य के लिए एक अनुरोध: कृपया व्यंजन और वाक्यांश जैसे व्यंजन क्लस्टर , कोलेसस और बढ़ाव से बचें । आपके जैसे गैर-देशी अंग्रेजी बोलने वाले को आपकी पोस्ट को समझने के लिए एक शब्दकोश की आवश्यकता हो सकती है।
डेनिस

यह "लम्बी" होने का स्वर होना चाहिए :(
शैतान का अधिवक्ता

व्यंजन क्लस्टर क्या है?
MilkyWay90

जवाबों:


6

एपीएल (डायलॉग) , 175 बाइट्स

1' +'R' ''[AEIOU][^AEIOU]+ 'R{m/⍨1,3×2≠/m←⍵.Match}'([AEIOU])\1*([^AEIOU]*? )' ' [AEIOU]' ' [^ AEIOU]+' '([^AEIOU ])\1*'R'\1\1\1\2' '&' '&' '\1\1\1''$| |^'R'  '1(819⌶)⍞

इसे ऑनलाइन आज़माएं!

 चरित्र इनपुट के लिए संकेत

1(819⌶) अपरकेस में बदलें (819 u बड़ा)

 आगे परिणाम पास करें (स्ट्रिंग्स और 1 को अलग करने के लिए कार्य करता है)

'$| |^'⎕R' 'आर eplace:
 अंत में, किसी भी जगह है, और शुरुआत
 दो रिक्त स्थान →

 परिणाम को और पास करें (स्ट्रिंग्स के दो समूहों को अलग करने के लिए)

'([AEIOU])\1*([^AEIOU]*? )' ' [AEIOU]' ' [^ AEIOU]+' '([^AEIOU ])\1*'⎕R'\1\1\1\2' '&' '&' '\1\1\1'आर eplace:
 समान स्वर के किसी भी संख्या और गैर स्वरों के किसी भी संख्या और एक अंतरिक्ष
 → स्वर में तीन बार और असंशोधित व्यंजन
 एक स्थान और एक स्वर
 → खुद को
 एक अंतरिक्ष और एक व्यंजन क्लस्टर
 → खुद को
 समान व्यंजन के एक रन
 → तीन लोगों में से स्वर वर्ण

'[AEIOU][^AEIOU]+ '⎕R{}आर eplace:
 नॉन- वॉवेल्स और एक स्पेस का एक रन
 → नाम के साथ निम्नलिखित अनाम फ़ंक्शन का परिणाम तर्क के रूप में:
  ⍵.Match जो पाठ पाया गया था
  m← कि m
  2≠/ युग्म-वार के लिए अलग-अलग
   तीन
  1, प्रीपेंड एक से गुणा
  m/⍨ करें जो कि दोहराने के लिए उपयोग करेंm

 परिणाम को और पास करें (दो तारों को अलग करने के लिए काम करता है)

' +'⎕R' 'E eplace:
 एक या अधिक स्थान
 → एक एकल स्थान के साथ

1↓ प्रारंभिक अक्षर (एक स्थान) को छोड़ें


क्या यह काम करता है? 1↓' +'⎕R' '⊢'[AEIOU][^AEIOU]+ '⎕R{m/⍨1,3×2≠/m←⍵.Match}'([AEIOU])\1*([^AEIOU]*? )' ' [AEIOU]' ' [^ AEIOU]+' '([^AEIOU ])\1*'⎕R(s,'\2')'&' '&'(s←6⍴'\1')⊢'$| |^'⎕R' '⊢1(819⌶)⍞
ज़ाचरी

^ दो बाइट्स बचाता है अगर यह काम करता है ^
Zacharý

5

जेएस (ईएस 6), 138 134 129 बाइट्स

s=>s.toUpperCase()[r="replace"](/(\w)\1/g,"$1")[r](/[AEIOU](?=[^AEIOU]*( |$))/g,s=>s+s+s)[r](/\B./g,s=>/[AEIOU]/.test(s)?s:s+s+s)

WAAAYYY TOOO MAAANNNYYY BYYYTTTEEESSS AEIOU3 बार शामिल हैं , लेकिन मैं उन लोगों को एक में नहीं कर सकता।

-4 बाइट्स हाइपरनीट्रीनो के लिए धन्यवाद

Ungolfed

function v(str){
    return str.toUpperCase().replace(/(\w)\1/g,"$1").replace(/[AEIOU](?=[^AEIOU]*( |$))/g,s=>s+s+s).replace(/\B./g,s=>[..."AEIOU"].includes(s)?s:s+s+s);
}

मुझे लिखना पसंद है, कोड पढ़ना नहीं।


1
"WAAAYYY TOOO MAAANNNYYY BYYYTTTEEESSSS" ... एपीएल से आगे, पहले स्थान पर है।
जकार्इ

मैं जे एस पता नहीं है, लेकिन आप बदल सकते हैं s=>/[AEIOU]/.test(s)के साथ /[AEIOU]/.test?
संगीतज्ञ ५२३

@ musicman523 दुख की बात है, नहीं, क्योंकि यह एक टर्नरी ऑपरेटर के बयान में सशर्त है।
१17 बजे २

FYI करें, व्यंजन समूहों की आपकी हैंडलिंग थोड़ी गलत प्रतीत होती है; उचित आउटपुट होगा WAAAYYY TOOO MAAANNNYYY BYTEEESSS(यानी प्रारंभिक क्लस्टर को लम्बा नहीं करना BYT)।
क्क्सप्लसोन

खैर, पहले स्थान पर था।
ज़ाचरी

5

एपीएल, 90 बाइट्स

{1↓∊{s←{⍵⊂⍨1,2≠/⍵}⋄x↑⍨¨(3⌈≢¨s⍵)⌊≢¨x←s⍵/⍨(1+2×{⌽<\⌽⍵}∨~∧∨\)⍵∊'AEIOU'}¨w⊂⍨w=⊃w←' ',1(819⌶)⍵}

स्पष्टीकरण:

  • 1(819⌶)⍵: अपरकेस में कनवर्ट करें
  • w⊂⍨w=⊃w←' ',: रिक्त स्थान पर विभाजित करें
  • {... : प्रत्येक शब्द के लिए ...
    • s←{⍵⊂⍨1,2≠/⍵}: sएक ऐसा कार्य है जो एक तार को सन्निहित मिलान वर्णों के समूहों में विभाजित करता है
    • ⍵∊'AEIOU': स्वरों को चिह्नित करें
    • (... ): देखें कि कौन से वर्णों को तीन गुना करना है
      • ~∧∨\: पहले स्वर के सभी व्यंजन,
      • {⌽<\⌽⍵}: अंतिम स्वर।
      • : बिट वेक्टर को दो से गुणा करें,
      • 1+: और एक जोड़ें। अब सभी चयनित पात्रों के पास है 3और बाकी के पास है 1
    • ⍵/⍨: दी गई राशि से प्रत्येक वर्ण को दोहराएं
    • x←s: इसे मिलान पात्रों के तारों में विभाजित करें, और इसमें स्टोर करें x
    • (3⌈≢¨s⍵): इनपुट शब्द में मिलान वाले प्रत्येक समूह की लंबाई, अधिकतम 3।
    • ⌊≢¨: उस की न्यूनतम और समूहों की लंबाई x
    • x↑⍨¨: प्रत्येक समूह को उस लंबाई का बना दें
  • 1↓∊: परिणाम को समतल करें और पहले वर्ण को छोड़ें (बंटवारे में मदद के लिए शुरुआत में जोड़ा गया स्थान)

तुम Adám को हरा दो ... वाह।
जकार्इ

बहुत साफ़! यदि आप इसे थोड़ा सा फेरबदल करते हैं और इसे एक प्रोग्राम के रूप में लिखते हैं (Adám द्वारा सुझाए गए संकेत के रूप में उपयोग करके) तो आप एक और 15 बाइट्स से दाढ़ी बना सकते हैं:1↓∊{c/⍨(≢¨g)⌈3×((⌽<\∘⌽)∨~∧∨\)'AEIOU'∊⍨c←⊃¨g←⍵⊂⍨1,2≠/⍵}¨w⊂⍨w=⊃w←' ',1(819⌶)⍞
Gil

3

पायथन, 417 बाइट्स

यहाँ पायथन में एक संदर्भ कार्यान्वयन है। बहुत गोल्फ नहीं है।

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 True:
 print a(raw_input('> '))

क्या आपको कम से कम गोल्फ को अनावश्यक स्थानों को हटाने और बदलने के ssलिए थोड़ा और नीचे नहीं करना चाहिए S?
ज़चारि

2

पायथन 3 , 238 बाइट्स

def f(s):
 s=s.upper();k=[s[0]];s=''.join(k+[s[i]for i in range(1,len(s))if s[i]!=s[i-1]])
 for i in range(1,len(s)):k+=[s[i]]*(3-2*(s[i]in'AEIOU'and i!=max(map(s.rfind,'AEIOU'))))
 return''.join(k)
print(' '.join(map(f,input().split())))

इसे ऑनलाइन आज़माएं!


क्या आप सेटिंग vसे बाइट्स बचा सकते हैं 'AEIOU'?
जकार्इ

@ Zacharý धन्यवाद, लेकिन दुर्भाग्य से यह bytecount नहीं बदलता है।
हाइपरनेत्रिनो

ओह, पहले के आसपास रिक्त स्थान v
ज़ाचरी

0

पर्ल 5 , 139 + 1 (-पी) = 140 बाइट्स

$_=uc,s/^([^AEIOU]*)//,$s=$1,s/([^AEIOU])\1*/$1x(($q=length$&)>3?$q:3)/ge,s/.*?\K([AEIOU])\1*/$1x(($q=length$&)>3?$q:3)/e,print"$s$_ "for@F

इसे ऑनलाइन आज़माएं!

यहां तक ​​कि उदाहरण के अनुसार "आआआआआआआआआयहस्स्स्स्स्स्स्" कसौटी के मामले को संभालती है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.