পাদদেশগুলি পাদটীকাগুলিতে


29

পটভূমি

এলআইএসপি প্রোগ্রামাররা বিশ্ব দখল করে নিয়েছে! অভিভাবকদের পবিত্র চরিত্র হিসাবে ঘোষণা করা হয়েছে এবং এখন থেকে এগুলি কেবল এলআইএসপি প্রোগ্রামগুলিতে ব্যবহার করা যেতে পারে। সিদ্ধান্ত নেওয়া হয়েছে যে সাহিত্যকর্মের প্রথম বন্ধনীগুলি পাদটীকাগুলি দ্বারা প্রতিস্থাপন করা হবে, এবং সরলিকৃত মার্কডাউন পাঠ্যের জন্য এটি স্বয়ংক্রিয় করা আপনার কাজ।

ইনপুট

আপনার ইনপুটটি এমন একক স্ট্রিং যা বর্ণানুক্রমিক ASCII অক্ষর, স্পেস এবং বিশেষ অক্ষর সমন্বিত ,.!?()। এটিতে নতুন লাইন বা অঙ্ক থাকবে না। প্রথম বন্ধনী সঠিকভাবে মিলে যাবে।

আউটপুট

আপনি ইনপুট স্ট্রিংয়ের প্রতিটি ম্যাচিং জুটিকে প্রথম পাদদেশে রূপান্তর করতে পারেন। এটি নিম্নলিখিত হিসাবে ঘটে:

  1. একটি চলমান সংখ্যা দ্বারা প্রথম বন্ধনী প্রথম ম্যাচিং যুগল ও তাদের মধ্যে সাবস্ট্রিং প্রতিস্থাপন থেকে শুরু 1, Markdown ট্যাগ মধ্যে আবৃত <sup>এবং </sup>
  2. স্ট্রিংয়ের শেষে যুক্ত করুন
    • দুটি নতুনলাইন,
    • মার্কডাউন ট্যাগ <sub>,
    • পদক্ষেপ 1 থেকে নম্বর,
    • একটি স্থান,
    • প্রথম বন্ধনী, এবং
    • </sub>এই ক্রমে সমাপ্তি ট্যাগ ।
  3. যদি স্ট্রিংটিতে এখনও বন্ধনী থাকে, তবে পদক্ষেপ 1 এ যান।

আপনার আউটপুট হ'ল ফলস্বরূপ স্ট্রিং, সম্ভবত একটি পিছনের নতুন লাইনের সাথে। যতক্ষণ না আপনার আউটপুট সঠিক হয় আপনাকে এই সঠিক অ্যালগরিদমটি প্রয়োগ করতে হবে না। মনে রাখবেন যে নেস্টেড প্রথম বন্ধনী থাকতে পারে; সেক্ষেত্রে আমাদের পাদটীকা থাকবে যাতে অন্যান্য পাদটীকারগুলির উল্লেখ রয়েছে। বন্ধনীগুলির মধ্যে থাকা স্ট্রিংগুলিও খালি থাকতে পারে। উদাহরণস্বরূপ নীচের পরীক্ষার কেসগুলি দেখুন।

বিধি এবং স্কোরিং

আপনি একটি সম্পূর্ণ প্রোগ্রাম বা একটি ফাংশন লিখতে পারেন। সর্বনিম্ন বাইট গণনা জয়, এবং মান লুফোলগুলি অনুমোদিত নয়।

যদি আপনার ভাষা স্থানীয়ভাবে দশমিক সংখ্যার ( কাশি রেটিনা কাশি ) সমর্থন করে না , তবে আপনি বাইনারি বা অ্যানারি সহ অন্য বেসে পাদটীকা নম্বর দিতে পারেন; তবে অবিচ্ছিন্ন সংখ্যাগুলি ব্যবহার করে + 20% জরিমানা আরোপ করা হয় ।

পরীক্ষার মামলা

ইনপুট:

This input contains no parentheses.

আউটপুট:

This input contains no parentheses.

ইনপুট:

This has (some) parentheses (but not so many).

আউটপুট:

This has <sup>1</sup> parentheses <sup>2</sup>.

<sub>1 some</sub>

<sub>2 but not so many</sub>

ইনপুট:

This has (nested (deeply (or highly?) nested)) parentheses (and several groups).

আউটপুট:

