Inspirado pela hiperprogramação: N + N, N × N, N ^ N, tudo em um .
Agradecemos a @MartinEnder e @trichoplax por sua ajuda na sandbox.
Definições
Hyperquines
Defina uma hiperquina de ordem n como um programa completo ou função P semelhante a uma solução que satisfaça todas as regras que se aplicam a soluções adequadas e, além disso, possui a seguinte estrutura.
P é a concatenação de caracteres ‡ grupos que consistem de n cópias da mesma natureza. Quando P é executado, a saída é a concatenação dos mesmos grupos, aumentada por mais uma cópia do caractere.
Exemplos
Em uma linguagem de programação hipotética em que o código fonte
aabbcc
gera a saídaaaabbbccc
, este programa constitui uma hiperquina de ordem 2 .A definição não requer que os caracteres de grupos diferentes sejam diferentes.
Se o código fonte
aabbcc
gerar a saídaaaaabbbbcccc
, o programa é uma hiperquina da ordem 1 ; o código fonte consiste em seis grupos de caracteres únicos, a saída de seis pares de caracteres.No GS2 , o programa vazio é impresso
\n
e o programa é\n
impresso\n\n
. No entanto,\n
nem\n\n
são nem hiperquinas, pois não satisfazem todas as propriedades de quines apropriadas ; nenhuma parte do código-fonte codifica uma parte diferente da saída.
Cadeias de hiperquinas
Defina uma cadeia hiperquina de comprimento n como uma sequência finita de n programas completos ou n funções
(P 1 ,…, P n ) que atenda às seguintes restrições.
As saídas de P 1 ,…, P n-1 são P 2 ,…, P n , respectivamente.
P 1 ,…, P n são hiperquinas.
As ordens de P 1 ,…, P n formam uma sequência estritamente crescente de números inteiros adjacentes .
Finalmente, definir uma cadeia hyperquine infinito como uma sequência infinita de programas completos ou funções (P 1 , P 2 , ...) de tal modo que cada intervalo inicial (P 1 , ..., P n ) constitui uma cadeia de comprimento hyperquine n .
Exemplos
Em uma linguagem de programação hipotética em que o código fonte
aabbcc
gera a saídaaaabbbccc
, que por sua vez gera a saídaaaaabbbbcccc
, o par (aabbcc
,aaabbbccc
) constitui uma cadeia hiperquina de comprimento 2 .Observe que
aaaabbbbcccc
- a saída da última hiperquina na cadeia - não precisa produzir uma saída específica; nem precisa ser um código fonte válido.Continuando com o exemplo anterior, se
aaaabbbbcccc
gera a saídaaaaaabbbbbccccc
, o tripleto (aabbcc
,aaabbbccc
,aaaabbbbcccc
) constitui uma cadeia de comprimento hyperquine 3 .Se esse padrão continuar para sempre, a seqüência (
aabbcc
,aaabbbccc
,aaaabbbbcccc
, ...) constitui uma cadeia hyperquine infinito.O par de programas (
abc
,aabbcc
) com saídas (aabbcc
,aaaabbbbcccc
) não é uma cadeia hiperquina, uma vez que as ordens das hiperquinas são ambas 1 , portanto, elas não formam uma sequência estritamente crescente.O par de programas (
aabbcc
,aaaabbbbcccc
) com saídas (aaaabbbbcccc
,aaaaabbbbbccccc
) não é uma cadeia hiperquina, uma vez que as ordens das hiperquinas são 1 e 4 , portanto, elas não formam uma sequência de números inteiros adjacentes.
Regras
Tarefa
Em uma linguagem de programação de sua escolha, escreva uma cadeia de hiperquinas não trivial, ou seja, uma cadeia que consiste em pelo menos 2 hiperquinas.
Como de costume, seus programas não podem receber nenhuma entrada ou acessar seu próprio código-fonte de qualquer forma.
Se o seu intérprete imprime uma nova linha implícita, suas hiperquinas precisam ser responsáveis por isso.
Todas as brechas padrão - especialmente aquelas relacionadas a quines - se aplicam.
Pontuação
A maior cadeia de hiperquinas vence. Se duas ou mais submissões estiverem vinculadas, a submissão entre essas que começa com a hiperquina mais curta (medida em caracteres ‡ ) vence. Como sempre, o tempo de postagem é o desempate final.
‡ Você deve usar a mesma codificação de caracteres para código fonte, saída, contagem de caracteres e execução. Por exemplo, o programa Python nãoprint 42
é um envio UTF-32 de 2 caracteres, pois o intérprete trata cada byte como um único caractere. Se o seu idioma de escolha não for baseado em caracteres, trate todos os bytes individuais como caracteres.
Respostas:
Befunge-98 , ordem infinita,
54523836 bytesSegunda abordagem - ordem infinita, 36 bytes
Na verdade, esse programa seria interrompido na 34ª hiperquina, pois o valor ASCII de
"
interromperia a interpretação das strings (e 59;
), mas compensamos o armazenamento desse valor em uma posição que nunca será executada (por exemplo, em(0, 1)
vez de(0, 0)
).Experimente online: 1 , 2 , 10 , 34 , 42
Explicação
Primeira abordagem - encomende 34, 52 bytes (usa introspecção, portanto tecnicamente não é legal)
Pela razão no post acima, este programa seria quebrado na ordem 34 (embora eu não tenha testado).
Experimente online!
fonte
g
, o que parece ler diretamente o código-fonte do programa. Dito isto, dificilmente sou um especialista em Befunge, por isso posso estar entendendo mal alguma coisa.g
para dois propósitos aqui: armazenar dados e ler o código fonte. O segundo pode ser um pouco superficial, embora esolangs.org/wiki/Befunge#Quine tenha um exemplo usandog
para ler também o código-fonte. Enquanto isso, vou ver se consigo criar uma versão que não use nenhuma introspecção.> <> , ordem infinita, 178 bytes
O programa contém um avanço de linha à direita.
Experimente online: 1 , 2 , 3 , 10 (Esse último demora um pouco para ser executado.)
Script de retina para gerar fonte do programa linear.
Explicação
A idéia principal é tornar o quine vertical, para que o fluxo de controle real não seja afetado pela repetição. Por exemplo, o segundo hiperquino começa como:
Como estamos apenas passando pela primeira coluna, não precisamos nos preocupar com caracteres repetidos. Além disso, quando pressionamos a maioria do código como uma string
'
, isso abre um espaço para cada linha vazia, o que nos permite determinar o número de repetições. Dito isto, existem algumas limitações devido a estas linhas vazias:"
números grandes como códigos de caracteres na parte principal do quine, porque isso gera32
s adicionais que não queremos.?
ou!
porque eles pulam apenas o próximo caractere, que seria um espaço nesse caso (para que eles não pulem o próximo comando).Portanto, todo o fluxo de controle é feito com saltos explícitos (2D em goto, basicamente), cujas compensações reais precisamos calcular com base no número de repetições.
Então, vamos olhar o código real. Começamos com
^
para que o código seja executado de baixo para cima. Para facilitar a leitura, vamos escrever o código real em ordem de execução (e soltar o código^
porque ele nunca é executado novamente):Essa
'
é a técnica padrão de quining para> <> (e Befunge, eu acho). Ele muda para o modo de sequência, o que significa que os caracteres encontrados são empurrados para a pilha até que o próximo'
seja encontrado. Linhas vazias são preenchidas implicitamente com espaços e é por isso que temos todos os espaços intermediários. Linhas vazias no final do programa são ignoradas. Então, depois que o IP envolve e atinge o'
novo, temos a primeira coluna do programa na pilha, exceto a'
própria.Vamos ver como usamos isso para imprimir o programa inteiro.
O programa termina quando a pilha está vazia e o primeiro loop interno falha ao imprimir outro caractere.
fonte