ফর্ম্যাটটি রেখে html থেকে n টি অক্ষর কমিয়ে দিন


11

প্রায় প্রতিটি ভাষার একটি অন্তর্নির্মিত ফাংশন থাকে যা একটি নির্দিষ্ট অবস্থানে স্ট্রিংকে বিভক্ত করতে পারে। তবে, আপনার স্ট্রিংতে এইচটিএমএল ট্যাগ দেওয়ার সাথে সাথে বিল্ট-ইন ফাংশনটি সঠিকভাবে কাজ করবে না।

আপনার কাজ হ'ল এমন একটি প্রোগ্রাম বা ফাংশন লিখুন যা নবম অক্ষরটিতে একটি স্ট্রিং বিভক্ত হয় তবে এইচটিএমএল ট্যাগের অক্ষর গণনা করে না এবং কোনও বৈধ এইচটিএমএল আউটপুট দেয়। প্রোগ্রামটি অবশ্যই ফর্ম্যাট করে রাখতে হবে। এইচটিএমএল ট্যাগগুলির বাইরের স্পেসগুলি আপনার ইচ্ছামত গণনা করা বা নাও গণনা করা যেতে পারে তবে অবশ্যই সংরক্ষণ করা উচিত। আপনি তবে একক জায়গায় একটানা একাধিক স্পেস এক্সচেঞ্জ করতে পারেন।

ইনপুট:

  1. স্ট্রিং
  2. (0-ভিত্তিক) এ বিভক্ত হওয়ার অবস্থান

এগুলি প্রোগ্রাম বা ফাংশন আর্গুমেন্ট হিসাবে নেওয়া যেতে পারে বা স্ট্যান্ডার্ড ইনপুট থেকে পড়া যায়।

আউটপুট: বিভক্ত স্ট্রিং যা মান আউটপুটটিতে ফেরত বা লেখা যায়।

ইনপুটটি বৈধ এইচটিএমএল হবে, এতে কোনও সত্তা (যেমন  ) থাকবে না। অক্ষর সীমা পরে খোলা ট্যাগগুলি আউটপুট থেকে বাদ দেওয়া উচিত (শেষ উদাহরণটি দেখুন)।

উদাহরণ:

ইনপুট :, <i>test</i>3
আউটপুট:<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 html2
আউটপুট: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 এবং ">" গুলি থাকতে পারে যা এইচটিএমএল ট্যাগের অংশ নয়?
xem

একটি ব্যবহার করা উচিত &lt;এবং &gt;পরিবর্তে <>, সুতরাং না ( &lt;বা &gt;হয় উপস্থিত হবে না)।
ডেভিড ফ্র্যাঙ্ক

পাঠ্য নোডের পরে যেখানে বিভাজন ঘটে সেখানে মার্কআপ রয়েছে এমন কোনও উদাহরণ আপনি অন্তর্ভুক্ত করতে পারেন ? পছন্দ <i>ab</i><b>cd</b> 1?
মার্টিন ইন্ডার

ছাড়াও অন্য কোন বিকল্প আছে <i>a</i>কি?
ডেভিড ফ্র্যাঙ্ক

@DavidFrank <i>a</i><b></b>(কোন অর্থে যদি আপনি বিবেচনা করে নির্মিত হয় bএছাড়াও হতে পারে divবা img।)
মার্টিন Ender

উত্তর:


2

এই উত্তরটি সর্বশেষ নিয়মের সাথে বৈধ নয়।

জাভাস্ক্রিপ্ট ( ES6 ) 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

আপনি দয়া করে আন-গল্ফড কোড সরবরাহ করতে পারেন, বা কোডটি কী এবং কেন করবে তার কেবল ব্যাখ্যা? এটি বর্তমানে উপলব্ধি করা কিছুটা শক্ত। ধন্যবাদ!
গৌরাঙ্গ টন্ডন

@ গৌরাংট্যান্ডন মন্তব্যে অবারিত কোড যুক্ত করেছেন
nderscore

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 - দুর্ভাগ্যক্রমে (@ ডেভিড ফ্র্যাঙ্ক) তার উদাহরণগুলি মন্তব্য বা আপডেট করেনি যাতে এটি অস্পষ্ট যে সে এই আচরণ চায় কিনা? আমি আশা করছিলাম আমার শেষ উদাহরণটি কিছুটা আলোড়িত করবে! আমরা স্পষ্টতা না পাওয়া পর্যন্ত চলে যাচ্ছি। যাইহোক এটি আপনার পরামর্শ অনুযায়ী কাজ করতে এটি কেবল অতিরিক্ত 17 টি অক্ষর গ্রহণ করবে। আমি হ্যাকটি বিশেষ পছন্দ করি নি তাই পরিবর্তে এটি এখানে আবার লিখে ফেললাম (অগল্ফড) - gist.github.com/draegtun/93682f5a07c40bd86e31
ড্র্যাগটুন

0

রুবি ... লুপগুলির সাথে খুব নিখুঁত

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

এই প্রশ্নটি কোডগল্ফ হিসাবে চিহ্নিত হয়েছে, আপনার উত্তরটি গল্ফ করা উচিত। আপনি ভেরিয়েবলের নামগুলি একটি অক্ষরের নামের সাথে প্রতিস্থাপন করে, সংক্ষিপ্ত ফাংশন নাম ব্যবহার করে এবং যেখানেই পারেন সাদা স্থান সরিয়ে শুরু করতে পারেন
sagiksp

0

(আইই) জেএস - 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}

দাবি পরিত্যাগী:

  • আইই কনসোল চালান

1
এটি সর্বশেষ (পাগল) নিয়মটি ভঙ্গ করে: অক্ষরের সীমাবদ্ধতার পরে খোলা ট্যাগগুলি আউটপুট থেকে বাদ দেওয়া উচিত (উপরের মন্তব্যে আমার উদাহরণ চেষ্টা করুন)।
edc65

@ edc65 আশা করি, আপডেট করা সংস্করণ সমস্ত নিয়মের উপরে চেক
ইএম এডিড হয়েছে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.