Einführung
Beobachten wir die folgende Zeichenfolge:
AABBCCDDEFFGG
Sie können sehen, dass jeder Buchstabe mit Ausnahme des Buchstabens dupliziert wurde E
. Das bedeutet , dass der Brief E
wurde dedupliziert . Das Einzige, was wir hier tun müssen, ist, diesen Prozess umzukehren, wodurch wir die folgende nicht-duplizierte Zeichenfolge erhalten:
AABBCCDDEEFFGG
Nehmen wir ein schwierigeres Beispiel:
AAAABBBCCCCDD
Sie können sehen, dass eine ungerade Anzahl aufeinanderfolgender Zeichenfolgen B
vorliegt, was bedeutet, dass eine der BB
Zeichenfolgen von der ursprünglichen Zeichenfolge desupliziert wurde. Wir brauchen nur diesen Brief zu entduplizieren, was uns ergibt:
AAAABBBBCCCCDD
Die Herausforderung
Bei einer nicht leeren, nicht duplizierten Zeichenfolge, die nur aus alphabetischen Zeichen besteht (entweder nur in Groß- oder Kleinbuchstaben), wird die nicht duplizierte Zeichenfolge zurückgegeben. Sie können davon ausgehen, dass die Zeichenfolge immer mindestens ein nicht dupliziertes Zeichen enthält.
Testfälle
AAABBBCCCCDDDD --> AAAABBBBCCCCDDDD
HEY --> HHEEYY
AAAAAAA --> AAAAAAAA
N --> NN
OOQQO --> OOQQOO
ABBB --> AABBBB
ABBA --> AABBAA
Das ist Code-Golf , also gewinnt die kürzeste gültige Einsendung in Bytes!
AABBBB
.ABBB
Karte aufAABBBB
, nichtAABBBBBB
?A BB B
. Die Zeichen, die nicht gepaart (und daher nicht dupliziert) sind, müssen dupliziert werden, was dazu führtAA BB BB
, dass es sich um die nicht-duplizierte Zeichenfolge handelt.Antworten:
MATL , 7 Bytes
Probieren Sie es online! Oder überprüfen Sie alle Testfälle .
Nehmen wir
'ABBA'
als Beispiel die Eingabe.quelle
Retina , 11 Bytes
Online testen - enthält alle Testfälle
quelle
Perl, 16 Bytes
15 Byte Code +
-p
Flag.Um es auszuführen:
quelle
Haskell, 36 Bytes
Anwendungsbeispiel:
u "OOQQO"
->"OOQQOO"
.Wenn die Zeichenfolge mindestens 2 Elemente enthält, nehmen Sie zwei Kopien der ersten und fügen Sie einen rekursiven Aufruf mit an
Wenn weniger als zwei Elemente (eins oder null) vorhanden sind, erstellen Sie zwei Kopien der Liste.
quelle
Brachylog , 17 Bytes
Probieren Sie es online!
Erläuterung
quelle
Ruby, 21 Bytes
20 Bytes plus das
-p
Flag.quelle
JavaScript (ES6),
37-30ByteGespeichert 7 Bytes durch die viel effiziente ‚$ 1 $ 1‘ wie mit [andere] [Antworten] tat
Testfälle
Code-Snippet anzeigen
quelle
Mathematica, 41 Bytes
Unbenannte Funktion, die eine Zeichenfolge eingibt und eine Zeichenfolge ausgibt. Vollständige Deduplizierung, dann vollständige Nicht-Deduplizierung. Nicht wirklich kurz, aber ich könnte es vorerst nicht besser machen.
quelle
Befunge 98 , 24 Bytes
Probieren Sie es online!
$
kann leicht ersetzt werden mit-
, und die 2.@
mit;
.Ich denke, dies kann aufgrund der
-
am Anfang von beiden-,
(oder$,
höher) und weiter golfen werden-\,
.Wie?
quelle
Java 7, 58 Bytes
Ungolfed:
Testcode:
Probieren Sie es hier aus.
Ausgabe:
quelle
PHP, 65 Bytes, kein regulärer Ausdruck
Nimmt Eingaben vom Kommandozeilenargument entgegen. Laufen Sie mit
-r
.Regex? In PHP dupliziert der reguläre Ausdruck, der von den meisten Antworten verwendet wird, jedes Zeichen. wäre 44 Bytes:
quelle
Brain-Flak 69 Bytes
Beinhaltet +3 für
-c
Probieren Sie es online!
Erläuterung:
quelle
Gelee , 9 Bytes
Probieren Sie es online!
quelle
V 10 Bytes
TryItOnline
Nur ein Regex wie alle anderen im Thread finden und ersetzen. Der einzige Unterschied ist, dass ich alles, was ein
\
davor erfordert , durch das Zeichen mit demselben ASCII-Wert ersetzen kann , aber das hohe Bit gesetzt ist. (So(
wird 00101000 zu¨
10101000)quelle
Perl 6 , 17 Bytes
mit -p Befehlszeilenoption
Beispiel:
quelle
Schläger 261 Bytes
Ungolfed:
Testen:
Ausgabe:
quelle
05AB1E , 10 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python3,
102 bis94 BytesDanke an xnor für das Speichern von 8 Bytes! -> Bithack.
quelle
x+x%2
als schreibenx&-2
.s.count(c)&-2
und es gab eine leere Zeichenfolge zurück ...: / Irgendwelche Gedanken?x+1&-2
sollte es tun. Evens gehen für sich und die Gewinnchancen werden aufgerundet.R, 81 Bytes
Liest einen String aus stdin, splintet in einen Vektor von Zeichen und führt eine Lauflängencodierung (rle) durch. Wiederholen Sie anschließend die einzelnen Werte aus der Reihe, der Summe der Längen und der Längen mod
2
.Wenn wir durch Leerzeichen getrennte Eingaben lesen können (implizit als Vektor / Array von Zeichen), können wir den Aufteilungsteil überspringen und das Programm reduziert sich auf 64 Bytes:
quelle
> <> (Fisch) 39 Bytes
Ich bin mir ziemlich sicher, dass man mit einer anderen Technik viel Golf spielen kann.
Es nimmt eine Eingabe entgegen und vergleicht sie mit dem aktuellen Stapelelement. Wenn es anders ist, wird das erste Stapelelement zweimal gedruckt, wenn es dasselbe ist, werden beide gedruckt.
Der Stapel wird, wenn er leer ist, mit einer 0 versorgt, die nichts druckt, und kann jederzeit angehängt werden.
quelle
Pyth, 15 Bytes
Überprüfen Sie hier alle Testfälle.
Vielen Dank an Luis Mendo für die Methodik.
Erläuterung
Wie so oft habe ich das Gefühl, dass dies kürzer sein könnte. Ich denke, es sollte einen besseren Weg geben, um Elemente aus der Liste zu extrahieren, als den, den ich hier verwende.
quelle
PowerShell , 28 Byte
Probieren Sie es online! (beinhaltet alle Testfälle)
Port of the Retina antworten . Die einzigen Punkte, die wir beachten müssen, sind die, die wir
$args
anstelle des Üblichen haben$args[0]
(da das-replace
jedes Element im Eingabearray durchlaufen wird, können wir vom Index abschneiden), und die'$1$1'
müssen einfache Anführungszeichen sein, damit sie durch den regulären Ausdruck ersetzt werden Variablen, anstatt als PowerShell-Variablen behandelt zu werden (was passieren würde, wenn sie in doppelte Anführungszeichen gesetzt würden).quelle
C 67 Bytes
Rufen Sie an mit:
quelle
Brainfuck, 22 Bytes
Probieren Sie es online aus.
Druckt das aktuelle Zeichen zweimal, es sei denn, es entspricht einem Zeichen, das gerade zweimal gedruckt wurde.
quelle