This has <sup>1</sup> parentheses <sup>2</sup>.

<sub>1 nested <sup>3</sup></sub>

<sub>2 and several groups</sub>

<sub>3 deeply <sup>4</sup> nested</sub>

<sub>4 or highly?</sub>

ইনপুট:

Hmm()(()(,))  a()((trt)(v( (((((wut)))))(X)(Y)(Z) )!?!?!?!))oooooooo(oooo)oooo

আউটপুট:

Hmm<sup>1</sup><sup>2</sup>  a<sup>3</sup><sup>4</sup>oooooooo<sup>5</sup>oooo

<sub>1 </sub>

<sub>2 <sup>6</sup><sup>7</sup></sub>

<sub>3 </sub>

<sub>4 <sup>8</sup><sup>9</sup></sub>

<sub>5 oooo</sub>

<sub>6 </sub>

<sub>7 ,</sub>

<sub>8 trt</sub>

<sub>9 v<sup>10</sup>!?!?!?!</sub>

<sub>10  <sup>11</sup><sup>12</sup><sup>13</sup><sup>14</sup> </sub>

<sub>11 <sup>15</sup></sub>

<sub>12 X</sub>

<sub>13 Y</sub>

<sub>14 Z</sub>

<sub>15 <sup>16</sup></sub>

<sub>16 <sup>17</sup></sub>

<sub>17 <sup>18</sup></sub>

<sub>18 wut</sub>

পাদটীকাগুলির মধ্যে ফাঁকা রেখাগুলি নোট করুন।


23
আমার প্রোগ্রামে লাস্পে লিখিত না থাকলেও কি এখন এটি শাস্তিযোগ্য অপরাধ?
মার্টিন এন্ডার

16
নন-এলআইএসপি প্রোগ্রামগুলিতে @ মার্টিনব্যাটনার প্যারেন্টিহেসগুলি হতাশাজনকভাবে অনুমতি দেওয়া হয়, যতক্ষণ না তারা আরও ভাল জন্য ব্যবহৃত হয়, যেমন অন্যান্য বন্ধনীকে পাদটীকাতে রূপান্তরিত করার মতো।
জাগারব

ইনপুট একাধিক লাইন হতে পারে? সেক্ষেত্রে পাদটীকাগুলি প্রতিটি লাইনের পরে বা শেষে রাখা উচিত? যেমন, আউটপুট কি জন্য foo (bar)\nfoot (note)?
xebtl

@ xebtl ইনপুটটি সর্বদা একটি লাইন is বিভাগ ইনপুট দেখুন : "এটিতে নতুন লাইন বা অঙ্ক থাকবে না।"
Zgarb

2
:( @ এই বৈশিষ্ট সংখ্যায়ন পাদটীকা পানা প্রথম পরিবর্তে গভীরতা প্রথম
Sparr

উত্তর:


10

পার্ল, 81 75 72 বাইট

71 বাইট কোড + 1 বাইট কমান্ড লাইন আর্গুমেন্ট।

পার্ল ৫.১০ বা আরও নতুন প্রয়োজন (পুনরাবৃত্তী রেগেক্স সহায়তার জন্য)

$i++;s#(\((((?1)|.)*?)\))(.*)#<sup>$i</sup>$4

<sub>$i $2</sub>#s&&redo

ব্যবহার:

perl -p entry.pl input.txt

ব্যাখ্যা

-p সুস্পষ্ট প্রিন্টের প্রয়োজনীয়তা এড়িয়ে প্যারামিটার ইনপুটটিতে প্রদত্ত আদেশগুলি প্রয়োগের ফলাফল মুদ্রণ করবে।

রেজেক্স (\(((?1)|.)*?)\))স্ট্রিংয়ের শুরু থেকে বন্ধনীগুলির বহিরাগততম সেট সন্ধান করছে। এটি সন্ধান পেলে আমরা প্রতিস্থাপনটি সম্পাদন করি এবং নিশ্চিত করে আমরা কেবল ইনপুটটির একেবারে শেষে যুক্ত করে থাকি (ব্যবহার করে ইনপুটটির শেষ অবধি সমস্ত কিছু ক্যাপচার করে (.*))।

