Hubo un desafío hace un tiempo sobre la multiplicación de cadenas. Nos mostró cómo podemos multiplicar no solo números, sino también cadenas. Sin embargo, todavía no podemos multiplicar un número por una cadena correctamente. Ha habido un intento de hacerlo, pero esto obviamente está mal. ¡Necesitamos arreglar eso!
Tu tarea:
Escriba una función o programa que multiplique dos entradas, una cadena y un número entero. Para (correctamente) multiplicar una cadena por un entero, divida la cadena en caracteres, repita cada carácter varias veces igual al entero y luego vuelva a unir los caracteres. Si el número entero es negativo, usamos su valor absoluto en el primer paso y luego invertimos la cadena. Si la entrada es 0, no genera nada (cualquier cosa multiplicada por 0 es igual a nada)
Entrada:
Una cadena que consiste únicamente en caracteres ASCII imprimibles y líneas nuevas, y un número entero (posiblemente negativo).
Salida:
La cadena multiplicada por el entero.
Ejemplos:
Hello World!, 3 --> HHHeeellllllooo WWWooorrrlllddd!!!
foo, 12 --> ffffffffffffoooooooooooooooooooooooo
String, -3 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 -->
Hello
World!, 2 --> HHeelllloo
WWoorrlldd!!
Tanteo:
Este es el código de golf , ¡el conteo de bytes más bajo gana!
fuente
Respuestas:
Gelatina ,
654 bytesPruébalo en línea!
Cómo funciona
fuente
JavaScript (ES6), 63 bytes
Toma entrada en la sintaxis de curry
(s)(n)
.Casos de prueba
Mostrar fragmento de código
fuente
reduce
!Python 3 , 44 bytes
Pruébalo en línea!
fuente
f(n,*s)
se considera válidaPython 2 ,
59575046 bytes-2 bytes gracias a Anders Kaseorg. -4 bytes gracias a Dennis.
Pruébalo en línea!
fuente
05AB1E , 10 bytes
Pruébalo en línea!
fuente
²0‹i
no es la mejor ruta y, literalmente, tienes 0 alternativas.²0‹i
antes y siempre pienso que tiene que haber algo mejor.Ä.D)øJ¹0‹iR
es lo mejor que puedo hacer sin copiarte, creo que el tuyo está optimizado.è
aquí , aunque no puedo encontrar una manera de aplicarlo en este escenario. Ahorraría un máximo de 1 byte, si eso.SÂΛ@²Ä×J
, usarÎ
para presionar 0 y la entrada funciona si cambia el orden. ¡Ahorra 1 byte! (También reemplazó el if, por lo que no necesita cerrarse)MATL , 9 bytes
Las entradas son: número, luego cadena.
Cuerdas con saltos de línea son de entrada utilizando carbón
10
como sigue:['first line' 10 'second line']
.Pruébalo en línea! O verificar todos los casos de prueba .
Explicación
Considere las entradas
-3
y'String'
.fuente
Haskell ,
4136 bytesPruébalo en línea!
Ejemplo de uso:
f (-3) "abc"
rendimientos"cccbbbaaa"
.Editar: -5 bytes gracias a xnor!
fuente
(<*[1..n])
para((<$[1..n])=<<)
.V ,
29, 23, 18, 17 bytesPruébalo en línea!
Hexdump:
¡Gracias a @ nmjcman101 por guardar 6 bytes, lo que me animó a guardar otros 5!
La revisión original fue bastante terrible, pero ahora estoy realmente orgulloso de esta respuesta porque maneja los números negativos sorprendentemente bien. (V casi no tiene soporte numérico ni soporte para números negativos)
Explicación:
En este punto, el búfer se ve así:
Es importante no la nueva línea final y que el cursor esté sobre ella.
fuente
0
casos especiales en V fueron muy útiles.R,
837876 bytesFunción anónima.
Frederic salvó 3 bytes, Giuseppe salvó
24.Explicación:
Pruebas:
fuente
rep(foo,,,3)
orep(foo,e=3)
(la misma longitud) ;-)a=
. Por lo tanto, utilicé el valor dea
como argumento para la función inversa sii<0
, al hacer que el condicional devuelva la función (por eso necesitaba las comillas inversas). Pero también necesitaba aplicar la función de identidad para eli>=0
caso, así que usé lo(
que está lo suficientemente cerca.(
De hecho es una función. R es raro(
es semánticamente equivalente a la identidadfunction(x)x
05AB1E , 10 bytes
Pruébalo en línea!
Explicación
fuente
PHP> = 7.1, 65 bytes
PHP Sandbox en línea
fuente
$n<0
tiene el mismo valor$n<0?:0
pero es 3 bytes más corto :-)Brain-Flak (BrainHack) ,
154152 bytesPruébalo en línea!
Solo aquí para darle competencia a DJMcMayhem. ;)
Explicación
Aquí hay una versión modificada de la explicación de DJMcMayhem
fuente
J ,
191513 bytesPruébalo en línea!
Explicación
fuente
(#~|)A.~0-@>]
para 13 bytes#~ ::(|.@#~|)
Dyalog APL, 15 bytes
Cadena como argumento izquierdo, número como argumento derecho.
Pruébalo en línea!
¿Cómo?
⍺/⍨
- repite la cuerda|⍵
- abs (número) veces⌽⍣
- invertir si(⍵<0)
- el número está por debajo de 0fuente
MATLAB, 37 bytes
Esto define una función anónima con entradas
s
: cadena yn
: número.Ejecuciones de ejemplo:
fuente
repelem
existerepelem
en Octave, por ahoraBrain-Flak (Haskell) ,
202192 bytesPruébalo en línea!
Este es probablemente el peor lenguaje posible para hacerlo, pero está hecho. Gracias a @Wheatwizard por proporcionar el intérprete Haskell, que permite formatos de entrada mixtos. Esto sería aproximadamente 150 bytes más sin él.
Explicación:
fuente
Java (OpenJDK 8) ,
9998898785 bytesPruébalo en línea!
fuente
s[(n<0?-l-~i:i)/n]
i
la condicións->n->{for(int l=s.length*(n<0?-n:n),i=0;i++<l;)System.out.print(s[(n<0?i-l:i-1)/n]);}
. Se puede guardar otro byte iterando de -l a 0 en su lugar (s->n->{for(int i=s.length*(n<0?n:-n),r=n<0?0:~i;i++<0;)System.out.print(s[(i+r)/n]);}
).Octava , 49 bytes
Pruébalo en línea!
Proporcionaré una explicación mañana.
fuente
Ruby , 59 +1 = 60 bytes
Utiliza
-n
bandera.Pruébalo en línea!
fuente
eval$_
es más corto que$_.to_i
en 1 byte.String#chars
También puede aceptar un bloque de la misma manera queString#each_char
puede. Finalmente, invierta la entrada antes de procesar cada carácter para que pueda imprimirlo directamente en su lugar (cambiando su bandera a-n
). Todo esto se combina para convertirse en 55 + 1 = 56 bytes.Carbón , 16 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
CJam , 9 bytes
Pruébalo en línea!
fuente
Japt , 12 bytes
Pruébalo en línea!
Explicación
Entrada implícita de cadena
U
y enteroV
.Asigne (
®
) cada letra deU
(implícitamente) a sí misma repetida (p
)abs(V)
(Va
) veces.Convierta la cadena en una matriz de caracteres (
¬
) y reduzca (r
) eso con ..."!+".slice(sign(V))
- esto se reduce con+
→a + b
o con!+
→b + a
.¡Gracias @Arnauld por la idea de reducir hacia atrás!
fuente
£gY*Vg)pVa
debería conducir a una solución más corta, pero mi cerebro se ha apagado durante las vacaciones, así que no puedo entenderlo. Sin embargo, es posible que pueda hacer algo con él.WendyScript , 46 bytes
Pruébalo en línea!
Explicación (sin golf):
fuente
C89 bytes
Vi la versión de Ben Perlin y me pregunté si aún no podía ser más corto y tener un programa completo; seguramente,
atoi()
yputchar()
no son tan caros en términos de bytes? Parece que tenía razón!fuente
Pyth,
1311 bytes¡Intentalo!
-2 bytes gracias a @jacoblaw
explicación
enfoque antiguo, 13 bytes
¡Intentalo!
fuente
Python 3 , 68 bytes
Pruébalo en línea!
fuente
If the integer is negative, we use its absolute value in the first step, and then reverse the string.
)
n<0 else
=>n<0else
QBIC , 32 bytes
Explicación
fuente
Mathematica, 89 bytes
entrada
fuente
Braingolf , 22 bytes
Pruébalo en línea!
Eeh, no está mal.
Toma la entrada como un entero y una matriz de caracteres.
Alternativamente:
Braingolf , 31 bytes
Pruébalo en línea!
Toma la entrada como un entero y una cadena
fuente
C, 109 bytes
Comenzando con una declaración de función que toma un int y una cadena y produce una cadena (parece implicado que la memoria no está preasignada y debe crearse) parece que el enfoque directo es más corto que cualquier intento de ser más inteligente que había intentado .
}
fuente