Desafío
Escriba el programa más corto P de manera que
- P toma cualquier número entero positivo n como entrada y emite una cadena de programa P 1
ejecutar P 1 (sin entrada) genera una cadena de programa P 2 ,
ejecutar P 2 (sin entrada) genera una cadena de programa P 3 ,
...
- ejecutar P n (sin entrada) genera exactamente "¡Hola!" (sin las comillas).
Esquemáticamente:
P (n) → P 1 → P 2 → ... → P n → ¡Hola!
Criterios
- I / O es a través de stdin / stdout.
- La longitud del programa se mide en bytes.
- Los programas consisten solo en caracteres imprimibles ASCII.
- No debe haber duplicados entre los programas P, P 1 , ..., P n .
EDITAR: Los programas P, P 1 , ..., P n están destinados a ser código fuente, y "ejecutar el programa" se refiere a cualquier procesamiento que produzca la salida (es decir, interpretación, compilación y ejecución, etc.).
Respuestas:
Golfscript
3914Ejemplo:
Suponiendo que n = 4 y nuestro programa es P , estos son los pasos:
Ejecute P con el parámetro 4 . La salida es
"\"\\\"\\\\\\\"Hello!\\\\\\\"\\\"\""
( P 1 )Ejecución de salidas P 1
"\"\\\"Hello!\\\"\""
( P 2 )Ejecución de salidas P 2
"\"Hello!\""
( P 3 )Ejecución de salidas P 3
"Hello!"
( P 4 )Ejecutando salidas P 4
Hello!
. Si no confías en mí, sigue este enlace ☺.fuente
\'\\\'\\\\\\\'Hello!\\\\\\\'\\\'\'
(es decir, faltan las comillas externas), cuando lo ejecuto tanto en Linux como en Win 7 (usandoecho 4 | ...
en el símbolo del sistema). ¿Alguna idea de cuál podría ser el problema?~''\(,{)2\?('\\'*}/]"'"*:z"'Hello!"z-1%"'"
;"..."
, donde...
está la entrada, por ejemplo,.;"4"
Habría revelado el problema de desaparición de cita anterior, mientras que sólo precede al programa"4"
no lo hace.) ...;
. Cuando escribí el primer programa, me olvidé de esto en el camino, aunque fui yo quien escribió sobre él en el sitio meta: meta.codegolf.stackexchange.com/a/521/3527JavaScript, 58 caracteres
fuente
_
es 0, genera "¡Hola!"; de lo contrario, genera la definición de función y llama con_
menos unoPerl (
4536)Ejecutar con
perl -M5.010
para usarsay
.For
n=1
, salidassay q(Hello!)
For
n=2
, salidassay q(say q(Hello!))
For
n=3
, salidas,say q(say q(say q(Hello!)))
etc.
fuente
Python3, 66
fuente
Lisp común, 68 caracteres
Lo único que no es sencillo: genera un nivel de programa más de lo necesario y lo evalúa, porque
eval
es un carácter más corto queprint
.fuente
Lisp común: 65
Esta versión es más pequeña que la respuesta CL existente. En caso de que su Lisp croe con un stackoverflow, entonces tiene que usar esto, 81 bytes:
Sé que llego tarde a la fiesta, y estoy seguro de que esto aún podría optimizarse.
Demostración (cuidado, algunos REPL en línea no funcionan correctamente):
Tenga en cuenta que:
Probado con SBCL 1.2.11.debian
Hay muchas advertencias porque estoy haciendo cosas que, en serio, no deberían hacerse. Afortunadamente, todas las advertencias se imprimen con un punto y coma, por lo que se tratarán como comentarios de todos modos.
La duplicación se debe a que uno es el valor de retorno y una salida real. Si el valor de retorno también cuenta, entonces se simplifica a 58 bytes:
#1=(SETF N(READ)(CADDR'#1#)(1- N)W(IF(= N 0)"Hello!"'#1#))
Todavía sé que llego tarde a la fiesta
fuente
Python 2.7, 57
fuente
Haskell, 62
fuente
Bash, 47 o 12 (si uso golfbash)
Código:
código de golfbash:
Código anterior (49):
Utilizar:
Hacer programa P
Ejemplo
Hacer P1:
Hacer P2:
Hacer P3:
Hacer P4:
Ejecute P4:
Digamos que creo un nuevo lenguaje de propósito general llamado golfbash, un poco como golfscript, que tiene algunos comandos útiles como estos:
Entonces podría escribir esto:
Esto sería legal, ¿no?
fuente
F #, 182
fuente
J - 31 char
Tenga en cuenta que J usa cadenas de estilo Pascal:
'It''s too easy!'
Explicado:
".1!:1]1
- Leer en una línea de stdin y convertirlo en un número.<:2^
- Lleva 2 a la potencia de este número y disminuye.''''#~
- Haga una cadena con tantas copias del carácter de comillas simples.'Hello!'(],,)
- Agregue estas citas al frente y al reverso deHello!
.Uso:
fuente
Python 2.7: 75
Golf por primera vez, no estoy seguro si lo estoy haciendo bien; p
fuente
h
también se conoce en los programas posteriores? (¿Para que esto deba ejecutarse en un REPL o algo así?)Clojure, 36 bytes
Símbolo
evalúa a
Cree un símbolo con 5 comillas simples y ejecute el resultado hasta que no queden comillas.
fuente