এরপরে আমরা এখন-পরিবর্তিত স্ট্রিং ব্যবহার করে রেজেক্সে প্রতিস্থাপনের পুনরাবৃত্তি করি redo, যা আর না মেলে যতক্ষণ না ক্রমাগত রেজেক্স প্রতিস্থাপন প্রয়োগ করা হয়। sপরিবর্তক নিশ্চিত করে যে .Regex নতুন লাইন, যা প্রয়োজনীয় মেলে কারণ আমরা পূর্ববর্তী Regex প্রতিকল্পন এর ফলাফলে Regex ম্যাচ পুনরায় প্রয়োগ করা হবে।


1
ইনপুটটি সঠিকভাবে সুষম হবে বলে আপনি গ্যারান্টিটি দিয়ে [^)] বা তার .পরিবর্তে [^()]পালাতে সক্ষম হতে পারেন ।
মার্টিন এন্ডার

আমাকে পুনরাবৃত্তিমূলক রেজেক্সেসে পরিচয় করিয়ে দেওয়ার জন্য +1 :-)। তবে আমি মনে করি চ্যালেঞ্জটির কঠোর পাঠের বিষয়ে এটি ভুল: (উপরের স্পষ্টতার জন্য আমার অনুরোধটি দেখুন))
xebtl

শুভ পয়েন্ট @ মার্টিনব্যাটনার - আমরা .ম্যাচটি অলস করে তুলে ফেলতে পারি। @ এক্সবেটল, চ্যালেঞ্জটি জানিয়েছে "এতে নতুন লাইন বা অঙ্ক থাকবে না"
জারমেেক্স

12

ইমাস লিস্প, 335 বাইট

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

(defun p()(let(b(cpt 0)n)(goto-char 0)(while(search-forward"("()t)(setf b(point)n(number-to-string(incf cpt)))(backward-char)(forward-sexp)(backward-char)(kill-region b(point))(delete-backward-char 1)(delete-forward-char 1)(insert "<sup>"n"</sup>")(save-excursion(end-of-buffer)(newline 2)(insert "<sub>"n" ")(yank)(insert"</sub>")))))

আরও মার্জিতভাবে:

(defun parens ()
  (let (b(cpt 0)n)
    (goto-char 0)
    (while(search-forward"("()t)
      (setf b(point)n(number-to-string(incf cpt)))
      (backward-char)
      (forward-sexp)
      (backward-char)
      (kill-region b(point))
      (delete-backward-char 1)
      (delete-forward-char 1)
      (insert "<sup>"n"</sup>")
      (save-excursion
       (end-of-buffer)
       (newline 2)
       (insert "<sub>"n" ")
       (yank)
       (insert "</sub>")))))

9

রেটিনা , 96 86 83 বাইট * 120% = 99.6

এই সমাধানের উত্স কোড দুটি ফাইল নিয়ে গঠিত:

