टेक्स कोट्स (यूवीए 272)


17

एक स्ट्रिंग को देखते हुए, सभी बाएं-डबल-कोट्स को दो बैक-स्टिक में और सभी राइट-डबल-कोट्स को दो सिंगल-कोट्स में बदलें।

लेफ्ट-कोट्स का मतलब है कि एक उद्धरण शुरू करने वाले उद्धरण। राईट-कोट्स का अर्थ है एक उद्धरण को समाप्त करने वाले उद्धरण। उद्धरण को नेस्टेड नहीं किया जा सकता है। आप मान सकते हैं कि स्ट्रिंग में एक समान संख्या में डबल-कोट्स हैं।

उदाहरण

इनपुट:

"To be or not to be," quoth the Bard, "that
is the question".
The programming contestant replied: "I must disagree.
To `C' or not to `C', that is The Question!"

आउटपुट:

``To be or not to be,'' quoth the Bard, ``that
is the question''.
The programming contestant replied: ``I must disagree.
To `C' or not to `C', that is The Question!''

बाएं दोहरे उद्धरण और दाएं दोहरे उद्धरण क्या हैं?
मेरा सर्वनाम monicareinstate

1
@someone लेफ्ट डबल कोट्स एक उद्धरण शुरू करने वाले उद्धरण हैं। राइट डबल कोट्स एक उद्धरण को समाप्त करने वाले उद्धरण हैं।
HighlyRadioactive

क्या उद्धरणों को नेस्टेड किया जा सकता है?
मेरा सर्वनाम 7:24 बजे

@ सिसमोन नोप। वे नहीं कर सकते।
HighlyRadioactive

3
@ LegionMammal978 "क्या उद्धरण उद्धृत किया जा सकता है?" ... "@someone नहीं। वे नहीं कर सकते।"
जोनाथन एलन

जवाबों:


18

अपठनीय , 789 777 बाइट्स

X6 के बजाय वेरिएबल X34 का उपयोग करके -12 बाइट्स।

' "" "" ""' "" ' "" "" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' " " '" "'" " '" "'" " '" ""' "" "" "" "" ' ""' "" ' ""' "" " '" "'" " '" "' "" '" "'" "" "" "" ' ""' "" "" "" "" "" ' "" "" ""' "" " '" "" "" "" "" " ' "" "" "" "" ""' "" ' ""' "" ' "" "'" "" "" "" "" ' "" "'" "" "" "" " "" ' ""' "" ' "" "" "" "" "" "" "'" "" "" "" "" "" "" "" "" " '"" '" "'" "" ' "" "" "" "" ""' "" ' ""' "" ' "" "'" "" "" "" "" "" "" "" ' ""' "" ' ""' "" " '" "" "" "" "'" " '" ""' "" "" "" "" "" "" "" "" " ' ""' "" "" "" "" "" "" "" "" "" "" " '" "'" "" ' "'" "" "" "" """ '"' "" "" "" "" " '" "" "" "" "" "" "" "'" " '" "" "" "" "" "" ""' " "" "" "" ' ""' "" "" "" "" "" "" "" ' "'" "" "" "" "" ' ""' "" ' ""' " "" ' "" "" "" "" ""' "" "" "" " '" "'" "" "" " '"' "" ' ""' "" ' ""'"" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' ""' "" ' " " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " '" "'" " ' "" '" "'" " '" "" "" "" ""' "" ' ""' "" ' "" "

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

भाषा के नाम पर पारंपरिक श्रद्धांजलि के अनुसार, चर-चौड़ाई फ़ॉन्ट में प्रदर्शित किया गया।

मैंने इस चुनौती के लिए अपठनीय सीखा, क्योंकि यह स्पष्ट रूप से नौकरी के लिए सबसे अच्छा उपकरण है। केवल अपठनीय में अनुमत वर्ण हैं 'और ", इसलिए निश्चित रूप से यह पूरी तरह से एक चुनौती के अनुकूल है जिसमें परिवर्तन करना शामिल "है ''। है ना?

स्पष्टीकरण:

