यह पोस्ट कितनी बोल्ड है?


13

प्रस्तावना

Stack Exchange markdown में, हम ** का उपयोग टेक्स्ट को बोल्ड करने के लिए करते हैं। उदाहरण के लिए, यह मार्कडाउन:

The **quick brown fox jumps over the lazy** dog.

निम्नानुसार रेंडर करें:

जल्दी भूरी लोमड़ी आलसी पर कूदता है कुत्ता।

बेशक, हम बोल्डनेस को बंद करने के लिए ** का उपयोग करते हैं। तो जवाब में से कम बोल्ड होगा। उदाहरण के लिए:

The **quick** brown fox jumps over the **lazy** dog.

निम्नानुसार रेंडर करें:

त्वरित भूरी लोमड़ी पर कूदता है आलसी कुत्ते।

हालाँकि, अगर बोल्डनेस बंद नहीं है, तो यह बोल्ड के रूप में प्रस्तुत होता है :

The **quick brown fox jumps over the lazy dog.

निम्नानुसार रेंडर करें:

तेज, भूरी लोमडी आलसी कुत्ते के उपर कूद गई।

यदि पाठ में एक भी बैकस्लैश है \, तो बोल्डनेस प्रभावी नहीं होती है:

The \**quick brown fox jumps over the lazy dog.**

निम्नानुसार रेंडर करें:

तेज, भूरी लोमडी आलसी कुत्ते के उपर कूद गई।**

अनबॉल्ड किए गए टेक्स्ट में व्हाइट स्पेस का परिणाम है (ध्यान दें, ब्राउन के बाद का सफेद स्पेस सिंगल टैब है):

The** quick** brown fox jumps over the lazy dog.**

निम्नानुसार रेंडर करें:

तेज, भूरी लोमडी आलसी कुत्ते के उपर कूद गई।**

हम बोल्ड के लिए भी __ का उपयोग कर सकते हैं, लेकिन ध्यान दें कि एक समय में केवल एक ही सक्रिय हो सकता है। यहाँ एक और अधिक जटिल उदाहरण है:

The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.

निम्नानुसार रेंडर करें:

त्वरित ** ब्राउन fox__ कूदता over__ the__ आलसी ** कुत्ता।

प्रश्न:

आप एक प्रोग्राम या समारोह, यह देखते हुए ASCII पाठ लिख सकते हैं या तो एक के रूप में Stringतर्क या STDIN, जहां केवल विशेष वर्णों को पर **, __, \, (भागने के लिए) और पिछली श्वेत रिक्ति निर्धारित देखते हैं कि कितने बोल्ड अक्षर। इस मान को STDOUT में मुद्रित किया जाना चाहिए या अपने फ़ंक्शन से लौटाया जाना चाहिए। आपको बहुत लंबे तारों का समर्थन करने की आवश्यकता नहीं है; स्ट्रिंग की लंबाई से अधिक नहीं होने की गारंटी है 30K, जो कि स्टैक एक्सचेंज पोस्ट की सीमा है।

ठीक छाप:

  • क्या मैं एक मामले के लिए एक अपवाद / अन्य त्रुटि फेंक सकता हूं, और दूसरे के लिए सामान्य रूप से वापस आ सकता हूं?
    • नहीं। यह दोनों मामलों के लिए या तो एक स्पष्ट, स्पष्ट, गैर-त्रुटिपूर्ण वापसी मूल्य होना चाहिए। STDERR आउटपुट को नजरअंदाज कर दिया जाएगा।
  • शब्दों के बीच रिक्त स्थान बोल्ड माना जाता है?
    • हाँ। **quick brown**इसमें 11 बोल्ड किरदार हैं।
  • \में \**, अगर बोल्ड होना चाहिए , गिना जाना चाहिए?
    • नहीं, यह ** के रूप में प्रस्तुत करता है, इसलिए यदि इसे बोल्ड किया जाना चाहिए तो यह केवल 2 वर्ण होगा।
  • पूरी तरह से स्पष्ट हो: आप कितने वर्णों से मतलब रखते हैं?
    • कुल चरित्र जो बोल्ड प्रस्तुत करेगा। इसका मतलब है कि **है गाया नहीं करता है, तो यह पाठ बदल देती है, लेकिन अगर ऐसा नहीं होता है यह प्रदान की गई है।
    • ध्यान दें कि इसे **कई तरीकों से बोल्ड किया जा सकता है, जैसे **\****-> **
    • इस संभावना पर विचार न करें कि कुछ पाठ को इटैलिक में परिवर्तित किया जा सकता है। विचार करने का एकमात्र मार्कडाउन नियम ** = बोल्ड * है।
  • स्टैक एक्सचेंज पर, HTML बोल्ड भी काम करता है। यानी <b> </ b>
    • हां, मैं जागरूक हूं। इस मामले पर विचार न करें, यह सामान्य पाठ है।
  • HTML के बारे में क्या कहता है? जैसे &lt;-><
    • इन्हें भी सामान्य पाठ माना जाना चाहिए, कोई HTML निकाय रूपांतरण नहीं है।
  • मैंने एक उदाहरण के बारे में सोचा है जिसे आपने ऊपर कवर नहीं किया है!
    • नियम ठीक उसी तरह काम करते हैं जैसे कि टेक्स्ट को स्टैक एक्सचेंज में पोस्ट किया गया था, एक उत्तर में (कोई टिप्पणी नहीं), सिवाय इसके कि कोड ब्लॉक विशेष वर्ण नहीं हैं । दोनों चार प्रकार के स्थान और बैकटिक प्रकार। यदि आप इस बारे में निश्चित नहीं हैं कि पाठ को कैसे प्रस्तुत किया जाना चाहिए, तो इसे एक उत्तर बॉक्स में परीक्षण के रूप में कहीं फेंक दें, वे नियम हैं जिनका आपको पालन करना चाहिए।

