Quine / Error Quine Polyglot


14

Sua tarefa é simples: escreva um programa que possa ser executado em dois idiomas. Deve ser um quine normal (imprime seu próprio código-fonte) no idioma 1 e deve ser um quine de erro (gera uma mensagem de erro idêntica ao seu próprio código-fonte) no idioma 2.

Isso é , portanto, o menor envio válido (em bytes) vence.

Regras:

  • Os idiomas podem ser arbitrariamente semelhantes. Superconjuntos / versões semelhantes / dialetos semelhantes não são permitidos.
  • As regras de quine de erro são as mesmas de Make an Error Quine! .


São permitidos dois dialetos diferentes do BASIC?
MD XF

@MDXF Se eles tiverem exatamente o mesmo comportamento, exceto que o resultado seja enviado para STDERR, então não. Caso contrário, sim.
Esolanging Fruit

Então, minha resposta é válida, então.
MD XF

@MDXF É válido.
Esolanging Fruit

Respostas:


2

Befunge-93 (FBBI) / C (tcc) , 93 + 62 = 155 bytes

^"
>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p:1: error: declaration expected

Experimente online !: Befunge-93 , C

Agradecemos a randomdude999 por observar que o nome do arquivo requer aspas correspondentes para funcionar.

Deve ser salvo com o nome do arquivo ^"\n>#001p#"<>:#,_@#1-8*3:-1*57+55-1*79*57:-1:*77**278\-1:*57$p, onde \nhá uma nova linha. Por esse motivo, o TIO for C não funciona exatamente como pretendido. Testado para funcionar no Lubuntu.

Explicação (C):

O programa falha ao compilar e o tcc exibe o nome do arquivo como parte de sua mensagem de erro. Existem vários erros de compilação que você pode obter, com base no início do código. ^no início nos dá um declaration expected, que é curto e não contém caracteres problemáticos como ". Por outro lado, os desenvolvedores gcc e clang são muito pessimistas e optaram por gerar vários erros de uma só vez, o que não é muito bom, então não estamos usando seus compiladores.

Explicação (Befunge-93):

O Befunge é conveniente para quines, pois seu código também pode ser utilizado como dados de caracteres, graças ao "comando, que alterna o modo de sequência. No início, realizamos algumas operações inúteis de pilha e, em seguida, emitimos um p(comando put) que coloca um caractere NUL em (0, 1). Em seguida, refletimos o ponteiro de instruções para a esquerda e começamos a ler tudo como uma string. Isso deve ser feito à esquerda, devido à natureza LIFO da pilha. Depois de envolver e alcançar o "personagem novamente, a sequência termina. Observe que o caractere NUL substituiu o$caractere, criando um delimitador no meio da cadeia. Em seguida, inserimos 3 números na pilha e saltamos sobre o NUL (porque infelizmente trava o intérprete quando executado como uma instrução). A parte estática da mensagem de erro deve ser executada aqui. A maioria de seus caracteres é no-ops, mas o pcomando consome três argumentos (por isso, pressionamos 3 números, caso contrário parte da string seria comida aqui), e os caracteres :& 1empurram um total de 4 valores para a pilha, o que neutralizamos. com as instruções a pe a $(pop e descarte). Em seguida, é executada alguma aritmética para enviar os códigos ASCII ^"\n>#001p#"e, finalmente, um loop imprime todos os valores na pilha como caracteres até encontrar um caractere NUL e terminar.


Você precisa encontrar um sistema operacional que suporte esse nome de arquivo e listá-lo. Eu sei que o Windows não suporta isso.
mbomb007

@ mbomb007 Supostamente, o Linux normalmente aceita qualquer caractere imprimível em um nome de arquivo, exceto /. Eu não posso testar isso agora.
negativo sete

1
Qual versão do tcc você usou? Estou usando 0.9.27-3 direto dos repositórios do Arch, e o erro que recebo é <define>:1: error: missing terminating " character.
randomdude999

1
Tudo bem, encontrei a versão exata do tcc usada no TIO e recebi a mesma mensagem de erro, mas apenas se as aspas do nome do arquivo corresponderem. Ter aspas sem correspondência parece bastante necessário para que esta resposta funcione. Aqui está algo que pode ajudá-lo: o Linux também permite novas linhas nos nomes de arquivos. Esta é a saída do tcc ao adicionar uma nova linha e uma citação no final do nome do arquivo: (link longo da essência) . Isso significa que você precisará encontrar uma maneira de imprimir a nova linha e o material na segunda linha.
randomdude999

@ randomdude999 Obrigado. Atualizei a solução para dar conta disso. Muito interessante mesmo que uma cotação inigualável faz com que uma questão como essa ...
negativo de sete

0

Applesoft BASIC / Commodore LCD BASIC , 13 bytes

?SYNTAX ERROR

No Apple] [emulador, pressione a RESETtecla para entrar no modo BÁSICO.
No emulador de LCD Commodore, pressione RightArrowEnterpara entrar no aplicativo BASIC.
Nos dois, não digite ?SYNTAX ERRORtodos os limites, porque eles capitalizam automaticamente.


2
o status de não concorrente é reservado para envios em idiomas que foram feitos após o desafio. Se for inválido de acordo com as regras, exclua-o. Aguarde a confirmação do OP primeiro, porque acho que isso deve ser válido (supondo que funcione).
HyperNeutrino

@HyperNeutrino Obrigado, editado.
MD XF

1
Vai ter que suspeitar disso também, então. Esta questão é muito mais brutal do que parece ...
Ørjan Johansen

1
@ ØrjanJohansen Bem, eu não tenho tanta certeza sobre este. Tecnicamente, o LCD Commore não tinha fluxo de bytes de erro padrão, então é realmente uma solução de erro?
MD XF

1
@ ØrjanJohansen isso ? Eu acho que isso pode significar que é impossível dizer se isso é válido ou não. Poderíamos esperar pela confirmação do OP?
MD XF
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.