Quinean Regex Tester

13

Esse desafio é bem simples. Como entrada, você recebe uma expressão regular.

Em seguida, você gera uma verdade / falsa sobre se seu código-fonte corresponde ou não à expressão regular. É simples assim! Apenas mais duas coisas:

  • Não há quine builtins; você pode, no entanto, acessar o código-fonte do código pelo arquivo IO etc.
  • Isso é , então o código mais curto em bytes vence!

Exemplo

Se seu código-fonte fosse,, abcuma entrada de a\wcretornaria true e uma entrada de a\dcretornaria false.

Maltysen
fonte
Exemplo por favor?
Mama Fun Roll
1
@ CᴏɴᴏʀO'Bʀɪᴇɴ não, tudo bem.
Maltysen 12/01
2
1. Eu não acho que apenas um BRE com classes simples de caracteres seja específico o suficiente. Quais recursos BRE precisam ser suportados? 2. \dnão é especial em BRE; combina com o personagem d. 3. A escolha de um sabor de regex específico restringe seu desafio aos idiomas que o suportam, e poucos idiomas suportam BRE. Isso é intencional?
Dennis
2
Eu recomendo deixar para o respondente. Se o idioma x usar o sabor da expressão regular y por padrão, use-o nesse desafio.
Dennis
6
@ Maltysen Por que você não adiciona um exemplo de substring ao corpo da pergunta?
feersum

Respostas:

14

Shell Z, 12 bytes

grep "$@"<$0

Os condicionais Zsh entendem apenas os códigos de saída e os scripts são encerrados com 0 ou 1 de acordo.

Além disso, isso imprime uma string não vazia (o código-fonte) para uma correspondência e uma vazia para uma incompatibilidade, que pode ser como valores de verdade / falsidade em combinação com test/ [.

O programa lê seu próprio arquivo, mas de acordo com este comentário do OP, isso é permitido.

Dennis
fonte
3
Aaand Dennis venceu. ### (_) _ / ¯
Conor O'Brien
Isso não funciona. Ele quebra em padrões com espaços neles.
feersum
@feersum Whoops! Obrigado por apontar isso. Eu editei minha resposta.
Dennis
2
Agora ele quebra se for gravado em um arquivo com espaços no nome. Ou um arquivo chamado -v. Ou ...
Ben Millwood
@BenMillwood Eu normalmente diria que não o salve com esse nome de arquivo , mas mudar para zsh torna a prova de balas sem aumentar a contagem de bytes.
Dennis
10

JavaScript (ES6), 39

(f=_=>!!`(f=${f})()`.match(prompt()))()
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳
fonte
Estou prestes a publicar isso, mas você me venceu. Bom trabalho!
Mama Fun Roll
12
O início de sua aparência código como eu quando se tenta compreender o seguinte: (f = _ =)
Nico
9

Python 3, 119 bytes

Isso parece mais legal, IMO (e não lê o arquivo).

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

Python 3, 67 bytes

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

Adicionado após a leitura deste comentário .

Zach Gates
fonte
inté mais curto que bool.
cat
7

Julia, 64 54 bytes

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

As expressões regulares de Julia usam PCRE. Enquanto a leitura do código fonte do arquivo é uma brecha padrão para quines, nesse caso, foi explicitamente permitido. Recebe entrada sem nova linha à direita.

Alex A.
fonte
3

Japonês, 22 bytes

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

Estrutura padrão de quine com alguns bytes adicionados para atender a esse desafio. Verdade = correspondência (s), falso = nulo. Experimente online!

         // 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
fonte
2

Mathematica, 63 bytes

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

Observe o espaço à direita. Usa o mecanismo quine padrão do Mma e testa se ele corresponde ao regex.

LegionMammal978
fonte
2

Perl, 21 bytes

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

17 bytes mais 4 bytes para -pl0. Execute assim:

echo open | perl -pl0 quinean

O arquivo de origem deve conter apenas o código acima (sem shebang, sem nova linha à direita). Produz 1se o regex corresponde e a sequência vazia, se não (a sequência vazia é falsey no Perl).


Podem ser salvos quatro bytes se for garantido que a entrada não termina em uma nova linha:

open 0;say<0>=~<>

Execute assim:

echo -n open | perl -M5.010 quinean

sayrequer Perl 5.10+ e deve ser ativado com -M5.010. De acordo com Meta , "o -M5.010, quando necessário, é gratuito", dando uma pontuação de 17 bytes.

Como funciona

Esta é uma variação simples do quine padrão de "trapaça":

open 0;print<0>

Isso abre o arquivo nomeado $0e lê o conteúdo com <0>.

$_=<0>=~$_lê uma linha do arquivo de origem, faz uma correspondência regular com o conteúdo de $_(que foram lidos pelo -psinalizador) e atribui o resultado a $_. -pimprime $_automaticamente no final.

ThisSuitIsBlackNot
fonte
2

Jolf, 18 15 bytes

Suporta o sabor JS do RegEx, espero que esteja tudo bem. Experimente aqui! .

 h$code.value#i

Comentado:

  $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
fonte
Em qual navegador isso funciona? Tanto o Chrome quanto o Firefox reclamam que isso x.stepnão é uma função.
Dennis
@Dennis Huh. Eu devo ter quebrado o intérprete ontem à noite. O que mais está errado? Atualmente, não consigo depurar, estou na escola.
Conor O'Brien
Boa. Agora adicione um atalho ao elemento "documento" do documento para que possamos abreviá-lo.
precisa saber é o seguinte
@ CᴏɴᴏʀO'Bʀɪᴇɴ Também fornece um erro de referência para math.
Dennis
@ Dennis Ah, é por isso. Esqueci de atualizar o HTML, adicionei math.js. Vou revisar quando chegar em casa, se não for tarde demais. (Em cerca de 4 horas)
Conor O'Brien
1

, 14 caracteres / 26 bytes (não competitivo)

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

Try it here (Firefox only).

Usando uma versão com correções de erros escritas após o desafio.

Explicação

⟮‼(ⒸⅩ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

NOTA: Os blocos de cópia NÃO são operadores de quine. Eles devem ser alternativas mais versáteis para declarações de variáveis.

Mama Fun Roll
fonte
1
Eu acho que você pode salvar um byte, alterando a 10.
lirtosiast