O PPCG ainda não teve cifras suficientes ...
Desafio:
Sua tarefa é criar um programa "A0". Quando este programa é executado sem entrada, ele não produz nada. Quando este programa é executado com entrada, emite "A1". Quando "A1" é executado sem entrada, emite "A0". Quando "A1" é executado com entrada, ele gera "A2". Praticamente, "A (k)" produzirá "A (k-1)" quando executado sem entrada e produzirá "A (k + 1)" quando executado com entrada.
Detalhes
Eu acredito que esse desafio é bastante simples; realmente não existem outras regras. Todo programa deve conter pelo menos 1 byte, a propósito. Você pode assumir que a entrada consistirá apenas de caracteres ASCII e poderá ignorar o espaço em branco, se desejar, mas não poderá especificar uma entrada específica. A saída pode ser STDOUT ou STDERR, mas todos os seus programas devem ser iguais ao mesmo. O outro também pode conter texto (portanto, você pode enviar para STDOUT e sair com um erro). Obrigado a @Dennis por apontar isso.
Todos os programas devem estar no mesmo idioma e cada programa deve ser exclusivo do restante deles.
A pontuação é igual à duração do programa "A0". Como este é um desafio de código-golfe, a pontuação mais baixa vence!
Respostas:
Pip , 28 bytes
Experimente online!
Explicação
Esta é uma versão modificada do quine Pip mais curto conhecido
V Y"`V Y`.RPy"
. Essa solução funciona definindo uma string, puxando-a para ay
variável e, em seguida, avaliando-a. Quando avaliada, a sequência recebe o repry
(envolvendo o valor entrey
aspas duplas) e concatena o padrão literal`V Y`
para a frente.Nossa estratégia é colocar um
0
no programa e substituí-lo0
por10
se houver entrada ou substituir10
por0
se não houver entrada. (Assim, A ( k ) conterá um número que consiste em k 1 seguido de um 0.)0
e10
é conveniente porque existem variáveis internas (i
et
, respectivamente) com esses valores, para que possamos nos referir a elas sem usar dígitos reais .Então, em vez de
RPy
, queremosRP yRit
se houve entrada eRP yRti
se não houver. Podemos combinar os dois casos trocando os valores det
ei
se houver input (I#q Sti
) e, em seguida, fazendoRP yRti
. (Temos que testar#q
o comprimento da entrada, porque entradas como0
são falsey.)Agora, apenas precisamos obter um literal
0
no código e lidar com o caso especial de A0 que não produz saída. Ambos podem ser resolvidos testando0+i
e retornandou
se for falsey:110+i
).i
et
for trocado ei
for 10.0+i
ainda é verdade.i
ainda será 0 e0+i
será falsey. Em vez do núcleo quine, produzimosu
, que é uma variável interna para zero. A impressão nula não produz saída.fonte
Python 2, 93 bytes
Há um avanço de linha à direita.
Experimente com entrada | Experimente sem entrada
Isso é modificado da minha resposta em uma pergunta semelhante.
Se houver entrada, ele será incrementado
p
. Assim, o programa resultante seráp=2+...
,p=3+...
, etc.fonte
input()
e exigir que a entrada esteja entre aspas, em vez de usarraw_input()
. Se você deseja inserir zero, use"0"
.