Escriba una función o programa que tome dos palabras como variantes de entrada y salida del popular trabalenguas inglés "¿Cuánta madera arrojaría una marmota si una marmota pudiera arrojar madera?".
La salida usará la primera palabra cuatro veces
- ¿Cuánto
wood
costaría unwood
mandril si unwood
mandril pudiera arrojarsewood
?
y la segunda palabra cuatro veces
- ¿Cuánta madera tendría una madera
chuck
chuck
si una maderachuck
pudierachuck
madera?
con el resto de la salida siendo el mismo para cualquier entrada.
How much
maderawould a
marmotaChuck
if a
marmotacould
Chuckmadera
?
La entrada y la salida pueden estar en cualquier formato que su idioma reconozca razonablemente que trata con cadenas de texto. El resultado debe estar exactamente en el formato indicado, incluyendo mayúsculas, espacios y falta de ellos, y el signo de interrogación final. Una nueva línea final opcional es aceptable.
Idealmente, su código manejará entradas que contengan caracteres ASCII imprimibles. Sin embargo, está permitido restringir la entrada a subconjuntos razonables de ASCII imprimible; solo indica esto en tu respuesta. Por supuesto, manejar conjuntos de caracteres más grandes está bien.
Ejemplo de pares de entrada-salida:
"wood", "chuck"
"How much wood would a woodchuck chuck if a woodchuck could chuck wood?"
"ground", "hog"
"How much ground would a groundhog hog if a groundhog could hog ground?"
"bar", "keep"
"How much bar would a barkeep keep if a barkeep could keep bar?"
"money", "belt"
"How much money would a moneybelt belt if a moneybelt could belt money?"
"rain", "fall"
"How much rain would a rainfall fall if a rainfall could fall rain?"
"hair", "cut"
"How much hair would a haircut cut if a haircut could cut hair?"
"green", "house"
"How much green would a greenhouse house if a greenhouse could house green?"
"jabber", "wock"
"How much jabber would a jabberwock wock if a jabberwock could wock jabber?"
"pine", "apple"
"How much pine would a pineapple apple if a pineapple could apple pine?"
"Rob", "Lowe"
"How much Rob would a RobLowe Lowe if a RobLowe could Lowe Rob?"
"code", "golf"
"How much code would a codegolf golf if a codegolf could golf code?"
"fish", ""
"How much fish would a fish if a fish could fish?"
"", "fish"
"How much would a fish fish if a fish could fish ?"
"", ""
"How much would a if a could ?"
" ", " "
"How much would a if a could ?"
"would a", "how much"
"How much would a would a would ahow much how much if a would ahow much could how much would a?"
Este es el código de golf , por lo que gana menos bytes. Las respuestas son bienvenidas en todos los idiomas, incluso si algún otro idioma puede hacerlo en menos bytes.
(Inspirado por este meme , que usa un par de entrada mejor que este patrón rígido ...)
"", ""
significa no: pRespuestas:
Python 3 ,
7067 bytesPruébalo en línea!
Quiero decir, si el zapato te queda ...
Gracias a manatwork por atrapar un error tipográfico
Gracias a Remco Haszing por la excelente idea de -3 bytes
Estoy huyendo de la suposición de que esto todavía sería una presentación válida (porque, hombre, es demasiado genial para no intentarlo). Si OP pudiera aclarar si esto es aceptable (porque no he escrito una función, per se), eso sería apreciado.
Actualización: Bendición recibida, todo es bueno :)
Versión previa:
fuente
"How much {0} would a {0}{1} {1} if a {1}{0} could {1} {0}?".format
. Esto devuelve una función vinculada a la cadena sin formato.print("How much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?".format("wood","chuck"))
genera el resultado deseado, no veo ninguna razón para no aceptarlo :)T-SQL, 82 bytes
La entrada se toma de la tabla existente con las columnas y , según nuestras reglas de IO .t w C
Un byte más, pero por alguna razón un poco más agradable:
Esta versión funciona en un subconjunto de entradas que no incluyen el númerow
2
en la primera palabra .Como estoy en SQL, puedo precargar todos los ejemplos en la tabla y ejecutarlos todos a la vez:
fuente
select'How much &1 would a &1&2 &2 if a &1&2 could &2 &1?'from dual
Bash , 50 bytes
Pruébalo en línea!
-5 bytes debido a la ayuda de los comentarios a continuación.
fuente
Stax ,
33313029 bytes-1 gracias a recursivo !
¡Ejecútelo y depúrelo en staxlang.xyz!
Empuja cada componente a la pila en orden inverso, luego une todos los espacios.
Desempaquetado (35 bytes) y explicación:
Todo entre `` es un literal de cadena comprimido. Esa coma es vital. La última vez que leí de la pila de entrada, debo hacer estallar en lugar de mirar para evitar una "tirada" adicional al final de mi salida.
Notarás que pongo ambas entradas en la misma línea para algunos casos de prueba, y que están en orden inverso. Esto es necesario para tomar cadenas vacías o cadenas de espacios como entrada.
2726 bytes con restricciones de entrada¡Ejecútelo y depúrelo en staxlang.xyz!
Al igual que SOGL de @ dzaima , esto fallará si la primera entrada contiene la letra minúscula 'y'. Empuja la cadena "¿Cuánto b a a y si a by podría yb?", Luego realiza un par de reemplazos.
fuente
,
que se puede eliminar el líder en su solución de 31 bytes. Lo siguiente+
aparece implícitamente en la pila de entrada, por lo que el comportamiento es idéntico.JavaScript, 70 bytes
¡Aburrido!
Pruébalo en línea!
¡Un poco menos aburrido!
Pruébalo en línea!
fuente
f(a)(b)
) como se puede ver en el TIO. Pero sí, nuestros consensos para permitir funciones curry y creo que estamos cerca de un consenso sobre permitir que una función sea realmente devuelta.SOGL ,
3230 bytesPruébalo aquí!
La primera entrada no puede contener la letra
y
, que parece dejar un subconjunto razonable de ASCII (y unicode) a la izquierda.½ouiīZģ9Ο|ΧyΚ⅞ō÷Jeq(‚7‘
es una cadena comprimida de"how much b would a by y if a by could y b?"
(caracteres elegidos para que las palabras requeridas estén todas en las 512 palabras superiores del diccionario que se comprimen mejor), luegob
se reemplaza con la primera entrada yy
con la segunda.fuente
y -> wood
yn -> chuck
. Una décima parte de un Punto de Dignidad dice que ese es el caso aquí también.b
no está permitido en la primera entrada peroe
está bien en la segunda entrada?e
, ya que de lo contrario se reemplazaría con la segunda entrada en el segundo reemplazoR ,
907776 bytes-13 gracias a Sumner18
-1 gracias a Giuseppe
Pruébalo en línea!
fuente
gsub
para -13 bytes en su lugar. tio.run/…gsub
definitivamente tiene más sentido.pryr
, puede bajarlo a 73 .x
no incluye el carácter2
; falla en este caso ( TIO ).PHP , 72 bytes
Pruébalo en línea!
O:
PHP , 72 bytes
Pruébalo en línea!
Entrada de línea de comando, salida a
STDOUT
.fuente
JavaScript (V8) , 72 bytes
Pruébalo en línea!
La asignación de variables en realidad ahorra 0 bytes, pero pensé que la mantendría solo para hacer esto un poco único.
fuente
ZX Spectrum Basic, 87 bytes
Solo para completar, implementación sencilla:
Al usar la
IF
palabra clave (1 byte) se reduce en 3 bytes, pero se rompe la condición de "misma capitalización":fuente
Óxido , 75 bytes
Pruébalo en línea!
Usando este truco , que le permite omitir el índice de formato una vez por elemento para formatear.
También se usa
print!()
, porque es un byte más corto que construir una cadenaformat!()
y devolverla.fuente
05AB1E ,
37353130 bytes-5 bytes gracias a @Grimy .
Toma una lista de dos elementos:
wood
como primer valor ychuck
como segundo.Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Ver este consejo 05AB1E mío (sección Cómo usar el diccionario? ) Para entender por qué
“Howƒ×1€Þ a ÿ0€¬ a ÿƒˆ01?“
es"How much1 would a ÿ0 if a ÿ could01?"
.fuente
$ù
tipo para guardar el byte adicional, gracias.Applesoft BASIC,
7776 bytesLo anterior puede no parecer BASIC adecuado, pero Applesoft permite algunos atajos cuando se usa la
PRINT
declaración:?
en lugar dePRINT
al ingresar la declaración;
o+
) pueden omitirseSe requiere el número de línea, o la
INPUT
declaración causará un?ILLEGAL DIRECT ERROR
fuente
33 , 78 bytes
Pruébalo en línea!
Toma la entrada como argumentos de línea de comandos.
Bonus: 91 bytes
Pruébalo en línea!
Da una salida que se parece a sí misma cuando se le dan entradas
1bztp
y2bztp
fuente
Kotlin , 59 bytes
Pruébalo en línea!
fuente
PowerShell , 65 bytes
Pruébalo en línea!
Lo único que debe tener en cuenta es que debe escapar del signo de interrogación porque pueden ser partes válidas de un identificador de PowerShell
fuente
VBA, 107 bytes
También debería ejecutarse como VBScript, utilicé dos accesos directos: "ould" se repite y "chuck" nunca aparece sin un espacio adicional.
fuente
a=[A1]:b=[B1&" "]:o="ould ":?"How much "a" w"o"a "a b b"if a "a b"c"o b a"?
. Toma entrada de[A1]
y[B1]
. Tenemos consejos para jugar golf en VBA en los que consideras echar un vistazo.[A]
y[B]
como entradas reduciéndolo a 73. Sin embargo, no entiendo cómo funciona el suyo, no dude en agregar su propia respuesta.C # ,
165148133 bytes¡Gracias a Andrew Baumher por contarme sobre cadenas interpoladas!
EDITAR: La clase completa ahora agregó
EDITAR: Gracias a Kenneth K. por darme algunos consejos para acortarlo
EDITAR: Gracias a Andrew nuevamente por decirme que usar una cadena interpolada es en realidad más largo en este escenario.
fuente
a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?")
void M(string[]a){System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");}
System.Func<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");
System.Action<string>M=a=>System.Console.WriteLine($"How much {a[0]} would a {a[0]}{a[1]} {a[1]} if a {a[0]}{a[1]} could {a[1]} {a[0]}?");
Haskell , 76 bytes
Pruébalo en línea!
Primer intento, así que espero no haber roto ninguna regla.
fuente
Jalea , 39 bytes
Un programa completo que acepta una lista de dos cadenas.
Pruébalo en línea!
... O (también un programa completo que acepta una lista de dos cadenas)
Pruébalo en línea!
fuente
Python 3 , 80 bytes
Pruébalo en línea!
cuando estés en roma, usa el formato str.
Editado con el truco del calamar.
fuente
lambda n:
antes y puede soltar elprint()
.How much ...
lugar dehow much ...
.'how much {0} would a {0}{1} {1} if a {0}{1} could {1} {0}?'.format
.C # (compilador interactivo de Visual C #) ,
6665 bytesPruébalo en línea!
igual que todos los demás, excepto C #. -1 byte usando curt strat a => b => c en lugar de (a, b) => c
fuente
Func<string,string,string>
paraFunc<string,Func<string,string>>
y el cambio(x,y)
ax=>y=>
R , 95 bytes
Pruébalo en línea!
fuente
a
yb
, lo que está prohibido según nuestras reglas de Entrada / Salida predeterminadasstringr
te ahorra algunos.APL (Dyalog Unicode) ,
5659 bytesPruébalo en línea!
Bastante sencillo dfn. Guarda un byte cortando
∊
si se nos permite devolver una matriz de cadenas en lugar de una sola cadena.Se agregaron 3 bytes porque olvidé agregar el signo de interrogación.
fuente
Wolfram Language (Mathematica) , 68 bytes
Pruébalo en línea!
fuente
Jalea ,
4137 bytesPruébalo en línea!
Un programa completo que toma un par de cadenas como argumento e imprime la cadena procesada. Se podría formar un enlace monádico agregando un
F
al final (gracias a @JonathanAllan por señalar esto).Ahora he cambiado a usar "b" y "e" como marcadores de posición, inspirados por la respuesta SOGL de @ dzaima, ¡ así que asegúrese de votar esa también! Esto significa que la primera palabra no puede incluir la letra e.
fuente
Japt
-S
,4439 bytesIntentalo
fuente
Adelante (gforth) , 116 bytes
Pruébalo en línea!
Explicación del Código
fuente
Lua , 82 bytes
Pruébalo en línea!
Programa completo, tome la entrada como argumentos.
Nada especial aquí. Espero que haya una versión más corta, pero no hay formas obvias de acortar esto a primera vista.
fuente
Bash , 58 bytes
Toma datos como argumentos de línea de comando. Pruébalo en línea!
fuente