আপনার ট্যাগ বন্ধ করুন!


13

এটি একই নামের সাথে আমার পূর্ববর্তী মুছে ফেলা চ্যালেঞ্জের ভিত্তিতে তৈরি

ভূমিকা

আপনাকে এমন একটি প্রোগ্রাম লেখার দায়িত্ব দেওয়া হয়েছে যা ইনপুটটিতে তার সমস্ত এক্সএমএল-মতো 1 টি ট্যাগ যথাযথভাবে খোলা এবং বন্ধ করা হয়েছে এবং সঠিক ক্রমে থাকলে সত্য ভিত্তিক বা মিথ্যা মান দেয় । নিম্নলিখিতটি ইনপুট হিসাবে বিবেচনা করুন:

<Apple>

ট্যাগটি সঠিকভাবে বন্ধ না হওয়ায় এটি একটি মিথ্যা মান ফিরিয়ে আনবে। এই:

<Apple></Apple>

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

<mango><Apple></mango></Apple>

সমস্ত ট্যাগ সঠিকভাবে বন্ধ করা হয়েছে, তবে সঠিক ক্রমে নয় । আপনার প্রোগ্রামে অবশ্যই সঠিক ট্যাগ শ্রেণিবিন্যাস এবং বাসা বাঁধার জন্য চেক করতে হবে।

সংজ্ঞা

আমি নিয়ম এবং অনুমানের মধ্যে আসার আগে আমাকে কয়েকটি জিনিস সংজ্ঞা দিতে দিন Let

ট্যাগ

একটি প্রাথমিক XML- শৈলী ট্যাগ। উদাহরণস্বরূপ: <Apple>। তাদের সর্বাধিক, একটি শীর্ষস্থানীয় এবং পিছনে স্থান থাকতে পারে (অন্যথায় এটি অবৈধ এবং মিথ্যা), তাই < Apple >এবং <Apple>একইরকম। এই ট্যাগ এছাড়াও মত বৈশিষ্ট্য ধারণ করতে পারে foo="bar" (প্রয়োজন উদ্ধৃতি চিহ্ন, বা অন্য অবৈধ এবং falsey সঙ্গে) , এবং অ্যাট্রিবিউট নামে কেবল কোনো আলফানিউমেরিক অক্ষর বা ধারণ করতে পারে _, :, -, এবং .। অ্যাট্রিবিউটের নামগুলিতেও কোনও অ্যাট্রিবিউট মানের প্রয়োজন হয় না, এবং মানগুলি "ক্লোজিং ডাবল উদ্ধৃতি ব্যতীত অন্য কোনও বিষয় থাকতে পারে । সমাপ্তি ট্যাগটিতে অবশ্যই কোনও বৈশিষ্ট্য থাকতে হবে এবং কোনও ট্যাগের মধ্যে নতুন লাইন থাকা উচিত নয়।

নাম যোগ করা

ট্যাগের নাম ট্যাগগুলির নাম। উদাহরণস্বরূপ, <Apple>এর ট্যাগ নাম Apple। ট্যাগের নামগুলিতে অ্যাট্রিবিউট নামের মতো একই অক্ষর থাকতে পারে এবং কেস সংবেদনশীল। এর অর্থ <Apple>হয় না <apple>

স্ব-সমাপ্তি ট্যাগ

একটি নিয়মিত ট্যাগ যা নিজেকে বন্ধ করে দেয় যেমন ( <Apple />বা <Apple/>তারা একই)। স্ল্যাশ এবং ট্যাগ নামের মধ্যে স্থান অনুমোদিত।

সাধারণ পাঠ্য

অক্ষরগুলির একটি স্ট্রিং যাতে কোনও কিছু থাকতে পারে এবং এগুলি আবদ্ধ হয় না <এবং >

"সরল" ট্যাগ

হয় কোনও উদ্বোধন, সমাপনী বা স্ব-সমাপনী ট্যাগ।

বিধি

  • আউটপুট ফেরত বা মুদ্রিত হতে পারে এবং ইনপুট আপনার পছন্দ মতো কোনওভাবে নেওয়া যেতে পারে
  • ইনপুট একটি স্ট্রিং, যা ট্যাগ, প্লেইন পাঠ্য বা উভয় সমন্বয়ে গঠিত
  • আপনার প্রোগ্রামটি কোনও ফাংশন বা পুরো কার্যকারী প্রোগ্রাম হতে পারে

  • সাধারণ পাঠ্য যে কোনও জায়গায় হতে পারে; যদি ইনপুটটিতে কেবল সরল পাঠ্য থাকে, প্রোগ্রামটি সত্যবাদী মানটি ফিরিয়ে আনতে হবে।

  • প্রোগ্রামটির জন্য নেস্টড ট্যাগগুলির স্বীকৃতি প্রয়োজন। যদি কোনও ট্যাগ কোনও ট্যাগে থাকে, তবে নিয়মিত এক্সএমএলের মতো পিতামাতাকে বন্ধ করার আগে সেই নেস্টড ট্যাগটি বন্ধ করতে হবে, অন্যথায় একটি মিথ্যা মানটি ফিরিয়ে দেওয়া উচিত

