Testeur de regex quinéen

13

Ce défi est assez simple. En entrée, vous prenez une expression régulière.

Ensuite, vous affichez une vérité / falsey indiquant si votre code source correspond ou non à l'expression régulière. C'est si simple! Encore deux choses:

  • Aucun quine builtins; vous pouvez cependant accéder au code source du code par fichier IO, etc.
  • C'est du , donc le code le plus court en octets gagne!

Exemple

Si votre code source était dit, abcune entrée de a\wcretournerait vrai et une entrée de a\dcretournerait faux.

Maltysen
la source
Exemple s'il vous plaît?
Mama Fun Roll
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ non, ça va.
Maltysen
2
1. Je ne pense pas qu'un simple BRE avec des classes de caractères simples soit suffisamment spécifique. Quelles fonctionnalités BRE doivent être prises en charge? 2. \dn'est pas spécial en BRE; il correspond au personnage d. 3. Le choix d'une saveur regex spécifique limite votre défi aux langues qui la prennent en charge, et peu de langues prennent en charge BRE. Est-ce intentionnel?
Dennis
2
Je recommanderais de laisser le soin au répondeur. Si la langue x utilise la saveur regex y par défaut, laissez-la utiliser cette saveur dans ce défi.
Dennis
6
@Maltysen Pourquoi n'ajoutez-vous pas un exemple de sous-chaîne au corps de la question?
feersum

Réponses:

14

Coque Z, 12 octets

grep "$@"<$0

Les conditions Zsh ne comprennent que les codes de sortie et les scripts se terminent par 0 ou 1 en conséquence.

