Suponha que você tenha 2 idiomas A
e B
. Uma cadeia de caracteres s
é uma semiquina A
e B
se satisfaz as seguintes condições:
s
é um quine na linguagemA
.s
é um poliglota emA
eB
.- A saída da execução
s
como umB
programa é uma sequência diferentes'
, que é uma soluçãoB
.
O objetivo deste desafio é escrever uma semiquina em dois idiomas distintos. Este é o código-golfe , o código mais curto vence, com a resposta mais antiga usada como desempate.
Regras para Quines
Somente quines verdadeiros são aceitos. Ou seja, você precisa imprimir todo o código fonte literalmente para STDOUT, sem :
- lendo seu código fonte, direta ou indiretamente.
- confiando em um ambiente REPL que simplesmente avalia e imprime todas as expressões que você alimenta.
- confiando em recursos de idioma que apenas imprimem a fonte em certos casos.
- usando mensagens de erro ou STDERR para escrever a totalidade ou parte da solução. (Você pode escrever coisas para STDERR ou produzir avisos / erros não fatais, desde que STDOUT seja uma solução válida e as mensagens de erro não façam parte dela.)
Além disso, seu código-fonte não deve consistir apenas de literais (sejam literais de seqüência de caracteres, literais numéricos etc.) e / ou NOPs. Por exemplo, `12
é um poliglota em Jelly e Pyth, mas em Jelly é um NOP e um literal numérico, portanto, não é válido.
Qualquer saída não suprimível (como avisos de direitos autorais, mensagens de inicialização / desligamento ou um avanço de linha à direita) pode ser ignorada na saída para garantir a validade do quine.
Regras para poliglotas
Os dois idiomas usados devem ser distintamente diferentes. Em particular:
- Eles não devem ter versões diferentes da mesma linguagem (por exemplo, Python 2 vs. Python 3).
- Eles não devem ter dialetos diferentes do mesmo idioma (por exemplo, Pascal vs. Delphi).
- Um idioma pode não ser um subconjunto do outro (por exemplo, C vs. C ++ 1 ).
- Um idioma pode não ser um derivado trivial do outro (por exemplo, Matlab vs. Octave 2 , brainfuck vs boolfuck vs TinyBF vs ShadyAsFuck vs todos os outros derivados triviais do brainfuck).
Regras Diversas
- Você não pode aceitar entradas do STDIN (ou de qualquer outra fonte). Se o idioma escolhido precisar receber entrada, a entrada deverá estar vazia (sequência vazia, canalizada a partir de
/dev/null
etc.) ou a saída do programa não deverá depender da entrada. - Para esse desafio, você deve escrever um programa completo. Não é permitido exigir código adicional para executar a solução (como atribuir e chamar uma função lambda definida na solução).
1: Sim, eu sei que C não é realmente um subconjunto de C ++. É perto o suficiente para ser considerado um com o objetivo de poliglotas, então, estou contando isso para este desafio.
2: Como o ponto 1 acima, embora o Octave tecnicamente não seja 100% compatível com o Matlab, ele foi projetado para ser compatível e está próximo o suficiente para permitir que um poliglota do Matlab / Octave trivialize o desafio.
Respostas:
GolfScript + Fissão ,
1918 bytesO avanço de linha à direita é necessário.
Este é um verdadeiro quine no GolfScript. Experimente online!
Em Fissão, imprime
que é um verdadeiro quine em Fissão . Experimente online!
Explicação
No GolfScript, qualquer formato
é um quine desde que
...
deixe uma string".~"
na pilha. Ele.
duplica o bloco, de modo que exista uma cópia impressa no final e a~
executa, para que possamos usar seu conteúdo para imprimir o.~
próprio. Nesse caso, o bloco empurra a stringe então o trunca para os dois primeiros caracteres com
2<
.O programa Fission realmente funciona exatamente da mesma forma que o próprio método , já que a primeira e a terceira linha são totalmente ignoradas pelo programa.
fonte
Ruby + (JavaScript ou Python 3), 76 bytes
Esse é outro desafio que pode ser resolvido usando minha nova linguagem favorita, o subconjunto quase comum de Ruby, JavaScript e Python 3; e como ainda não temos respostas em idiomas exotéricos, e muitas pessoas gostam de ver soluções em idiomas que não são de golfe, pensei em contribuir com uma. Melhor ainda, a mesma resposta resolve o desafio de várias maneiras ao mesmo tempo.
Aqui está
s
:Este é um quine em Ruby. Não é um problema em JavaScript ou Python 3; se você executá-lo em um desses idiomas, sua saída
s'
tem uma nova linha à direita e, portanto, é diferente:No entanto,
s'
é uma linguagem poliglota em JavaScript e Python 3! (Como de costume, estou usando a implementação do JavaScript Rhino, tanto por conveniência (como é executada na linha de comando, em vez de precisar de um navegador), quanto porque possui uma biblioteca padrão estranha na qualprint
grava na saída padrão. Os dois idiomas são produzidoss'
como resultado da execução de qualquer programa.Como um bônus, este programa também resolve o problema ao contrário. Se você decidir rodar
s'
em Ruby, ele imprimirá o programa originals
novamente. Como tal,s'
é uma resposta válida (mas um pouco mais longa, com 77 bytes) à pergunta.Neste ponto, estou quase começando a pensar que "as diferenças entre a saída ou não da saída de uma nova linha ser suficiente para contar dois programas como diferentes" devem ser consideradas uma brecha padrão, pois esse parece ser um segundo conjunto de idiomas. (além do conhecido GolfScript / CJam), no qual é possível realizar o truque.
fonte
Vitsy (modo de segurança) e Y, 9 bytes, não-concorrentes.
Em Vitsy, isso é uma solução. Em Y, isso imprime
Ugrd3*Z'
; quando executado, isso imprimeUgrd3*Z'
, o que é um quine em Y. Y pós-data a pergunta, no entanto.O que Vitsy vê:
O que Y vê:
fonte
CJam + GolfScript, 9 bytes
Este é um quine no CJam. No GolfScript, ele gera uma nova linha à direita, que é uma característica do GolfScript.
Não tenho certeza se o CJam deve ser considerado um derivado trivial do GolfScript. Mas acho que são bem diferentes e pelo menos não triviais.
fonte