Beau verbe là-bas, dans le titre.
Ecrivez un programme qui donne une chaîne d'entrée, "élastiquera" cette chaîne et affichera le résultat. L'élasticisation d'une chaîne se fait comme suit:
Le premier caractère est montré une fois. Le deuxième caractère est montré deux fois. Le troisième caractère est montré trois fois, et ainsi de suite.
Comme vous pouvez le constater, le nombre de duplications d'un caractère donné est lié à l'index du caractère par opposition à ses occurrences précédentes dans la chaîne.
Vous pouvez vous attendre à recevoir uniquement des caractères ASCII imprimables. Basé sur le lien suivant , ces caractères ont des valeurs décimales 32-126.
Exemples:
Why: Whhyyy
SKype: SKKyyyppppeeeee
LobbY: LoobbbbbbbYYYYY
(Notez comme il y a 7 b puisque le premier b est affiché 3 fois et le second b 4 fois, ce qui donne un total de 7 b).
A and B: A aaannnnddddd BBBBBBB
Les octets les plus courts gagnent :)
Réponses:
Gelée , 3 octets
Code:
Explication:
Utilise le codage Jelly . Essayez-le en ligne! .
la source
*
effectue la multiplication de chaînes. Ce n'est pas vraiment prévu, mais ça marche.*
? Il n'y a pas une telle chose dans toute la réponse.P
commande Jelly calcule le produit en coulisse à l'aide de l'*
opérateur Python . Cet article abuse de l'abstraction perméable du code sous-jacent se trouvant réellement en Python. UneP
commande (produit) sur une chaîne fonctionne comme prévu.J, 4 octets
Usage
Explication
la source
Brainfuck, 15 octets
Une implémentation assez simple, en décalant l'espace mémoire de 1 pour chaque caractère en entrée. Requiert un interpréteur donnant 0 sur EOF et des cellules de précision 32 bits / arbitraires pour les entrées de plus de 255 caractères.
Essayez-le en ligne! (Remarque: TIO utilise des cellules de 8 bits)
la source
Java,
158121 octetsJ'ai sauvé 37 octets grâce à Kevin Cruijssen !
En prime, ce programme peut gérer tous les caractères Unicode de l’existence, y compris les caractères de contrôle situés tout à la fin du plan multilingue de base .
la source
for(int C=c+1;C>0;C--)
parfor(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
pour lespublic
méthodes par défaut . C'est intelligent.Perl, 16 octets
+1 octet pour le
-p
drapeau.la source
Haskell, 29 octets
Exemple d'utilisation:
concat.zipWith replicate[1..] $ "SKype"
->"SKKyyyppppeeeee"
.replicate n c
crée n copies de c etconcat
crée une liste unique de toutes les sous-listes.la source
id=<<
C'est une bonne idée. :)f = id=<<zipWith replicate[1..]
(dans un fichier) a entraîné une erreur laide, pouvez-vous dire ce que je fais mal?(id=<<zipWith replicate[1..] ) "SKype"
devrait toujours fonctionner? Sinon, je considérerais cela comme un extrait . Le programme complet que vous avez fourni n’a pas de code "SKype".:t
ne considère pasid=<<zipWith replicate[1..]
comme une fonction (une erreur(id=<<).zipWith replicate[1..]
est simplement générée) mais est considéré comme une fonction. Je dirais que le premier est juste un extrait, qui fonctionne si vous codez en dur l'entrée, mais le second que vous venez de postet est une fonction (et est d':t
accord), êtes-vous d'accord avec cela?CJam,
987 octetsMerci à jimmy23013 pour avoir économisé 1 octet.
Testez-le ici.
Explication
En utilisant l'
LobbY
exemple:la source
Python, 39 octets
Testez-le sur Ideone .
la source
Javascript ES6, 39 octets
Même longueur, mais plus amusant:
Snippet démo:
la source
<pre>
place de<div>
, cela devrait aider.APL (8)
C'est à dire:
Explication:
⍴⍵
: longueur du vecteur donné⍳
: numéros 1..N⍵/⍨
: réplique chaque élément en⍵
N fois.la source
MATLAB, 45 octets
Explication: La clé est
hankel
, qui produit une matrice de Hankel d'un vecteur donné. De cette matrice, nous pouvons extraire un vecteur d’index, qui définit quel caractère de la chaîne se trouve à quelle position dans la sortie. Par exemple,hankel(1:4)
produit la matrice suivante:De cette matrice, nous pouvons extraire le vecteur
1,2,2,3,3,3,4,4,4,4,4
. Ce vecteur nous permet de sortir le premier caractère de la chaîne une fois , le deuxième deux fois, etc.la source
NARS2000 , 6 caractères = 12 octets
⍳∘⍴
l'énumération de l'argument ... (indices de sa longueur)/⊙
reproduit les éléments de ...⊢
l'argument non modifiéla source
PowerShell v2 +, 36 octets
Prend input
$args[0]
, le convertit explicitement enchar
tableau, l’envoie dans une boucle|%{...}
. À chaque itération, nous prenons la lettre / le caractère actuel"$_"
et utilisons l'*
opérateur surchargé pour concaténer les temps pré-incrémentés de chaîne$i
. Le résultat de chaque itération de boucle est encapsulé dans des parenthèses pour former un tableau, puis-join
édité ensemble pour former une chaîne. Cette chaîne est laissée sur le pipeline et la sortie est implicite.Exemples
la source
Brachylog, 13 bytes
This prints the result to
STDOUT
.Explanation
This is a good example of exploiting backtracking to loop.
la source
MATLAB, 23 bytes
Creates an anonymous function
ans
that can be called usingans('stringtoelacticize')
la source
repelem
in my (relatively old) version =(repelem
was introduced in R2015aK/Kona, 14 bytes
Usage:
la source
Perl 6,
22 2019 bytesExplanation:
la source
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 :-).
la source
=)
PHP, 68 bytes
la source
for(;$a=$argv[1][$i++];)echo str_repeat($a,$i);
.Javascript ES6,
4241 bytesExample runs:
la source
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.la source
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.
la source
scan
saves 1 byte!rep
and the argumentcollapse=""
topaste
is shorter, andutf8ToInt
is shorter still! TIOActually, 7 bytes
Try it online!
Explanation:
la source
Pyth - 5 bytes
1 byte saved thanks to @FryAmTheEggman.
Test Suite.
la source
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'
la source
c*-~i
is shorter thanc*(i+1)
.C#, 81 Bytes
la source
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
la source
Python, 40 bytes
la source
Julia, 34 bytes
Try it online!
la source
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
la source