Quine de rotação segura


17

Escreva um quine apropriado cuja cada rotação seja ele próprio um quine adequado.

Por exemplo, se o seu código-fonte for abcdef, então:

  • abcdef produziria abcdef
  • bcdefa produziria bcdefa
  • cdefab produziria cdefab
  • defabc produziria defabc
  • efabcd produziria efabcd
  • fabcde produziria fabcde

Uma rotação "é feita dividindo uma corda em duas partes e revertendo sua ordem" .

Pontuação

Isso é . A resposta mais curta em bytes vence. Aplicam-se brechas padrão .


Então eu poderia ter programa aaabbbe eu poderia dizer que a próxima rotação é bbbaaa? Ou teria que ser a próxima rotação baaabb?
Beta Decay

11
A próxima rotação é baaabb.
Leaky Nun

11
Nota lateral, o padrão de fissão padrão é um padrão diferente de segurança para rotação: não importa como você o gire, ele sempre imprimirá o código fonte original.
Martin Ender

11
Se um quine em um idioma é de um byte, isso é trapaça?
MD XF

11
Esta é uma solução adequada?
tsh

Respostas:


10

Motorola MC14500B Código da máquina , 1 byte

A pontuação de 1 byte é derivada de duas instruções de 4 bits:

0000 0010

Explicação

O Motorola MC145008 é um processador CMOS estático de um único chip, otimizado para tarefas orientadas a decisões. O processador está alojado em um pacote de 16 pinos e possui 16 instruções de quatro bits. As instruções executam operações lógicas nos dados exibidos em uma linha de dados bidirecional de um bit e nos dados em um Registro de resultados acumulado de um bit na UTI. Todas as operações são executadas no nível de bit.

Os pinos do processador são numerados:

Atribuição de pinos

As instruções são apresentadas para o chip nas 4 pinos de instrução, ( I0, I1, I2, I3), e são travados na Instrução Register, (IR), na borda curso negativo de X1.

Nos termos leigos, os pinos 4 a 7 são utilizados para apresentar uma instrução ao Registro de Instruções, mas os bits são interpretados na ordem inversa. Por exemplo, a instrução 0001teria o pino 7 no estado alto e os pinos 6 a 4 no estado baixo.

As instruções são decodificadas na Lógica de Controle (CTL), enviando os comandos lógicos apropriados para a LU. Além disso também a descodificação é executada no CTL para enviar um certo número de bandeiras de saída ( JMP, RTN, FLGO, FLGF) para os pinos 9 a 12. Estes são usados como sinais de controlo externos e permanece activo durante um período de relógio completo após a borda contínua negativa de X1.

Ou, simplesmente, pinos 9 a 12 são as bandeiras de saída FLGF, FLGO, RTN, e JMP, respectivamente. Observe que os dados geralmente são multiplexados no WRITEpino (pino nº 2). Os pinos dos sinalizadores de saída são semelhantes aos códigos de saída de outros idiomas.

Cada uma das instruções da UTI é executada em um único período de relógio.

Rotações

Posição inicial

0000    NOPO
0010    LDC

Os períodos do relógio:

  1. A NOPOinstrução coloca o pino # 10 ( FLGO) no estado alto. Antes do próximo período do relógio, os pinos do sinalizador de saída são colocados novamente no estado baixo.
  2. A LDCinstrução carrega o complemento do valor do barramento de dados no registro de resultados, sem afetar os pinos do sinalizador de saída.

Assim, durante os dois períodos do relógio do programa, os pinos do sinalizador de saída representaram o 0100 0000que, lido em sentido inverso (como os pinos de entrada), é 0000 0010ou as instruções originais.

Primeira rotação

0010    LDC
0000    NOPO

Os períodos do relógio:

  1. O complemento do barramento de dados é carregado no registro de resultados, sem efeito dos pinos do sinalizador de saída.
  2. O pino nº 10 mudou para o estado alto.

Durante esses dois períodos de relógio, os pinos do sinalizador de saída representaram 0000 0100, que, quando revertidas, são as instruções 0010 0000.

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.