Nesta variante quine, seu programa deve emitir seu código-fonte transposto pela diagonal do canto superior esquerdo para o canto inferior direito. Por exemplo:
seu programa em quatro linhas
saídas
yof
ono
u u
r r
p l
r i
o n
g e
r s
a
m
O espaço em branco na saída não é arbitrário. Os espaços aparecem em duas situações: onde há um espaço no original (por exemplo, entre r
e l
na quarta coluna) e onde é necessário preencher caracteres (por exemplo, todos os espaços na primeira coluna). Ambos são obrigatórios e os espaços não podem aparecer em qualquer lugar mais na saída.
Uma única nova linha à direita na saída pode, opcionalmente, ser ignorada. Novas linhas à direita no código-fonte não têm efeito sobre a saída e as novas linhas à frente no código-fonte devem ser tratadas como no exemplo acima. Suponha que todo caractere que não seja uma nova linha tenha uma coluna de largura e uma linha de altura, mesmo que para caracteres como tab isso possa levar a uma saída feia.
Sua solução deve ter pelo menos duas linhas com pelo menos dois caracteres que não sejam de nova linha cada e não deve ser sua própria transposição (a saída não pode ser idêntica à origem).
Quines de trapaça que lêem do arquivo que contém seu código-fonte, extraem dados de uma URL, usam built-ins de citações e assim por diante.
Este é o código golf: o código mais curto em bytes vence.
Respostas:
CJam, 14 bytes
Teste aqui.
Embora seja mais curto, provavelmente um pouco menos interessante que a solução de fissão.
Explicação
fonte
Fissão , 17 bytes
Ainda é o meu idioma favorito para os peixes.
Experimente online!
Explicação
Isso é bastante semelhante ao quine básico da Fissão . De fato, se não fosse a regra "deve ter pelo menos duas linhas com pelo menos dois caracteres não-nova linha cada", eu simplesmente poderia ter transposto isso e substituído
R
porD
. Essa regra torna as coisas um pouco mais interessantes, porque precisamos imprimir outra linha.O fluxo de controle começa
D
com um único átomo indo para o sul. Uma vez que ele bate,"
ele enrola e imprimeSTDOUT, semelhante a como seria na rotina normal.
'!
depois define a massa do átomo para o código de caractere de!
. O0
é um teleportador que transporta o átomo para a segunda coluna, onde ainda está se movendo para o sul.Com
+
nós incrementamos a massa do átomo para o valor de"
.!N!
as impressões citam, alimentam, citam. STDOUT agora se parece com isso:Depois de contornar, o átomo atinge outro
"
e agora imprime a segunda linha literalmente:Nós terminamos agora. O átomo usa o teletransportador mais uma vez e aterrissa no
;
que o destrói e, assim, encerra o programa.Suponho que a parte mais interessante aqui seja colocar uma
"
na parte inferior e a outra na parte superior, para que eu possa imprimi-las de uma só vez, sem precisar definir o valor!
mais uma vez (porque seria sobrescrito ao entrar no modo de sequência novamente).fonte
Javascript ES6, 90 bytes
Nada mal nada mal.
Explicação
Aqui está a estrutura padrão do quine:
Para modificar, eu apenas dividi a sequência de caracteres quine ao longo de novas linhas e caracteres para criar uma matriz de caracteres, transposta usando 2 funções de mapa e unida para criar a saída.
fonte
Stax , 23 bytes
Experimente online!
Adaptação do
"34bL"34bL
quine, que se baseia em uma idéia usada em quines em vários idiomas.fonte
Befunge-93 , 57 bytes
Isso funciona colocando cada caractere na primeira coluna da pilha (exceto a cotação) e imprimindo cada item da pilha. Depois disso, imprime a cotação, imprime uma nova linha e depois passa para a segunda coluna. Faz a mesma coisa sem imprimir uma nova linha.
Você pode testá-lo no link do título, mas precisará copiar e colar o código na janela. Se você pressionar o botão 'lento', ele mostrará o caminho que o ponteiro segue e a pilha no momento.
fonte
"
única vez, para que você pudesse mudar algum código da primeira coluna para a segunda.Python 2,
917569 bytesExperimente online
Explicação:
Isso usa uma modificação do padrão quine:
Após modificação:
Isso seria suficiente se uma única linha fosse permitida. Em seguida, adicionei dois caracteres à segunda linha para atender a esse requisito. Os
#
caracteres na segunda linha podem ser substituídos por qualquer coisa, desde que você os altere também na primeira linha e torne o programa sintaticamente válido.Para imprimi-lo corretamente agora, tenho que imprimir
#
no final das duas primeiras linhas. Então, removo os dois primeiros caracteres da strings
e os imprimo#
antes de imprimirs%s
. Coloquei um dos#
no início des
para salvar alguns bytes, removendo um literal de nova linha.fonte