Dil nedir?


17

Son zamanlarda, PPCG tasarım afiş, cevap html başlıklarını ayrıştırmada bazı sorunlar yaşıyor .

Bu meydan okumada cevap başlıklarını ayrıştırmada kendi vuruşunuzu yapacaksınız.


Örnek Test Durumları

Bunlar örnek girişler ( DEĞİL gerçek test olgu), sadece bu yüzden girdiler nasıl fikir edinebilirsiniz olabilir gibi olmak

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>

spec

Programınız 150 bayt veya daha düşük olmalıdır

Size bir cevap başlığı html satırı verilecektir, dili başarıyla ayıklamak için elinizden geleni yapmanız gerekir. Giriş, unicode karakterler içerebilir.

Çıktı durumu önemlidir.

Testler

Test kılıflı Github Gist

Her satırda bir test durumu vardır. Biçim:

<lang_name> - <rest_of_the_line_is_the_header>

puanlama

Skorunuz:

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

(bu yüzde)

Bağlantı kesici en kısa koddur.


% 100 puan çok ulaşılabilir olduğu için en kısa kod gibi bir tie-break olmalıdır.
user81655

1
En yaygın başlık stili #test senaryolarında bile mevcut değil mi ?!
edc65

Yani dil tipik olarak girişin ilk kelimesidir?
TanMath

@ edc65 Bunun Markdown kaynağını değil, cevabın HTML çıktısını ayrıştırmakla ilgili olduğuna inanıyorum .
Kroltan

5
HTML'yi normal ifadeyle ayrıştırma? Sırada ne var?
Neil

Yanıtlar:


11

Retina 0.8.2 ,% 100, 75 71 70 68 67 64 59 53 51 bayt

<.*?>

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

2 |:

Bu aslında kod golf şimdi, bu yüzden dil değiştirmek zorunda kaldı.

Çevrimiçi deneyin!

Doğrulama

$ 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

Nasıl çalışır

Kod üç basit ikameden (veya elemeden) oluşur. Dil adını eşleştirmeye çalışmak yerine, giriş dizesinin bir parçasını oluşturan tüm bölümlerinden kurtuluruz.

  1. <.*?> tüm HTML etiketleriyle eşleşeceğinden, ikame bunları girişten kaldıracaktır.

    .*?herhangi bir karakterle eşleşir, ancak ?niceleyiciyi tembelleştirdiğinden , tüm desenin eşleşmesine izin veren mümkün olan en az miktarda eşleşir. Bu, her zaman a ile başlayıp a <ile biten tüm girdiyi silmekten kaçınır >.

    Dil adı, artık değiştirilmiş giriş dizesinin ilk karakteri ile başlar.

  2. Dilin adından sonra, neredeyse her zaman aşağıdaki sonlardan birini bulacağız:

    ,, -, &, (, , 5, Ya da bir boşluk iki basamağı takip eder.

    İlk iki sonlar oldukça yaygındır ve Python 2 &amp; PuLP...olarak çözümlenen gerekir Python 2, Ruby (2.2.2p95)...yanı Ruby, >PHP – 3302 bytessıra PHPve Perl 5...sıra Perl.

    (,| [-&(–5]| \d\d).* tüm bu sonlarla (ve onlardan sonraki tüm karakterlerle) eşleşir, ancak birkaç yanlış pozitifle sonuçlanır:

    • ,dil adındaki virgülle eşleşecektir Help, WarDoq!.

    • (sürümünü eşleşir JavaScript (ESx)ve Java (1.8).

    • \d\diçindeki sürümle eşleşecek Ti-Basic 84.

    Eşleşmemek için [0-7]\dyerine üçüncü sorunu çözebiliriz \d\d.8 in 84.

    Diğer sorunlu durumlar (?! W|...\))için, önceki desenin W(olduğu gibi Help, WarDoq!) veya tam olarak üç karakter ve bir kapanış paranteziyle ((ES6) veya(1.8) ) .

    Hepsini bir araya getirmek, (,| [-&(–5]| [0-7]\d)(?! W|...\)).*dil adından sonraki her şeyle eşleşir.

  3. İki sorun vakası kaldı:

    <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>
    

    olarak ayrıştırılır

    Python 2 3
    Zozotez Lisp:
    

    İlkini çıkararak , ikincisini çıkararak düzeltebiliriz: çıktıdan .

    Bu, 2 |:boş dize ile değiştirilerek elde edilir .


16

Bash,% 100, 100 bayt

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

Ideone'da çevrimiçi deneyin .

Doğrulama

$ 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
Hah, bunun çok zor olacağını düşündüm ... iyi iş!
Downgoat


4

Jolf, 13 bayt,% 85.94, rakipsiz

ρΥ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  

Bu güncellemeyi bilgisayarımda aldım. Tercümanımın ilgili kodunu güncellemeyi unutmuştum. % 100 çekim yapmak istemiyorum. Belki herkes başlıklarını aynı şekilde biçimlendirmelidir ¯ \ _ (ツ) _ / ¯


Etiketleri çıkarmak iyi bir fikirdir. Bu, Retina cevabımda üç bayt kurtardı.
Dennis

@Dennis Teşekkürler! Yardımcı oldu sevindim.
Conor O'Brien
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.