Baru-baru ini, leaderboard desain PPCG telah mengalami beberapa masalah dalam menguraikan header html jawaban .
Dalam tantangan ini, Anda akan mengambil kesempatan sendiri untuk mengurai header jawaban.
Contoh Kasus Uji
Ini contoh input ( BUKAN kasus uji yang sebenarnya), supaya Anda bisa mendapatkan gagasan tentang bagaimana input mungkin menjadi seperti
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 Anda harus 150 byte atau di bawah
Anda akan diberi satu baris html tajuk jawaban, Anda harus berusaha melakukan yang terbaik untuk berhasil mengekstrak bahasa. Input mungkin mengandung karakter unicode.
Kasus keluaran penting.
Tes
Ada satu test case per baris. Formatnya adalah:
<lang_name> - <rest_of_the_line_is_the_header>
Mencetak gol
Nilaimu adalah:
Number Correct
----------------
Total Number
(yang merupakan persen)
Tie-breaker adalah kode terpendek.
code-challenge
parsing
test-battery
Downgoat
sumber
sumber
#
bahkan tidak ada dalam kasus uji ?!Jawaban:
Retina 0.8.2 , 100%,
757170686764595351 byteIni pada dasarnya kode golf sekarang, jadi saya harus beralih bahasa.
Cobalah online!
Verifikasi
Bagaimana itu bekerja
Kode terdiri dari tiga substitusi sederhana (atau eliminasi). Alih-alih mencoba mencocokkan nama bahasa, kami membuang semua bagian dari string input yang membentuk bagian dari itu.
<.*?>
akan cocok dengan semua tag HTML, sehingga substitusi akan menghilangkannya dari input..*?
cocok dengan jumlah karakter apa pun, tetapi karena?
membuat kuantifier malas , itu akan cocok dengan jumlah sekecil mungkin yang masih memungkinkan seluruh pola untuk mencocokkan. Ini menghindari menghapus seluruh input, yang akan selalu dimulai dengan a<
dan diakhiri dengan a>
.Nama bahasa sekarang dimulai dengan karakter pertama dari string input yang dimodifikasi yang tersisa.
Setelah nama bahasa, kita akan hampir selalu menemukan salah satu dari akhiran berikut:
,
,-
,&
,(
,–
,5
, Atau spasi diikuti oleh dua digit.Dua ujung pertama agak umum, dan
Python 2 & PuLP...
harus diuraikan sebagaiPython 2
,Ruby (2.2.2p95)...
sepertiRuby
,>PHP – 3302 bytes
sebagaiPHP
, danPerl 5...
sebagaiPerl
.(,| [-&(–5]| \d\d).*
akan cocok dengan semua ujung ini (dan semua karakter setelahnya), tetapi itu akan menghasilkan beberapa kesalahan positif:,
akan cocok dengan koma dalam nama bahasaHelp, WarDoq!
.(
akan cocok dengan versiJavaScript (ESx)
danJava (1.8)
.\d\d
akan cocok dengan versi diTi-Basic 84
.Kami dapat memperbaiki kasus masalah ketiga dengan menggunakan
[0-7]\d
alih-alih\d\d
, untuk menghindari pencocokan8
di84
.Untuk kasus masalah lainnya, kami menggunakan lookahead negatif
(?! W|...\))
yang akan mencegah pencocokan pola sebelumnya jika diikuti olehW
(seperti dalamHelp, WarDoq!
) atau dengan tepat tiga karakter dan tanda kurung penutup (seperti dalam(ES6)
atau(1.8)
).Menyatukan semuanya,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
cocok dengan semuanya setelah nama bahasa.Kami memiliki dua kasus masalah:
diurai sebagai
Kita bisa memperbaiki yang pertama dengan menghapus
2
dan yang kedua dengan menghapus:
dari output.Ini dicapai dengan mengganti
2 |:
dengan string kosong.sumber
Bash, 100%, 100 byte
Cobalah online di Ideone .
Verifikasi
sumber
CJam, 78,38% (76 byte)
Cobalah online! atau hitung tajuk yang benar .
sumber
Jolf, 13 byte, 85,94%, tidak bersaing
Saya memiliki pembaruan ini di komputer saya. Saya sangat kecewa karena saya lupa memperbarui kode masing-masing untuk juru bahasa. Saya tidak merasa ingin memotret 100%. Mungkin semua orang harus memformat tajuknya sama dengan ¯ \ _ (ツ) _ / ¯
sumber