Um quine 1-up é um programa muito semelhante a um quine. A principal diferença é que, em vez de se imprimir uma vez, quando n cópias do programa são concatenadas, o resultado imprime o programa original n + 1 vezes.
Exemplo
Se o seu programa é Abc123
:
Abc123 -> Abc123Abc123
Abc123Abc123 -> Abc123Abc123Abc123
Abc123Abc123Abc123 -> Abc123Abc123Abc123Abc123
Desafio
Seu desafio é criar a menor quantidade possível de 1 em 1 em qualquer idioma. As regras habituais de quine se aplicam; portanto, você não pode:
- Envie o programa vazio.
- Lida direta ou indiretamente 1 o código fonte.
- Use built-ins de quining.
Isso é código-golfe, então o código mais curto em bytes vence.
1 Isso não inclui o uso de uma string ou bloco de código codificado como parte do seu programa.
code-golf
quine
code-generation
ETHproductions
fonte
fonte
n
for limitado por alguma restrição de tipo de dados (tamanho máximo inteiro, etc.)?Respostas:
GolfScript, 12 bytes
Experimente online!
Explicação
Isso combina idéias da coluna GolfScript padrão:
E meu quine recentemente descoberto :
A idéia principal é novamente usar o
n
que é impresso implicitamente no final do programa para obter a cópia adicional do quine. Como a atribuição da variável não muda nada quando é feita novamente nas cópias subsequentes, isso adiciona apenas uma cópia. Aqui está um detalhamento do código:fonte
GolfScript, 12 bytes
Experimente online!
Como o código fonte funciona
Se o código fonte acima for executado uma vez, a pilha terminará como
onde a cadeia vazia no início corresponde ao estado inicial da pilha (entrada vazia).
Duas cópias do código fonte deixariam um estado final de
três cópias um estado final de
e assim por diante.
O que acontece depois
Depois de executar o código fonte, o intérprete faz o seguinte.
Ele agrupa a pilha inteira em uma matriz e empurra essa matriz na pilha.
Para duas cópias do código fonte, a pilha agora contém
É executado
puts
com a intenção de imprimir a pilha empacotada, seguida por um avanço de linha.puts
é definido como{print n print}
, assim faz o seguinte.print
imprime a cópia embrulhada da pilha sem inspecioná-la (ou seja, sem convertê-la em sua representação de sequência). Isso envia(o código-fonte) para STDOUT e abre a cópia da pilha da parte superior da pilha.
A pilha agora contém
executa o bloco de código que definimos anteriormente.
:
começa salvando[{: ".~"][} ".~"]
o caractere de espaço,".~"
empurra-se,]
agrupa-o".~"
em uma matriz e[
define um novo marcador de matriz.n
empurra uma sequência que consiste em um único avanço de linha.A pilha agora contém
é executado mais uma vez. No entanto, foi redefinido quando o chamamos pela primeira vez e agora contém uma matriz, não um bloco de código.
Na verdade, ele empurra
[{: ".~"][} ".~"]
, deixando a pilha comoPor fim,
print
imprime o item mais alto da pilha sem inspecioná-lo, enviandopara STDOUT, aumentando o código-fonte 1.
fonte
Javascript ES6 (REPL), 55 bytes
Economizou 2 bytes graças a @ user81655!
Explicação
Aqui está a estrutura padrão do quine:
Você poderá ver essa estrutura dentro do envio. Mais explicações abaixo.
Este é o contador, padronizado como 1. Basicamente, ele nos diz quanto repetir a quantia e os incrementos ao mesmo tempo.
Esta é a parte correta. Nós essencialmente repetimos a sequência quine pelo contador + 1. As chamadas de função subsequentes substituirão a saída.
fonte
a
).var
CJam, 14 bytes
Experimente online!
Como funciona
Depois que a última cópia do programa foi executada, a matriz que contém o bloco e a string ainda está na pilha, portanto é impressa implicitamente.
fonte
Groovy, 83 bytes
Há uma nova linha incorporada e nenhuma à direita. Isso imprime:
A função
f()
imprime uma cópia do quine. O programa inicial chama duas vezes. A primeira linha do código anexado se torna um comentário e apenas a segunda chamadaf()
é executada.fonte
Ruby, 43 bytes
Por si só, isso é impresso
2-0
ou2
vezes. Quando concatenada para outra cópia de si mesma, a declaração de impressão final se parece$><<s%s*n=2-01
, o que significa que ela se produz apenas uma vez (01
sendo octal 1). Portanto, apenas a cópia final da string é impressa duas vezes, as outras são impressas uma vez.A atribuição inline para
n
é apenas para que a ordem das operações funcione corretamente; Na verdade, o estado não está sendo passado de uma cópia para a seguinte.fonte
NodeJS,
63616055 bytesisso também funcionará em JavaScript (ES6) se você considerar várias mensagens do console separadas por novas linhas (não é necessário REPL)
Economizou 2 bytes graças a @ dev-null
Observe que há uma nova linha no final do código.
Este foi interessante, definitivamente um dos meus favoritos até agora.
Estou bastante confiante de que isso não pode ser jogado muito mais. (talvez a
print
função do SpiderMonkey ...)Explicação
fonte
(f=_=
Eu posso estar um pouco cansado.Ruby, 55 bytes
Nada muito interessante aqui, é apenas uma solução normal de rubi com um contador.
fonte
JavaScript (ES6), 164 bytes
Funciona em qualquer página de teste JS ou console no Firefox, assumindo que o espaço entre duas mensagens do console conte como uma nova linha.
fonte
window
parathis
.Perl 6 ,
5853 bytesAgradecimentos a Jo King por -5 bytes.
Baseado no quine de Jo King .
Experimente online!
fonte
Japonês, 40 bytes
Teste online! Explicação para vir.
fonte
Y
Não-competidor, 6 bytes
Y é um canhão de cabeça que eu tenho há um tempo, e isso me inspirou a escrevê-lo. É feito para desafios nos quais o seqüenciamento é fundamental, como esse. O código é dividido em links por caracteres de "nó". Nesse caso, nosso código é colocado em duas cadeias (originalmente), com o nó sendo
C
.U
registra uma sequência transcendental, ou seja, uma que abrange os links. Ele grava até encontrar outroU
. Se umU
não for atingido até o final da string, ele será contornado. Além disso,U
está incluído na string por padrão. Após gravar a string, prosseguimos para o nóC
, que apenas nos move para o próximo link.n
empurra o número de correntes. Para o nosso caso base, este 2. Para uma sequência deK
cadeias, existemK+2
cadeias, como existemK
nós.*
é repetição de string.p
imprime a pilha inteira (nesse caso, uma sequência) ex
finaliza o programa.Em um texto:
Experimente aqui!
fonte
U
além da citação? (Parabéns por 7k, btw)Braquilog , 20 bytes
Experimente online!
Modificado a partir deste quine.
Quando isso é concatenado consigo mesmo, todas as rotas, exceto a última, falham e o programa passa para a próxima, executando cada uma
w₃
e retornando todas as etapas,w₅
exceto a última.Experimente online!
Experimente online!
Experimente online!
fonte