PPCG no ha tenido suficientes quines ya ...
Desafío:
Su tarea es crear un programa "A0". Cuando este programa se ejecuta sin entrada, no genera nada. Cuando este programa se ejecuta con entrada, genera "A1". Cuando "A1" se ejecuta sin entrada, emite "A0". Cuando "A1" se ejecuta con entrada, emite "A2". Más o menos, "A (k)" generará "A (k-1)" cuando se ejecute sin entrada, y generará "A (k + 1)" cuando se ejecute con entrada.
Detalles
Creo que este desafío es bastante simple; No hay otras reglas realmente. Cada programa debe contener al menos 1 byte, por cierto. Puede suponer que la entrada consistirá solo en caracteres ASCII, y puede ignorar los espacios en blanco si lo desea, pero no puede especificar una entrada específica. La salida puede ser STDOUT o STDERR, pero todos sus programas deben salir al mismo. El otro también puede contener texto (por lo que puede enviarlo a STDOUT y luego salir con un error). Gracias a @Dennis por señalar eso.
Todos los programas deben estar en el mismo idioma, y cada programa debe ser único del resto de ellos.
La puntuación es igual a la duración del programa "A0". Como se trata de un desafío de código de golf, ¡gana el puntaje más bajo!
Respuestas:
Pip , 28 bytes
Pruébalo en línea!
Explicación
Esta es una versión modificada de la quip Pip más corta conocida
V Y"`V Y`.RPy"
. Ese quine funciona definiendo una cadena, jalándola en lay
variable y luego evaluándola. Cuando se evalúa, la cadena toma la repr dey
(envolviendo así el valor dey
entre comillas dobles) y concatena el patrón literal`V Y`
al frente.Nuestra estrategia es poner un
0
en el programa, luego reemplazar0
con10
si hubo entrada, o reemplazar10
con0
si no hubo entrada. (Por lo tanto, A ( k ) contendrá un número que consiste en k 1 seguido de un 0)0
y10
es conveniente porque hay variables incorporadas (i
yt
, respectivamente) con esos valores, por lo que podemos referirnos a ellos sin usar dígitos reales .Entonces, en lugar de
RPy
, queremos saberRP yRit
si hubo entrada yRP yRti
si no. Podemos combinar los dos casos intercambiando los valores det
yi
si hay input (I#q Sti
), luego haciendoRP yRti
. (Tenemos que probar#q
la longitud de la entrada, porque las entradas como0
son falsey).Ahora solo tenemos que obtener un literal
0
en el código y manejar el caso especial de que A0 no produzca salida. Ambos se pueden resolver probando0+i
y devolviendou
si es falsey:110+i
. Ej .).i
yt
se intercambian yi
es 10.0+i
todavía es cierto.i
sigue siendo 0 y0+i
es falsey. En lugar del núcleo de quine, generamosu
una variable incorporada para nil. La impresión nula no produce resultados.fuente
Python 2, 93 bytes
Hay un salto de línea final.
Pruébalo con entrada | Pruébalo sin entrada
Esto se modifica a partir de mi respuesta en una pregunta similar.
Si hay entrada, entonces se incrementará
p
. Así que el programa resultante seráp=2+...
,p=3+...
, etc.fuente
input()
y requerir que la entrada esté entre comillas, en lugar de usarlaraw_input()
. Si desea ingresar cero, use"0"
.