Es probable que todos estén familiarizados con la siguiente canción , que es una ronda musical :
Fondo
Menos personas pueden recordar haber tratado de cantar la versión de 4 personas de esto con algunos amigos y no lo han logrado. Descomponer la letra de una canción con diferentes tonos armoniosos se conoce como cantar una "ronda" y eso es lo que estamos aquí para simular hoy usando salida estática. Aquí hay un ejemplo de alguien que realmente realiza la pieza (el enlace a audio / video tendrá sonido) .
El reto
Este desafío es generar el texto de la siguiente manera exactamente como sigue:
Row, row, row your boat, |-----------------------------------|-----------------------------------|-----------------------------------
Gently down the stream. |Row, row, row your boat, |-----------------------------------|-----------------------------------
Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat, |-----------------------------------
Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream. |Row, row, row your boat,
-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,|Gently down the stream.
-----------------------------------|-----------------------------------|Life is but a dream. |Merrily, merrily, merrily, merrily,
-----------------------------------|-----------------------------------|-----------------------------------|Life is but a dream.
Reglas
- El espacio en blanco final es aceptable, pero no obligatorio, esto incluye nuevas líneas.
- Los guiones y las barras son parte de la salida requerida, sí.
- Se requieren comas, puntos, mayúsculas y todos los elementos sintácticos relacionados con la gramática.
Este es el código de golf , el código de conteo de bytes más bajo sin usar lagunas estándar es el ganador.
code-golf
kolmogorov-complexity
Urna de pulpo mágico
fuente
fuente
Respuestas:
05AB1E ,
8077 bytesPruébalo en línea!
Trabajo en progreso.
fuente
ª
? No importa, frase en mayúscula, brillante.vy
puede serʒ
guardar un byte.V ,
139, 128 bytesUna línea! (tipo de: P)
Pruébalo en línea!
Hexdump:
¿Recibo puntos de bonificación por aterrizar exactamente en
2^7
?Esto tomó un tiempo para darse cuenta. Espero poder jugar mucho como mi respuesta de arte ASCII de teclado, pero no estoy seguro. Ya veremos. Son desafíos muy similares (y ambos muy divertidos: D)
Originalmente probé esto (180):
Pruébalo en línea!
Lo que inserta esto:
y luego realiza una sustitución para expandirlo. Pero construirlo al estilo ascii-art es mucho más corto (y más divertido TBH)
fuente
0^(2^7)
puntos de bonificación para aterrizar en2^7
jaja. Interesante primer pensamiento sobre la versión 180.Lote,
292288275 bytesEditar: guardé 13 bytes reescribiendo el código para usar una versión del truco de subcadena que utilicé en mi respuesta Retina. Convenientemente, puedo hacer un bucle seis veces y luego caer para una séptima iteración del cuerpo del bucle, lo que significa que la cita necesaria para generar
|
s no se vuelve demasiado onerosa, sin embargo, debo tener cuidado de tener^
en cuenta los s al seleccionar la subcadena. .fuente
Python 3,
252235208206205 bytesBien bien. Aquí hay una respuesta menos aburrida:
Respuesta anterior, 252 bytes:
Respuesta aburrida, y la otra respuesta de Python es más corta, pero pensé en intentarlo si este enfoque es más corto. Python 3 a pesar de los ahorros en byte / string 2-3 diferencia porque ambos
gzip
ybase64
son más mierda en Python 2.fuente
PowerShell ,
224207202 bytesPruébalo en línea! (la salida se ajusta si su pantalla no es lo suficientemente ancha)
Dios mío, esta cosa de generación de matriz es fea, pero ahorró 17 bytes, así que ...
Pasamos del
0
a6
. Cada iteración, estamos indexando en una matriz(0,1,2,3,4,4,4)
. La indexación se basa en el dígito actual, el dígito actual+6
, eso-1
y luego eso-1
. Cada uno de ellos se alimenta a través de un bucle donde modulamos%7
. Por ejemplo, si estamos en0
el0..6
bucle externo , entonces estos serían0,6,5,4
, entonces cada uno%7
, entonces0,6,5,4
. Eso está indexado en la(0,1,2,3,4,4,4)
matriz, por lo que la salida es0,4,4,4
. Para la entrada1
obtenemos1,7,6,5
entonces1,0,6,5
qué rendimientos1,0,4,4
. Y así. (las cosas serían mucho más fáciles si tuviéramos una.clamp
función)Esos son escupidos uno a la vez en un bucle
|%{}
. Cada iteración, indexamos en el lugar apropiado en la matriz de letras de canciones, y dejamos esa cadena en la tubería. Esas cadenas se-join
editan junto con|
para formatear la línea de salida. Esas cadenas se dejan en la tubería y la salida es implícita.Guardado algunos bytes gracias a Value Ink.
fuente
$a
guardado en 11 espacios, puede cambiar la cuarta línea para terminar en$a
más 4 espacios en lugar de$(' '*15)
para -3 bytes, ¿sí?JavaScript (ES8),
285256240231229217214213211210 bytesAhorró algunos bytes al tomar prestado un truco de la respuesta de Arnauld
Intentalo
fuente
'0444,1044,2104,3210,4321,4432,4443'.split
,.map
te ahorra 10 bytes. Además,padEnd
no es parte de ES6, o incluso ES7.PHP, 191 bytes
Pruébalo en línea!
Expandido
fuente
Python 2 , 199 bytes
Pruébalo en línea!
Gracias a @mathjunkie por guardar 14 bytes
fuente
'Merrily, merrily, merrily, merrily,'
podría estar('merrily, '*4).capitalize()
bien? ¿O no es Python?'Merrily,'+' merrily,'*3
CJam ,
128122 bytesPruébalo en línea!
Explicación
fuente
SOGL , 83 bytes
La primera parte
┌׀0ρMVxDrž|⁷ΨB≈π93|↑D~Νķ‰¤t╤▼ΣΗ⁶⅔¾№⁷Ζ÷│²╥Ν9°‘
es una cadena comprimida que resulta enEstas son las líneas invertidas (ya que esto las imprime línea por línea), con la parte "alegremente" cortada para ser reemplazada en el programa.
El resto del programa:
fuente
/// , 200 bytes
Pruébalo en línea!
Simple, utiliza ocurrencias comunes como reemplazos.
fuente
PHP, 179 bytes:
sin golf
fuente
JavaScript (ECMAScript 2017),
191187182 bytesGuardado 3 bytes gracias a Shaggy
fuente
'Merrily,'+' merrily,'.repeat(3)
guarda un byte.padEnd
no está en ES7, y mucho menos ES6.M${s='errily, '}m${s}m${s}m
en lugar deM${s='errily,'} m${s} m${s} m
guardar 2 bytes"Merrily,"+(s=" merrily,")+s+s
.Servidor SQL de Microsoft, 421 bytes
Compruébalo en línea
fuente
C (CCG),
231230 bytes-1 byte gracias a ceilingcat!
Muy claro. Primero construye el conjunto de cadenas de 7 líneas, parte a través de una macro para factorizar la parte "alegremente", luego las líneas de guiones se rellenan con a
memset
. Luego, las líneas se imprimen con el desplazamiento y los separadores adecuados.Pruébalo en línea!
fuente
MATLAB, 280 bytes
La indexación de la matriz de celdas es bastante costosa, ese parece ser el lugar más fácil para descartar algunos bytes (si es posible).
fuente
Retina ,
153150 bytesPruébalo en línea!
Intenté la codificación arbitraria de longitud de ejecución pero
$1$*$2
no hace lo que quiero y repetir cadenas resultó demasiado complicado. Editar: ahorró 2 bytes mediante codificaciónerrily,
y 1 byte al eliminar un innecesario^
.fuente
Python 2, 225 bytes
Pruébalo en línea!
fuente
Perl 5 , 215 bytes
Pruébalo en línea!
fuente
Swift ,
416406405380372307 bytesPuedes probarlo aquí .
Gracias a @Mr. ¡Xcoder por salvarme 65 bytes!
fuente
f
lo siguiente:, lovar f=String.init(repeating:count:)
que ahorra una tonelada de bytes: 30print(o())
, solo debe llamaro()
porque tiene unaprint
declaración dentro, que da un()
final al final de la salidaT-SQL,
296 277276 bytesLos saltos de línea al principio son parte de la cadena original, los saltos de línea cerca del final son solo para fines de visualización y no se cuentan para el total de bytes.
Inspirado en gran medida por la respuesta de Conrade SparklePony . Técnica diferente a la respuesta SQL de Andrei Odegov .
Reemplazo múltiple bastante sencillo, pero algunas cosas que ayudan a ahorrar bytes:
Si tan solo pudiera
REPLACE
todos losREPLACE
s con algo más corto. Hmm ...fuente
Japt
-R
,99959492908987 bytesIntentalo
fuente
Ruby, 162 bytes
fuente
Java, 295 bytes /
272259 bytescon líneas nuevas cada 4 columnas (295b)
Pruébalo en línea
sin versión de nueva línea (259b):
Pruébalo en línea
fuente
Japt ,
158157 bytesPruébalo en línea!
fuente
Stax , 63 bytes
Ejecutar y depurarlo
fuente
Perl 5 , 163 bytes
Pruébalo en línea!
fuente
Encantamientos rúnicos , 292 bytes
Pruébalo en línea!
Generalmente no hago desafíos de complejidad kolmogorov , pero el diseño era uno con el que podía trabajar sin demasiados problemas. Runic no tiene buenas formas de comprimir cadenas arbitrarias, por lo que solo tenemos que trabajar con las partes repetitivas.
Explicación:
Descomprimiendo ligeramente:
Las primeras 5 líneas actúan como funciones para construir cada parte de la canción (donde la primera línea genera los 35
-
para el espaciador usando el valor decimal de#
para guardar 2 bytes3X5+
). La instrucción de retorno se encuentra al comienzo de la línea para asegurar que todas las IP que ingresen a una función también salgan después del mismo número de ciclos para evitar la fusión de IP (lo que da como resultado líneas de salida faltantes), ya que los programas son celdas rectangulares y vacías son implícitosLas siguientes cuatro líneas son responsables de imprimir las primeras cuatro líneas de la salida.
La quinta línea imprime las últimas 3 líneas de salida. Debido a que las tres líneas necesitan comenzar con al menos un separador de estrofas, no es factible usar 3 IP separadas (ya que necesitarían retrasos para evitar la fusión).
>
,y
,@
, Y un coste de nueva línea más bytes (4) de0[...]
(3 bytes) donde...
es instrucciones arbitrarias (es decir. Otra línea de salida).Por el contrario, reemplazar
>
y@
usar una sola IP requiere más bytes.Finalmente, la fusión de las cinco líneas de punto de entrada en la segunda línea ahorra 5 bytes de nuevas líneas. Solo tenemos que asegurarnos de que la
B͍
instrucción de retorno de rancho se mueva primero al final de su línea, preservando la funcionalidad de la función.fuente