ভাষা কি?


17

সম্প্রতি, পিপিসি ডিজাইনের লিডারবোর্ড উত্তর এইচটিএমএল শিরোনামগুলি পার্স করতে কিছু সমস্যা হয়েছে ।

এই চ্যালেঞ্জটিতে আপনি উত্তর শিরোনামগুলি পার্সিংয়ে নিজের শট নিয়ে যাবেন।


উদাহরণ পরীক্ষার ক্ষেত্রে

এই উদাহরণ ইনপুট ( না প্রকৃত পরীক্ষার বিষয়), ঠিক তাই আপনি কিভাবে ইনপুট ধারণা পেতে পারেন পারে মত হতে

Input: <h1>Python 3, 32 bytes</h1>
Desired Output: Python 3

Input: <h1>JavaScript, 13 chars / 32 bytes</h1>
Desired Output: JavaScript

Input: <b>VeryBadlyFormattedHeader v3 : (32 bytes)</b>

ফটকা খেলা

আপনার প্রোগ্রামটি 150 বাইট বা তার নিচে হওয়া উচিত

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

আউটপুট কেস বিষয়।

টেস্ট

পরীক্ষার মামলা নিয়ে গিথুব গিস্ট

প্রতি লাইনে একটি করে পরীক্ষার মামলা রয়েছে। বিন্যাসটি হ'ল:

<lang_name> - <rest_of_the_line_is_the_header>

স্কোরিং

তোমার সংগ্রহ:

 Number Correct
----------------
  Total Number

(যা এক শতাংশ)

টাই-ব্রেকার সংক্ষিপ্ততম কোড।


100% স্কোর খুব সহজলভ্য হওয়ায় সংক্ষিপ্ত কোডের মতো টাই-ব্রেকার হওয়া উচিত।
ব্যবহারকারী81655

1
সবচেয়ে সাধারণ হেডার স্টাইলটি #পরীক্ষার ক্ষেত্রেও উপস্থিত হয় না ?!
edc65

সুতরাং ভাষা সাধারণত প্রথম শব্দটি ইনপুট হয়?
তানমাথ

@ edc65 আমি বিশ্বাস করি এটি মার্কডাউন উত্স নয়, উত্তরের এইচটিএমএল আউটপুটকে বিশ্লেষণ করার বিষয়ে ।
Kroltan

5
রেগেক্সের সাথে HTML পার্সিং করছেন? এরপরে যা আছে?
নিল

উত্তর:


11

রেটিনা 0.8.2 , 100%, 75 71 70 68 67 64 59 53 51 বাইট

<.*?>

(,| [-&(–5]| [0-7]\d)(?! W|...\)).*

2 |:

এটি এখন মূলত কোড গল্ফ, তাই আমাকে ভাষা পরিবর্তন করতে হয়েছিল।

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

প্রতিপাদন

$ wget -q https://gist.githubusercontent.com/vihanb/1d99599b50c82d4a6d7f/raw/cd8225de96e9920db93613198b012749f9763e3c/testcases
$ grep -Po '(?<= - ).*' < testcases > input
$ grep -Po '^.*?(?= - )' < testcases > output
$ mono retina/Retina.exe headers.ret < input | head -n -1 | diff -s - output
Files - and output are identical

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