অনুমিতি

  • আপনি ধরে নিতে পারেন ইনপুট সর্বদা এক বা একাধিক "সরল" ট্যাগ (গুলি) থাকবে
  • আপনি ধরে নিতে পারেন ইনপুট সর্বদা উপরের সংজ্ঞায়িত ট্যাগগুলির ফর্ম্যাটটিকে অনুসরণ করবে

পরীক্ষার কেস

Falsey

<apple>

<apple></Apple>

<apple></mango>

<apple><mango>

<a><b></a></b>

Text<ul><li></li><ul />

<pear attr=foo></pear attr=foo>

<Ketchup flavor=spicy></Ketchup>

<Ap ple></Apple>

Truthy

Text 

<Apple />

<Apple></Apple>

< Apple ></ Apple>

<mango><Apple/></mango>

<mango>Text<div class="bar">More text \o/</div></mango>

<food group="fruit">Fruits:<orange :fruit-variety="clementine" /><pear _fruit.type="asian" /></food>

<example foo="abcdefghijklmnopqrstuvwxyz1234567890-/:;()$&@.,?!'" noValue>Any characters allowed! (0.0)</example>

স্কোরিং

এটি , তাই বাইটের মধ্যে সংক্ষিপ্ততম কোডটি জয়ী। স্ট্যান্ডার্ড লুফোলগুলি যথারীতি নিষিদ্ধ।


1 দ্রষ্টব্য : এটি আসল এক্সএমএল নয়, তবে চ্যালেঞ্জের জন্য বিভিন্ন বিধি সহ একটি সিউডো-এক্সএমএল। ট্যাগ এবং বৈশিষ্ট্যের নাম স্পেসিফিকেশন থেকে পৃথক।


যদি কোনও ট্যাগের আগে বা তার আগে একাধিক স্থান থাকে তবে আমাদের কী এটি মিথ্যা হিসাবে চিহ্নিত করতে হবে?
জয়ডেপ

@ জয়ডেপ হ্যাঁ - আমার পোস্টে এটি স্পষ্ট করে বলতে দাও
অ্যান্ড্রু লি

আমরা কি বিল্টিনগুলি ব্যবহার করতে পারি যা এক্সএমএলে স্ট্রিংগুলিকে পার্স করে?
অলিভার

@ ওবরকন সমস্যাটি এটি প্রয়োজনীয় বৈধ এক্সএমএল নয়। পাদটীকা দেখুন।
অ্যান্ড্রু লি

এটা বলতে সঠিক, এই একটি হল truthy ইনপুট : < : : :><:/><: :=":=:" ::></:>< /:>?
insertusernamehere

উত্তর:


2

রেটিনা , 76 74 বাইট

+`< ?([-.:\w]+)( ?[-.:\w]+(="[^"]*")?)* ?(/>|>[^<>]*< ?/ ?\1 ?>)

^[^<>]*$

যেহেতু আমি দেখেছি যে রেটিনা গল্ফিং রেজেক্সগুলির জন্য সত্যিই ভাল, তাই আমি বুঝতে পেরেছিলাম যে আমি এটি ব্যবহার করে দেখব। আমার রুবির উত্তর হিসাবে একই যুক্তি অনুসরণ করে এবং 0 বা 1 মুদ্রণ করে।

এটি অনলাইন চেষ্টা করুন!


1
আপনি প্রয়োজন হবে না M`। যদি চূড়ান্ত পর্যায়ে শুধুমাত্র একটি অংশ থাকে তবে ম্যাচ মোড অন্তর্ভুক্ত থাকে।
মার্টিন এন্ডার

1

রুবি (2.3.1), 103 101 100 বাইট

->s{s.sub!(/< ?([-.:\w]+)( ?[-.:\w]+(="[^"]*")?)* ?(\/>|>[^<>]*< ?\/ ?\1 ?>)/,'')&&redo;!(s=~/<|>/)}

বেনামে ফাংশন সংযোজন দ্বারা ডাকা হয় .call("<Apple></Apple>")। কোনও মিল না হওয়া অবধি মেলানো বা স্ব-ক্লোজিং ট্যাগগুলি প্রতিস্থাপন করে এবং তারপরে স্ট্রিংয়ের কোনও কোণ বন্ধনী নেই কিনা তা ফেরত দেয়।

এটি অনলাইন চেষ্টা করুন!


এটি <p title="This is a \"test\"."></p>মিথ্যা হিসাবে চিহ্নিত , তবে এটি হওয়া উচিত নয়।
orlp

@orlp 'মানগুলিতে ক্লোজিং ডাবল উক্তিটির আগে "ব্যতীত অন্য কিছু থাকতে পারে।
জয়ডেপ

ওহ, এটি আসল এক্সএমএল নয় ...
orlp

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