स्वरूपण को ध्यान में रखते हुए html को n वर्णों में कम करें


11

लगभग हर भाषा में एक अंतर्निहित फ़ंक्शन होता है जो किसी दिए गए स्थान पर एक स्ट्रिंग को विभाजित कर सकता है। हालाँकि, जैसे ही आपके पास स्ट्रिंग में html टैग होंगे, बिल्ट-इन फ़ंक्शन ठीक से काम नहीं करेगा।

आपका कार्य एक प्रोग्राम या फ़ंक्शन लिखना है जो nth वर्ण पर एक स्ट्रिंग को विभाजित करता है, लेकिन html टैग के वर्णों की गणना नहीं करता है और एक मान्य HTML आउटपुट करेगा। कार्यक्रम को स्वरूपण रखना होगा। Html टैग के बाहर रिक्त स्थान को गिना या नहीं गिना जा सकता है, जैसा कि आप चाहते हैं, लेकिन संरक्षित किया जाना चाहिए। हालाँकि, आप एक ही स्थान में कई लगातार स्थानों का आदान-प्रदान कर सकते हैं।

इनपुट:

  1. डोर
  2. (0-आधारित) में विभाजित होने की स्थिति

इन्हें प्रोग्राम या फंक्शन की दलील के रूप में लिया जा सकता है या मानक इनपुट से पढ़ा जा सकता है।

आउटपुट: स्प्लिट स्ट्रिंग जिसे मानक आउटपुट में वापस या लिखा जा सकता है।

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

उदाहरण:

इनपुट: <i>test</i>
आउटपुट:<i>tes</i>

इनपुट: <strong><i>more</i> <span style="color: red">complicated</span></strong>7
आउटपुट:<strong><i>more</i> <span style="color: red">co</span></strong>

इनपुट: no html
आउटपुट:no

इनपुट: <b>no</b> <i>html root</i>5
आउटपुट:<b>no</b> <i>ht</i>

इनपुट: <b>no img</b><img src="test.png" />more text6
आउटपुट:<b>no img</b>

आप किसी भी भाषा और दिए गए भाषा के मानक पुस्तकालय का उपयोग कर सकते हैं। यह कोड गोल्फ, सबसे छोटा कार्यक्रम जीत है। मज़े करो!


1
क्या इनपुट में "<" s और ">" s शामिल हैं जो HTML टैग का हिस्सा नहीं हैं?
xem

एक का उपयोग करना चाहिए &lt;और &gt;इसके बजाय <>, इसलिए नहीं ( &lt;या &gt;तो मौजूद नहीं होगा)।
डेविड फ्रैंक

क्या आप एक उदाहरण शामिल कर सकते हैं जहां पाठ नोड के बाद मार्क अप होता है जहां विभाजन होता है? पसंद है <i>ab</i><b>cd</b> 1?
मार्टिन एंडर

क्या इसके अलावा कोई अन्य विकल्प हैं <i>a</i>?
डेविड फ्रैंक

@ दाविदफ्रैंक <i>a</i><b></b>(जो समझ में आता है कि क्या आप bभी ऐसा कर सकते हैं divया हो सकता है img।)
मार्टिन एंडर

जवाबों:


2

यह उत्तर नवीनतम नियम के साथ मान्य नहीं है।

जावास्क्रिप्ट ( ईएस 6 ) 94 91

f=(s,l)=>s.split(/(<[^>]+>)/).map(x=>x[0]=='<'?x:[l-->0?y:''for(y of x)].join('')).join('')
f('<strong><i>more</i> <span style="color: red">complicated</span></strong>', 7);
// '<strong><i>more</i> <span style="color: red">co</span></strong>'

Ungolfed:

f=(s,l)=>
    s.split(/(<[^>]+>)/). // split string s by <*>, capture group is spliced into the array 
    map(x=> // map function to every item in the array
        x[0]=='<'? // if first character is a <
            x // don't modify the string
        : // else
            [ // array comprehension
                for(y of x) // for every character y in x
                    l-->0? // if l > 0 (and decrement l)
                        y // character y
                    : // else
                        '' // empty string 
            ].join('') // join characters in array
        ).
    join('') // join all strings in array

क्या आप अन-गोल्‍ड कोड प्रदान कर सकते हैं, या हो सकता है कि कोड क्‍या और क्‍यों करता है? इसकी वर्तमान में समझ पाना थोड़ा कठिन है। धन्यवाद!
गौरांग टंडन

@ गौरांगटंडन ने टिप्पणियों के साथ असंगठित कोड जोड़ा
नॉर्डकोर

2

प्रतिबल - 252 वर्ण

c: complement charset"<>"f: func[s n][t: e: 0 to-string collect[parse s[any[(m: 0)copy w[["</"some c">"](-- t)|["<"some c"/>"]|["<"some c">"](++ t)| any c(m: 1)](if e = 0[if m = 1[w: copy/part w n n: n - length? w]keep w]if all[n <= 0 t = 0][e: 1])]]]]

