Como parte de sua resposta para Cometer um erro, Quine! , @Falko propôs o seguinte algoritmo:
Como criar sua própria solução em 2 minutos?
- Abra um novo arquivo em um IDE de sua escolha.
- Bata a cabeça no teclado à sua frente.
- Compilar.
- Substitua o código pela mensagem de erro do compilador.
- Repita as etapas 3 e 4 até o código convergir.
Aposto que esse procedimento termina muito rapidamente na maioria dos casos!
Tarefa
Sua tarefa é provar que ele está errado.
Escreva um programa completo que satisfaça o seguinte:
Quando compilado ou interpretado, ele produz uma mensagem de erro que, quando compilada ou interpretada, também resulta em uma mensagem de erro.
Repetir a etapa 1 várias vezes acabará encontrando um ponto fixo, isto é, uma solução de erro.
Regras adicionais
A mensagem de erro final deve ter um comprimento positivo. No entanto, as mensagens de erro anteriores e o código-fonte original podem estar vazios.
O comprimento do código-fonte original não pode exceder 1024 bytes.
Nem o código original nem o código gerado em qualquer uma das etapas podem produzir uma saída sem erro.
A saída deve ser claramente identificável como uma mensagem de erro, que deve ser gerada pelo compilador / intérprete devido a um erro de sintaxe, erro de tempo de execução, referência indefinida etc.
Seu programa pode não receber nenhuma entrada ou exigir sinalizadores para produzir o loop.
Seu programa pode contar com uma implementação específica de seu idioma ou versão dele.
Pontuação
Sua pontuação é o número finito de etapas exigidas pelo seu código-fonte antes de produzir uma solução de erro. A finalização com a pontuação mais alta vence.
O comprimento do código fonte original será usado como desempate. Quanto menor, melhor.
Exemplo
Em Frango , o programa
gera a seguinte mensagem de erro:
TypeError: Cannot read property 'NaN' of undefined
Se essa mensagem de erro for interpretada, ela produzirá a mensagem de erro
Error on line 1: expected 'chicken'
que, se interpretado por sua vez, se produz.
Assim, a pontuação do programa Chicken vazio é 2.
Contraexemplo
O código PHP
ab<?=c
gera a mensagem de erro
PHP Parse error: syntax error, unexpected '?' in Command line code on line 1
que se produz quando interpretado.
No entanto, o segundo código fonte imprime a mensagem em STDOUT, tornando esta sequência inválida.
Segmentation fault (core dumped)
.Respostas:
Bash, 9223372036854775810
Inspirado pela resposta da maçaneta da porta.
Ele deve ser executado
bash < file.sh
ou usar o mesmo nome de arquivo para cada programa, para se livrar dos diferentes nomes de arquivos nas mensagens de erro.Os primeiros erros são (com
LANG=C
):E finalmente:
que é uma solução de erro.
fonte
bc
ou escrever meu próprio código para diminuir.Pip 0.15.05.29 , mais de 10 100.000
Tecnicamente, não é válido porque requer o
-w
sinalizador para saída de aviso. Dito isto, o Pip por design não exibe nenhum erro de tempo de execução, a menos que eles realmente travem o programa (recursão infinita, por exemplo); os problemas com esse código são coisas sobre as quais outros idiomas definitivamente reclamariam.O número exato de etapas depende apenas do valor atribuído
i
, portanto pode ser arbitrariamente grande (até que o interpretador Python fique sem memória). Além disso, levaria mais tempo que a idade do universo para concluir a sequência acima. (A pergunta que especifique "lento"!)Explicação:
Demorou um pouco para examinar o intérprete antes que eu encontrasse um erro que me permitisse inserir código arbitrário na mensagem de aviso. Depois disso, foi essencialmente modificando as técnicas padrão de quine. O exemplo aqui usa um
i
valor-de5
para fins de explicação.Após a configuração
i
, armazene uma stringd
e tente executar aS
instrução wap. O swap espera duas variáveis (mais precisamente, lvalues).s
está bem, mas a segunda expressão éi?dRo--iRsRPda
. Sei
for verdadeiro (diferente de zero, para nossos propósitos), o ternário avalia comodRo--iRsRPd
, que usad
anteriormente para formar um quase quine - apenas comi
decrementado. Esta expressão não é um lvalue, portanto, o Pip reclama:... que então começa tudo de novo. (
Attempting to swap non-lvalue
é um monte de no-ops:At
calcula o valor ASCII det = 10
,n-l
subtrai a nova linha menos cada valor de uma lista vazia e todas as letras minúsculas são apenas variáveis.)O processo continua da mesma maneira até:
Quando isso é executado,
i
agora é falso. A expressão ternária é avaliada para o ramo else -a
que é um valor l. Assim, o swap não reclama mais. Em vez disso, obtemos:E, ao executar isso, finalmente, temos um erro de sintaxe real:
... nesse ponto, desde que o "programa" começa
R
, Pip continuará reclamando queR
não é um operador unário para sempre.A melhor solução que não usa
-w
é de tamanho 3:fonte
-w
conta como uma linguagem de programação de acordo com a meta consensoJulia, 3
Simples para fazer a bola rolar ...
Programa inicial:
Erro 1:
Pode não estar definido, mas se for espanhol , também é inesperado. Ninguém espera a inquisição espanhola.
Erro 2:
Erro 3:
A terceira mensagem de erro, quando enviada como um programa, produz esse mesmo erro, daí a pontuação 3.
Trabalho em progresso! Certamente eu posso fazer melhor que 3.
fonte
R, 5
Programa inicial:
Erro 1:
Erro 2:
Erro 3:
Erro 4:
Erro 5 (Quine):
fonte
Bash, 3
Script shell muito rudimentar para testá-lo:
fonte
stdout
. Se houverstdout
estderr
, não funcionará corretamente.Ruby, 5
Programa inicial
1
2
3
4
5 (Quine)
fonte
Java, 5
Como são muito longos ... verifiquei a igualdade de cadeias de caracteres usando um script Python e gerei esse post formatado, para não precisar inserir manualmente as guias em 400 linhas.
Programa inicial
1
2
3
4
5 (Quine) - Omitido devido ao comprimento do post.
fonte
javac -version
)?Javascript, 3 níveis de erro
Este não é o 'cutelo' ou algo assim, mas achei estranho ...
Erro 0 (original):
Erro 1:
Erro 2:
Erro 3 (quine):
Tudo isso foi retornado no Internet Explorer 11.0.9600.17416, sendo os erros traduzidos para o inglês.
Captura de tela:
* As mensagens de erro são mostradas em português e podem ser facilmente traduzidas para inglês
fonte
JS no Firefox 66.0; 3 níveis de erro
Entrada:
6?4;
Erro 1 = Entrada 2:
missing : in conditional expression
Erro nº 2 = Entrada nº 3:
expected expression, got keyword 'in'
Erro nº 3 = Entrada nº 4 = Erro nº 4:
unexpected token: identifier
Este é o mais alto que eu tenho.
fonte