सामान्य और उल्टे विस्मयादिबोधक और प्रश्न चिह्न जोड़े


13

चुनौती

¡हम उल्टे दोस्तों को विस्मयादिबोधक और सवालिया निशान देने जा रहे हैं!

में समाप्त होने वाले पाठ वाले वाक्य की एक संस्था को देखते हुए ., ?या !, आगे जोड़ते उल्टे प्रश्न चिह्न, ¿, प्रश्नवाचक वाक्य (वाक्यों में समाप्त करने के लिए ?) और उल्टे विस्मयादिबोधक चिन्ह, ¡, विस्मयादिबोधक (में समाप्त होने वाले वाक्य को !)। समाप्त होने वाले वाक्यों .को अनदेखा किया जाना है।

वाक्य व्हाट्सएप (स्पेस, टैब और / या न्यूलाइन्स) द्वारा अलग किए जाएंगे और इसमें केवल अल्फ़ान्यूमेरिक्स, कॉमा, एपोस्ट्रोफ़ और स्पेस होंगे। हर वाक्य में कम से कम एक शब्द होगा। हर वाक्य का पहला शब्द पूंजीकृत होने की गारंटी है। इनपुट किसी भी व्हाट्सएप से शुरू और खत्म हो सकता है।

उदाहरण

इनपुट:

  Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
        Wow, you're such a n00b! Here, let me show you.

आउटपुट:

  ¡Hello there!      ¿What is your name?
My name is Ron. ¿What's your name?
My name is Alex.  ¡Nice to meet you!
¡Nice to meet you to!  ¿How was your break?
¡It was great, I spent all my time code golfing!
¿What's that?
        ¡Wow, you're such a n00b! Here, let me show you.

नियम

  • सभी डिफ़ॉल्ट कोड गोल्फ नियम लागू होते हैं।
  • बाइट्स कम से कम राशि के साथ कार्यक्रम जीतता है।

बोनस (17% की छूट) - कई अंक पार करें

एक वाक्य कई विस्मयादिबोधक / प्रश्न चिह्नों में भी समाप्त हो सकता है। इन अंकों में से प्रत्येक को अपनी बाइट गिनती से 17% अतिरिक्त के लिए एक जोड़ा उलटा विस्मयादिबोधक / प्रश्न चिह्न दें।

उदाहरण

इनपुट:

I am a man in a can doing a dance?? Maybe...
              Doing it for the views??!???!

आउटपुट:

¿¿I am a man in a can doing a dance?? Maybe...
              ¡¿¿¿¡¿¿Doing it for the views??!???!

गलत आउटपुट:

¿¿I am a man in a can doing a dance?? Maybe...
              ¿¿¡¿¿¿¡Doing it for the views??!???!

क्या हमें यह चुनने के लिए मिलता है कि किस प्रकार के व्हाट्सएप वाक्यों को अलग करता है, या क्या हमें सभी 3 प्रकारों का समर्थन करना है?
Mego

@Mego तीनों प्रकार का समर्थन किया जाना चाहिए।
usandfriends

नहीं, एक वाक्य में हमेशा कम से कम एक शब्द होगा और तीन अनुमत विराम चिह्नों में से एक के साथ समाप्त होगा। मैं इसे चुनौती में जोड़ दूंगा।
usandfriends

जवाबों:


5

रेटिना , 39 37 34 बाइट्स

\w[^.]*?([!?])
$1$0
T`?!`¿¡`\S\b

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

व्याख्या

\w[^.]*?([!?])
$1$0

यह एक विस्मयादिबोधक या प्रश्न चिह्न में समाप्त होने वाले वाक्य से मेल खाता है, और वाक्य में उस विराम चिह्न चरित्र को प्रस्तुत करता है। अब हम जानते हैं कि सभी !या ?जो एक गैर-अंतरिक्ष चरित्र के तुरंत बाद होते हैं, उन्हें हमें सम्मिलित करना चाहिए, क्योंकि मूल को अगले वर्ण से एक स्थान से अलग किया जाना चाहिए।

T`!?`¡¿`\S\b

इस लिप्यंतरण चरण सब बदल जाता है !और ?में ¡और ¿, क्रमश: वे के एक मैच में पाए जाने पर प्रदान की जाती \S\bहै, केवल लोगों को हम सिर्फ डाला लागू होती है। एक ही बाइट काउंट में दो अलग-अलग प्रतिस्थापन में दोनों को बदलना, लेकिन मैं यहां एक लिप्यंतरण चरण के शब्दार्थ को पसंद करता हूं।


3

Mathematica 137 बाइट्स

कम से कम नहीं, लेकिन यह करने के लिए मजेदार था।

