Nettes Verb dort, im Titel.
Schreiben Sie ein Programm, das eine Eingabezeichenfolge angibt, diese Zeichenfolge "elastifiziert" und das Ergebnis ausgibt. Das Elastifizieren eines Strings geschieht wie folgt:
Das erste Zeichen wird einmal angezeigt. Das zweite Zeichen wird zweimal angezeigt. Das dritte Zeichen wird dreimal angezeigt und so weiter.
Wie Sie sehen, hängt die Anzahl der Duplikationen eines bestimmten Zeichens vom Index des Zeichens ab, im Gegensatz zu den vorherigen Vorkommen in der Zeichenfolge.
Sie können nur druckbare ASCII-Zeichen erwarten. Basierend auf dem folgenden Link haben diese Zeichen Dezimalwerte 32-126.
Beispiele:
Why: Whhyyy
SKype: SKKyyyppppeeeee
LobbY: LoobbbbbbbYYYYY
(Beachten Sie, wie es 7 B gibt, da das erste B 3-mal und das zweite B 4-mal angezeigt wird, was insgesamt 7 B ergibt.)
A and B: A aaannnnddddd BBBBBBB
Kürzeste Bytes gewinnt :)
Antworten:
Gelee , 3 Bytes
Code:
Erläuterung:
Verwendet die Jelly-Codierung . Probieren Sie es online! .
quelle
*
String-Multiplikation macht. Das ist nicht wirklich beabsichtigt, aber es funktioniert.*
? In der ganzen Antwort gibt es so etwas nicht.P
Befehl Jelly berechnet das Produkt im Hintergrund mithilfe des Python-*
Operators. In diesem Beitrag wird die undichte Abstraktion des zugrunde liegenden Codes missbraucht, der sich tatsächlich in Python befindet. DaherP
funktioniert das Ausführen eines (Produkt-) Befehls für einen String wie erwartet.J, 4 Bytes
Verwendung
Erläuterung
quelle
Brainfuck, 15 Bytes
Ziemlich unkomplizierte Implementierung, bei der der Speicherplatz für jedes Eingabezeichen um 1 verschoben wird. Erfordert einen Interpreter, der bei EOF 0 und bei Eingaben mit mehr als 255 Zeichen Zellen mit 32 Bit / willkürlicher Genauigkeit liefert.
Probieren Sie es online! (Hinweis: TIO verwendet 8-Bit-Zellen.)
quelle
Java,
158121 BytesDank Kevin Cruijssen konnten satte 37 Bytes gespart werden !
Als Bonus kann dieses Programm alle vorhandenen Unicode-Zeichen verarbeiten, einschließlich der Steuerzeichen ganz am Ende von Basic Multilingual Plane .
quelle
for(int C=c+1;C>0;C--)
mitfor(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
für die Standardmethodenpublic
. Das ist Schlau.Perl, 16 Bytes
+1 Byte für das
-p
Flag.quelle
Haskell, 29 Bytes
Anwendungsbeispiel:
concat.zipWith replicate[1..] $ "SKype"
->"SKKyyyppppeeeee"
.replicate n c
erstellt n Kopien von c und erstelltconcat
aus allen Unterlisten eine einzige Liste.quelle
id=<<
ist eine nette Geste. :)f = id=<<zipWith replicate[1..]
(in einer Datei) führte zu einem hässlichen Fehler. Können Sie sagen, was ich falsch mache?(id=<<zipWith replicate[1..] ) "SKype"
sollte das dann noch funktionieren? Ansonsten würde ich es als Schnipsel betrachten . Das vollständige Programm, das Sie bereitgestellt haben, ist mit "SKype" fest codiert.:t
wird nichtid=<<zipWith replicate[1..]
als Funktion betrachtet (es wirft nur einen Fehler aus), sondern(id=<<).zipWith replicate[1..]
wird als Funktion betrachtet. Ich würde sagen, das erste ist nur ein Ausschnitt, das funktioniert nur, wenn Sie die Eingabe fest codieren, aber das zweite, das Sie gerade veröffentlichen, ist eine Funktion (und:t
stimmt zu), würden Sie dem zustimmen?CJam,
987 BytesDanke an jimmy23013 für das Speichern von 1 Byte.
Teste es hier.
Erläuterung
Mit dem
LobbY
Beispiel:quelle
Python, 39 Bytes
Teste es auf Ideone .
quelle
Javascript ES6, 39 Bytes
Gleiche Länge, aber mehr Spaß:
Snippet-Demo:
quelle
<pre>
anstatt<div>
, das helfen soll.APL (8)
Dh:
Erläuterung:
⍴⍵
: Länge des angegebenen Vektors⍳
: Zahlen 1..N⍵/⍨
: repliziere jedes Element in⍵
N-mal.quelle
MATLAB, 45 Bytes
Erklärung: Der Schlüssel ist
hankel
, der eine Hankelmatrix eines gegebenen Vektors erzeugt. Aus dieser Matrix können wir einen Vektor von Indizes extrahieren, der definiert, welches Zeichen des Strings an welcher Position in der Ausgabe steht. ZBhankel(1:4)
erzeugt folgende Matrix:Aus dieser Matrix können wir den Vektor extrahieren
1,2,2,3,3,3,4,4,4,4,4
. Mit diesem Vektor können wir das erste Zeichen der Zeichenkette einmal , das zweite zweimal usw. Ausgebenquelle
NARS2000 , 6 Zeichen = 12 Byte
⍳∘⍴
Die Aufzählung des Arguments ... (Indizes seiner Länge)/⊙
repliziert die Elemente des ...⊢
unveränderten Argumentsquelle
PowerShell v2 +, 36 Byte
Nimmt Eingaben auf
$args[0]
, wandelt sie explizit in einchar
Array um und sendet sie in eine Schleife|%{...}
. Bei jeder Iteration nehmen wir den aktuellen Buchstaben / das aktuelle Zeichen"$_"
und verwenden den*
überladenen Operator, um die vorab inkrementierten$i
Zeiten der Zeichenfolge zu verketten . Das Ergebnis jeder Schleifeniteration wird in Parens eingekapselt, um ein Array zu bilden, und dann-join
zu einem String zusammengefasst. Diese Zeichenfolge verbleibt in der Pipeline und die Ausgabe ist implizit.Beispiele
quelle
Brachylog , 13 Bytes
Dies druckt das Ergebnis nach
STDOUT
.Erläuterung
Dies ist ein gutes Beispiel für die Nutzung von Backtracking to Loop.
quelle
MATLAB, 23 Bytes
Erstellt eine anonyme Funktion
ans
, die mit aufgerufen werden kannans('stringtoelacticize')
quelle
repelem
in meiner (relativ alten) Version nicht finden = (repelem
wurde in R2015aK / Kona , 14 Bytes
Verwendung:
quelle
Perl 6 ,
22 2019 BytesErläuterung:
quelle
VBA, 75 Bytes
Rufen Sie zB eine Benutzerfunktion in einer Tabelle auf.
= e (A1)
Es schneidet ab, wenn Sie ein paar Mal seine eigene Ausgabe einspeisen :-).
quelle
=)
PHP, 68 Bytes
quelle
for(;$a=$argv[1][$i++];)echo str_repeat($a,$i);
.Javascript ES6,
4241 BytesBeispiel läuft:
quelle
s=>[...s].reduce((a,b,i)=>a+b.repeat(i+1))
s=>[,...s].map((e,i)=>e.repeat(i)).join``
Netzhaut , 22 Bytes
Die Anzahl der Bytes setzt die Kodierung nach ISO 8859-1 voraus.
Probieren Sie es online!
Grundsätzlich fügen wir die richtige Anzahl von
·
Platzhaltern zwischen die Zeichen ein (da diese erweiterten ASCII-Zeichen nicht in der Eingabe erscheinen können) und füllen sie dann in der zweiten Stufe mit dem benachbarten Zeichen auf.quelle
R ,
8350 Bytes-23 Dank an Giuseppe, obwohl er im Wesentlichen eine völlig neue Methode angewendet hat
Mein ursprünglicher Beitrag:
Probieren Sie es online!
Ich glaube, es gibt definitiv einen besseren Weg, dies zu tun, aber mit meinen neuen Kenntnissen einiger Funktionen in R ist dies mein Ansatz.
quelle
scan
spart 1 Byte!rep
und des Argumentscollapse=""
topaste
ist jedoch kürzer undutf8ToInt
noch kürzer! TIOEigentlich 7 Bytes
Probieren Sie es online!
Erläuterung:
quelle
Pyth - 5 Bytes
1 Byte gespart dank @FryAmTheEggman.
Test Suite .
quelle
Python 3,
4847 BytesDanke an mego für das Speichern eines Bytes mit dem
-~i
Trick.Dies ist weitgehend selbsterklärend. Eine Sache für diejenigen, die sich mit Python nicht auskennen: Der
*
Operator ist überladen, um sich wie Perlsx
Operator zu verhalten, und wiederholt sein Zeichenfolgenargument so oft, wie es durch sein numerisches Argument angegeben ist. Z.B'foo' * 3 == 'foofoofoo'
quelle
c*-~i
ist kürzer alsc*(i+1)
.81 Bytes
quelle
foreach(var a in s)Console.Write(new C(a,1*i++));
using System
oder einSystem.
vor dem vermissenConsole
.int i=1;
void f(string s){s.Select((c,i)=>{Console.Write(new string(c,i+1));return c;});}
. Die Notwendigkeit für einen (nicht verwendeten) Rückgabewert ist jedoch hässlich. Bearbeiten: habe gerade ähnliche Schnipsel in anderen Antworten weiter hinten gefunden.MATL, 5 Bytes
Probieren Sie es online
Erläuterung
quelle
Python, 40 Bytes
quelle
Julia, 34 Bytes
Probieren Sie es online!
quelle
c%n="$c"^n;~s=join([s[r=1:end]...].%r)
, aber das ist eigentlich länger.split
war das fehlende Puzzleteil.TSQL, 97 Bytes
Golf gespielt:
Ungolfed:
Probieren Sie es online aus
quelle