उदाहरण:

इनपुट:

The **quick brown fox jumps over the lazy** dog.

आउटपुट:

35

इनपुट:

The **quick brown fox jumps over the lazy dog.

आउटपुट:

0

इनपुट:

The __quick**__ brown **fox__ jumps** over__ the__ lazy **dog.

आउटपुट:

18

इनपुट:

The __quick\____ brown fox **jumps over\** the** lazy \**dog.

आउटपुट:

23

इनपुट:

The****quick brown fox****jumps over **the****lazy** dog.

आउटपुट:

11

स्टैंडर्ड लोफॉल्स पर प्रतिबंध लगा दिया गया है।


है 18तीसरे टेस्ट मामले के लिए सही है?
बीटा डेके

@ बेताडेय यह 7 + 11 है। आपको क्या लगता है कि यह होना चाहिए?
डुर्रोन 597

मुझे 28 मिल रहे हैं ... मैं अपने कार्यक्रम
बीटा डेके

@BetaDecay **fox__ jumps**उस विशेष तह को समाप्त करता है।
डुर्रोन 597

1
सवाल यह लगता है कि तीन-चरित्र से बचने के क्रम हैं \**या नहीं \__, लेकिन StackExchange में केवल दो-चरित्र से बचने के क्रम हैं \*या \_। तो \***a**एक बोल्ड द्वारा पीछा तारांकन पैदा करता है a। वहाँ भी एक और भागने है \\ । क्या हमें उस एक को संभालना चाहिए?
17

जवाबों:


5

आरएस , 107 बाइट्स

\t/ 
(?<!\\)((\*|_){2})((?=\S)(?!\2)(\\\2|.)*?)?(?<=\S)\1/(\n)^^((^^\3))\3
\\(\*|_)/\t
[^\t\n]/
\n/_
\t_?/
(_*)/(^^\1)

लाइव डेमो और परीक्षण के मामले।

यह एक बहुत पागल ... बात है।

नवीनतम परीक्षण मामला अभी तक काम नहीं करता है। विप...

व्याख्या

\t/ 

टैब को स्पेस से बदलें। उनके पास एक ही वर्ण गणना है, और टैब का उपयोग बाद में एक विशेष चरित्र के रूप में किया जाता है।

(?<!\\)((\*|_){2})((?=\S)(?!\2)(\\\2|.)*?)?(?<=\S)\1/(\n)^^((^^\3))\3

लंबाई के किसी भी पाठ को प्रतिस्थापित करें, जिसे मूल पाठ के बाद नए सिरे से Nबोल्ड किया जाना चाहिए N

\\(\*|_)/\t

टैब के साथ स्लैश द्वारा पूर्व में किए गए परिसीमन की किसी भी घटना को बदलें। यह सुनिश्चित करना है कि प्रविष्टियों की तरह **a\***3 के बजाय 2 की वर्ण गणना है।

[^\t\n]/

ऐसा कोई भी चरित्र निकालें जो टैब या न्यूलाइन नहीं है।

\n/_

सभी नए सिरे को अंडरस्कोर से बदलें।

\t_?/

किसी भी अंडरस्कोर के साथ किसी भी टैब (जो बच गए सीमांकक का प्रतिनिधित्व करते हैं) को निकालें, जो उनका अनुसरण कर सकते हैं। यह पात्र समाप्त होने वाले सीमांकक के साथ वर्णों के उपरोक्त अंक से संबंधित है।

