Esto se inspiró en una función que agregué recientemente a mi lenguaje Add ++ . Por lo tanto, enviaré una respuesta corta en Add ++ pero no la aceptaré si gana (no sería justo)
¿No odias cuando puedes multiplicar números pero no cadenas? Entonces deberías corregir eso, ¿verdad?
Debe escribir una función o programa completo que tome dos cadenas no vacías como entrada y salida de su versión multiplicada.
¿Cómo multiplicas las cuerdas? ¡Te diré!
Para multiplicar dos cadenas, toma dos cadenas y compara cada personaje. El carácter con el punto de código más alto se agrega a la salida. Si son iguales, simplemente agregue el carácter a la salida.
No se garantiza que las cadenas tengan la misma longitud. Si las longitudes son diferentes, la longitud de la cadena final es la longitud de la cadena más corta. La entrada siempre estará en minúscula y puede contener cualquier carácter en el rango ASCII imprimible (0x20 - 0x7E
), excluyendo letras mayúsculas.
Puede generar en cualquier formato razonable, como cadena, lista, etc. Sea sensato, los enteros no son una forma sensata de generar en este desafío.
Con entradas de hello,
y world!
, así es como funciona
hello,
world!
w > h so "w" is added ("w")
o > e so "o" is added ("wo")
r > l so "r" is added ("wor")
l = l so "l" is added ("worl")
d < o so "o" is added ("worlo")
! < , so "," is added ("worlo,")
¡Entonces el resultado final para hello,
y world!
sería worlo,
!
Más casos de prueba
(sin pasos)
input1
input2 => output
programming puzzles & code golf!?
not yet graduated, needs a rehaul => prtgyetmirgduuzzlesneedsde rolful
king
object => oing
blended
bold => boln
lab0ur win.
the "super bowl" => the0usuwir.
donald j.
trumfefe! => trumlefj.
Este es un código de golf, ¡el código más corto gana! Luok!
Respuestas:
Haskell, 11 bytes
Pruébalo en línea!
No hay mucho que explicar.
fuente
zipWith
no es demasiado extraño. Es una primitiva funcional bastante común. La idea de "comprimir" dos listas juntas surge en muchos problemas, y una vez que lo hace, a menudo desea aplicar alguna función a los elementos de 2 elementos resultantes, de ahí la parte "con".05AB1E , 4 bytes
Utiliza la codificación 05AB1E . Pruébalo en línea!
fuente
ø€à
debería funcionar, pero no es así.Perl 6 , 22 bytes
Como beneficio adicional, acepta cualquier número de multiplicandos, no solo dos.
fuente
Japt , 16 bytes
¡Pruébelo en línea! Toma la entrada como una matriz de dos cadenas.
La falta de incorporaciones mínimas y máximas lastimó a Japt aquí, pero aún logra lograr una puntuación algo decente ...
Explicación
fuente
Jalea , 5 bytes
Pruébalo en línea!
Cómo funciona
Ejemplo
Deje s = mezclado y t = negrita .
ż
rendimientos["bb", "lo", "el", "nd", 'd', 'e', 'd']
. Los últimos tres elementos son personajes.«
es el vectorizante, mínimo diádico, por lo que rinde['b', 'l', 'e', 'd', 'd', 'e', 'd']
.œ-"
quita exactamente una ocurrencia de la n º carácter en la segunda matriz a partir de la n º cadena / carácter en la primera matriz, produciendo["b", "o", "l", "n", "", "", ""]
.œ-
es el átomo de resta de múltiples conjuntos, y el rápido"
hace que se vectorice.Cuando se imprime, esto simplemente lee boln .
fuente
PHP> = 7.1, 52 bytes
PHP Sandbox en línea
PHP> = 7.1, 69 bytes
PHP Sandbox en línea
PHP> = 7.1, 70 bytes
PHP Sandbox en línea
fuente
for(;$t=min(~$argv[1][$i],~$argv[2][$i++]);)echo~$t;
.Alice , 8 bytes
Pruébalo en línea!
Explicación
Alice también tiene este operador (al que llamé superponer ) pero no limita la salida a la longitud de la cadena más corta (en cambio, se añaden los caracteres restantes de la cadena más larga). Sin embargo, también tiene un operador para truncar la más larga de dos cadenas a la longitud de la más corta.
fuente
Retina , 28 bytes
Pruébalo en línea!
Explicación
El
{
le dice a Retina que ejecute todo el programa en un bucle hasta que no pueda cambiar la cadena de trabajo.O
lo convierte en una etapa de clasificación que clasifica las líneas no vacías de forma predeterminada La^
opción invierte el resultado. Entonces, en efecto, obtenemos un tipo inverso de las dos líneas si no están vacías, colocando la línea con el carácter principal más grande en la parte superior.Deseche las líneas vacías si las hay.
Si solo queda una línea, una de las líneas estaba vacía, y también eliminamos la otra para detener el proceso.
Mucha configuración pasando aquí. Esto coincide (
M
) el primer carácter de la cadena de trabajo (^.
), lo devuelve (!
), lo imprime sin un salto de línea final (\
) y luego revierte la cadena de trabajo a su valor anterior (*
). En otras palabras, simplemente imprimimos el primer carácter de la cadena de trabajo (que es el carácter principal máximo) sin cambiar realmente la cadena.Finalmente, eliminamos el primer carácter de cada línea, de modo que la siguiente iteración procese el siguiente carácter.
fuente
G`.
es necesario, aunque esto genera una nueva línea adicional que puede eliminar mediante el uso^.+¶$
o el prefijo\
a al comienzo de la respuesta.\
).C, 58 bytes
Probar en línea
fuente
f(s,t)char*s,*t;{
da la misma longitud.JavaScript (ES6),
4745 bytesConvenientemente
c>b[i]
devuelve falso pasado el final deb
. Editar: Guardado 2 bytes gracias a @ETHproductions.fuente
Jalea , 6 bytes
Pruébalo en línea!
fuente
żṢ€Ḋ€
yżṢ€ZṪ
ambos guardan un byte.Mathematica, 78 bytes
Ya hay otra respuesta en Mathematica . Esta respuesta toma la entrada como una lista de cadenas, por lo que
/@
se puede usar en#
lugar de{##}
. Y podemos simplementeMap
el nombre largo de la función en el objeto en lugar de asignarlo a las variables. (de hecho, cada nombre de símbolo incorporado de Mathematica se usa como máximo una vez en la función)fuente
Java 8,
12412011763 bytes-4 bytes gracias a @ Khaled.K .
-3 bytes gracias a @Jakob .
Las entradas son dos matrices de caracteres, y se detiene con un
ArrayIndexOutOfBoundsException
.Explicación:
Pruébalo aquí.
fuente
C #,
8178 bytesC # está implícito
char
en laint
conversión (porque achar
es realmente una parteint
inferior) lo cual es bueno, y en lugar de buscar la cadena más corta, simplemente intente hasta el fallofuente
a=>b=>
compilando en aFunc<string, Func<string, string>>
. Puede quitar las llaves alrededor del bucle for para guardar 2 bytes.C# has implicit char to int conversion
es cierto porque achar
es una parteint
inferior.sizeof(int) == 4
perosizeof(char) == 2
.MATL , 8 bytes
La entrada es una matriz de celdas de cadenas, en el formato
{'abcd' 'efg'}
Pruébalo en línea!
Por otro lado, esto también funciona para más de dos cadenas .
Explicación
Considere la entrada
{'blended' 'bold'}
. La pila se muestra al revés, con elementos más recientes a continuación.fuente
R, 103 bytes
Código:
Casos de prueba:
fuente
Pitón 2 ,
474434 bytes-3 bytes gracias a musicman523. -10 bytes gracias a Blender.
Toma la entrada como una lista de cadenas.
Pruébalo en línea!
fuente
V ,
28, 24, 21 bytesPruébalo en línea!
Hexdump:
¡Tres bytes guardados gracias a @ nmjcman101!
Explicación:
fuente
dG
necesario? ¿No se eliminan todas las líneas nuevas deÍî
todos modos?CJam , 12 bytes
La entrada es una lista de dos cadenas. El programa sale con un error (después de producir la salida correcta) si las dos cadenas tienen longitudes diferentes.
Pruébalo en línea!
Explicación
fuente
Clojure, 31 bytes
Yay para la composición de funciones :) Devuelve una secuencia de caracteres en lugar de una cadena, pero en su mayoría funcionan de la misma manera en Clojure, excepto cuando se imprime o coincide con expresiones regulares.
Lamentablemente
max
no funciona con personajes.fuente
max
no funciona, pero lomax-key
hace.#(map(partial max-key int)% %2)
Sin embargo, es exactamente el mismo recuento de bytes.(ffirst (sort-by second ...)
.Javascript (ES2015),
666349 bytesExplicación:
Versión anterior:
fuente
Retina ,
5536 bytesPruébalo en línea! Explicación: una línea tiene el prefijo para contener el resultado. Si bien ambas cadenas aún tienen caracteres restantes, las entradas se ordenan y el carácter principal con el punto de código más alto se mueve al resultado mientras que el otro carácter principal se elimina. Finalmente se imprime el resultado.
fuente
Cáscara , 2 bytes
Pruébalo en línea!
"Ungolfed" / Explicado
Hace uso de
zip f
eso trunca la lista más corta de modo que siempre hay dos argumentos paraf
, por ejemplozip f [1,2] [3,4,5] == zip f [1,2] [3,4] == [f 1 3, f 2 4]
:fuente
Kotlin,
504137 bytes-9 bytes con sintaxis de referencia de función -4 bytes con función de extensión
Si s y x están dentro del alcance y no están en una función, este método tiene solo 16 bytes
Manifestación
fuente
PowerShell, 75 bytes
Guardar como archivo .ps1 y ejecutar
Anteriormente, 78 bytes:
fuente
J, 25 bytes
explicación
la mitad de los bytes se destinan a la resolución, asegurando que ambas entradas tengan una longitud de entrada más corta (me encantaría ver una mejora en esta parte, si alguien tiene una):
<.&#
es el mínimo de las dos longitudes, y{."1,:
toma esa cantidad de caracteres de ambas filas de la tabla de 2 filas que consiste en la cadena izquierda apilada encima de la derecha.Use el verbo Under
&.
para convertir cada carácter a su índice ascii, tome el máximo de los dos números y luego vuelva a convertirlos en caracteres.Pruébalo en línea!
fuente
[:>./&.(3&u:)<.&#$&>;
u:
fue un TIL para mí.Colecciones de Java 8 + Eclipse,
7064 bytesa
yb
ambos sonMutableList<Character>
de colecciones de eclipse.fuente
Añadir ++ , 8 bytes
Pruébalo en línea!
En las versiones 0.4 a 1.11, los
^
exponentes dos números o "multiplican" dos cadenas, dependiendo del tipo de argumentos.fuente
Mathematica, 102 bytes
entrada
fuente
L@a~Min~L@b
ahorra un byteAPL (Dyalog) , 22 bytes
Toma dos (o más) cadenas como argumento correcto.
Pruébalo en línea!
{
una función anónima donde el argumento correcto está representado por ⍵⎕UCS
los símbolos de U nicode C haracter S et que corresponden a la⌈⌿
valor máximo en cada columna de⎕UCS
los puntos de código de U nicode C haracter S et para el↑
Matrified (matriz de la lista de cadenas)⍵
argumentos↑¨⍨
cada uno tapado en el⌊/
mínimo de≢¨
las longitudes⍵
de los argumentos}
fuente