De plus, cela imprime une chaîne non vide (le code source) pour une correspondance et une chaîne vide pour une non-concordance, qui pourrait être des valeurs véridiques / fausses en combinaison avec test/ [.

Le programme lit son propre fichier, mais selon ce commentaire de l'OP, cela est autorisé.

Dennis
la source
3
Aaand Dennis a gagné. ¯ \ _ (ツ) _ / ¯
Conor O'Brien
Ça ne marche pas. Il casse des motifs avec des espaces en eux.
feersum
@feersum Whoops! Merci d'avoir fait remarquer cela. J'ai modifié ma réponse.
Dennis
2
Maintenant, il casse s'il est écrit dans un fichier avec des espaces dans le nom. Ou un fichier appelé -v. Ou ...
Ben Millwood
@BenMillwood Je dirais normalement de ne pas l'enregistrer avec un tel nom de fichier , mais le passage à zsh le rend à l'épreuve des balles sans incrémenter le nombre d'octets.
Dennis
10

JavaScript (ES6), 39

(f=_=>!!`(f=${f})()`.match(prompt()))()
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
la source
Je suis sur le point de poster ceci, mais tu m'as battu. Bon travail!
Mama Fun Roll
12
Le début de votre code me ressemble lorsque j'essaie de comprendre ceci: (f = _ =)
Nico
9

Python 3, 119 octets

Cela a l' air plus cool, IMO (et il ne lit pas le fichier).

(lambda i:print(bool(__import__('re').search(input(),i))))("(lambda i:print(bool(__import__('re').search(input(),i))))")

Python 3, 67 octets

print(bool(__import__('re').search(input(),open(__file__).read())))

Ajouté après avoir lu ce commentaire .

Portes Zach
la source
intest plus court que bool.
cat
7

Julia, 64 54 octets

r=readline;show(ismatch(Regex(r()),open(r,@__FILE__)))

Les expressions régulières de Julia utilisent PCRE. Bien que la lecture du code source du fichier soit une faille standard pour les quines, dans ce cas, il a été explicitement autorisé. Prend des entrées sans retour à la ligne.

Alex A.
la source
3

Japt, 22 octets

"+Q ³sAJ fU"+Q ³sAJ fU

Cadre de quine standard avec quelques octets ajoutés pour répondre à ce défi. Truthy = correspondance (s), falsy = null. Essayez-le en ligne!

         // Implicit: U = input string, A = 10, J = -1, Q = quotation mark
"..."+Q  // Take this string and concatenate a quotation mark.
³        // Repeat three times.
sAJ      // Slice off the first 10 and last 1 chars.
fU       // Match U to the result.
ETHproductions
la source
2

Mathematica, 63 octets

StringMatchQ[ToString[#0, InputForm], RegularExpression[#1]] & 

Notez l'espace de fin. Utilise le mécanisme de quine Mma standard et teste s'il correspond à l'expression régulière.

LegionMammal978
la source
2

Perl, 21 octets

open 0;$_=<0>=~$_

17 octets plus 4 octets pour -pl0. Courez comme ceci:

echo open | perl -pl0 quinean

Le fichier source ne doit contenir que le code ci-dessus (pas de shebang, pas de retour à la ligne). Affiche 1si l'expression régulière correspond et la chaîne vide si ce n'est pas le cas (la chaîne vide est falsey en Perl).


Quatre octets peuvent être enregistrés si l'entrée est garantie de ne pas se terminer par une nouvelle ligne:

open 0;say<0>=~<>

Courez comme ceci:

echo -n open | perl -M5.010 quinean

saynécessite Perl 5.10+ et doit être activé avec -M5.010. Selon Meta , "le -M5.010, si nécessaire, est gratuit", ce qui donne un score de 17 octets.

Comment ça fonctionne

Il s'agit d'une variante simple du quine standard de "triche":

open 0;print<0>

Cela ouvre le fichier nommé $0et lit le contenu avec <0>.

$_=<0>=~$_lit une ligne du fichier source, fait une correspondance regex avec le contenu de $_(qui a été lu par l' -pindicateur) et affecte le résultat à $_. -ps'imprime $_automatiquement à la fin.

ThisSuitIsBlackNot
la source
2

Jolf, 18 15 octets

Prend en charge la saveur JS de RegEx, j'espère que ça va. Essayez-le ici! .

 h$code.value#i

Commenté:

  $code.value#      the document's element "code" (the program container)
_h            i     and output if it has (matches) the input string (i.e. regex)
Conor O'Brien
la source
Dans quel navigateur cela fonctionne-t-il? Chrome et Firefox se plaignent que ce x.stepn'est pas une fonction.
Dennis
@Dennis Huh. J'ai dû casser l'interprète hier soir. Qu'est-ce qui ne va pas? Je suis actuellement incapable de déboguer, je suis à l'école.
Conor O'Brien
Bien. Ajoutez maintenant un raccourci vers l'élément "code" du document afin que nous puissions le raccourcir.
user48538
@ CᴏɴᴏʀO'Bʀɪᴇɴ Il donne également une erreur de référence pour math.
Dennis
@Dennis Ah, c'est pourquoi. J'ai oublié de mettre à jour le HTML, j'ai ajouté math.js. Je réviserai quand j'arriverai à la maison, si ce n'est pas trop tard. (Dans environ 4 heures)
Conor O'Brien
1

𝔼𝕊𝕄𝕚𝕟, 14 caractères / 26 octets (non concurrentiel)

⟮‼(ⒸⅩ222+ᶈ0)đï

Try it here (Firefox only).

Utiliser une version avec des corrections de bugs écrites après le challenge.

Explication

⟮‼(ⒸⅩ222+ᶈ0)đï // implicit: ï=input
⟮               // copy block: copy following code for later use
 (ⒸⅩ222+ᶈ0)   // take convert 10222 to char, add stuff inside copy block
‼           đï // check if input matches resulting string
               // implicit output

REMARQUE: les blocs de copie ne sont PAS des opérateurs de quine. Ils sont censés être des alternatives plus polyvalentes aux déclarations de variables.

Mama Fun Roll
la source
1
Je pense que vous pouvez enregistrer un octet en
remplaçant