Eingang:
- Ein String (das Wave-Snippet) mit einer Länge
>= 2
. - Eine positive ganze Zahl n
>= 1
.
Ausgabe:
Wir geben eine einzeilige Welle aus. Wir tun dies durch n- maliges Wiederholen der Eingabezeichenfolge .
Herausforderungsregeln:
- Wenn das erste und letzte Zeichen der Eingabezeichenfolge übereinstimmt, geben wir es in der Gesamtausgabe nur einmal aus (dh mit
^_^
der Länge 2 wird^_^_^
und nicht^_^^_^
). - Die Eingabezeichenfolge enthält keine Leerzeichen / Tabulatoren / Zeilenumbrüche / etc.
- Wenn Ihre Sprache keine Nicht-ASCII-Zeichen unterstützt, ist das in Ordnung. Solange es der Herausforderung mit ausschließlich ASCII-Welleneingang entspricht.
Allgemeine Regeln:
- Das ist Code-Golf , also gewinnt die kürzeste Antwort in Bytes.
Lassen Sie sich von Code-Golf-Sprachen nicht davon abhalten, Antworten mit Nicht-Codegolf-Sprachen zu veröffentlichen. Versuchen Sie, für jede Programmiersprache eine möglichst kurze Antwort zu finden. - Für Ihre Antwort gelten Standardregeln. Daher dürfen Sie STDIN / STDOUT, Funktionen / Methode mit den richtigen Parametern und vollständige Programme verwenden. Ihr Anruf.
- Standardlücken sind verboten.
- Fügen Sie nach Möglichkeit einen Link mit einem Test für Ihren Code hinzu.
- Fügen Sie ggf. auch eine Erklärung hinzu.
Testfälle:
_.~"( length 12
_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(_.~"(
'°º¤o,¸¸,o¤º°' length 3
'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'°º¤o,¸¸,o¤º°'
-__ length 1
-__
-__ length 8
-__-__-__-__-__-__-__-__
-__- length 8
-__-__-__-__-__-__-__-__-
¯`·.¸¸.·´¯ length 24
¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯`·.¸¸.·´¯
** length 6
*******
String & length of your own choice (be creative!)
>= 1
" scheint mir irgendwie pleonastisch ... :)Antworten:
Pyke,
151410 BytesProbieren Sie es hier aus!
quelle
Python 3, 32 Bytes
Verkettet
n
Kopien der Zeichenfolge und entfernt das erste Zeichen von allen Kopien, aber das erste, wenn das erste Zeichen mit dem letzten übereinstimmt.quelle
s[0]
und michs[-1]
eher auf das erste und letzte Byte als auf das erste und letzte Zeichen zu beziehen scheine. Edit: ah, warte, das ist Python 2 vs. Python 3. Es funktioniert korrekt in Python 3.05AB1E , 13 Bytes
Verwendet CP-1252- Codierung.
Probieren Sie es online!
Erläuterung
-___-
und3
als Eingabe zum Beispiel verwendet.quelle
JavaScript (ES6), 47 Byte
quelle
s=>n=>...
stattdessen zu tun(s,n)=>
Perl, 29 Bytes
28 Byte Code + 1 für
-p
.Vielen Dank an @Dada, der mir geholfen hat, ein paar Bytes zu entfernen !
Verwendung
Online-Beispiel.
quelle
<>
anstelle von verwenden,$'
wie es Ihnen ermöglicht, loszuwerden-0
. Und dann können Sies///e
stattdessen//;$_=
ein weiteres Byte gewinnen :-)$
, um dem Ende zu entsprechen, spart mir immer noch Bytes als Wenn'
ich es nicht benutze, kann ich es fallen lassen, indem ich es in einer Datei speichern muss, um das Hinzufügen von 3 für zu speichern,-p
und es zurück zu 1 fallen lasse!$
anstelle der Newline die du vorher hattest. (Entschuldigung, mein Kommentar war nicht sehr ausführlich, ich hatte es eilig ...)<>
in der Ersetzungszeichenfolge zu verwenden. Wennn
jedoch ein Leerzeichen anstelle einer neuen Zeile verwendet wird, kann die Anzahl der Zeichen etwas verringert werden:s/(.+?) (\d+)/$1x$2/e
Perl, 23 Bytes
Beinhaltet +1 für
-p
Geben Sie die Eingabezeichenfolge gefolgt von der Nummer in separaten Zeilen auf STDIN ein
wave.pl
:Wenn das erste Zeichen im Wort kein reguläres Sonderzeichen ist, funktioniert auch diese 22-Byte-Version:
quelle
/g
Modifikator vergessen, als du ihn eingefügt hast ;-)MATL,
191714 BytesDies funktioniert für ASCII im Online-Interpreter und für Unicode und ASCII, wenn sie mit MATLAB ausgeführt werden.
Probieren Sie es online!
Erläuterung
quelle
Retina , 29 Bytes
Die Zeilen 2 und 5 haben ein Leerzeichen am Ende.
Probieren Sie es online! (Die erste Zeile aktiviert eine durch Zeilenvorschub getrennte Testsuite.)
quelle
Batch, 117 Bytes
Nimmt die Anzahl der Wiederholungen als Befehlszeilenparameter und liest die Zeichenfolge aus STDIN.
quelle
Pyth, 13 Bytes
Testsuite!
Erklärung folgt.
quelle
Gema, 41 Zeichen
Probelauf:
quelle
PowerShell v2 +, 48 Byte
Gibt die gesamte Zeichenfolge einmal aus, gefolgt von n-1 Kopien der Zeichenfolge oder der Teilzeichenfolge, je nachdem, ob das erste und das letzte Zeichen übereinstimmen.
Die
.Substring()
Methode gibt den Index aus, der an das Ende der Zeichenfolge übergeben wird. Wenn also$s[0]-eq$s[-1]
false (0) ausgewertet wird, wird die gesamte Zeichenfolge abgerufen. Wenn diese Aussage wahr ist (1), erhalten wir die Teilzeichenfolge ab dem zweiten Zeichen.quelle
VBA 119 Bytes
Neu in diesem Spiel und VBA gewinnt mit den höchsten Bytes: P
PS: kann nicht glauben , vba steht in der Nähe JAVA HAHA
Erläuterung:
quelle
CJam,
1615 BytesProbieren Sie es online aus
Erläuterung:
quelle
K, 12 Bytes
Vielen Dank
quelle
{,/y#,$[(*x)~*|x;-1;0]_x}
für 25 Bytes behandelt die erste / letzte Übereinstimmung. Wenn Sie gerne Regel 1 brechen, können Sie{,/y#,x}
für den 8.PHP, 72 Bytes
mit PHP 7.1 könnte es auf 65 Bytes reduziert werden
quelle
Pip , 18 Bytes
Regex-Lösung, die die Regel "Keine Leerzeichen in der Eingabe" ausnutzt. Nimmt die Zeichenfolge von stdin und die Zahl als Befehlszeilenargument.
Probieren Sie es online!
Erläuterung:
Somit,
a b
verwandelt sich inab
,a a
verwandelt sich ina
, und der Raum am Ende der Schnur entfernt wird. Das Ergebnis wird dann automatisch ausgedruckt.quelle
Haskell, 59 Bytes
Ungolfed-Version:
quelle
Java 10,
12311110910710210079 BytesProbieren Sie es online aus.
Alternative mit gleicher Byteanzahl ( 79 Bytes ):
Probieren Sie es online aus.
Ich werde natürlich versuchen, meine eigene Frage zu beantworten. ;)
-5 Bytes dank @ dpa97 .
-21 Byte Konvertierung von Java 7 nach 10.
Erläuterung:
quelle
.split
.s.substring(1)
ist zwei Bytes kürzer. ;)Javascript ES6, 49 Zeichen
Prüfung:
quelle
QBIC , 65 Bytes
Ich denke, ich sollte LEFT $ und RIGHT $ zu QBIC hinzufügen ...
Erläuterung:
quelle
79 Bytes
Eine absurde Methode, einen String zu wiederholen. Erstellen Sie eine neue Zeichenfolge mit der gewünschten Wiederholungslänge und ersetzen Sie dann jedes Zeichen durch die zu wiederholende Zeichenfolge. Davon abgesehen sieht es nach der gleichen Strategie aus wie bei vielen anderen.
quelle
x
? Vielleicht ist es besser, dies in ein Leerzeichen umzuwandeln, da " die Eingabezeichenfolge keine Leerzeichen / Tabulatoren / Zeilenumbrüche / etc. " Enthält .x
. Es erstellt zuerst diexx...x
Zeichenfolge und ersetzt dann jedex
Zeichenfolge, ohne sie von Anfang an durch die zu ersetzenden Zeichenfolgen neu zu bewerten.SpecBAS - 68 Bytes
Verwendet Inline-
IF
, um zu prüfen, ob das erste und das letzte Zeichen gleich sind. Wenn nicht, drucken Sie die Zeichenfolgen
mehrmals. Andernfalls spleißen Sie die Zeichenfolge auf die Länge 1, wiederholen Sie diese und setzen Sie das letzte Zeichen am Ende.Kann nur ASCII-Zeichen (oder in SpecBAS IDE integrierte Zeichen) akzeptieren
quelle
APL, 19 Bytes
Verwendung:
Erläuterung:
⊃⍺=⊃⌽⍺
: Überprüfen Sie, ob das erste Zeichen mit dem letzten Zeichen übereinstimmt⍺↓⍨
: Wenn dies der Fall ist, lassen Sie das erste Zeichen fallen⊂
: das Ergebnis beifügen⍵⍴
: repliziere es⍵
mal1↓
: Lass den ersten fallen (das ist kürzer als(⍵-1)⍴
)∊
: Holen Sie sich alle einfachen Elemente (machen Sie das Boxen rückgängig)⍺,
: füge eine Instanz der ganzen Zeichenkette nach vorne hinzuquelle
Postscript, 98 Bytes
... aber du brauchst vielleicht einen 'Flush', um deinen PS-Interpreter dazu zu bringen, den Kommunikationspuffer zu leeren, weitere sechs Bytes :(
quelle
Common Lisp (LispWorks), 176 Byte
Verwendung:
Erläuterung:
Ungolf:
quelle
Vim, 17 Bytes
Der einfache Weg, dies zu tun, besteht darin, einen Rückverweis-Regex zu verwenden, der erkennen kann, ob das erste und das letzte Zeichen übereinstimmen. Aber lange reguläre Ausdrücke sind lang. Das wollen wir nicht.
Die zu wiederholende Welle befindet sich im Puffer. Ich gehe davon aus, dass sich die zu wiederholende Nummer im Register befindet
"a
(geben SieqaNq
N als Nummer ein, um sie einzurichten). Die Idee ist:Dann
P
den gelöschten Text@a
mal .lDg*
: Dieses Manöver erstellt eine Regex, die mit jedem ersten Zeichen übereinstimmt, unabhängig davon, ob es maskiert werden muss oder nicht oder ob es sich um ein Wort handelt oder nicht. (*
würde ausreichen, um die ordnungsgemäß entflohene Regex zu erstellen, würde aber unerwünschte hinzufügen\<\>
Müll wenn es sich um ein Wort wie z_
. B. handelt .)p^
: Letzter Schritt war chaotisch. Bereinigen Sie bis zur ursprünglichen Position am Zeilenanfang.v$
: Im visuellen Modus$
wird standardmäßig auf nach verschoben dem Zeilenende verschoben.?<C-P>$<CR>hd
: Wenn der vorherige reguläre Ausdruck am Ende der Zeile vorhanden ist, wird diese Suche dorthin verschoben. Andernfalls bleiben Sie über das Ende der Zeile hinaus. Bewegen Sie sich von dort nach links und wir führen das (mühsame) Löschen durch, das wir benötigen.@aP
: Führen Sie die Zahlenwiederholung als Makro aus, das als Argument für verwendet werden sollP
.quelle
Ruby, 38 Bytes
Ich finde das ziemlich selbsterklärend. Ich frage mich immer noch, ob es eine präzisere Möglichkeit gibt, den
s[0..-2]
Block darzustellen , aber ich habe ihn noch nicht gefunden.quelle
Java (117 Byte)
quelle
b>0;b--
aufb-->0;
. Auch warum ist dasb+
da beic+=b+a.substring
? Trotzdem, es ist eine großartige erste Antwort, wenn Sie es selbstständig gefunden haben. Genießen Sie Ihren Aufenthalt hier auf PPCG! :) Vielleicht finden Sie auch Tipps zum Golfen in Java interessant zu lesen.