Um Quine frágil
Um quine frágil é um quine que satisfaz a propriedade de fazer cada substring removendo um único caractere, quando avaliado, produz um erro.
Por exemplo. Se o seu programa asdf
for um quine, para que seja frágil, os seguintes programas deverão apresentar um erro:
sdf
adf
asf
asd
Seu programa (e todas as suas substrings) deve ser totalmente determinístico e deve estar no mesmo idioma. Um programa que cai em um loop infinito (ou seja, falha ao finalizar), mesmo que não produza eventualmente um erro, é considerado "produzido um erro" para os propósitos deste desafio.
Aplicam-se brechas padrão, incluindo as restrições usuais de quine (por exemplo, incapazes de ler o próprio código-fonte).
Por exemplo, print("foo")
não é frágil. Todas essas substrings devem ter erro:
rint("foo")
pint("foo")
prnt("foo")
prit("foo")
prin("foo")
print"foo")
print(foo")
print("oo")
print("fo")
print("fo")
print("foo)
print("foo"
Os que não cometem erros são:
print("oo")
print("fo")
print("fo")
Portanto, não é frágil.
Uma nota importante sobre os peixes
Por consenso , qualquer solução possível deve satisfazer isso:
Deve ser possível identificar uma seção do programa que codifique uma parte diferente do programa. ("Diferente" significa que as duas partes aparecem em posições diferentes.)
Além disso, um quine não deve acessar sua própria fonte, direta ou indiretamente.
Exemplo
Como considero a função # toString do JavaScript "lendo seu próprio código-fonte", eu a desaprovo. No entanto, se eu não o proibisse, aqui está um quine frágil no JavaScript:
f=(n=b=`f=${f}`)=>(a=(n)==`f=${f}`,n=0,a)&(n!=b)?b:q
Testador
Aqui está um programa que, dado o código fonte do seu programa, gera todos os programas que devem ter erro.
let f = (s) =>
[...Array(s.length).keys()].map(i =>
s.slice(0, i) + s.slice(i + 1)).join("\n");
let update = () => {
output.innerHTML = "";
output.appendChild(document.createTextNode(f(input.value)));
};
input.addEventListener("change", update);
update();
#output {
white-space: pre;
}
#input, #output {
font-family: Consolas, monospace;
}
<input id="input" value="print('foo')">
<div id="output"></div>
fonte
Respostas:
Burlesco ,
32.28.25 bytesExperimente aqui.
Portanto, a maioria das instruções em burlesco tem 2 caracteres. E é muito mais fácil escrever um quine em burlesco do que em Marbelous.
Je!
ou^^e!
significa_~
em CJam.fonte
Python 3, 45 bytes
Alterne para o Python 3 para que a nova linha à direita possa ser facilmente removida.
Comecei com uma estrutura estúpida que tinha 2 variáveis em vez de 1, mas alternar para 1 variável apenas o tornou 4 bytes mais curto.
- (4 + 3) bytes por Dennis.
fonte
exec
estrutura com meu%
truque, hác='print(end=len(c)%5*"c=%r;exec(c)"%c)';exec(c)
48 bytes.c='print(end="c=%r;exec(c"%c+c[8*4])';exec(c)
economiza mais 3 bytes.Python,
91/9267 bytesIsso foi divertido!
Agora eu sei sobre afirmar:
Se um caractere da string for removido, afirme o erro. Eu teria feito isso antes se soubesse desse recurso, afirme.
fonte
Python 2,
515046 bytesVerifique no Ideone .
fonte
#0
).C #, 145 bytes
Eu não escrevi um quine em C # antes, mas pontuações mais altas são melhores no golfe, certo? :)
Loop infinito se um caractere for removido da string ou um dígito da const mágica 79. A remoção de qualquer outro caractere resulta em um erro de compilação.
Ungolfed:
fonte
JavaScript, 90 bytes
Funciona no console do Firefox 48 e deve funcionar em qualquer outro ambiente com
uneval
econsole.log
. Repartição dos erros:fonte
Python 2, 59 bytes
Isso gera a
ZeroDivisionError
se um 0, um 3 ou um caractere for removido da string. A remoção de um caractere diferente resulta em aNameError
ou aSyntaxError
.fonte
Uma pereira , 50 bytes
Experimente online!
Não é a resposta mais curta, mas bastante abrangente; qualquer exclusão de caractere desse programa faz com que ele falhe na soma de verificação; portanto, o intérprete A Pear Tree nem tentará executá-lo. (Por exemplo, você recebe um erro se excluir a nova linha à direita.) Ele
;#f+QF>
é usado para garantir que o programa como um todo tenha um CRC-32 igual a 0 (ef+QF>
é uma das três seqüências possíveis de 5 bytes que podem ser colocadas em o comentário para conseguir isso enquanto estiver no ASCII; o uso do ASCII é importante aqui, porquerepr
, caso contrário, não ocorreria o ida e volta).fonte