TextSentencesइनपुट पाठ को वाक्यों में तोड़ता है और पाठ में StringPositionप्रत्येक वाक्य के आरंभ और अंत के पदों को पाता है। आवश्यकता के अनुसार प्रत्येक वाक्य की शुरुआत में उल्टा विराम चिह्न डाला जाता है।

w=StringPosition;f[x_,y_,q_]:=StringInsert[x,q,x~w~y/.{a_,a_}->a/.(x~w~#&/@TextSentences@#&@x/.{{c_,d_}}:>d->c)];f[f[t,"!","¡"],"?","¿"]&

उपयोग, यह मानते हुए कि पाठ इनपुट है t,

f[f[#,"!","¡"],"?","¿"]&[t]

उत्पादन


1
कूल, एक समाधान जो RegExp का उपयोग नहीं करता है!
usandfriends

3

सेड, 61 बाइट्स

s/\(\s*\)\([^.!?]*!\)/\1¡\2/g;s/\(\s*\)\([^.!?]*?\)/\1¿\2/g

परीक्षण चालन :

$ echo """Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
        Wow, you're such a n00b! Here, let me show you.""" | sed 's/\(\s*\)\([^.!?]*!\)/\1¡\2/g;s/\(\s*\)\([^.!?]*?\)/\1¿\2/g'
¡Hello there!      ¿What is your name?
My name is Ron. ¿What's your name?
My name is Alex.  ¡Nice to meet you!
¡Nice to meet you to!  ¿How was your break?
¡It was great, I spent all my time code golfing!
¿What's that?
        ¡Wow, you're such a n00b! Here, let me show you.

1
यह तकनीकी रूप से 61 बाइट्स है क्योंकि उल्टे अक्षर 2 बाइट्स के रूप में गिने जाते हैं।
usandfriends

@usandfriends सही, तय
हारून

यदि आप -r(GNU) सेड को ध्वज का उपयोग करते हैं , तो आपको बचने की आवश्यकता नहीं है (और )जो आपको बचाना चाहिए। 8. आपको इस गैर-डिफ़ॉल्ट विकल्प के उपयोग के लिए एक अतिरिक्त बिंदु जोड़ने की आवश्यकता है।
डिजिटल ट्रॉमा

@DigitalTrauma मैं उस चाल को जानता था और उसने कोशिश की थी, लेकिन उसने वही आउटपुट वापस नहीं किया: "¿¿नमस्ते वहाँ! Name आपका नाम क्या है? ¿" के बजाय "नमस्ते वहाँ! आपका नाम क्या है?"
हारून

3

जावास्क्रिप्ट (ईएस 6), 86 79 66 63 बाइट्स

i=>i.replace(/\w[^.!?]*[!?]/g,k=>(k.slice(-1)>'>'?'¿':'¡')+k)

Ungolfed:

func = inp => inp.replace(/\w[^.!?]*[!?]/g, sentence => (sentence.slice(-1) > '>' ? '¿' : '¡') + sentence)

उपयोग:

console.log(func(`Hello there!      What is your name?
My name is Ron. What's your name?
My name is Alex.  Nice to meet you!
Nice to meet you to!  How was your break?
It was great, I spent all my time code golfing!
What's that?
            Wow, you're such a n00b! Here, let me show you.`))

जल्द ही बोनस समाधान लागू करेंगे।

इसके लिए धन्यवाद:
@ user81655 , 86 => 79 बाइट्स


1
कुछ सुधार जो 9 बाइट्स i=>i.replace(/[A-Z][^.!?]*[.!?]/g,k=>(r=k.slice(-1))<'.'?'¡'+k:r>'.'?'¿'+k:k)
बचाते हैं

@ user81655 ऐसा लगता है कि यह 9 के बजाय 7 बाइट बचाता है, लेकिन इसकी परवाह किए बिना, इसके लिए धन्यवाद! में समाप्त होने वाले वाक्यों के लिए जाँच बंद करके और भी अधिक बाइट्स निकालने में सक्षम था .
usandfriends

3

गणितज्ञ, 101 92 91 बाइट्स

StringReplace[#,RegularExpression@"[A-Z][^.]*?([?!])":><|"?"->"¿","!"->"¡"|>@"$1"<>"$0"]&

क्या आप बताएंगे कि यह कैसे काम करता है?
21

1
@ दाविद यह मुश्किल है।
लीजनमोनमल

1

पायथन 2, 127.82 (154-17%) बाइट्स

import re
print re.sub("([A-Z][\w ,']*)([\.!\?]+)",lambda m:''.join({'!':'¡','?':'¿','.':''}[c]for c in m.group(2))[::-1]+m.group(1)+m.group(2),input())

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