+s`\((((\()|(?<-3>\))|[^)])*).(.*)(?<=(1+).*?)?
<sup>1$5</sup>$4

<sub>1$5 $1</sub>

ব্যাখ্যা

চ্যালেঞ্জে বর্ণিত হিসাবে এটি অ্যালগরিদমের খুব সরাসরি বাস্তবায়ন। কোডটিতে একটি একক রেজেক্স বিকল্প রয়েছে যা প্রথম বন্ধনীগুলির প্রথম সেটটিকে পাদটীকাতে পরিণত করে। +স্ট্রিং পরিবর্তন হওয়া বন্ধ না হওয়া পর্যন্ত এই প্রতিস্থাপনটি পুনরাবৃত্তি করা হয় , যার অর্থ এখানে রেজেক্স আর মেলে না (কারণ এটি আর কোনও বন্ধনীর সন্ধান করতে পারে না)।

পাদটীকাগুলি অ্যানারিতে অঙ্কিত হয়েছে, যাতে আমি কেবল শেষ পাদটীকাটির সংখ্যাটি সন্ধান 1করতে পারি এবং পরবর্তীটি তৈরি করতে একটি যুক্ত করতে পারি।

প্রথম বন্ধনীর প্রথম সেট সন্ধান করার জন্য রেজেক্স ব্যালেন্সিং গ্রুপগুলির সাথে ম্যাচিং করা প্রথম বন্ধনের জন্য মানক প্রযুক্তির উপর ভিত্তি করে (hrhr, "ম্যাচিং বন্ধনী")। নামহীন গোষ্ঠীটি ব্যবহার করে এবং অনুমিতি সঠিকভাবে সুষম হয়েছে তা ধরে নিয়ে এটি কিছুটা ছোট করা হয়েছে (যার অর্থ আমরা (অবহেলিত চরিত্রের শ্রেণি থেকে বাদ দিতে পারি এবং )একটি সাধারণ সাথে ফাইনালের সাথে ম্যাচ করতে .পারি এবং আমাদেরও নিশ্চিত করার দরকার নেই যে ক্যাপচার স্ট্যাক খালি)

প্রথম বন্ধনীর সাথে মেলানো এবং তাদের সামগ্রীগুলি গ্রুপে 1ক্যাপচার করার পরে, আমরা স্ট্রিংয়ের বাকী অংশগুলি (.*)গ্রুপের সাথে ক্যাপচার করি 4এবং তারপরে স্ট্রিংটির মাধ্যমে 1নেগেটিভ লুকবাইন্ডের সাথে প্রথম সেটটির জন্য ফিরে অনুসন্ধান করি। যদি আমরা এই ধরনের একটি স্ট্রিং খুঁজে পাই তবে আমরা গ্রুপে সঞ্চয় করি 5। যদি আমরা এটি না করি, তবে আমরা ব্যর্থতার দিকে তাকিয়ে আছি, তবে এটি ঠিক আছে কারণ এটি alচ্ছিক - এটির অর্থ কেবল $5একটি খালি স্ট্রিং দেবে যা এর অদ্বিতীয় উপস্থাপনা 0এবং যা সঠিক।

প্রতিস্থাপনের স্ট্রিং ক্যাপচার গ্রুপগুলির উপর ভিত্তি করে কেবল সমস্ত কিছু টুকরো টুকরো করে। পাদটীকা নম্বরটি 1শেষ সংখ্যায় একটি প্রিন্ট করে বৃদ্ধি করা হয় 1$5


3
রেটিনা জয়ের ধারাবাহিকতায়!
orlp

@orlp নাকি এটা? ;) ব্যালান্সিং গোষ্ঠীগুলি পুনরাবৃত্তিমূলক রেগেক্সের সাথে কোনও মিল নেই। যে এবং দশমিক সংখ্যা হ্যান্ডেল করতে সক্ষম হচ্ছে না ...
মার্টিন ইন্ডার

পিএইচপি র‌্যাপারটি চুরি করার এবং পিসিআরই প্রায় রেটিনা বাস্তবায়নের সময় :
nhh̷͉̃a

@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳ সাধারণত, পুনরাবৃত্তির চেয়ে আমার তুলনায় ভারসাম্যপূর্ণ গ্রুপ থাকত, তবে কিছু ক্ষেত্রে রয়েছে যেগুলি পরে সংক্ষিপ্ততর হয়। সম্ভবত একদিন আমি রেটিনা এবং NET রেগেক্স গন্ধটি কিছু অতিরিক্ত বৈশিষ্ট্যে প্যাচ করব। ;)
মার্টিন এন্ডার

9

পবিত্র জাভাস্ক্রিপ্ট , 1510 বাইট

সহকর্মী বিদ্রোহীরা, তাদের পৈত্রিক ধ্বংসের অত্যাচারকে অস্বীকার করবেন না! আপনাকে অবশ্যই অধ্যবসায় করতে হবে! শুরু থেকেই, প্রোগ্রামিং একটি নিখরচায় উদ্যোগ ছিল। এখন, এটি পরহেজগার শোভাযাত্রায় পরিণত হয়েছে। আমাদের অবশ্যই নিখুঁত ভয়ঙ্করতা কম কিছু দেখাতে হবে। অতএব, আমি লড়াই করেছি!

    ( )( (((  ((  )( )  (( ))( )) (( ( ((  ) ( ()( ) (( ) )(( ((( ()((( ) ( ) )((  ) (((((( )( (())((  ) ) )( ()(( ((()((()   ( (  (  ( )) ((  )( ) (( ) )((((  ( () ) )( ( ()(( )( () ((( )(( ) )( ()((( ) ( )  ( )() (((( () ) (((( () ) ((() ) ()  ( (  (  ( )) ( )(  ((((( )) ((  )( ) (( ) )((((  ) )  ()(  ((() ( ()(( ) ( ) )(( ))(((  (( ) ((  ) ( ()(( )( ) ()  ( (  (  ( ()( ) )( ()(  ) ()  ( (  (  ( )( (( ( (( )  ((((( ))  ) )(( )) ((  )( ) (( ) )((((  ) ()( ))  ) ) (( )( () (((   ( ) )((  )( )(((( ))( )() ) ()( ))  (()( (()( ((()((()   ( (  (    (  ( )) ( )(  (((((( )(( ( (( )) ( ((  ) )( ) )( ( )( ((() ( )( ((() ( ()( ()( ()   ) )( ()(( ) ()  ( (  (    (  ( )) ( )(  (((((( )(( ( (( )) ( ((  ) )( ) )( ( )( (((( ( )( ((() ( ()( ()( (()( ) )( ()(( ) ()  ( (  (    (  ( )) ( )(  (((( ( ) ( ()( ((() ( ()( ())(( ) ( ) )( ()(( ))) ) ()  ( (  (  ((())  ( (  (  ((( ( ) )((( )( () ((( )(((   ( )) ( )  ( ) ) ((((( )) ((  )( ) (( ) )((((  (())( ))  (()( ()(( ((()  ( (  (  ( )(  ) )(((( ( () ((( ) ( ) )(( ((((   ( ()(( )  ( ) ) (((( () )( ((( ((((((()( ((() ((   () )( )(( (()) ( )( ( )( ((() ) ()  ( (  (  (( ) ( ) )(( ))(((  (( ) ((  ) ( ()( ) (( ) )(( ((( ()((( ) ( ) )((  ) (((((( )( () ((( ) ( ) )(( ((((   ( ()(( )  ( ) ) ((((((( ( (()) ( )( ) ) (( )((((  ( ()) ) )) ( )( (()(((  ) (()( ( )( ) )  () )(( )((((  ( ()) ) )) ( )( ((() (()( ( )(  ( (  ( ( ) ) (( )((((  ( ()) ) )) ( )( (()(((  ) (()( ( )( ( () ( )( (()(( )(  (()( ( )( ) )  () )(( )((((  ( ()) ) )) ( )( (())((  ) (()( ()(( ((() ) ()  ( (((())

অ-লিস্প ভাষায় পবিত্র চরিত্রগুলি ব্যবহার করার বিরুদ্ধে কোনও নিয়ম নেই। না। কখনোই না. (একটু কমপ্যাক্ট উপায়ে :)

( )( (((  ((  )( )  (( ))( )) (( ( ((  ) ( ()( ) (( ) )(( ((( ()((( ) 
( ) )((  ) (((((( )( (())((  ) ) )( ()(( ((()((()   ( (  (  ( )) ((  )
( ) (( ) )((((  ( () ) )( ( ()(( )( () ((( )(( ) )( ()((( ) ( )  ( )()
 (((( () ) (((( () ) ((() ) ()  ( (  (  ( )) ( )(  ((((( )) ((  )( ) (
( ) )((((  ) )  ()(  ((() ( ()(( ) ( ) )(( ))(((  (( ) ((  ) ( ()(( )(
 ) ()  ( (  (  ( ()( ) )( ()(  ) ()  ( (  (  ( )( (( ( (( )  ((((( )) 
 ) )(( )) ((  )( ) (( ) )((((  ) ()( ))  ) ) (( )( () (((   ( ) )((  )
( )(((( ))( )() ) ()( ))  (()( (()( ((()((()   ( (  (    (  ( )) ( )( 
 (((((( )(( ( (( )) ( ((  ) )( ) )( ( )( ((() ( )( ((() ( ()( ()( ()  
 ) )( ()(( ) ()  ( (  (    (  ( )) ( )(  (((((( )(( ( (( )) ( ((  ) )(
 ) )( ( )( (((( ( )( ((() ( ()( ()( (()( ) )( ()(( ) ()  ( (  (    (  
( )) ( )(  (((( ( ) ( ()( ((() ( ()( ())(( ) ( ) )( ()(( ))) ) ()  ( (
  (  ((())  ( (  (  ((( ( ) )((( )( () ((( )(((   ( )) ( )  ( ) ) ((((
( )) ((  )( ) (( ) )((((  (())( ))  (()( ()(( ((()  ( (  (  ( )(  ) )(
((( ( () ((( ) ( ) )(( ((((   ( ()(( )  ( ) ) (((( () )( ((( ((((((()(
 ((() ((   () )( )(( (()) ( )( ( )( ((() ) ()  ( (  (  (( ) ( ) )(( ))
(((  (( ) ((  ) ( ()( ) (( ) )(( ((( ()((( ) ( ) )((  ) (((((( )( () (
(( ) ( ) )(( ((((   ( ()(( )  ( ) ) ((((((( ( (()) ( )( ) ) (( )((((  
( ()) ) )) ( )( (()(((  ) (()( ( )( ) )  () )(( )((((  ( ()) ) )) ( )(
 ((() (()( ( )(  ( (  ( ( ) ) (( )((((  ( ()) ) )) ( )( (()(((  ) (()(
 ( )( ( () ( )( (()(( )(  (()( ( )( ) )  () )(( )((((  ( ()) ) )) ( )(
 (())((  ) (()( ()(( ((() ) ()  ( (((())

এটি আমার অন্যান্য উত্তরে প্রসারিত জাভাস্ক্রিপ্টের সংকলন করে । এটি একটি রসিকতা জমা।


5

লুয়া, 222 216 204 201 বাইট

Golfed:

s=io.read()g="%b()"c=1k=string l=k.find t=k.sub o=k.format a,b=l(s,g)while a do s=t(s,0,a-1)..o("<sup>%d</sup>",c)..t(s,b+1,#s).."\n\n"..o("<sub>%d %s</sub>",c,t(s,a+1,b-1))c=c+1 a,b=l(s,g)end print(s)

Ungolfed:

input=io.read() 
inputFormat="<sup>%d</sup>"
footnoteFormat="<sub>%d %s</sub>"
counter=1
a,b=string.find(input,"%b()")
while a do
    current=string.sub(input,a+1,b-1)
    input=input.."\n\n"..string.format(footnoteFormat, counter, current) 
    input=string.sub(input,0,a-1)..string.format(inputFormat, counter)..string.sub(input,b+1,#input)
    counter=counter+1
    a,b=string.find(input,"%b()")
end

print(input)

একটি repeat a,b=l(s,g) ... untill a<1লুপ আপনার সময়ের চেয়ে ছোট হবে না ?
কাটেনকিও

4

স্কিম, 92 বাইট

রিয়েল লিস্পে প্রস্থের প্রথম সন্ধানটি বাস্তবায়নে হতাশ, 1 শক্তিগুলি যে আরও বেশি বাস্তববাদী পদ্ধতির সিদ্ধান্ত নেবে। সর্বোপরি, প্যারেন্টিসগুলি পবিত্র তবে বন্ধনীগুলি এটি নয়। 2

(lambda(s)(list->string(map(lambda(c)(case c((#\()#\[)((#\))#\])(else c)))(string->list s)))

1. ইমাকসের তথাকথিত "গির্জা" থেকে here বিদ্রোহীদের শোনো না!
২. তারা র‌্যাকেট প্রোগ্রামার না, তাই না?


স্কীমকে শ্যিজম বলা হবে: এটি "রিয়েল লিস্প" হ'ল আসল ধর্মবিরোধী। এবং আপনি বলেন যে এটি ব্যবহারিক ? উত্তরের এই হ্যাকটি স্কিমারগুলির প্রকৃত প্রকৃতিটি দেখায় ;-)
coredump

@ কর্ডাম্প এবং আপনি দাবী করবেন যে আপনার তীব্র অযৌক্তিক এলিজ্প উত্তরটি সত্য লিস্পের উদাহরণ? এটি কিছুটা বেশি সময় নিতে পারে, সত্য, তবে যখন স্কিমের উত্তরটি শেষ হবে, তখন এটি হবে রাইট থিং!
xebtl

3

হাস্কেল, 210 বাইট

n#x|b==""=a|1<2=a++"<sup>"++m++"</sup>"++((n+1)#(c++"\n\n<sub>"++m++' ':init d++"</sub>"))where m=show n;(a,b)=span(/='(')x;(d,c)=[x|x@(y,_)<-map(`splitAt`(tail b))[0..],'('!y<')'!y]!!0;c!l=[1|m<-l,m==c]
p=(1#)

ব্যবহারের উদাহরণ:

*Main> putStrLn $ p "This has (nested (deeply (or highly?) nested)) parentheses (and several groups)."
This has <sup>1</sup> parentheses <sup>2</sup>.

<sub>1 nested <sup>3</sup></sub>

<sub>2 and several groups</sub>

<sub>3 deeply <sup>4</sup> nested</sub>

<sub>4 or highly?</sub>

কিভাবে এটা কাজ করে:

n # x                      -- # does all the work, n is the current number of the
                           --   footnote and x the input string
  | b=="" = a              -- if b (see below) is empty, there's no ( in the
                           --   string and the result is 'a' (see below)
  | 1<2   = a++"<sup>"++m++"</sup>"++ ((n+1)#(c++"\n\n<sub>"++m++' ':init d++"</sub>"))
                           -- otherwise (b not empty) build the output string
                           --   starting with 'a' and a footnote number and a
                           --   recursive call with the current footnote appended
                           --   to the rest of the string  

  where 
  m = show n;              -- turn n into string
  (a,b) = span (/='(') x;  -- split the input string x into two parts:
                           --   a: everything before the first (
                           --   b: beginning with the first ( to the end
                           --   if there's no (, a is x and b is empty
  (d,c) = [x|x@(y,_)<-map(`splitAt`(tail b))[0..],'('!y<')'!y]!!0;
                           -- find matching ) in the tail of b ('tail' to remove leading '(') 
                           --   d: everything before and including the matching )
                           --   c: everything behind the matching )
  c!l=[1|m<-l,m==c]        -- helper function that builds a list of 1s for every character searched for
                           --   we have reached the matching ) if the list for ( is
                           --   shorter (less than, <) the list for )

p=(1#)                     -- start with footnote 1

2

স্কিম, 533 বাইট

ইন্ডেন্টেশন সহ:

(letrec ((l string->list)
         (n number->string)
         (? null?)
         (p (lambda (o) (or (pair? o)(? o))))
         (a car)
         (d cdr)
         (e append)
         (i 0)
         (x
          (lambda (h t)
            (if (? h)
                t
                (case (a h)
                  ((#\() 
                   (let ((s (x (d h) ())))
                     (x (a s) (e t (d s)))))
                  ((#\)) (cons (d h) (list t)))
                  (else 
                   (x (d h) (e t (list (a h)))))))))
         (f 
          (lambda (h t F)
            (cond ((? h)
                   (let ((w (e t F)))
                     (if (find p w) (f w()()) w)))
                  ((p(a h))
                   (set! i(+ 1 i))
                   (f (d h)
                      (e t (e (l "<sup>")
                              (l (n i))
                              (l "</sup>")))
                      (e F (e (l "\n\n<sub>")
                              (l (n i))
                              '(#\ )
                              (a h)
                              (l "</sub>")))))
                  (else (f (d h) 
                           (e t (list (a h)))
                           F))))))
  (print (list->string (f (x (l (read-line)) 
                             ())
                          ()
                          ()))))

হ্যাঁ, সমস্ত alচ্ছিক সাদা স্থান সরানো হলে এটি 533 বাইট। কার্যকরী গৌরব মধ্যে বাস্ক।

আমি বর্ণনায় কমবেশি অ্যালগরিদমটি প্রয়োগ করেছি: প্রথম xবন্ধনী দ্বারা ইনপুটকে fগ্রুপ করে এবং পাদটীকা দ্বারা প্রথম স্তরের গোষ্ঠীগুলিকে প্রতিস্থাপন করে, আরও গ্রুপ না রেখে পুনরাবৃত্তি করে। আমি নিশ্চিত করুন যে এটি খাটো করা যেতে পারে, কিন্তু আমি দেখতে পাচ্ছি না কিভাবে এটা করা সম্ভব হয়েছে অনেক একটি ভিন্ন অ্যালগরিদম স্যুইচ ছাড়া খাটো।

লিখিত হিসাবে, এটি একটি সম্পূর্ণ প্রোগ্রাম। আপনি এটি এখানে চেষ্টা করে দেখতে পারেন , তবে কারণ repl.it আপাতদৃষ্টিতে ডিল করতে পারে না কারণ (read-line)আপনার জায়গায় ইনপুট স্ট্রিংটি রাখতে হবে। সম্পূর্ণরূপে অদ্বিতীয় সংস্করণ এখানে

সম্পাদনা: মন্তব্যে নির্দেশিত হিসাবে, আমি repl.it সংস্করণগুলিতে ()বন্ধনীগুলিকে বন্ধনীতে পরিবর্তন করেছি []। এটি প্রোগ্রামিং এবং ডিবাগিংয়ের সময় সুবিধার জন্য ছিল। পোস্ট করা সংস্করণটি এখন কাজ করে ()


1
+1, তবে কেন আপনি বর্গাকার বন্ধনী পরিবর্তন করেন তা আমি বুঝতে পারি না। যদি আমি #\['#] change পরিবর্তন করি তবে সম্পর্কিত প্যারেন্থিসিসের মাধ্যমে (এবং পরীক্ষাগুলি আপডেট করুন), সমস্যা ছাড়াই এটি কাজ করে। আপনি বর্গক্ষেত্র ছেড়ে যাওয়ার কোন কারণ আছে? এটি কি আপনার আগের উত্তরের সাথে সম্পর্কিত?
coredump

1
@ কর্ড্প্প্প আপনি একদম ঠিক বলেছেন আমি বন্ধনীতে পরিবর্তিত হয়েছি কারণ (ক) পেরেন চরিত্রের অক্ষরগুলি repl.it এর প্যারেনের মিল খুঁজে পেয়েছিল এবং (খ) ডিবাগিংয়ের ক্ষেত্রে, আউটপুট (যা তালিকাগুলিতে প্রচুর প্যারেন অন্তর্ভুক্ত থাকবে) বন্ধনীগুলির সাথে অনেক বেশি পঠনযোগ্য ছিল। তারপরে আমি ঠিক সেভাবেই ছেড়ে দিয়েছি। আমি সম্পাদনা করব।
xebtl

1

জাভাস্ক্রিপ্ট ES6, 244 বাইট

গুরুতর উত্তর (শুধুমাত্র আমার জ্ঞানের জন্য ফায়ারফক্সে কাজ করে)

d=(s,n=1)=>{u=s.search(/\(/);if(index<a=0)return s;for(i=index;i<s.length;i++){if(s[i]==")")a-=1;if(s[i]=="(")a+=1;if(!a)break}return d(s.replace(v=s.slice(index,i+1),"<sub>"+n+"</sub>")+`

