Vor einiger Zeit gab es eine Herausforderung , Strings zu multiplizieren. Es hat uns gezeigt, wie wir nicht nur Zahlen, sondern auch Zeichenketten multiplizieren können. Wir können eine Zahl jedoch immer noch nicht richtig mit einer Zeichenfolge multiplizieren. Es hat einen Versuch gegeben , aber das ist offensichtlich falsch. Wir müssen das beheben!
Deine Aufgabe:
Schreiben Sie eine Funktion oder ein Programm, das zwei Eingaben multipliziert, eine Zeichenfolge und eine Ganzzahl. Um eine Zeichenfolge mit einer Ganzzahl (richtig) zu multiplizieren, teilen Sie die Zeichenfolge in Zeichen auf, wiederholen jedes Zeichen so oft wie die Ganzzahl und kleben die Zeichen dann wieder zusammen. Wenn die Ganzzahl negativ ist, verwenden wir im ersten Schritt ihren absoluten Wert und kehren dann die Zeichenfolge um. Wenn der Eingang 0 ist, wird nichts ausgegeben (alles, was mit 0 multipliziert wird, ist nichts).
Eingang:
Eine Zeichenfolge, die ausschließlich aus druckbaren ASCII-Zeichen und Zeilenumbrüchen sowie einer Ganzzahl (möglicherweise negativ) besteht.
Ausgabe:
Die Zeichenfolge multipliziert mit der Ganzzahl.
Beispiele:
Hello World!, 3 --> HHHeeellllllooo WWWooorrrlllddd!!!
foo, 12 --> ffffffffffffoooooooooooooooooooooooo
String, -3 --> gggnnniiirrrtttSSS
This is a fun challenge, 0 -->
Hello
World!, 2 --> HHeelllloo
WWoorrlldd!!
Wertung:
Dies ist Code-Golf , die niedrigste Anzahl an Bytes gewinnt!
quelle
Antworten:
Jelly ,
654 BytesProbieren Sie es online!
Wie es funktioniert
quelle
JavaScript (ES6), 63 Byte
Übernimmt Eingaben in der Currying-Syntax
(s)(n)
.Testfälle
Code-Snippet anzeigen
quelle
reduce
!Python 3 , 44 Bytes
Probieren Sie es online!
quelle
f(n,*s)
als gültig angesehen wirdPython 2 ,
59575046 Bytes-2 Bytes dank Anders Kaseorg. -4 Bytes dank Dennis.
Probieren Sie es online!
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
quelle
²0‹i
nicht die beste Route ist, und sich buchstäblich 0 Alternativen auszudenken .²0‹i
und ich denke immer, dass es etwas Besseres geben muss.Ä.D)øJ¹0‹iR
ist das Beste, was ich tun kann, ohne dich zu kopieren, ich denke, deine ist optimiert.è
hier benutzt , obwohl ich in diesem Szenario keine Möglichkeit finde, es anzuwenden. Würde dann maximal 1 Byte einsparen.SÂΛ@²Ä×J
Drücken SieÎ
, um 0 zu drücken, und die Eingabe funktioniert, wenn Sie die Reihenfolge ändern. Spart 1 Byte! (Ersetzt auch das if, damit es nicht geschlossen werden muss)MATL , 9 Bytes
Eingaben sind: Zahl, dann Zeichenfolge.
Strings mit Zeilenumbrüche eingegeben werden char
10
wie folgt:['first line' 10 'second line']
.Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Erläuterung
Betrachten Sie Eingaben
-3
und'String'
.quelle
Haskell ,
4136 BytesProbieren Sie es online!
Anwendungsbeispiel:
f (-3) "abc"
Erträge"cccbbbaaa"
.Edit: -5 Bytes dank xnor!
quelle
(<*[1..n])
für((<$[1..n])=<<)
.V ,
29, 23, 18, 17 BytesProbieren Sie es online!
Hexdump:
Vielen Dank an @ nmjcman101 für das Speichern von 6 Bytes, was mich dazu ermutigte, weitere 5 Bytes zu speichern!
Die ursprüngliche Revision war ziemlich schrecklich, aber jetzt bin ich wirklich stolz auf diese Antwort, weil sie überraschend gut mit negativen Zahlen umgehen kann. (V hat so gut wie keine numerische Unterstützung und keine Unterstützung für negative Zahlen)
Erläuterung:
Zu diesem Zeitpunkt sieht der Puffer folgendermaßen aus:
Es ist wichtig, dass die nachgestellte Zeile nicht mit dem Cursor markiert wird.
quelle
0
Sonderfälle in V sehr nützlich waren.R
837876 BytesAnonyme Funktion.
Frederic sparte 3 Bytes, Giuseppe
24.Erläuterung:
Tests:
quelle
rep(foo,,,3)
oderrep(foo,e=3)
(gleiche Länge) ;-)a=
. Daher habe ich den Wert vona
als Argument für die umgekehrte Funktion verwendet, wenn die Funktioni<0
durch die bedingte Rückgabe zurückgegeben wird (weshalb ich die Anführungszeichen benötigte). Aber ich musste auch die Identitätsfunktion für deni>=0
Fall anwenden , also habe ich die verwendet,(
die nah genug ist.(
ist in der Tat eine Funktion. R ist komisch.(
semantisch der Identität entsprichtfunction(x)x
05AB1E , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
PHP> = 7.1, 65 Bytes
PHP Sandbox Online
quelle
$n<0
$n<0?:0
Brain-Flak (BrainHack) ,
154152 BytesProbieren Sie es online!
Nur hier, um DJMcMayhem Konkurrenz zu machen. ;)
Erläuterung
Hier ist eine modifizierte Version der Erklärung von DJMcMayhem
quelle
J ,
191513 BytesProbieren Sie es online!
Erläuterung
quelle
(#~|)A.~0-@>]
für 13 Bytes#~ ::(|.@#~|)
Dyalog APL, 15 Bytes
Zeichenfolge als linkes Argument, Zahl als rechtes Argument.
Probieren Sie es online!
Wie?
⍺/⍨
- Wiederholen Sie die Zeichenfolge|⍵
- abs (Anzahl) mal⌽⍣
- umkehren, wenn(⍵<0)
- Die Zahl liegt unter 0quelle
MATLAB, 37 Bytes
Dies definiert und anonymisiert die Funktion mit den Eingaben
s
: string undn
: number.Beispiel läuft:
quelle
repelem
existiert.repelem
in OctaveBrain-Flak (Haskell) ,
202192 BytesProbieren Sie es online!
Dies ist wahrscheinlich die schlechteste Sprache, in der es möglich ist, aber es ist geschafft. Vielen Dank an @Wheatwizard für die Bereitstellung des Haskell-Interpreters, der gemischte Eingabeformate ermöglicht. Dies wäre ungefähr 150 Bytes länger ohne es.
Erläuterung:
quelle
Java (OpenJDK 8) ,
9998898785 BytesProbieren Sie es online!
quelle
s[(n<0?-l-~i:i)/n]
i
die Bedingung inkrementierens->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]);}
. Ein weiteres Byte kann gespeichert werden, indem stattdessen von -l bis 0 (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]);}
) iteriert wird .Oktave , 49 Bytes
Probieren Sie es online!
Ich werde morgen eine Erklärung geben.
quelle
Ruby , 59 +1 = 60 Bytes
Verwendet
-n
Flagge.Probieren Sie es online!
quelle
eval$_
ist kürzer als$_.to_i
1 Byte.String#chars
Auf die gleiche WeiseString#each_char
kann auch ein Block akzeptiert werden . Kehren Sie schließlich die Eingabe um, bevor Sie jedes Zeichen verarbeiten, damit Sie es stattdessen direkt drucken können (indem Sie die Markierung auf setzen-n
). All dies ergibt zusammen 55 + 1 = 56 Bytes.Kohle , 16 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
quelle
CJam , 9 Bytes
Probieren Sie es online!
quelle
Japt , 12 Bytes
Probieren Sie es online!
Erläuterung
Implizite Eingabe von Zeichenfolge
U
und GanzzahlV
.Ordne (
®
) jeden BuchstabenU
(implizit) sich selbst zu und wiederhole (p
)abs(V)
(Va
) Male.Verwandle den String in ein Array von Zeichen (
¬
) und reduziere (r
) das mit ..."!+".slice(sign(V))
- dies verringert sich entweder mit+
→a + b
oder mit!+
→b + a
.Vielen Dank an @Arnauld für die Rückwärtsreduzierung!
quelle
£gY*Vg)pVa
dass dies zu einer kürzeren Lösung führen sollte, aber mein Gehirn hat sich für die Feiertage abgeschaltet, so dass ich es nicht ganz herausfinden kann. Möglicherweise können Sie jedoch etwas damit anfangen.WendyScript , 46 Bytes
Probieren Sie es online!
Erklärung (Ungolfed):
quelle
C89 Bytes
Ich habe Ben Perlins Version gesehen und mich gefragt, ob du nicht noch kürzer sein könntest und auch ein volles Programm hast. Sicher,
atoi()
undputchar()
ist das nicht so teuer in Bezug auf Bytes? Scheint, ich hatte recht!quelle
Pyth,
1311 BytesVersuch es!
-2 Bytes dank @jacoblaw
Erläuterung
alter Ansatz, 13 Bytes
Versuch es!
quelle
Python 3 , 68 Bytes
Probieren Sie es online!
quelle
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
Erläuterung
quelle
Mathematica, 89 Bytes
Eingang
quelle
Braingolf , 22 Bytes
Probieren Sie es online!
Äh, nicht schlecht.
Nimmt Eingaben als Ganzzahl und als Array von Zeichen an.
Alternative:
Braingolf , 31 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als Ganzzahl und als Zeichenfolge
quelle
C 109 Bytes
Ausgehend von einer Funktionsdeklaration, die ein int und ein string verwendet und einen string erzeugt (es scheint, dass der Speicher nicht vorbelegt ist und erstellt werden muss), scheint der direkte Ansatz kürzer zu sein als alle Versuche, ein Hackmesser zu sein, die ich versucht habe .
}
quelle