Vor kurzem hatte die PPCG-Design- Bestenliste einige Probleme beim Parsen von Antwort- HTML-Headern .
In dieser Herausforderung können Sie selbst versuchen, Antwort-Header zu analysieren.
Beispiel Testfälle
Diese Beispieleingaben ( NICHT tatsächliche Testfälle), damit Sie eine Vorstellung davon bekommen, wie Eingaben aussehen könnten
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
Ihr Programm sollte 150 Bytes oder weniger sein
Sie erhalten eine Zeile mit dem HTML-Code eines Antwort-Headers. Sie müssen versuchen, Ihr Bestes zu geben, um die Sprache erfolgreich zu extrahieren. Die Eingabe kann Unicode-Zeichen enthalten.
Ausgabefall ist wichtig.
Tests
Es gibt einen Testfall pro Zeile. Das Format ist:
<lang_name> - <rest_of_the_line_is_the_header>
Wertung
Dein Ergebnis ist:
Number Correct
----------------
Total Number
(das ist ein Prozent)
Tie-Breaker ist der kürzeste Code.
code-challenge
parsing
test-battery
Downgoat
quelle
quelle
#
ist in den Testfällen gar nicht vorhanden ?!Antworten:
Retina 0,8,2 , 100%,
757170686764595351 BytesDas ist jetzt im Wesentlichen Codegolf, also musste ich die Sprache wechseln.
Probieren Sie es online!
Nachprüfung
Wie es funktioniert
Der Code besteht aus drei einfachen Ersetzungen (oder Eliminierungen). Anstatt zu versuchen, mit dem Namen der Sprache übereinzustimmen, werden alle Teile der Eingabezeichenfolge entfernt, die Teil der Eingabezeichenfolge sind.
<.*?>
stimmt mit allen HTML-Tags überein, sodass diese durch die Ersetzung aus der Eingabe entfernt werden..*?
Entspricht einer beliebigen Anzahl von Zeichen. Da?
der Quantifizierer jedoch faul ist , entspricht er der geringstmöglichen Anzahl, die noch für das gesamte Muster zulässig ist. Vermeiden Sie das Löschen der gesamten Eingabe, die immer mit a beginnt und mit a<
endet>
.Der Name der Sprache beginnt jetzt mit dem ersten Zeichen der verbleibenden geänderten Eingabezeichenfolge.
Nach dem Namen der Sprache finden wir fast immer eine der folgenden Endungen:
,
,-
,&
,(
,–
,5
, Oder ein Raum , der von zwei Ziffern.Die ersten beiden Endungen sind ziemlich häufig und
Python 2 & PuLP...
sollten alsPython 2
,Ruby (2.2.2p95)...
asRuby
,>PHP – 3302 bytes
asPHP
undPerl 5...
as analysiert werdenPerl
.(,| [-&(–5]| \d\d).*
würde mit all diesen Endungen (und allen Zeichen danach) übereinstimmen, aber es werden ein paar falsch positive Ergebnisse erzielt:,
stimmt mit dem Komma im Sprachennamen übereinHelp, WarDoq!
.(
wird mit der Version vonJavaScript (ESx)
und übereinstimmenJava (1.8)
.\d\d
passt zur Version inTi-Basic 84
.Wir können den dritten Problemfall beheben , indem Sie
[0-7]\d
statt\d\d
, passend zu dem zu vermeiden ,8
in84
.Für die anderen Problemfälle verwenden wir den negativen Lookahead
(?! W|...\))
, der die Übereinstimmung des vorhergehenden Musters verhindert, wenn daraufW
(wie inHelp, WarDoq!
) oder genau drei Zeichen und eine schließende Klammer (wie in(ES6)
oder(1.8)
) folgen .Alles zusammen,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
alles nach dem Namen der Sprache.Wir haben zwei Problemfälle:
wird analysiert als
Wir können das erste Problem beheben, indem wir es entfernen,
2
und das zweite, indem wir es:
aus der Ausgabe entfernen .Dies wird durch Ersetzen
2 |:
durch die leere Zeichenfolge erreicht.quelle
Bash, 100%, 100 Bytes
Probieren Sie es online auf Ideone .
Nachprüfung
quelle
CJam, 78,38% (76 Byte)
Probieren Sie es online! oder zählen Sie die richtigen Überschriften .
quelle
Jolf, 13 Bytes, 85,94%, nicht konkurrierend
Ich hatte dieses Update auf meinem Computer. Zu meinem Leidwesen hatte ich vergessen, den entsprechenden Code für den Dolmetscher zu aktualisieren. Ich habe keine Lust zu 100% zu schießen. Vielleicht sollte jeder seine Header gleich formatieren ¯ \ _ (ツ) _ / ¯
quelle