Escreva um programa que gere uma saída "true" se a entrada corresponder ao código-fonte do programa e que gere uma saída "false" se a entrada não corresponder ao código-fonte do programa.
Esse problema pode ser descrito como relacionado a quines, pois o programa deve poder, de alguma forma, computar seu próprio código-fonte no processo.
Este é o código golf: regras padrão se aplicam. Seu programa não deve acessar arquivos especiais, como o arquivo de seu próprio código-fonte.
Editar: se você escolher, verdadeiro / falso pode ser substituído por Verdadeiro / Falso ou 1/0.
Exemplo
Se o código fonte do seu programa for bhiofvewoibh46948732));:/)4
, aqui está o que seu programa deve fazer:
Entrada (Stdin)
bhiofvewoibh46948732));:/)4
Saída (saída padrão)
true
Entrada
(Anything other than your source code)
Resultado
false
code-golf
quine
decision-problem
PhiNotPi
fonte
fonte
true
/false
é um forte requisito ou as variações (True
/False
,1
/0
) também são aceitáveis?Respostas:
JavaScript: 26
Não sei se um arquivo JavaScript realmente se qualifica como um "programa".
fonte
.toString()
método em JavaScript .f=s=>s=='f='+f
JavaScript ES6, 9 caracteres
Essa é a única maneira (de jogar golfe) em JS. ES6 faz com que seja necessário menos caracteres
Execute isso no console da Web mais recente do Firefox:
Exemplo de uso:
fonte
f=x=>f==x
e nãox=>f==x
, enquanto a versão de Denys Séguret realmente verifica a fonte inteira.f=x=>f==x
function f()
f.toSource()
"x=>f==x"
(basicamente avaliar o código no console e, em seguida, avaliarf.toSource()
em um browser que suporte esse método.x=>f==x
) EDIT: deixa pra lá, f é referenciado dentro da funçãoHaskell, 72 caracteres
Nota: não há caracteres de fim de linha no final do script.
fonte
GolfScript, 11 caracteres
Sem o
=
, esse código seria um quine que gera seu próprio código-fonte como uma string. O=
torna comparar esta cadeia para a sua entrada e saída1
se eles combinam e0
se não o fizerem. Observe que a comparação é exata - em particular, uma nova linha final no final da entrada fará com que ela falhe.Explicação:
{ }
é um literal de bloco de código no GolfScript;.
duplica esse bloco de código e~
executa a segunda cópia (deixando a primeira na pilha);`
especifica o bloco de código e".~"
+ anexa.~
a ele;=
compara a sequência resultante com a entrada (que é empurrada na pilha como uma sequência pelo intérprete GolfScript antes do início do programa) e retorna1
se elas coincidem e0
se não coincidem .fonte
Perl,
Infinito4138 PersonagensAtualização: o programa não termina mais com uma nova linha, o que significa que funcionará corretamente em arquivos com várias linhas. Você deve inserir a entrada de STDIN sem pressionar Enter. No Windows, eu era capaz de fazer isso apenas lendo um arquivo.
Solução original:
fonte
(cat id.pl; echo foo)|perl id.pl
> <> , 68 bytes
Os peixes adoram comer cocô de peixe. Agora sabemos que eles podem distinguir os deles dos amigos.
Você pode experimentá-lo online !
fonte
1
para qualquer prefixo do código tambémPython 2, 55
Testado:
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
->True
(anything else)
->False
fonte
a='a=%r;print a%%a==raw_input()';print a%a==raw_input()
.raw_input()
por__import__('sys').stdin.read()
.print raw_input()==open(__file__).read()
? Tem apenas 40 bytes, usa suaraw_input()
abordagem, mas lê seu código.Your program must not access any special files, such as the file of its own source code.
JavaScript ES6,
1614 bytesMenos dois bytes, graças a Neil.
31 bytes se for necessário receber entrada via prompt.
38 bytes, se precisarmos enviar por alerta.
Essa é a maneira correta de fazer isso, pois a resposta do Optimizer não aceita todo o código-fonte.
fonte
'$='+$
.;$()
porque a chamada de função faz parte do quine. Isso também significa que você precisará mudar paraprompt
a conta da entrada.$=_=>prompt()==`$=${$};$()`;$()
Node.js: 54
Você o testará salvando-o em um arquivo
f.js
(o nome exato não tem importância) e usando(que gera false) ou
(que gera true)
Eu também fiz uma versão diferente com base em eval:
Agora são 72 caracteres, tentarei encurtar isso quando tiver tempo.
fonte
Smalltalk (dialeto Pharo 2.0)
Implemente este método de 41 caracteres em String (formatação feia para code-golf):
Em seguida, avalie isso em um espaço de trabalho (printIt da maneira tradicional de Smalltalk)
A entrada não é lida a partir de stdin, é apenas uma String para a qual enviamos a mensagem (o que mais um programa poderia ter no Smalltalk?):
Mas estamos enganando, o sourceCode lê algum arquivo de origem ...
Aqui está uma variante com 51 caracteres que não:
E teste com:
Se uma String em uma área de trabalho não for considerada uma entrada válida, vamos ver como usar algumas caixas de diálogo em 116 caracteres . Avalie
esta frase:
Como o formato de descompilação inclui CR e TAB, alteramos isso com SeparadoresCompactos.
Então pulamos os 7 primeiros caracteres 'doIt ^'
Finalmente, uma variante de 105 caracteres usando stdin, apenas interprete esta frase na linha de comando, apenas para se sentir mais mainstream:
fonte
flex - 312 caracteres
Provavelmente pode ser reduzido, mas funciona com entrada de várias linhas (necessária, pois o código fonte é várias linhas) e até mesmo para entradas que contêm o programa como uma substring. Parece que muitas das respostas até agora falham em uma ou em ambas.
Comando de compilação:
flex id.l && gcc -lfl lex.yy.c
fonte
D (133 caracteres)
fonte
JavaScript (V8), 35
ligar
i()
e solicitará a entradafonte
+[]
deveria ser opcional como JS irá auto-type cast-loGolfScript - 26
Inspirado em http://esolangs.org/wiki/GolfScript#Examples
Outra versão:
Pena que
\
é ao mesmo tempo trocar e escapar ...fonte
Python 2, 47 bytes
Uma solução simples com a verificação adicionada.
fonte
print
é uma função é Python 3. Você precisaria fazerprint(_%%_==input())';print(_%_==input())
ou alterar para Python 2.CJam , 12 bytes
Experimente online!
Explicação
Isso apenas usa a estrutura padrão do CJam quine.
O que o bloco faz:
fonte
Tcl, 111 caracteres
fonte
Perl, 52 caracteres
fonte
Python, 187 bytes
Cuidado para não adicionar nova linha no final. Alguém com melhor Python-fu pode ser capaz de reduzi-lo.
fonte
C=chr
para soltar vários bytes. Além disso, reduza o nome da variávelcode
.Casca , 11 bytes
Experimente online!
Explicação
A explicação usa
¨
para delimitar seqüências de caracteres (para evitar escapamentos ilegíveis):Ao remover a função,
=
você pode verificar se ela realmente corresponderá à própria fonte.fonte
> <> , 24 bytes
Experimente online!
Quebrando literalmente a sequência de caracteres, seguido de verificação se a entrada é idêntica à pilha, com uma verificação final de que não há mais entrada.
fonte
Gelatina , 10 bytes
Experimente online!
fonte
05AB1E , 15 bytes
Modifica o quine padrão
0"D34çý"D34çý
adicionandoQ
(verifique a igualdade com a entrada implícita)Experimente online.
Explicação:
Legal alternativa de 15 bytes fornecida pelo @Grimy :
Experimente online.
Explicação:
fonte
187745012D27BJQ
é um empate.C -
186176 caracteresUm forro:
Com espaço em branco (observe que isso interrompe o programa):
fonte
Python 2 , 40 bytes
Experimente online!
fonte
Stax , 26 bytes
Execute e depure
fonte
q, 8 bytes
Retornar booleano na entrada correspondente ao .zs auto-referencial
fonte
Rúnico , 11 bytes
Experimente online!
O TIO foi atualizado e não há mais um problema de leitura de entrada (e não requer mais um espaço em branco à direita).
Explicação
Solução da JoKing:
Explicação
fonte
r
inverso"
esquerda é o único lugar para onde realmente pode ir, porque tê-la em outro lugar complica as coisas. (Mas agora eu tinha que executá-lo no meu depurador para ver o que estava fazendo ...)R , 54 bytes
Experimente online!
body
obtém o corpo da função (dividindo-a um pouco, de modo quebody(f)[3]
é tudo a partirpaste0
de então). Curiosamente,body
reformata o código, adicionando espaços após vírgulas, etc. Este é um caso raro de uma resposta de golfe R com um espaço após uma vírgula.Isso funciona porque
body(f)
é um objeto do tipolanguage
e existe umas.character
método para esse tipo. Por outro lado,f
eargs(f)
são do tipoclosure
, e não podem ser convertidos em tipo de caractere até onde eu sei. Por favor, não me pergunte qual é o tipo de idioma…fonte
PowerShell, 28 bytes
Muito parecido com esta resposta JavaScript , usa o provedor de funções .
Exemplo
fonte