भाषा क्या है?


17

हाल ही में, PPCG डिज़ाइन लीडरबोर्ड को html हेडर का जवाब देने में थोड़ी परेशानी हो रही है ।

इस चुनौती में आप उत्तर देने वाले हेडर पर अपने खुद के शॉट ले रहे होंगे।


उदाहरण परीक्षण मामले

ये उदाहरण आदानों ( नहीं वास्तविक परीक्षण मामलों), सिर्फ इसलिए आप कैसे आदानों की विचार प्राप्त कर सकते हो सकता है की तरह हो

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 बाइट या उससे नीचे होना चाहिए

आपको उत्तर शीर्ष लेख के HTML की एक पंक्ति दी जाएगी, आपको भाषा को सफलतापूर्वक निकालने के लिए अपना सर्वश्रेष्ठ प्रयास करने की आवश्यकता होगी। इनपुट में यूनिकोड वर्ण हो सकते हैं।

आउटपुट केस मायने रखता है।

टेस्ट

परीक्षण मामलों के साथ Github Gist

प्रति पंक्ति एक परीक्षण मामला है। प्रारूप है:

<lang_name> - <rest_of_the_line_is_the_header>

स्कोरिंग

आपका स्कोर है:

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

(जो एक प्रतिशत है)

टाई-ब्रेकर सबसे छोटा कोड है।


100% स्कोर बहुत प्राप्त करने के बाद से सबसे छोटे कोड की तरह एक टाई-ब्रेकर होना चाहिए।
user81655

1
सबसे सामान्य शीर्ष लेख शैली #परीक्षण मामलों में भी मौजूद नहीं है?
edc65

तो भाषा आम तौर पर इनपुट का पहला शब्द है?
तन्माथ

@ edc65 मेरा मानना ​​है कि यह उत्तर के HTML आउटपुट को पार्स करने के बारे में है, मार्कडाउन स्रोत के बारे में नहीं।
क्रोल्टन

5
Regex के साथ 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. <.*?> सभी HTML टैग से मेल खाएगा, इसलिए प्रतिस्थापन उन्हें इनपुट से समाप्त कर देगा।

    .*?किसी भी मात्रा में वर्णों से मेल खाता है, लेकिन चूँकि ?क्वांटिफायर को आलसी बनाता है , यह कम से कम उस राशि से मेल खाएगा जो अभी भी पूरे पैटर्न को मैच करने की अनुमति देता है। यह पूरे इनपुट को हटाने से बचता है, जो हमेशा ए <और अंत के साथ शुरू होगा >

    भाषा का नाम अब शेष संशोधित इनपुट स्ट्रिंग के पहले चरित्र के साथ शुरू होता है।

  2. भाषा के नाम के बाद, हम लगभग हमेशा निम्न में से एक पाएंगे:

    ,, -, &, (, , 5, या एक अंतरिक्ष दो संख्याएं आती हैं।

    पहले दो अंत नहीं बल्कि आम हैं, और 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)) द्वारा पालन किया जाता है ।

    यह सब एक साथ (,| [-&(–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

Ideone पर इसे ऑनलाइन आज़माएं

सत्यापन

$ 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% के लिए शूटिंग की तरह महसूस नहीं करता। हो सकता है कि सभी को अपने शीर्षकों को समान ¯ \ _ (_) _ / head के रूप में प्रारूपित करना चाहिए


स्ट्रिपिंग टैग एक अच्छा विचार है। मेरे रेटिना जवाब में तीन बाइट्स बचाए गए।
डेनिस

@ डेनिस धन्यवाद! खुशी है कि यह मदद की।
कॉनर ओ'ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.