'""""""'""'""" assign to X2
'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""" 34 (double quote sign)
'""""""'""'""'""'""'""" assign to X5
'""'""'""'""'""'"""""""'""'""" X2+5 (apostrophe sign)
'"""""'""'""""""'"""'"""""""""" while (1+ (assign to X1 a value read from stdin, or -1 if stdin is empty) != 0)
 '"""" do 2 things
 '""""""'""'""'""'""" assign to X4
 '"""""""'""'""" the value of X2
 AND
 '"""" do 2 things
 '""""""'""'""'""" assign to X3
 '"""""""'""" the value of X1
 AND
 '"""" do 2 things
 '"""""'"""""""'""'""'""'""" while(X4 != 0)
  '"""" do 2 things
  '""""""'""'""'""'""" assign to X4
  '""""""""'"""""""'""'""'""'""" X4-1
  AND
  '""""""'""'""'""" assign to X3
  '""""""""'"""""""'""'""'""" X3-1
 end while
 AND
 '"""""""""'"""""""'""'""'""" if(X3 != 0)
  '"'"""""""'""" print X1
 else
  '" print the output of
  '"""""""""'"""""""'"""""""'""'""" if(X34 !=0)
   '"""" do 2 things
   '""""""'"""""""'""'"""'""""""""'""" assign X34=0
   AND
   '"'"""""""'""'""'""'""'""" print X5
  else
   '"""" do 2 things
   '""""""'"""""""'""'"""'""" assign X34=1
   AND
   '"'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'""'"""""""'""'""'""'""'""" print X5+57
 end if
end while

(X34 को कॉल वास्तव में X (X5) के लिए कॉल है, X5 = 34 के बाद से।)


1
एक कठिन चुनौती LOL
HighlyRadioactive

5

रेटिना , 13 बाइट्स

रेटिना को जल्दी से सीखना क्योंकि किसी कारण से मुझे जाप जीतना पसंद नहीं है और ऐसा लगता है कि सी # समाधान वैसे भी नियमित अभिव्यक्ति का उपयोग करेगा। मुझे पता है कि एक रेटिना उत्तर है, लेकिन मैंने इसे बनाते समय इसका उपयोग नहीं किया है, और मैंने इसे (बिल्कुल) वैसे भी पाया।

#2$`"
``
"
''

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


1
क्यों Japt के लिए नफरत है ?! : पी
झबरा

5

जावास्क्रिप्ट (ईएस 9), 34 बाइट्स

उद्धृत ब्लॉकों पर काम करना:

s=>s.replace(/"(.*?)"/gs,"``$1''")

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


जावास्क्रिप्ट (ईएस 6), 38 बाइट्स

प्रत्येक डबल-कोट पर अलग से काम करना:

