Récemment, le tableau de bord de conception PPCG a rencontré des difficultés à analyser les en- têtes HTML de réponse .
Dans ce défi, vous tenterez d'analyser les en-têtes de réponse.
Exemples de cas de test
Ces exemples d'entrées ( PAS les cas de test réels), juste pour que vous puissiez avoir une idée de la façon dont les entrées pourraient être
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
Votre programme doit être de 150 octets ou moins
Vous recevrez une ligne html d'en-tête de réponse, vous devrez essayer de faire de votre mieux pour réussir à extraire la langue. L'entrée peut contenir des caractères Unicode.
Le cas de sortie est important.
Les tests
Github Gist avec des cas de test
Il y a un cas de test par ligne. Le format est:
<lang_name> - <rest_of_the_line_is_the_header>
Notation
Ton score est:
Number Correct
----------------
Total Number
(qui est un pourcentage)
Le bris d'égalité est le code le plus court.
code-challenge
parsing
test-battery
Downgoat
la source
la source
#
n'est même pas présent dans les cas de test?!Réponses:
Rétine 0,8,2 , 100%,
757170686764595351 octetsC'est essentiellement du golf de code maintenant, j'ai donc dû changer de langue.
Essayez-le en ligne!
Vérification
Comment ça fonctionne
Le code consiste en trois substitutions (ou éliminations) simples. Au lieu d'essayer de faire correspondre le nom de la langue, nous nous débarrassons de toutes les parties de la chaîne d'entrée qui en font partie.
<.*?>
correspondra à toutes les balises HTML, donc la substitution les éliminera de l'entrée..*?
correspond à n'importe quelle quantité de caractères, mais puisque?
rend le quantificateur paresseux , il correspondra à la quantité la plus petite possible qui permet toujours au motif entier de correspondre. Cela évite de supprimer l'intégralité de l'entrée, qui commencera toujours par a<
et se terminera par a>
.Le nom de la langue commence maintenant par le premier caractère de la chaîne d'entrée modifiée restante.
Après le nom de la langue, nous trouverons presque toujours l'une des terminaisons suivantes:
,
,-
,&
,(
,–
,5
, Ou un espace suivi de deux chiffres.Les deux premières fins sont assez courantes et
Python 2 & PuLP...
doivent être analysées commePython 2
,Ruby (2.2.2p95)...
commeRuby
,>PHP – 3302 bytes
commePHP
etPerl 5...
commePerl
.(,| [-&(–5]| \d\d).*
correspondrait à toutes ces terminaisons (et à tous les caractères qui les suivent), mais cela entraînerait quelques faux positifs:,
correspondra à la virgule dans le nom de la langueHelp, WarDoq!
.(
correspondra à la version deJavaScript (ESx)
etJava (1.8)
.\d\d
correspondra à la version enTi-Basic 84
.Nous pouvons résoudre le troisième cas de problème en utilisant
[0-7]\d
au lieu de\d\d
, pour éviter de faire correspondre le8
dans84
.Pour les autres cas problématiques, nous utilisons l'anticipation négative
(?! W|...\))
qui empêchera la correspondance du modèle précédent s'il est suivi parW
(comme dansHelp, WarDoq!
) ou par exactement trois caractères et une parenthèse fermante (comme dans(ES6)
ou(1.8)
).Tout mettre ensemble,
(,| [-&(–5]| [0-7]\d)(?! W|...\)).*
correspond à tout après le nom de la langue.Il nous reste deux cas problématiques:
obtient analysé comme
Nous pouvons corriger le premier en supprimant
2
et le second en supprimant:
de la sortie.Ceci est réalisé en remplaçant
2 |:
par la chaîne vide.la source
Bash, 100%, 100 octets
Essayez-le en ligne sur Ideone .
Vérification
la source
CJam, 78,38% (76 octets)
Essayez-le en ligne! ou compter les en-têtes corrects .
la source
Jolf, 13 octets, 85,94%, sans concurrence
J'ai eu cette mise à jour sur mon ordinateur. C'est à mon grand regret que j'avais oublié de mettre à jour le code respectif de l'interprète. Je n'ai pas envie de tirer à 100%. Peut-être que tout le monde devrait formater ses en-têtes de la même façon ¯ \ _ (ツ) _ / ¯
la source