<sub>`+n+" "+v.replace(/^\(|\)$/g,"")+"</sub>",n+1)}

সম্প্রসারিত:

function deparen(s,n=1){
    index = s.search(/\(/);
    if(index<0) return s;
    a=0;
    for(i=index;i<s.length;i++){
        if(s[i]==")") a-=1;
        if(s[i]=="(") a+=1;
        if(!a) break;
    }
    v=s.slice(index,i+1)
    f=v.replace(/^\(|\)$/g,"");
    return deparen(s.replace(v,"<sub>"+n+"</sub>")+"\n\n<sub>"+n+" "+f+"</sub>",n+1);
}

0

হাসিয়াম , 315 বাইট

বর্তমানে এটি অ-প্রতিযোগিতামূলক কারণ এটি ঠিক নেস্টেডকেও পরিচালনা করে না।

func main(){i=input();r="";f="";z=1;for(x=0;x<i.length;x++){c=i[Convert.toNumber(Convert.toString(x))];if(c=="("){f+="\n<sub>"+z+" ";for(x++;!(i[Convert.toNumber(Convert.toString(x))]==")");x++){f+=i[Convert.toNumber(Convert.toString(x))];}f+="</sub>\n";z++;r+="<sup>"+z+"</sup>";}else r+=c;}println(r);println(f);}

সম্প্রসারিত:

func main() {
    i = input();
    r = "";
    f = "";
    z = 1;
    for (x = 0; x < i.length; x++) {
            c = i[Convert.toNumber(Convert.toString(x))];
            if (c == "(") {
                    f += "\n<sub>" + z + " ";
                    for (x++; !(i[Convert.toNumber(Convert.toString(x))] == ")"); x++) {
                            f += i[Convert.toNumber(Convert.toString(x))];
                    }
                    f += "</sub>\n";
                    z++;
                    r += "<sup>" + z + "</sup>";
            } else
                    r += c;
    }

    println(r);
    println(f);

}

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