In Vim können Sie einen Befehl wiederholen, indem Sie ihm eine Zahl voranstellen, wie dies 3dd
äquivalent zu ist dd dd dd
. Nun, dieses sich wiederholende Muster ist nicht auf Vim-Befehle beschränkt. String kann auch auf diese Weise repliziert werden.
Spezifikation:
Ausgehend von einer Zeichenfolge, die nur aus Ziffern, alphabetischen Zeichen (sowohl Groß- als auch Kleinbuchstaben) und Leerzeichen besteht, und einer optionalen nachgestellten Zeile als Eingabe schreiben Sie ein Programm, das die folgenden Aufgaben ausführt:
Jedes "Wort" besteht aus Ziffern und Buchstaben. Wenn einem Buchstaben eine Zahl vorangestellt ist (es kann mehr als eine Ziffer in einer Zahl geben oder die Zahl ist Null), wiederholen Sie diesen Buchstaben für die angegebenen Zeiten. Beispielsweise:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
Wörter werden durch Leerzeichen getrennt. Zwischen zwei benachbarten Wörtern darf maximal ein Leerzeichen stehen.
Einfach richtig? Hier ist das zusätzliche Zeug:
Wenn vor dem Leerzeichen eine Zahl steht, wiederholen Sie das nächste Wort für die angegebenen Zeiten. Die Nummer wird immer am Ende des vorherigen Wortes oder am Anfang der Zeichenkette angehängt. Beispiel:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
Wenn ein leeres Wort wiederholt werden soll, geben Sie nicht mehrere Leerzeichen hintereinander aus. Zerdrücke sie:
a3 0x2 b -> a b b # NOT 'a b b'
Mit anderen Worten, Ihr Programm sollte niemals zwei Leerzeichen zusammen ausgeben.
Die Eingabe ist nie leer, es ist jedoch nicht erforderlich, dass die Ausgabe nicht leer ist:
0 3x -> (empty)
Ein- und Ausgabe können auf beliebige Weise erfolgen. Eine Funktion, die die Eingabe von Argumenten und die Ausgabe über Rückgabewerte übernimmt, ist ebenfalls akzeptabel.
Wenn es sich um ein Programm handelt, darf es nicht mit einem Fehler beendet werden (dh der Rückgabewert ist Null).
Zahlen sind immer dezimal und beginnen nie mit einer Null, es sei denn, die Zahl selbst ist Null. In diesem Fall gibt es nur eine Null. Das heißt, Sie müssen nicht berücksichtigen
077a
oder000a
als Eingabe geben.Alle Zahlen sind unter 2 ^ 31 (2.147.483.648). Die maximale Ausgabelänge liegt unter 2 ^ 32 (4.294.967.296) Bytes.
Das Programm kann optional ein nachfolgendes Leerzeichen und / oder eine nachfolgende neue Zeile ausgeben. Diese Leerzeichen und Zeilenumbrüche wirken sich nicht auf die Gültigkeit der Ausgabe aus. Auch wenn die richtige Ausgabe leer sein sollte, wird eine Ausgabe eines Leerzeichens gefolgt von einer neuen Zeile qualifiziert.
Kurz gesagt, eine gültige Eingabe entspricht diesem regulären Ausdruck:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
Und für eine gültige Ausgabe:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
Beispiel Testfälle:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
Dies ist ein Code-Golf , also gewinnt das kürzeste Programm in Bytes in jeder Sprache!
a3 0xc b
->a c c c b
sollte hinzugefügt werden, da ich ursprünglich Code hatte, der für alle oben genannten Testfälle funktionierte, aber dafür nicht richtig funktionierte.Antworten:
JavaScript (Node.js) ,
102129110106 BytesProbieren Sie es online!
Danke für @Arnauld für -4 Bytes.
quelle
Perl 6, 88 Bytes
Probier es aus
Erweitert:
Die
~(…).words
Kombination entfernt überflüssige Leerzeichen, was nützlich ist, wenn ein „Wort“ entfernt wird.quelle
Python 2,
286275260257238 Bytes-19 bytes dank ovs
f
Nimmt eine Zeichenfolge als Argument und druckt die formatierte Zeichenfolge.Hier ist eine Antwort mit den Testfällen.
Ungolfed-Code:
Wir arbeiten immer noch an Verbesserungen.
quelle
exec
, da dies die einzige Zeile in der Funktion ist.Perl 5 , 77 + 1 (
-p
) = 78 BytesProbieren Sie es online!
quelle
Sauber ,
443... 306 BytesProbieren Sie es online!
quelle
Lua , 113 Bytes
Probieren Sie es online!
quelle