s=>s.replace(/"/g,_=>(c="'`"[s^=1])+c)

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


RegExp के लिए dotAll ध्वज ECMAScript 2018 की नई विशेषता है , जिसे ES6 में शामिल नहीं किया गया है।
tsh

@tsh अच्छा कैच। अपडेट किया गया।
अरनौलड


4

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

f=lambda s:s and(s[0],"`'"[s.count('"')%2]*2)[s[0]=='"']+f(s[1:])

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

-8 बाइट्स एग्री टू द आउटग्राफर


दूसरे फ़ंक्शन के लिए, आप 8 बाइट्स निकाल सकते हैं (यह उतना अलग नहीं है जितना यह लग सकता है, मैंने सिर्फ s[0].replaceएक स्पष्ट s[0]=='"'जांच के साथ, कुछ अन्य संशोधनों के साथ प्रतिस्थापित किया है )।
आउटगॉल्फ

@EriktheOutgolfer अच्छा लगता है, धन्यवाद!
जित्स

4

जाप , 12 बाइट्स

11 की सीमा के लिए केवल 11 होगा (या शायद यह एक बग है) Japt।

r'"ȲîT°g"`'

कोशिश करो

r'"ȲîT°g"`'     :Implicit input of string
r'"              :Replace double quotes
   È             :Pass each match through a function
    ²            :  Duplicate
     î           :  Replace each character with
      T°         :    Postfix increment T (initially 0)
        g"`'     :    Index into "`'" with wrapping

यह बहुत बुरा है आप Qयहाँ उपयोग नहीं कर सकते : \
ओलिवर

@ ओलिवर, मैं कर सकता हूं (और मैं मूल रूप से किया था); मुझे अभी ,बहुत चाहिए।
झबरा

मेरा मतलब है कि यह बहुत बुरा है आप बस के Qस्थान पर उपयोग नहीं कर सकते'"
ओलिवर

4

TeX, 54 32 बाइट्स

एक TeX उद्धरण प्रतिस्थापन चुनौती के लिए हमें निश्चित रूप से एक TeX संस्करण की आवश्यकता है!

\catcode`"13\def"#1"{``#1''}...\bye

... इनपुट स्ट्रिंग है, इसलिए यह बाइट काउंट में शामिल नहीं होती है।


1
सरल क्यों नहीं \def"#1"{``#1''}? (या \long\defयदि आप एक अनुच्छेद सीमा को पार करने के लिए एक उद्धरण की उम्मीद करते हैं)
फेल्प ओलेनिक

1
इस स्पष्ट कारण के लिए कि मैं उस के बारे में नहीं सोचता था :-)
सिराकुसा

2

चारकोल , 23 बाइट्स

WS⊞υι⭆⪪⪫υ¶¦"⎇κ⁺ײ§'`κιι

इसे ऑनलाइन आज़माएं! लिंक कोड के वर्बोज़ संस्करण के लिए है। बोझिल इनपुट प्रारूप से बचने के लिए 8 बाइट्स शामिल हैं। स्पष्टीकरण:

WS⊞υι

एक खाली रेखा तक पहुंचने तक इनपुट लाइनें एकत्र करें।

⪫υ¶¦

न्यूलाइन वर्णों की पंक्तियों में शामिल हों।

⪪..."

उद्धरणों पर इनपुट विभाजित करें।

⭆...

प्रत्येक भाग पर मैप करें और अंतर्निहित प्रिंट के लिए परिणामों को संक्षिप्त करें।

⎇κ...ι

पहले भाग को अपरिवर्तित छोड़ दें।

⁺ײ§'`κι

उपयुक्त उद्धरण उपसर्ग, दोगुना।


मैं चारकोल समाधान की प्रतीक्षा कर रहा था। अच्छा!
HighlyRadioactive

2

आर , 40 बाइट्स

cat(scan(,"",,,'"',""),sep=c("``","''"))

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

स्ट्रिंग इनपुट को पढ़ता है, प्रत्येक पर अलग करता है ", तार का एक वेक्टर देता है। फिर उन तारों को चिपकाता है, डबल बैकटिक्स और विभाजकों के रूप में डबल एपोस्ट्रोफ के बीच बारी-बारी से उन्हें आवश्यकतानुसार पुनर्चक्रण करता है।

कोई शायद एक रेगेक्स के आधार पर एक छोटा आर उत्तर पोस्ट करेगा ... फिर भी, यह उत्तर आर के अधिक विशिष्ट है, मुझे लगता है।

scan(,"",,,'"',"")भाग की व्याख्या :

scan(, # empty first parameter: read from STDIN
  "",  # type of input is a string
  ,    # default 3rd parameter nmax
  ,    # default 4th parameter n
  '"', # separate on character "
  "")  # do not treat any characters as quotations marks (necessary to handle ' in the input)

2

पर्ल 6 , 23 बाइट्स

{S:g/\"(.*?)\"/``$0''/}

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

डार, स्पष्ट समाधान कम है। उपयुक्त उद्धरणों वाले संस्करण के साथ प्रत्येक उद्धृत भाग को प्रतिस्थापित करता है।

पर्ल 6 , 24 बाइट्स

{S:g{\"}=<`` ''>[$++%2]}

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

पात्रों के दो सेटों के बीच बारी-बारी से प्रत्येक दोहरे उद्धरण की जगह।


1

रेटिना , 15 बाइट्स

"
""
Y`"`\`\`''

इसे ऑनलाइन आज़माएं! 1 बाइट द्वारा उबाऊ रेटिना 0.8.2 उत्तर को बाहर निकालता है। स्पष्टीकरण:

"
""

सभी उद्धरणों की डुप्लिकेट करें।

Y`"`\`\`''

बैकलीक्स और सिंगल कोट्स के जोड़े के साथ उद्धरणों को चक्रीय रूप से बदलें।

पूर्णता के लिए बोरिंग 16-बाइट रेटिना 0.8.2 उत्तर:

s`"(.*?)"
``$1''

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




1

भूलभुलैया , (43?) 53 बाइट्स

396"
 } "",)@
  ~"  (
 "~ 3_:
""" 4
" .;-
=   ;
..::;

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

इस का एक गोल्फ संस्करण, बहुत सरल, 92 बाइट कार्यक्रम:

3 """
9 " ",)@
}96 " (
    " :_34-;;
    "     ; :
   """"""". :
   "        .
   """"""""=.

यदि हमें शून्य बाइट वाले इनपुट को संभालने की आवश्यकता नहीं है तो 43 बाइट्स :

39}9
@  6
`,""
`  "
: ."=..
_ ;   "
34-;;::

1

पायथन 2 , 57 बाइट्स

lambda s:re.sub('"(.*?)"',r"``\1''",s,flags=16)
import re

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

हालांकि मुझे वास्तव में जितसे का जवाब पसंद है ।


-4 बाइट्स यदि आप flagsतर्क के बजाय इनलाइन झंडे का उपयोग करते हैं:r'(?s)"(.*?)"'
Triggernometry

1

(GNU) सेड , 38 33 30 बाइट्स

-4-n झंडे को हटाकर और अंतर्निहित रूप से मुद्रण पर n, -1 पूर्व में पुन: उपयोग करके /expression/, धन्यवाद @Cowsquack। -3 अंतर्निहित शाखा-से-अंत का उपयोग करके।

:a
s/"/``/;T
:b
s//''/;ta
n;bb

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

कुछ सुंदर बुनियादी लेबल कूद। यह शायद एक बाइट या दो द्वारा गोल्फ हो सकता है।

:a          # label a
s/"/``/;T   # replace " -> ``. If unsuccessful, move to next line
:b          # label b
s//''/;ta   # replace " (implicit) -> ''. If successful, jump to a (w/o reading new line)
n;bb        # read in the next line, but jump to label b. 

1
Btw आमतौर पर इस्तेमाल किए जाने वाले झंडे हेडर में निर्दिष्ट होते हैं। आप codegolf.stackexchange.com/a/167295/41805 का उपयोग करके एक बाइट को गोल्फ कर सकते हैं , इसके अलावा कुछ ब्रांचिंग लॉजिक को हटाया जा सकता है। फिर बिना -nझंडे के समाधान का काम करना थोड़ा और बचाना चाहिए। (और निश्चित रूप से वहाँ तुच्छ sed -zसमाधान है जो मैं आपको जानबूझकर बचने के लिए मानता हूं)
क्रिति लिथोस

ठीक है, मैं man sedथोड़ा पीछे हट गया और 30 पर चढ़ गया। बेझिझक मुझे कुछ भी बताने में संकोच न करें, आपको इस लैंग पर गोल्फ का अनुभव है। (ओह, -zमेरे लिए नया है, लेकिन मैं सहमत हूं। मैं इसके बिना
रहूंगा

अच्छी तरह से किया गया, मुझे हमेशा एक
अजीब

1

05AB1E , 15 बाइट्स

'"¡ā¨„'`sè2×.ιJ

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

05AB1E में कोई रेग्जेस नहीं है, इसलिए हम विभाजन करते हैं ", बारी ``- बारी से सूची बनाते हैं और'' फिर दोनों करते हैं।


1
ठीक है, ऐसा लगता है कि मुझे अपना उत्तर ठीक नहीं करना और हटाना नहीं है। ;)
केविन क्रूज़सेन

1

हास्केल , 67 60 58 बाइट्स

(#0)
('"':x)#n=["``","''"]!!n++x#(1-n)
(a:b)#n=a:b#n
x#n=x

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

प्रासंगिक कार्य है (#0)

चूँकि मैंने मूल रूप से सोचा था कि प्रश्न के लिए हमें यहाँ एकल उद्धरण बदलने की भी आवश्यकता है जो कि दोनों को संभालता है:

हास्केल , 125 बाइट्स

(#(1<0,1<0))
('"':x)#(m,n)=last("``":["\""|m])++x#(not m,n)
('\'':x)#(m,n)=last('`':['\''|n]):x#(m,not n)
(a:x)#n=a:x#n
x#n=x

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


"\""होना चाहिए "''"(दो एपोस्ट्रोफिस)
सिराकुसा

@ सिराकुसा धन्यवाद, मैंने मान लिया कि जब से आप "टेक्स का उपयोग कर सकते हैं आप इसे यहाँ इस्तेमाल कर सकते हैं।
बजे पोस्ट रॉक गार्फ हंटर

1

QuadR , 14 बाइट्स

"(.*?)"
``\1''

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

Dyalog APL के लिए @ Adám के रैपर का उपयोग करते हुए सरल खोजें / बदलें ⎕R eplace फंक्शन ।

किस तरह:

"(.*?)"  PCRE, finding anything between two double quotes and assigning it to group 1
``\1''   Transformation string, replacing the match with ``group_1''.


0

जेली , 13 बाइट्स

ṣ”"µJḊ⁾`'ṁḤż@

एक पूर्ण कार्यक्रम।

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

कैसे?

ṣ”"µJḊ⁾`'ṁḤż@ - Main Link: list of characters, T   e.g. ..."hi" - she "said"...
 ”"           - character '"'                           '"'
ṣ             - split (T) at ('"')                      ["...","hi"," - she ","said","..."]
   µ          - (call that X) start a new monadic chain
    J         - range of length (of X)                  [1,2,3,4,5]
     Ḋ        - dequeue                                 [2,3,4,5]
      ⁾`'     - list of characters                      ["`","'"]
         ṁ    - mould like                              ["`","'","`","'"]
          Ḥ   - double                                  ["``","''","``","''"]
           ż@ - (with reversed @rguments) zip (with X)  [["...","``"],["hi","''"],[" - she ","``"],["said","''"],["..."]]
              - implicit (smashing) print               ...``hi'' - she ``said''...



0

स्टैक्स , 11 बाइट्स

û╩↕H£ñ╟Uzay

इसे चलाएं और डीबग करें

प्रक्रिया:

  1. सभी इनपुट, newlines और सभी ले लो।
  2. रेगेक्स '"'एक ब्लॉक के साथ प्रतिस्थापित करता है जो बैकटिक्स और फोरेटिक्स (?) के जोड़े के वैकल्पिक आउटपुट का उत्पादन करता है।

0

जावा 8, 40 बाइट्स

s->s.replaceAll("\"([^\"]+)\"","``$1''")

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

स्पष्टीकरण:

s->                             // Method with String as both parameter and return-type
  s.replaceAll("\"([^\"]+)\"",  //  Replace all these matches,
               "``$1''")        //  with this replacement 

रेगेक्स स्पष्टीकरण:

 "([^"]+)"                      // MATCH:
 "                             "//  A literal "
   [^"]+                       "//  Followed by 1 or more non-" characters
  (     )                       //  (captured in capture group 1)
         "                     "//  Followed by a literal " again

``$1''                          // REPLACEMENT:
``                              //  Literal ``
  $1                            //  Followed by the match of capture group 1
    ''                          //  Followed by a literal ''

0

व्रेन , 91 बाइट्स

Fn.new{|n|
var c=1
for(i in n.split("\"")[1..-1])System.write(((c=-~c)%2==0?"``":"''")+i)
}

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

व्याख्या

Fn.new{|n| // New anonymous function
var c=1    // Set the index counter as 1
for(i in n.split("\"")                                                 // For each over n splitted with quotes
                      [1..-1])                                         // Get rid of the first quote
                              System.write(                          ) // Output this to the console
                                           (
                                            (c=-~c)                    // Increment the counter
                                                   %2==0?"``"          // If that's divisible by 2, output a backquote
                                                             :"''"     // Otherwise, output a frontquote
                                                                  )+i  // Join the result with i
}

0

GolfScript ,35 34 बाइट्स

1:c;{.34={;c)2%:c'""'"``"if}""if}%

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

व्याख्या

1:c;                                # Set 1 to the current item counter

    {                            }% # Map for every character in the input:
     .34=                      if   #     If the character isn't the quote,
                             ""     #         Just leave it alone
         {                  }       #     Otherwise:
          ;                         #         Remove the copy of the input
           c):c                     #         Increment the counter
                2%        if        #         If the counter isn't divisible by 2, 
                  '""'              #             Output the double-quote
                      "``"          #         Otherwise: Output the double backtick
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.