Mientras intentaba (y fracasaba) haber persuadido a mi pequeño hijo de cenar, intenté cantarle. A mitad de esta canción me di cuenta de que la estructura de la fórmula podría prestarse bien para el golf de código.
La tarea es escribir un programa o función que no acepte entradas y produzca el siguiente texto:
There's a hole in the bottom of the sea
There's a hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a smile on the flea on the fly on the hair on the wart on the frog on the bump on the log in the hole in the bottom of the sea
There's a hole, there's a hole
There's a hole in the bottom of the sea
Reglas de desafío:
- El texto puede imprimirse o devolverse como salida de función
- Cada verso está separado por una sola línea vacía
- El espacio en blanco final está bien siempre que no cambie el diseño (por lo que no hay espacios en blanco iniciales ni espacios adicionales entre palabras)
- Las nuevas líneas finales también están bien.
- No hay nuevas líneas principales.
- Todos los idiomas son bienvenidos, y este es el código de golf , por lo que gana la respuesta más corta en bytes para cada idioma.
gzip -5
comprime a 186 bytes (bzip2
yxz
parece que va peor).Respuestas:
SOGL ,
1039493 bytesPruébalo aquí!
fuente
Stax ,
908775 bytesEjecutar y depurarlo
Desempaquetado, sin golf, y comentó que se ve así.
Ejecute este
fuente
Perl 5,
158154bytes154 bytes
158 bytes
fuente
There's a bottom of the sea
. Los hechos se verifican, +1There's a sea
pero es más largaPython 2 ,
202190187185183182181 bytesPruébalo en línea!
Antiguas alternativas a
'io'['g'in s]
(13 bytes):'oi'[s[5]<'n']
'io'[len(s)>30]
,'ioo'[len(s)%3]
,'ooi'[len(s)%4]
, y'io'[w[1]=='o']
Salvado:
fuente
"hole, t%shole\n"%a[1:]
guarda un byte'oi'[s[5]<'n']
también será una vieja alternativa:'io'['g'in s]
¡ Presentar !C (gcc) ,
261246236 bytes-15 bytes, gracias a Daniel Schepler
-10 bytes, gracias a ceilingcat
Pruébalo en línea!
fuente
,*b="_TH<0$\31\r"
lugar?05AB1E ,
1031009997969392 bytesSalvó un byte gracias a Kevin Cruijssen
Pruébalo en línea!
Explicación
“¥ÊˆŽ bumpÑå‡îtíÁ¤†îÌea¹²“#v
comienza un ciclo sobre la lista["hole", "log", "bump", "frog", "wart", "hair", "fly", "flea", "smile"]
. Las palabras se comprimen usando el diccionario 05AB1E.En cada uno hacemos:
fuente
õ
, porque aparentemente genera una cadena vacía de forma predeterminada cuandos
se utiliza un wap sin nada en la pila . No pude encontrar nada más para jugar al golf; muy buena respuesta!PowerShell ,
194188185180174 bytesPruébalo en línea!
Parece que no puedo atrapar a Python ...Básicamente, establece algunos hilos comunes a
$h
,$a
,$z
, y$b
, a continuación, pasa a través de un bucle a través de cada uno de los elementos (hole
,log
, ...flea
,smile
), la salida de cada iteración el verso apropiado. Hay un poco de lógica!$j++
en el medio para dar cuenta del cambioin
/on
que sucede. De lo contrario, todas las cadenas solo quedan en la tubería, y el valor predeterminadoWrite-Output
nos da nuevas líneas de forma gratuita.-6 bytes gracias a Arnauld.
-3 bytes gracias a mazzy.
-5 bytes gracias a Veskah.
-6 bytes gracias a mazzy.
fuente
-split
bastante para obtener palabras.JavaScript (ES6),
201 194 189 188187 bytesGuardado 1 byte gracias a @Shaggy
Pruébalo en línea!
JavaScript (ES6), 235 bytes
Simplemente RegPack'ed .
Pruébalo en línea!
fuente
Bash,
168160bytes160 bytes
168 bytes
Traducido de mi otra respuesta en Perl.
fuente
Japt
-Rx
,126116113112111109107 bytesResulta que jugar al golf en un desafío de compresión de cuerdas mientras estás en tu teléfono, el boozer es increíblemente difícil, ¿quién habría tocado?
Pruébalo
fuente
XML,
719673603514493486 bytesPuedes "ejecutarlo" con
xmlstarlet sel -t -m '//a' -v . -n <xml_file_here>
.Esto sería mucho más fácil si XML no fuera tan detallado, pero en el lado positivo, esto es menos del 25% del tamaño del texto original.
fuente
Retina 0.8.2 , 150 bytes
Pruébalo en línea! Explicación:
Inserta el último verso.
Calcule todos los versos.
Pon los versos en el orden correcto.
Completa cada verso y agrega el coro.
Expandir algunos marcadores de posición.
fuente
R ,
237231 bytesPruébalo en línea!
fuente
PHP,
180178 bytesEjecutar
-nr
o probarlo en línea .Produce advertencias en PHP 7.2; para arreglarlo, ponga comillas alrededor de
los elementos de la matriz
io
,hole
y los dos independientesT
.fuente
C (gcc) ,
334328307299 bytesPruébalo en línea!
fuente
Perl 6 , 166 bytes
Pruébalo en línea!
fuente
Japt
-R
, 142 bytesPruébalo en línea!
fuente
Lote, 267 bytes
t
contiene una cadena repetida en el coro,s
contiene la mayor parte de la línea del verso, mientras quer
elige entrein the
yon the
. En los versos, solot
se necesitan los primeros 11 caracteres de , mientras que en la primera línea de coro la segunda copiat
tieneT
minúsculas y la segunda línea de coro reutiliza los últimos 25 caracteres des
.fuente
Ruby ,
173170 bytesPruébalo en línea!
fuente
Haskell ,
243215 bytesReducido a 215 bytes con gran ayuda de nimi
Pruébalo en línea!
(La versión anterior de 243 bytes está aquí ).
Una solución bastante sencilla.
fuente
s
solo los usa una vez, por lo que puede incluirlos en línea. b) siempre anteponer y añadir algo quet
, por lo que puede hacer que sea una función (infija):t#u=t:"here's a "++u
. c) la construcción de la lista grande en funciónl
conmap(++" on the ")(words"smile flea ..."
es más corta. Además: mueva todo lo adjunto a esa lista a la lista misma. d) la lista de números para soltar ahora va de8
abajo a0
(¡números de un solo dígito!) e) ahora la alineacióni
también guarda algunos bytes. f) no es necesario nombrar su función principal. De acuerdo con nuestro meta, los valores de Haskell se consideran funciones adecuadas, por lo tanto, elimine elv=
.>>=
(concatMap) de la mónada de la lista y laconcat
función en líneal
. Pruébalo en línea!JavaScript (nodo Babel) , 239 bytes
-7 bytes de @Oliver
*.*
Pruébalo en línea!
fuente
T
en la tercera línea de cada verso debe estar en minúsculas.Python 3 ,
213 206 198193 bytesPruébalo en línea!
-15 bytes gracias a @Sara
-5 bytes gracias a @ ASCII-only
Probablemente un poco más golfable, pero no mucho.
fuente
o=e=
haría ambas cosaso
y see
referiría al mismo objeto. También pensé que la división sería más larga.o
ye
no se refieren al mismo objeto ... es sólo que las cadenas son inmutables en Python así que cosas como+=
van a crear una nueva copia en lugar de la mutación de la existenteLimpio , 267 bytes
Pruébalo en línea!
fuente
cQuents ,
238219 bytesPruébalo en línea!
Este desafío me hizo finalmente implementar listas y cadenas en mi idioma. Este lenguaje está construido para secuencias enteras, por lo que funcionó bastante bien.
Explicación
fuente
Perl 5 , 194 bytes
@ ASCII solo redujo 6 bytes con nuevas líneas literales y un
\l
truco que olvidéPruébalo en línea!
fuente
\l
anterior, pero nunca tuve una razón para usarlo, así que nunca pensé en ello.Carbón ,
115106bytesPruébalo en línea! El enlace es a la versión detallada del código. Editar: ahorré 9 bytes copiando mi código de lote para la última línea del coro. Explicación:
Guarde la cadena
There's a hole
, que se usa dos veces como está, una tercera vez en minúsculas y también una cuarta vez, pero solo los primeros 10 caracteres.Dividir la cuerda
bottom of the seaxhole ixlog ixbump oxfrog oxwart oxhair oxfly oxflea oxsmile o
enx
s.Pase los 9 versos, tome los primeros
i+2
elementos de la matriz, inviértalosn the
, únalos y prefijeThere's a
el resultado.Expande cada línea en un verso duplicando la línea y construyendo el coro. Cada línea del verso se imprime implícitamente en cada línea, y cada verso se separa implícitamente por una línea en blanco.
fuente
V ,
184170 bytesPruébalo en línea!
Explicación:
4iThere's a hole in the bottom of the sea<\n><esc>
Inserte "Hay un agujero en el fondo del mar" 4 veces.kk
Pasar a la tercera líneay5w
copia "Hay un agujero"5eá,
inserte una coma después de "Hay un agujero"lp
pegar después de la comaD
eliminar el resto de la línea5brt
minúscula la segunda THj4yy
copia 4 líneas de la segunda líneaGp
Pega todo después de la primera línea4w8ion the <esc>
(al final del primer verso) pasar al primer "hoyo" en el segundo verso e insertar "en el" 8 veces2briilog <esc>
mover hacia atrás hasta el último "encendido", reemplazar la o con una i y luego insertar "log"3bibump <esc>3bifrog <esc>3biwart <esc>3bihair <esc>3bifly <esc>3biflea <esc>3bismile <esc>
Muévase hacia atrás a través de la línea, insertando las palabras apropiadas entre cada "en el"7ñ4yykp4wd3wñ
ejecutar4yykp4wd3w
7 veces4yykp
duplicar el verso antes de este4wd3w
pasar a la primera palabra después de "Hay un agujero" y eliminar 3 palabras8ñÄ5jñ
duplicar la primera línea de cada verso después del primero (hay 8 de estos para hacer)fuente
/// , 216 bytes
Pruébalo en línea!
Este tipo de tarea es la única cosa en la que /// es razonablemente bueno. : D ¡Hey, el resultado es más corto que C, C # o Java!
La salida de este programa termina en dos saltos de línea finales; Espero que eso no sea un factor decisivo.
De todos modos, no hay inteligencia real aquí. Simplemente identifiqué cadenas repetidas y definí atajos de un carácter para ellas, y repetí hasta que no vi más cadenas repetidas. Hice esto de una manera más o menos ingenua y codiciosa. Sin embargo, definí intencionalmente un atajo para "sonreír en la pulga en el ... mar", seguido de "pulga en la mosca en el ... mar", y así sucesivamente, para formar una cadena de atajos . El resultado es que toda la secuencia de nombres nuevos es claramente visible en el código, y eso me parece bastante agradable. :)
Después de reemplazar V y U, tenemos el siguiente código más legible:
fuente
LaTeX, 265
268caracterescompila en un buen PDF, con sangrías de párrafo y todo
Ungolfed y comentó:
De salida:
fuente
C # (compilador interactivo de Visual C #) , 220 bytes
Pruébalo en línea!
-5 bytes gracias a @ASCIIOnly y -2 bytes gracias a @someone!
Tengo un hijo pequeño y puedo asegurarles que esta canción es a la vez pegadiza y molesta.
fuente
.Any()
->!=""
?in
enforeach
> _>