Há um tempo, havia um desafio sobre a multiplicação de strings. Ele nos mostrou como podemos multiplicar não apenas números, mas também seqüências de caracteres. No entanto, ainda não podemos multiplicar um número por uma sequência corretamente. Houve uma tentativa de fazê-lo, mas isso está obviamente errado. Precisamos consertar isso!
Sua tarefa:
Escreva uma função ou programa que multiplique duas entradas, uma string e um número inteiro. Para (adequadamente) multiplicar uma sequência por um número inteiro, divida-a em caracteres, repita cada caractere um número de vezes igual ao número inteiro e cole os caracteres novamente. Se o número inteiro for negativo, usamos seu valor absoluto na primeira etapa e, em seguida, invertemos a string. Se a entrada for 0, não produza nada (nada multiplicado por 0 é igual a nada).
Entrada:
Uma sequência que consiste apenas em caracteres ASCII imprimíveis e novas linhas e um número inteiro (possível negativo).
Saída:
A sequência multiplicada pelo número inteiro.
Exemplos:
Hello World!, 3 --> HHHeeellllllooo WWWooorrrlllddd!!!
foo, 12 --> ffffffffffffoooooooooooooooooooooooo
String, -3 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 -->
Hello
World!, 2 --> HHeelllloo
WWoorrlldd!!
Pontuação:
Isso é código-golfe , a menor contagem de bytes ganha!
fonte
Respostas:
Gelatina ,
654 bytesExperimente online!
Como funciona
fonte
JavaScript (ES6), 63 bytes
Recebe entrada na sintaxe de currying
(s)(n)
.Casos de teste
Mostrar snippet de código
fonte
reduce
!Python 3 , 44 bytes
Experimente online!
fonte
f(n,*s)
é considerado válidoPython 2 ,
59575046 bytes-2 bytes graças a Anders Kaseorg. -4 bytes graças a Dennis.
Experimente online!
fonte
05AB1E , 10 bytes
Experimente online!
fonte
²0‹i
não é a melhor rota e criar literalmente 0 alternativas.²0‹i
antes e sempre acho que tem que haver algo melhor.Ä.D)øJ¹0‹iR
é o melhor que posso fazer sem copiar você, acho que o seu está otimizado.è
aqui , embora não encontre uma maneira de aplicá-lo neste cenário. Economizaria no máximo 1 byte, se isso.SÂΛ@²Ä×J
, usandoÎ
para pressionar 0 e a entrada funciona se você alterar a ordem. Economiza 1 byte! (Também substituiu o caso, por isso não precisa ser fechado)MATL , 9 bytes
As entradas são: número e sequência.
Cordas com novas linhas são introduzidos usando carvão animal
10
como se segue:['first line' 10 'second line']
.Experimente online! Ou verifique todos os casos de teste .
Explicação
Considere entradas
-3
e'String'
.fonte
Haskell ,
4136 bytesExperimente online!
Exemplo de uso:
f (-3) "abc"
rendimentos"cccbbbaaa"
.Edit: -5 bytes graças ao xnor!
fonte
(<*[1..n])
para((<$[1..n])=<<)
.V ,
29, 23, 18, 17 bytesExperimente online!
Hexdump:
Agradeço a @ nmjcman101 por salvar 6 bytes, o que me incentivou a salvar outros 5!
A revisão original foi bastante terrível, mas agora estou realmente orgulhosa dessa resposta, porque lida com números negativos surpreendentemente bem. (V tem quase nenhum suporte numérico e nenhum número negativo)
Explicação:
Nesse ponto, o buffer fica assim:
É importante não a nova linha à direita, e que o cursor esteja nela.
fonte
0
casos especiais em V foram super úteis.R,
837876 bytesFunção anônima.
Frederic salvou 3 bytes, Giuseppe salvou
24.Explicação:
Testes:
fonte
rep(foo,,,3)
ourep(foo,e=3)
(mesmo tamanho) ;-)a=
. Portanto, usei o valor dea
como argumento para a função reversa sei<0
, tendo o retorno condicional da função (é por isso que eu precisava das aspas). Mas eu também precisava aplicar a função de identidade para oi>=0
caso, então usei o(
que é próximo o suficiente.(
é de fato uma função. R é estranho.(
é semanticamente equivalente à identidadefunction(x)x
05AB1E , 10 bytes
Experimente online!
Explicação
fonte
PHP> = 7.1, 65 bytes
Sandbox do PHP Online
fonte
$n<0
tem o mesmo valor como$n<0?:0
, mas é mais curta 3 bytes :-)Brain-Flak (BrainHack) ,
154152 bytesExperimente online!
Só aqui para dar ao DJMcMayhem alguma competição. ;)
Explicação
Aqui está uma versão modificada da explicação de DJMcMayhem
fonte
J ,
191513 bytesExperimente online!
Explicação
fonte
(#~|)A.~0-@>]
para 13 bytes#~ ::(|.@#~|)
Dyalog APL, 15 bytes
String como argumento à esquerda, número como argumento à direita.
Experimente online!
Quão?
⍺/⍨
- repita a corda|⍵
- abs (número) vezes⌽⍣
- inverter se(⍵<0)
- o número está abaixo de 0fonte
MATLAB, 37 bytes
Isso define uma função anônima com as entradas
s
: string en
: number.Exemplo é executado:
fonte
repelem
existe.repelem
no Octave, por enquanto #Flak cerebral (Haskell) ,
202192 bytesExperimente online!
Esta é provavelmente a pior linguagem possível, mas está pronta. Agradecemos a @Wheatwizard por fornecer o intérprete Haskell, que permite formatos de entrada mistos. Isso seria cerca de 150 bytes a mais sem ele.
Explicação:
fonte
Java (OpenJDK 8),
9998898785 bytesTry it online!
fonte
s[(n<0?-l-~i:i)/n]
i
in the conditions->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]);}
. Another byte can be saved by iterating from -l to 0 instead (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]);}
).Octave, 49 bytes
Try it online!
I will provide an explanation tomorrow.
fonte
Ruby, 59 +1 = 60 bytes
Uses
-n
flag.Try it online!
fonte
eval$_
is shorter than$_.to_i
by 1 byte.String#chars
can also accept a block the same wayString#each_char
can. Finally, reverse the input before processing each character so you can print it directly instead (switching your flag to-n
). All of this combines to become 55+1=56 bytes.Charcoal, 16 bytes
Try it online! Link is to verbose version of code. Explanation:
fonte
CJam, 9 bytes
Try it online!
fonte
Japt, 12 bytes
Try it online!
Explanation
Implicit input of string
U
and integerV
.Map (
®
) each letter ofU
(implicitly) to itself repeated (p
)abs(V)
(Va
) times.Turn the string into an array of chars (
¬
) and reduce (r
) that with..."!+".slice(sign(V))
- this either reduces with+
→a + b
, or with!+
→b + a
.Thanks @Arnauld for the backwards-reduce idea!
fonte
£gY*Vg)pVa
should lead to a shorter solution but my brain has shut down for the holidays so I can't quite figure it out. You may be able to do something with it, though.WendyScript, 46 bytes
Try it online!
Explanation (Ungolfed):
fonte
C89 bytes
I saw Ben Perlin's version and wondered if you couldn't be shorter still and also have a full program; surely,
atoi()
andputchar()
aren't that expensive in terms of bytes? Seems I was right!fonte
Pyth,
1311 bytesTry it!
-2 bytes thanks to @jacoblaw
explanation
old approach, 13 bytes
Try it!
fonte
Python 3, 68 bytes
Try it online!
fonte
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
Explanation
fonte
Mathematica, 89 bytes
input
fonte
Braingolf, 22 bytes
Try it online!
Eeh, not bad.
Takes input as an integer and an array of characters.
Alternatively:
Braingolf, 31 bytes
Try it online!
Takes input as an integer and a string
fonte
C, 109 bytes
Starting with a function declaration that takes an int and a string and produces a string (it seems implied that memory is not preallocated and must be created) it seems that the straight-forward approach is shorter than any attempts at being cleaver that I had tried.
}
fonte