Elija una cita o frase que tenga exactamente 5 palabras, como Programming puzzles and code golf!
.
Escriba un programa que, cuando se agrega a sí mismo n veces, genera las primeras n + 1 palabras de su frase en orden.
Por ejemplo, si su código de programa era MYPROG
y su frase era Programming puzzles and code golf!
, ejecutando ...
MYPROG
debería salirProgramming
MYPROGMYPROG
debería salirProgramming puzzles
MYPROGMYPROGMYPROG
debería salirProgramming puzzles and
MYPROGMYPROGMYPROGMYPROG
debería salirProgramming puzzles and code
MYPROGMYPROGMYPROGMYPROGMYPROG
debería salirProgramming puzzles and code golf!
Anexar más de 4 veces no está definido, su programa puede hacer cualquier cosa.
Reglas
- Su frase debe ser gramaticalmente significativa en inglés. Idealmente, debería estar correctamente capitalizado y puntuado.
- Su frase puede tener cualquier longitud, pero su entropía, calculada por http://www.shannonentropy.netmark.pl/ , no puede ser inferior a 3.5 .
(Pegue su frase, presione Calcular y busque la última H (X) .) - Su frase solo puede contener caracteres ASCII imprimibles (hexadecimal 20 a 7E). Su código solo puede contener ASCII imprimible y pestañas y líneas nuevas.
- Su frase debe contener exactamente 5 palabras únicas y 4 espacios. Todos los no espacios cuentan como partes de palabras. Los espacios son los límites de la palabra. Puede que no estén al principio o al final; después de todo debería haber uno, excepto la última palabra.
- La salida también debe contener un espacio entre palabras. El resultado en cada paso adjunto puede contener espacios finales pero no espacios iniciales.
- Salida a stdout. No hay entrada
Tanteo
Su puntaje es la longitud en bytes de su programa inicial no agregado. (ej. MYPROG
puntajes 6)
Como se trata de código de golf, gana el puntaje más bajo.
code-golf
source-layout
Pasatiempos de Calvin
fuente
fuente
Respuestas:
CJam - 24
Pruébalo en http://cjam.aditsu.net/
Explicación:
Lm
elimina las letras contenidas en L (inicialmente "") de "TheguywasnotI"3<
toma las primeras 3 letras]
recoge el contenido de la pila en una matriz seS*
une a la matriz usando el espacio como separador:L
asigna la cadena resultante a L (también dejándola en la pila )Versión anterior (28 bytes):
Explicación:
S/
se divide porW):W
incrementos de espacio W (inicialmente W = -1)=
obtiene la W'th palabra]
recoge el contenido de la pila en una matriz seS*
une a la matriz usando el espacio como separadorfuente
Piet (respuesta honorífica)
Serpentea hacia abajo, corriendo a la derecha por el azul y reingresando por el verde. Imprime "Las moscas de la fruta como un plátano".
Utilicé PietCreator para hacer esto, pero puedes probarlo aquí . Rehacer los programas de Piet es una molestia, así que comencé a 35x35 y continué de esa manera, lo que significa que usé muchos más codeles de los que necesitaba.
Versiones de tamaño real
fuente
> <> (42)
Los peces son realmente la mejor mascota. Algunas personas mantienen los insectos como mascotas debido a una incomprensible falta de lógica. Este programa hace todo lo posible para razonar con esas personas.
Tenga en cuenta que esto no es una nueva línea final del programa. La salida completa se invierte en la primera línea; la frase completa es "¿Qué puede hacer cualquier error?" (entropía 3.58418).
Explicación completa:
Este es uno de los programas> <> más divertidos que he escrito, ya que este es el primero que usa la reflexión. La primera línea es donde está la carne del programa.
!v
es un no-op, ya que!
hace que se omita la siguiente instrucción.'?od gub yna nac tahW;'
almacena la frase completa en la pila (está al revés porque cada letra se inserta en la pila en el orden escrito, por lo que debe invertirse para que salga bien).00p
es donde comienza a suceder la verdadera magia. Tenga en cuenta que no solo almacenó la frase, sino que también almacenó un;
.00p
inserta el carácter superior en la pila en el programa en la posición (0, 0), por lo que ahora el primer carácter del programa es a;
.El final
!
omite ese punto y coma y mueve el cursor haciav
, lo que dirige el flujo del programa hacia abajo.De aquí en adelante, todo es solo rutinas de impresión. Como no hay una nueva línea final, los anexos sucesivos del programa simplemente agregan las dos últimas líneas, en efecto, ya que la primera línea estará a la derecha de
voo <
y, por lo tanto, nunca se ejecutará.Al final, el cursor se dirige hacia la parte inferior izquierda del programa y vuelve a la esquina superior izquierda, donde
;
se insertó anteriormente, finalizando el programa.fuente
"It is by a rope."
Su frase repite caracteres, por lo que tiene una entropía menor de lo que podría.Python 66
Entropía: 3.61635
Ouput:
Gracias @JasonS y @grc por los consejos para acortar la parte de detección de variables.
Actualización: vea la respuesta de JasonS para un malvado truco envolvente que lo redujo a 55 bytes. :)
fuente
i=locals().get('i',-1)+1;
es -5 bytesi='i'in dir()and i+1
. Editar: las reglas cambiaron.i='i'in dir()and i+1;print"Tfpcfhaialetgny"[i::5]+" ."[i>3],
Python 3, 55 (bonificación 67)
¿Quieres decir que se envuelve?
OK, alguna explicación sobre el n. ° 2 (spoilers)
credits
es una python incorporada que contiene texto que me gustaría usar. Es de un tipo especial con un formatorepr
para que pueda escribirlo en el intérprete interactivo y ver una buena salida, así que tengo questr()
hacerlo. Pasé un poco de tiempo mirando las construcciones para esto, y "Gracias por apoyar el desarrollo de Python" como una frase era demasiado buena para dejarla pasar.Como hay mucho texto y solo quiero mis 5 palabras, quiero almacenar las posiciones inicial y final de cada subcadena. Eso está en los bytes al principio.
bytes
los objetos en python3 actúan como matrices de enteros cuando usas operaciones de secuencia en ellos.Pero el código solo puede contener caracteres imprimibles, así que tuve que encontrar un desplazamiento (49) que hiciera que todos mis valores de posición se imprimieran como caracteres.
"Gracias" está cerca del comienzo de la cadena, mientras que las otras palabras están más cerca del final, lo que significa que mis valores de posición estaban demasiado separados para que todos estuvieran en el rango imprimible. Multiplicar la cadena por 2 hace otra copia de "Gracias" que está más cerca de las otras palabras.
Tomar el
[49:]
segmento de la cadena es un byte de origen menos que agregar 49 a ambos, a y b.La construcción utilizada en las tres respuestas es
x=<value>;dostuff and increment;x
. El seguimientox
no hace nada en absoluto, pero cuando se combina con la siguiente copia del código se convierte en loxx=<value>
que evita quex
se sobrescriba el contador.a,b,*q=q
es el desempaquetado de secuencia de Python 3 perfectamente normal.fuente
Pitón 2 (37)
Después de que Sarah se convirtió en presidenta de su capítulo local de Mensa, se convirtió en un foco de atención romántica de hombres que buscaban una pareja inteligente. En cada cita, Sarah intentaba establecer una conexión personal, pero los hombres simplemente la investigaban sobre preguntas filosóficas abstrusas. Frustrada porque a nadie le importaba su lado emocional, exclamó ...
Salida:
La entropía es
H(x)=3.5
exactamente.Crédito a Jason S., cuya respuesta básicamente usé al por mayor. El
ii
truco envolvente es maravilloso.fuente
print
py2 antepone espacios en lugar de agregarlosC - 65
Comentario de abuso :)
Debido a esto, las nuevas líneas son importantes y el código debe agregarse de la siguiente manera:
fuente
CJam, 24 bytes
Si se ejecuta cinco veces, imprime que Liz estuvo bien para mí . Puntuación no incluida, lo siento.
Cómo funciona
fuente
Pyth , 32
Frase: "Es por una cuerda".
Entropía: 3.5
Cómo funciona:
p
significa imprimir con separador especificado.El primer argumento
?kqZ4d
, da el separador.?kqZ4d
significak if Z==4 else d
.k
es''
, mientrasd
es' '
.El segundo argumento, el valor a imprimir, se genera dividiendo (
P
) en el espacio (d
), y la indexación en esa lista (@
) enZ
.Finalmente,
Z
que se inicializa automáticamente a 0, se incrementa en 1 (~Z1
).fuente
Golfscript, 53
Este fue divertido.
Frase: "No eres un pato". (lo cual es completamente cierto; entropía 3.5110854081804286)
Explicación:
La pila comenzará como
''
en la primera "ejecución" (ya que no se proporciona STDIN).'1'
Se adjuntan a esto para indicar cuántas veces se ha pegado el código.Ahora, qué sucede en la segunda carrera:
Y así.
"Pero", estás pensando, "¿cómo consigues que los 1 no salgan?" Ah, esa es la parte divertida de hacky. Golfscript implementa
puts
(que se llama cuando finaliza el programa) así:Simplemente lo cambié a
Para que los
1
s se supriman de la salida final.fuente
J - 42 char
Podría elegir una frase más corta, pero ¿por qué? No sería mi favorito.
Esto funciona debido a la dualidad mónada / díada de J: cada verbo puede invocarse como una mónada, con un argumento a la derecha, o como una díada, con un argumento a la izquierda y otro a la derecha.
Considere la siguiente sesión con J REPL:
Allí,
,
se trata como una diada, porque está entre dos argumentos, y(#~1=6|#\)&.;:
es una mónada porque no tiene argumento izquierdo. Entonces, si tuviéramos un verbo que pudiera actuar como,
cuando sea diádico y(#~1=6|#\)&.;:
cuando sea monádico, estaríamos listos.Como ya habrás adivinado, tal conjunción existe y parece
:
. Monádicof :g
es equivalente af
, y es equivalente ag
cuando diádico. Esto resuelve el problema.Ejemplos, que puedes probar por ti mismo en tryj.tk :
Y sí, la naturaleza de la inversa de
;:
hace que no haya espacios finales.Utilizando
It is by a rope.
como la frase da 35 Char:(#~1=6|#\)&.;: :,'It is by a rope.'
. No necesitamos el espacio final como lo hacemos para mi oración, por;:
razones arcanas .fuente
BBC Basic, 40
Incluye una nueva línea. Sería 30 si las palabras clave pudieran considerarse como tokenizadas en lugar de ASCII.
Cogí a mi novia durmiendo con el lechero, así que la dejé y me acuesto con su hermana por venganza.
As my ex do I!
(cinco "palabras" de dos letras con caracteres únicos) no era suficiente entropía, así que agregué el smiley al final para que la entropía fuera exactamente 3.5. Después de todo, en realidad tengo una vida bastante normal, no una extraña trama de telenovela.Repitiendo el programa 5 veces obtenemos
Solo
READ
se ejecutan las 5 declaraciones, y los primeros 5 elementos de datos se leen desde la primeraDATA
declaración. El resto de los datos es redundante. Salida:fuente
Rubí, 50
Esto usa su propia longitud para determinar cuántas palabras imprimir. Sus repeticiones se hace caso omiso de otra manera por que termina en el carácter de comentario,
#
. Frase prestada de Bitpwner : es muy conveniente tener una frase corta con el mismo número de letras en cada palabra.Dado que cada palabra + final es de 4 caracteres, la fórmula sería, por ejemplo, para un programa de 56 longitudes
(File.size($0)/56)*4 - 1
, pero puedo dividir con anticipación56/4 = 14
, por lo tantoFile.size($0)/14 - 1
, guardar algunos caracteres.50
no es un múltiplo de4
, pero12
está lo suficientemente cerca para el rango necesario.fuente
Chip , 165 + 3 = 168 bytes
+3 para bandera
-w
"Gané un traje rojo" (3.5) (en realidad no he ganado tal cosa) (... todavía)
Observe la nueva línea final, por lo que la copia concatenada aparece debajo del código existente.
Pruébalo en línea! (el original) ¡
Pruébelo en línea! (el original, más las cuatro copias)
Esto es un poco enredado. Resultó que lo más complicado fue la condición de terminación. (Mi primera iteración imprimió la (s) palabra (s), seguida de una secuencia interminable de bytes nulos ...).
Cómo funciona
Primero la frase:
12 caracteres únicos + 4 espacios = exactamente 3.5 entropías.
Y el código:
cada copia imprime la primera palabra, luego le dice a la copia de abajo que imprima la siguiente palabra. Si solo hay una instancia, no hay una segunda copia, por lo que no se imprime nada excepto la primera palabra.
Si hay dos copias, ambas imprimirán la primera palabra simultáneamente (los bytes se OR juntan para que esté bien), entonces solo la segunda copia imprimirá la segunda palabra.
Si las cinco copias están presentes, todas imprimirán la primera palabra, etc., etc., y la quinta copia imprimirá la última palabra por sí misma.
El circuito de terminación terminará el programa tan pronto como todas las copias no se impriman activamente.
fuente
Rubí, 63
fuente
Perl, 37
Similar a lo que tenía la casualidad, pero aprovechando el qw de perl para salvar algunos personajes más.
fuente
Rebmu mensaje longitud + 27
Si tuviéramos que ir con "¡Mi coeficiente intelectual no soy yo!" eso sería 43. Pero apoyo este mensaje:
Equivalente Rebol / Rojo:
Rebol tiene 3 condicionales básicos: SI, Y A MENOS. A MENOS es equivalente a SI NO, pero puede ser más claro: "Haga siempre lo siguiente A MENOS QUE esta condición sea verdadera".
En este caso, la condición es que probamos para ver si el símbolo S ha recibido un valor en el contexto actual. Tenemos que usar una cita, porque intentar usar una S sin comillas en una expresión condicional lo evaluaría y posiblemente generaría un error. (
value?
No cita su parámetro por defecto porque es posible que desee tener el símbolo que se está comprobando sea en una variable, por ejemplo,sym: 's
a continuación,if value? sym [...]
en realidad comprobar si S se definió, no SYM)Solo la primera pasta del programa asignará la serie de cadenas a S. Las pastas sucesivas tomarán una cadena del encabezado de la serie y la pasarán a IMPRIMIR / SOLAMENTE, que imprimirá su argumento sin agregar un avance de línea.
(Nota: IMPRIMIR / SOLO es una forma sugerida de reemplazo de decir PRIN, que se está considerando en Rebol 3 y Rojo; ahora se está probando un reemplazo de impresión en Rebmu).
fuente
AHK , 44 bytes
Tenga en cuenta la nueva línea al final. Lo único inteligente aquí es que la cadena son todas palabras de 3 letras, por lo que no tenemos que dividir nada. En cambio, simplemente extraemos una subcadena basada en
i
. La salida es a la pantalla activa como si estuviera escrita en el teclado.fuente
Javascript (53)
Tomé el texto de aditsu ya que no estoy haciendo nada elegante con el texto, por lo que las palabras elegidas son algo irrelevantes para la solución (excepto el conteo de bytes).
¿
alert
Cuenta en este caso? Editar: Leer las reglas probablemente no, ya que no estoy uniendo las cadenas con espacios. Agregaré espacios para que sea justo.También tenga en cuenta que lo caro
var
es realmente relevante en este caso.fuente
var i|=0;
NO funciona aquí?|=
o similar convar
. Sinvar
, obtienes unReferenceError: i is not defined
.var i=i|0
se expande avar i=undefined|0
, yundefined|0
es aparentemente0
.var i=i|0
es equivalente avar i;i=i|0
. Es por eso que no obtienes el error de referencia. La razón por la que se establecerá en 0 la primera vez es lo que dijo @ nyuszika7h.Perl, 43
56Acepto que no puedo ganar este. Mi intento original explica por qué:
fuente
Lua, 77
Una solución bastante simple:
(H (X) = 4.23)
fuente
Javascript, 138
(la nueva línea adicional se agrega solo para facilitar la lectura)
Impresiones
I'll sleep when I'm dead
. Utiliza un temporizador para asegurarse de que la salida solo se imprima una vezfuente
Pure Bash, 51 bytes
H (X) = 3.59447
Esto podría reducirse un poco más al cazar furtivamente una de las frases más cortas, pero estoy feliz de seguir con
Descartesla cita más famosa de Lennon de . (Lo siento @ Descartes, pero todas las palabras deben ser únicas).Salida:
Se encarga de insertar espacios entre palabras, pero no espacios iniciales o finales.
Se basa en el hecho de que en bash, las variables indefinidas, cuando se expanden como cadenas tienen el valor "", pero cuando se expanden aritméticamente tienen el valor 0.
fuente
!
ahora, parece que es el truco.PHP
8978 charEs un poco detallado, y definitivamente no ganará, pero fue divertido de todos modos. Esto es lo que se me ocurrió
Frase:
code golf is pretty fun
Entropía = 3.82791
Código:
Golfizado:
fuente
Python3 - 122 bytes
Abra las puertas de la bahía de pod [HAL]
Creo que ganaré un poco de credibilidad nerd con este. Si solo la pregunta permitiera una palabra más ...
Lo que hace mi programa es tomar el nombre del archivo (p.py es la base) y verifica cuántas veces se repite el nombre de la base. Luego toma rebanadas de una cadena de
n
veces.n
siendo el número dep
s en el nombre del archivo.El beneficio de la expresión regular es que el programa puede llamarse como quiera y seguirá funcionando (siempre que cambie el nombre base en el código): mi programa original se llamaba golfed.py.
fuente
05AB1E , 21 bytes (sin competencia)
Pruébalo en línea!
Usos:
Explicación
fuente
“€í€Ü€…‚¿‹·“
jejeStax , 24
Ejecutar y depurarlo
Cita: Algunos animales son más iguales.
fuente
SmileBASIC, 54 bytes
Hubiera preferido "La arena se puede comer". pero eso falla la prueba de entropía de alguna manera. Por supuesto, podría haber elegido una frase más corta, pero eso es aburrido.
La
READ
palabra clave lee un valorDATA
y lo almacena en una variable. Al usarREAD
nuevamente obtendrá el siguiente elemento, y así sucesivamente.fuente
Pyth , 27 bytes
Una vez , dos veces , tres veces , cuatro veces y cinco veces . Agregar después de esto comienza a repetir la frase.
fuente