टिप्पणियों के साथ अपुष्ट:

c: complement charset "<>"

f: func [s n] [
    t: e: 0             ;; tag level (nesting) & end output flag
    to-string collect [
        parse s [
            any [
                (m: 0)                            ;; tag mode
                copy w [
                      ["</" some c ">" ] (-- t)   ;; close tag
                    | ["<"  some c "/>"]          ;; self-closing / void elements
                    | ["<"  some c ">" ] (++ t)   ;; open tag
                    | any c (m: 1)                ;; text mode
                ] (
                    ;; flag not set so can still output
                    if e = 0 [
                        ;; in text mode - so trim text
                        if m = 1 [
                            w: copy/part w n
                            n: n - length? w
                        ]
                        keep w
                    ]

                    ; if all trimmed and returned to flat tag level then end future output
                    if all [n <= 0  t = 0] [e: 1]
                )
            ]
        ]
    ]
]

रॉल कंसोल में उदाहरण:

>> f "<i>test</i>" 3
== "<i>tes</i>"

>> f {<strong><i>more</i> <span style="color: red">complicated</span></strong>} 7
== {<strong><i>more</i> <span style="color: red">co</span></strong>}

>> f {no html} 2
== "no"

>> f {<b>no</b> <i>html root</i>} 5
== "<b>no</b> <i>ht</i>"

>> f {<b>no img</b><img src="test.png" />more text} 6
== "<b>no img</b>"

>> f {<i>a</i><b></b>} 1
== "<i>a</i>"

>> f {<strong><i>even</i> <span style="color: red">more <b>difficult</b></span></strong>} 14
== {<strong><i>even</i> <span style="color: red">more <b>diff</b></span></strong>}

>> f {<strong><i>even</i> <span style="color: red">more <b>difficult</b></span></strong>} 3 
== {<strong><i>eve</i><span style="color: red"><b></b></span></strong>}

फिर से यह अंतिम नियम को तोड़ता है: वर्ण सीमा के बाद खोले जाने वाले टैग को आउटपुट से छोड़ा जाना चाहिए (अंतिम उदाहरण देखें)। अंतिम उदाहरण में स्पैन और बी टैग को छोड़ दिया जाना चाहिए। यह नियम चुनौती को लगभग असंभव बना देता है।
edc65

@ edc65 - दुर्भाग्यवश (@David Frank) ने अपने उदाहरणों पर टिप्पणी नहीं की या अपडेट नहीं की है, इसलिए यह स्पष्ट नहीं है कि वह इस व्यवहार को चाहते हैं या नहीं? मैं उम्मीद कर रहा था कि मेरा आखिरी उदाहरण कुछ हलचल करेगा! जब तक हम स्पष्टीकरण प्राप्त नहीं कर लेते, तब तक छुट्टी पर जाना। वैसे भी यह आपके द्वारा सुझाए गए तरीके से काम करने के लिए केवल एक अतिरिक्त 17 वर्ण लेगा। मैंने हैक को विशेष रूप से पसंद नहीं किया, इसके बजाय इसे यहाँ (ungolfed) - gist.github.com/draegtun/93682f5a07c40bd86e31
draegtun

0

रूबी ... छोरों के साथ बहुत unrubylike

def split(str,n)

  i = current = 0 
  return_str = ""

  while i < n
    if str[current] == "<"
      while str[current] != ">"
        return_str.concat str[current]
        current += 1
      end
      return_str.concat str[current]
      current += 1
    else
      return_str.concat str[current]
      i += 1
      current += 1
    end
  end

  while current < str.length
    if str[current] == "<"
      while str[current] != ">"
        return_str.concat str[current]
        current += 1
      end
      return_str.concat str[current]
      current += 1
    end
    current += 1
  end


  return_str + str[current..-1]
end

यह प्रश्न कोडगोल्फ के रूप में चिह्नित है, आपको अपना उत्तर गोल्फ देना चाहिए। आप चर नामों को एक अक्षर के नामों से बदलकर, छोटे फ़ंक्शन नामों का उपयोग करके और जहाँ भी आप कर सकते हैं, श्वेत-स्थान को हटाकर शुरू कर सकते हैं
'16:40

0

(IE) JS - 135

function f(t,n){b=document.body;b.innerHTML=t;r=b.createTextRange();r.moveStart("character",n);r.select();r.execCommand('cut');return b.innerHTML}

अब मुझे गंदा लगता है। लेकिन उन सभी चार्ट को हटाने की शुरुआत करने की जरूरत है ...

function f(t,n)
{b=document.body;b.innerHTML=t;r=b.createTextRange();r.collapse();r.moveEnd("character",n);
r.select();return r.htmlText}

अस्वीकरण:

  • IE कंसोल में चलाएँ

1
यह अंतिम (पागल) नियम को तोड़ता है: वर्ण सीमा के बाद खोले जाने वाले टैग को आउटपुट से हटा दिया जाना चाहिए (ऊपर दिए गए टिप्पणियों में मेरे उदाहरण का प्रयास करें)।
edc65

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