Ostatnio w tabeli wyników projektu PPCG występują problemy z analizowaniem nagłówków HTML odpowiedzi .
W tym wyzwaniu spróbujesz parsować nagłówki odpowiedzi.
Przykładowe przypadki testowe
Te przykładowe dane wejściowe ( NIE rzeczywiste przypadki testowe), tylko po to, abyś mógł zrozumieć, jak mogą być dane wejściowe
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
Twój program powinien mieć 150 bajtów lub mniej
Otrzymasz wiersz html nagłówka odpowiedzi, musisz postarać się jak najlepiej wypakować język. Dane wejściowe mogą zawierać znaki Unicode.
Sprawa wyjściowa ma znaczenie.
Testy
Github Gist z przypadkami testowymi
Istnieje jeden przypadek testowy na linię. Format to:
<lang_name> - <rest_of_the_line_is_the_header>
Punktacja
Twój wynik to:
Number Correct
----------------
Total Number
(co jest procentem)
Tie-breaker to najkrótszy kod.
code-challenge
parsing
test-battery
Downgoat
źródło
źródło
#
nie występuje nawet w przypadkach testowych?!Odpowiedzi:
Siatkówka 0,8 , 100%,
757170686764595351 bajtówZasadniczo jest to teraz kod golfowy, więc musiałem zmienić język.
Wypróbuj online!
Weryfikacja
Jak to działa
Kod składa się z trzech prostych podstawień (lub eliminacji). Zamiast próbować dopasować nazwę języka, pozbywamy się wszystkich części ciągu wejściowego, które stanowią jego część.
<.*?>
dopasuje wszystkie tagi HTML, więc podstawienie wyeliminuje je z danych wejściowych..*?
dopasowuje dowolną liczbę znaków, ale ponieważ?
powoduje, że kwantyfikator jest leniwy , dopasuje najmniejszą możliwą liczbę, która wciąż pozwala na dopasowanie całego wzorca. Pozwala to uniknąć usuwania całego wejścia, które zawsze zaczyna się od<
a kończy na a>
.Nazwa języka zaczyna się teraz od pierwszego znaku pozostałego zmodyfikowanego ciągu wejściowego.
Po nazwie języka prawie zawsze znajdziemy jedno z następujących zakończeń:
,
,-
,&
,(
,–
,5
, Lub spację dwóch cyfr.Pierwsze dwa zakończenia są dość powszechne i
Python 2 & PuLP...
powinny być analizowane jakoPython 2
,Ruby (2.2.2p95)...
jakoRuby
,>PHP – 3302 bytes
jakoPHP
iPerl 5...
jakoPerl
.(,| [-&(–5]| \d\d).*
dopasuje wszystkie te zakończenia (i wszystkie znaki po nich), ale spowoduje to kilka fałszywych trafień:,
dopasuje przecinek w nazwie językaHelp, WarDoq!
.(
będzie pasować do wersjiJavaScript (ESx)
iJava (1.8)
.\d\d
dopasuje wersję wTi-Basic 84
.Możemy naprawić trzeci przypadek problemu, używając
[0-7]\d
zamiast\d\d
, aby uniknąć dopasowania8
w84
.W innych przypadkach problemowych używamy negatywnego spojrzenia
(?! W|...\))
, które zapobiegnie dopasowaniu poprzedniego wzoru, jeśli po nim następująW
(jak wHelp, WarDoq!
) lub dokładnie trzy znaki i nawias zamykający (jak w(ES6)
lub(1.8)
).Zestawiając wszystko razem,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
dopasowuje wszystko po nazwie języka.Pozostały nam dwa przypadki problemów:
zostaje przeanalizowany jako
Pierwszy możemy naprawić, usuwając,
2
a drugi usuwając:
z wyjścia.Osiąga się to poprzez zastąpienie
2 |:
pustym łańcuchem.źródło
Bash, 100%, 100 bajtów
Wypróbuj online na Ideone .
Weryfikacja
źródło
CJam, 78,38% (76 bajtów)
Wypróbuj online! lub policz właściwe nagłówki .
źródło
Jolf, 13 bajtów, 85,94%, niekonkurujący
Miałem tę aktualizację na swoim komputerze. Ku mojemu rozczarowaniu zapomniałem zaktualizować odpowiedni kod dla tłumacza. Nie mam ochoty strzelać za 100%. Może każdy powinien sformatować swoje nagłówki tak samo ¯ \ _ (ツ) _ / ¯
źródło