কোডটিতে তিনটি সহজ বিকল্প (বা অপসারণ) রয়েছে। ভাষার নামের সাথে মিলিয়ে দেখার চেষ্টা করার পরিবর্তে আমরা ইনপুট স্ট্রিংয়ের সমস্ত অংশ যা এর অংশ হিসাবে তৈরি হয় তা থেকে মুক্তি পেয়েছি।

  1. <.*?> সমস্ত এইচটিএমএল ট্যাগের সাথে মিলবে, তাই প্রতিস্থাপনটি ইনপুট থেকে তাদের মুছে ফেলবে।

    .*?যে কোনও পরিমাণ অক্ষরের সাথে মেলে, তবে যেহেতু ?কোয়ান্টিফায়ারকে অলস করে তোলে , এটি সম্ভবত সর্বনিম্ন পরিমাণের সাথে মিলবে যা এখনও পুরো প্যাটার্নটি মেলতে দেয়। এটি পুরো ইনপুটটি মোছার বিষয়টি এড়ান, যা সর্বদা একটি দিয়ে শুরু হবে এবং এর সাথে <শেষ হবে >

    ভাষার নামটি এখন বাকী পরিবর্তিত ইনপুট স্ট্রিংয়ের প্রথম অক্ষর দিয়ে শুরু হয়।

  2. ভাষার নামের পরে, আমরা প্রায় সর্বদা নিম্নলিখিতগুলির একটি খুঁজে পাব:

    ,, -, &, (, , 5, অথবা একটি স্থান দুটি সংখ্যা দ্বারা অনুসরণ।

    প্রথম দুই শেষা w শ বরং সাধারণ, এবং Python 2 &amp; PuLP...যেমন পার্স করা উচিত Python 2, Ruby (2.2.2p95)...যেমন Ruby, >PHP – 3302 bytesযেমন PHP, এবং Perl 5...যেমন Perl

    (,| [-&(–5]| \d\d).* এই সমস্ত শেষের সাথে মিলবে (এবং তারপরে সমস্ত অক্ষর), তবে এটি কয়েকটি ভুয়া ধনাত্মক হবে:

    • ,ভাষার নামে কমাটি মিলবে Help, WarDoq!

    • (সংস্করণ ম্যাচ হবে JavaScript (ESx)এবং Java (1.8)

    • \d\dমধ্যে সংস্করণ ম্যাচ হবে Ti-Basic 84

    আমরা ব্যবহার করে তৃতীয় সমস্যা কেস ঠিক করতে পারবো [0-7]\dপরিবর্তে \d\dমিলে এড়াতে, 8মধ্যে84

    অন্যান্য সমস্যার ক্ষেত্রে, আমরা নেতিবাচক বর্ণনাহিনী ব্যবহার করি (?! W|...\))যা পূর্ববর্তী প্যাটার্নটি W(যেমন হিসাবে Help, WarDoq!) অনুসরণ করা হয় ঠিক তেমন হয় বা ঠিক তিনটি অক্ষর এবং একটি বন্ধনী বন্ধনী (যেমন হিসাবে (ES6)বা (1.8)) দ্বারা অনুসরণ করা হয় matching

    এগুলি একসাথে করা, (,| [-&(–5]| [0-7]\d)(?! W|...\)).*ভাষার নামের পরে সমস্ত কিছু মেলে।

  3. আমরা দুটি সমস্যার ক্ষেত্রে ফেলে রেখেছি:

    <h1>Python <s>2</s> 3, <s>255</s> <s>204</s> <s>180</s> 178 bytes</h1>
    <h1><a href="http://sylwester.no/zozotez/" rel="nofollow">Zozotez Lisp</a>: 73</h1>
    

    পার্স হয়ে যায়

    Python 2 3
    Zozotez Lisp:
    

    আমরা প্রথমটি অপসারণের মাধ্যমে এবং দ্বিতীয়টি :আউটপুট থেকে সরিয়ে ফিক্স করতে পারি ।

    এটি 2 |:খালি স্ট্রিংয়ের সাথে প্রতিস্থাপন করে অর্জিত হয় ।


16

বাশ, 100%, 100 বাইট

sed sX..s.2./s.XX|grep -Po '(?<=>)[^<]+?(?=(,(?! W)| [-&–5]| ?<| [0-79]\d| ?\((?!E|1\.)))'|head -1

আইডিয়নে এটি অনলাইনে চেষ্টা করুন

প্রতিপাদন

$ wget -q https://gist.githubusercontent.com/vihanb/1d99599b50c82d4a6d7f/raw/cd8225de96e9920db93613198b012749f9763e3c/testcases
$ grep -Po '(?<= - ).*' < testcases > input
$ grep -Po '^.*?(?= - )' < testcases > output
$ while read line; do bash headers.sh <<< "$line"; done < input | diff -s - output
Files - and output are identical

2
হু, আমি সত্যিই ভেবেছিলাম এটি খুব কঠিন ... সুন্দর কাজ!
ডাউনগোট


4

জলফ, 13 বাইট, 85.94%, নন-কেপটিং

ρΥpΔid=',H',E
  pΔi         remove all HTML tags from input, preserving content
 Υ   d=',H     slice from beginning until a member is a comma
ρ         ',E  replace said comma with the empty string  

আমার কম্পিউটারে এই আপডেটটি ছিল। আমার দৌরাত্বে আমি দোভাষীর জন্য সংশ্লিষ্ট কোডটি আপডেট করতে ভুলে গিয়েছিলাম। আমি 100% এর শুটিংয়ের মতো মনে করি না। হয়তো প্রত্যেকেরই তাদের শিরোনাম একই ¯ \ _ (ツ) _ / format ফর্ম্যাট করা উচিত ¯


ট্যাগ উত্তোলন করা ভাল ধারণা। এটি আমার রেটিনা উত্তরে তিনটি বাইট সংরক্ষণ করেছে।
ডেনিস

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