Bom verbo lá, no título.
Escreva um programa que, com uma string de entrada, "elize" essa string e produza o resultado. A elasticidade de uma sequência é feita da seguinte maneira:
O primeiro caractere é mostrado uma vez. O segundo caractere é mostrado duas vezes. O terceiro caractere é mostrado três vezes, e assim por diante.
Como você pode ver, a quantidade de duplicações de um determinado caractere está relacionada ao índice do personagem, em oposição às ocorrências anteriores na string.
Você pode esperar receber apenas caracteres ASCII imprimíveis. Com base no link a seguir , esses caracteres têm valores decimais 32-126.
Exemplos:
Why: Whhyyy
SKype: SKKyyyppppeeeee
LobbY: LoobbbbbbbYYYYY
(Observe como existem 7 b's desde que o primeiro b é mostrado 3 vezes e o segundo b é mostrado 4 vezes, perfazendo um total de 7 b).
A and B: A aaannnnddddd BBBBBBB
Bytes mais curtos vence :)
Respostas:
Gelatina , 3 bytes
Código:
Explicação:
Usa a codificação Jelly . Experimente online! .
fonte
*
faz multiplicação de strings. Isso não é realmente intencionado, mas funciona.*
? Não existe tal coisa na resposta completa.P
comando Jelly calcula o produto nos bastidores usando o*
operador Python . Esta postagem está abusando da abstração com vazamento do código subjacente que está atualmente no Python, portanto, executar umP
comando (product) em uma string funciona como esperado.J, 4 bytes
Uso
Explicação
fonte
Brainfuck, 15 bytes
Implementação bastante direta, deslocando o espaço da memória em 1 para cada caractere de entrada. Requer um intérprete que fornece 0 no EOF e células de precisão arbitrária de 32 bits para entradas com mais de 255 caracteres.
Experimente online! (Nota: o TIO usa células de 8 bits)
fonte
Java,
158121 bytesEconomizou 37 bytes graças a Kevin Cruijssen !
Como um bônus, este programa pode lidar com todos os caracteres Unicode existentes, incluindo os caracteres de controle localizados no final do Plano Multilíngue Básico .
fonte
for(int C=c+1;C>0;C--)
comfor(int C=c+2;--C>0;)
interface a{static void main(String[]A){int x=0,i;for(char c:A[0].toCharArray())for(i=x+++2;--i>0;)System.out.print(c);}}
interface
para ospublic
métodos padrão . Isso é esperto.Perl, 16 bytes
+1 byte for the
-p
flag.fonte
Haskell, 29 bytes
Usage example:
concat.zipWith replicate[1..] $ "SKype"
->"SKKyyyppppeeeee"
.replicate n c
makes n copies of c andconcat
makes a single list out of all the sublists.fonte
id=<<
is a nice touch. :)f = id=<<zipWith replicate[1..]
(in a file) did result in an ugly error, can you tell what I'm doing wrong?(id=<<zipWith replicate[1..] ) "SKype"
should still work? Otherwise I would consider it as a snippet. The full program you provided does have "SKype" hardcoded.:t
does not regardid=<<zipWith replicate[1..]
as a function (it just throws an error) however(id=<<).zipWith replicate[1..]
is considered as a function. I'd say the first one is just a snipped, that just works if you hardcode the input, but the second one that you just postet is a function (and:t
agrees), would you agree on that?CJam,
987 bytesThanks to jimmy23013 for saving 1 byte.
Test it here.
Explanation
Using the
LobbY
example:fonte
Python, 39 bytes
Test it on Ideone.
fonte
Javascript ES6, 39 bytes
Same length, but more fun:
Snippet demo:
fonte
<pre>
instead of<div>
, that should help.APL (8)
I.e.:
Explanation:
⍴⍵
: length of given vector⍳
: numbers 1..N⍵/⍨
: replicate each element in⍵
N times.fonte
MATLAB, 45 bytes
Explanation: The key is
hankel
, which produces a Hankel matrix of a given vector. From this matrix, we can extract a vector of indices, which defines which character of the string is at which position in the output. E.g.hankel(1:4)
produces following matrix:From this matrix we can extrac the vector
1,2,2,3,3,3,4,4,4,4,4
. This vector allows us to output the first character of the string once, the second one twice e.t.c.fonte
NARS2000, 6 chars = 12 bytes
⍳∘⍴
enumeration of the argument... (indices of its length)/⊙
replicates the elements of...⊢
the unmodified argumentfonte
PowerShell v2+, 36 bytes
Takes input
$args[0]
, explicitly casts it as achar
array, sends that into a loop|%{...}
. Each iteration we take the current letter/character"$_"
and use the*
overloaded operator to concatenate the string pre-incremented$i
times. The result of each loop iteration is encapsulated in parens to form an array and then-join
ed together to form a string. That string is left on the pipeline and output is implicit.Examples
fonte
Brachylog, 13 bytes
This prints the result to
STDOUT
.Explanation
This is a good example of exploiting backtracking to loop.
fonte
MATLAB, 23 bytes
Creates an anonymous function
ans
that can be called usingans('stringtoelacticize')
fonte
repelem
in my (relatively old) version =(repelem
was introduced in R2015aK/Kona, 14 bytes
Usage:
fonte
Perl 6,
22 2019 bytesExplanation:
fonte
VBA, 75 bytes
Call as e.g. a user function in a spreadsheet.
=e(A1)
It truncates if you feed it its own output a few times :-).
fonte
=)
PHP, 68 bytes
fonte
for(;$a=$argv[1][$i++];)echo str_repeat($a,$i);
.Javascript ES6,
4241 bytesExample runs:
fonte
s=>[...s].reduce((a,b,i)=>a+b.repeat(i+1))
s=>[,...s].map((e,i)=>e.repeat(i)).join``
Retina, 22 bytes
Byte count assumes ISO 8859-1 encoding.
Try it online!
Basically, we insert the right amount of
·
as placeholders between the characters (since these extended ASCII characters can't appear in the input), then fill them up with the adjacent character in the second stage.fonte
R,
8350 bytes-23 Thanks to Giuseppe, though he used essentially an entire new method altogether
My original post:
Try it online!
I feel like there's definitely a better way to do this, but with my new knowledge of a few functions in R, this is my approach.
fonte
scan
saves 1 byte!rep
and the argumentcollapse=""
topaste
is shorter, andutf8ToInt
is shorter still! TIOActually, 7 bytes
Try it online!
Explanation:
fonte
Pyth - 5 bytes
1 byte saved thanks to @FryAmTheEggman.
Test Suite.
fonte
Python 3,
4847 bytesThanks to mego for saving a byte with the
-~i
trick.This is mostly self-explanatory. One thing for those not versed in Python: The
*
operator is overloaded to act like Perl'sx
operator, repeating its string argument the number of times specified by its numeric argument. E.g.'foo' * 3 == 'foofoofoo'
fonte
c*-~i
is shorter thanc*(i+1)
.C#, 81 Bytes
fonte
foreach(var a in s)Console.Write(new C(a,1*i++));
using System
or aSystem.
in front of theConsole
.int i=1;
void f(string s){s.Select((c,i)=>{Console.Write(new string(c,i+1));return c;});}
. The need for a (unused) return value is ugly though. Edit: just found similar snippets in other answers further back.MATL, 5 bytes
Try it Online
Explanation
fonte
Python, 40 bytes
fonte
Julia, 34 bytes
Try it online!
fonte
c%n="$c"^n;~s=join([s[r=1:end]...].%r)
, but that's actually longer.split
was the missing piece of the puzzle.TSQL, 97 bytes
Golfed:
Ungolfed:
Try it online
fonte