(_*)/(^^\1)

इसकी लंबाई के साथ अंडरस्कोर अनुक्रम को बदलें। यह वर्ण गणना है।


**a****b**आउटपुट 2, यह होना चाहिए 6. देखें: एक **** बी
डुर्रोन 597

1
@ durron597 मैं थोड़ा उलझन में हूँ कि कैसे काम करना है। क्या आप एक स्पष्टीकरण जोड़ सकते हैं?
kirbyfan64sos

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

तो, @ kirbyfan64sos, पोस्ट कितना बोल्ड है ?
mbomb007

2

पायथन: 133 अक्षर

import re
f=lambda s:sum(len(x[0])-4for x in re.findall(r'(([_*])\2\S.*?\2\2+)',re.sub(r'([_*])\1\1\1','xxxx',re.sub(r'\\.','x',s))))

यह पायथन 2 और 3 दोनों में समान रूप से काम करना चाहिए। फ़ंक्शन fबोल्ड वर्णों की संख्या लौटाता है जो स्टैक ओवरफ्लो की मार्कडाउन प्रणाली द्वारा प्रारूपित होने पर स्ट्रिंग में होगी।

मुझे लगता है कि मुझे ज्यादातर कोने के मामले सही मिलते हैं (अब तक की टिप्पणियों में उल्लिखित सभी सहित), लेकिन यह अभी भी पूरी तरह से सही नहीं है। मुझे समझ नहीं आता कि बोल्ड (जैसे करता है) में x***x**रेंडर क्यों नहीं होता है, इसलिए मेरे कोड को कम से कम कुछ इनपुट गलत मिलेंगे।*x***x**

कोड के चार मुख्य चरण हैं। पहले किसी भी बैकस्लैश का रीजैक्स रिप्लेसमेंट करता है और उसके बाद 'x' कैरेक्टर के साथ किसी भी कैरेक्टर को। दूसरा चरण चार तारांकन के किसी भी क्रम को बदलता है या चार 'x' वर्णों को रेखांकित करता है। तीसरा चरण findallसभी खंडों को खोजने के लिए एक regex का उपयोग करता है जिसे इटैलिकाइज़ किया जाएगा। अंतिम चरण एक sumकॉल के अंदर एक जनरेटर अभिव्यक्ति है , जो उन ब्लॉकों की लंबाई को जोड़ता है, प्रत्येक से 4 वर्णों को घटाते हुए, क्योंकि हम अपनी गिनती में सीमांकक को शामिल नहीं करना चाहते हैं।

यहाँ कुछ परीक्षण उत्पादन है:

>>> f('The **quick brown fox jumps over the lazy** dog.')
35
>>> f('The **quick brown fox jumps over the lazy dog.')
0
>>> f('The \**quick brown fox jumps over the lazy dog.**')
0
>>> f('The** quick** brown fox jumps over the lazy dog.**')
0
>>> f('The __quick\____ brown fox **jumps over\** the** lazy \**dog.')
23
>>> f('The****quick brown fox****jumps over **the****lazy** dog.')
11
>>> f('\***a**')
1
>>> f('x***x**') # this one doesn't match the Stack Overflow input box
2

मुझे नहीं पता कि x***x**इनपुट बॉक्स में काम क्यों नहीं होता है। विचित्र
डुर्रोन 597 14

1

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

s=>(o=0,s.replace(/\\(.)\1/g,'..').replace(/(\*\*|__)(?=\S)(.*?\S)\1/g,l=>o+=l.length-4),o)

हाथ से पहले सभी से बच जाता है, फिर एक नियमित अभिव्यक्ति का उपयोग करता है। गोल्फ की क्षमता के बहुत सारे।

व्याख्या

s=>( // Function with argument s
  o=0, // Set var "o" to 0
  s.replace( // Replace...
    /\\(.)\1/g,  // Matches \ followed by two the same characters. g means "global"
    ".." // Replace with two arbitrary characters
  ).replace( // Replace again...
     /(\*\*|__) // Match ** or __, store in "group 1"
       (?=\S)   // Make sure next character isn't whitespace
       (.*?\S)\1  // Match all characters until "group 1".
                  // Make sure last character isn't whitespace
     /g, l=> // Take the match...
       o+= // Increase o by...
         l.length // the length of the match
         - 4 // minus 4 to account for ** and __
  ), o) // Return o

इसके लिए **a*b*c**9 रिटर्न, जो मेरा मानना ​​है कि गलत है। असली गिनती 5 (या 3 है, यदि आप इटैलिक को ध्यान में रखते हैं, जो ओपी के अनुसार नहीं होना चाहिए)।
क्रिस्टियन लुपस्कु
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.