Titel absichtlich falsch geschrieben. Lesen Sie mehr, um herauszufinden, warum.
Ihre Aufgabe: Geben Sie bei einer durch Trennzeichen getrennten Zeichenfolge oder Liste mit den Zeichen A,B,C,D
die Indizes aller benachbarten gleichen Zeichen aus. Die Ausgabe kann aus mehreren Zeichenfolgen / Ganzzahlen in mehreren Zeilen, einer Liste / einem Array oder einer durch Trennzeichen getrennten Zeichenfolge bestehen.
Alle Ausgaben sollten in einer Liste oder einer Zeichenfolge oder in mehreren gedruckten Zeilen erfolgen. Jede gedruckte Zeile sollte, falls mehrere vorhanden sind, nur eine Zeichenfolge oder Zahl enthalten. Schleppende Whatever sind in Ordnung.
Standardmethoden für die Eingabe / Ausgabe. Es gelten Standardlücken.
Beispielsweise sollte die Eingabe oder , abhängig davon, ob sie von 0 bis 1 indiziert ist, 'ABCDDCBA'
ausgegeben werden , da diese Zahlen die Indizes von und daneben sind.3,4
4,5
D
D
Testfälle:
Bei Testfällen wird die Eingabe als einzelne Zeichenfolge und die Ausgabe als durch ,
-begrenzte Zeichenfolge angegeben. Die Ausgaben sind 0-indiziert. Addieren Sie 1 zu jedem ausgegebenen Element, um es 1-indiziert zu bekommen.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
Das ist Code-Golf , also gewinnt der kürzeste Code!
3,4,4,5
gültig?AABBCD
->
1,2,3,4
Antworten:
MATL ,
87 BytesDie Ausgabe ist 1-basiert.
Probieren Sie es online!
Erklärung mit Beispiel
Betrachten Sie die Eingabe
'ABCDDDCBA'
.quelle
Retina ,
332923 Bytes6 Bytes gespart dank Martin Ender
Gibt eine durch Zeilenvorschub getrennte Liste von Indizes aus.
Probieren Sie es online!
Erläuterung
Läuft dasselbe Zeichen in Doppelpunkte um, um Positionen zu markieren, an denen es doppelte Zeichen gibt.
Ersetzen Sie dann jeden Doppelpunkt durch die Länge des Texts davor, gefolgt von einem Zeilenvorschub.
Löschen Sie abschließend alle verbleibenden Buchstaben.
quelle
Gelee , 7 Bytes
1-basiert; Gibt eine Liste mit Listen der Indexläufe zurück , die vom OP zugelassen wurden.
Probieren Sie es online!
Wie?
quelle
ṁ
- Dinge, die 05AB1E für 500 machen könnte, bitte.Brain-Flak ,
5746 BytesBeinhaltet +2 für
-ar
Verwendet eine 0-basierte Indizierung.
Probieren Sie es online!
quelle
Mathematica, 32 Bytes
Reine Funktion, die die 1-indizierten Positionen von Zeichen neben einem identischen Zeichen zurückgibt.
Erläuterung:
StringPosition["string","sub"]
Gibt eine Liste der Anfangs- und Endpositionen der Zeichen an, die"sub"
als Teilzeichenfolge von angezeigt werden"string"
.x_~~x_
ist ein,StringExpression
das zwei benachbarte, identische Zeichen entspricht. Zum BeispielStringPosition["ABCDDDCBA",x_~~x_]
gibt{{4, 5}, {5, 6}}
. DurchUnion
das Anwenden werden die Listen verknüpft, sortiert und Duplikate gelöscht.quelle
Brain-Flak ,
69, 59, 56 BytesProbieren Sie es online!
+2 Byte für die
-ar
Flags, die die ASCII-Eingabe ermöglichen und den Stack umkehren.Verwendet eine 0-basierte Indizierung. Sparte 10 Bytes durch Reduzierung meiner Push-Pop-Redundanz . Sparte weitere 4 Bytes durch Umschalten von 1 auf 0-basierte Indizierung.
Dies ist so ziemlich die einzige auf Saiten basierende Herausforderung, in der Brain Flak gut ist. Das liegt daran, dass Brain-Flak beim Vergleichen aufeinanderfolgender Zeichen großartig ist, auch wenn es bei der Verarbeitung von Zeichenfolgen im Allgemeinen schrecklich ist. Hier ist eine lesbare Version des Codes mit Kommentaren, die erklären, wie es funktioniert:
quelle
-r
. Das bringt mich auf 46.Brachylog , 19 Bytes
Probieren Sie es online!
Erläuterung
Brachylog ist in der Regel schrecklich mit Indizes, die hier wieder zeigt.
Wenn
false.
eine akzeptable Ausgabe in Fällen vorliegt, in denen keine benachbarten Zeichen vorhanden sind, ist dies 1 Byte weniger, wenn durch ersetztᶠd
wirdᵘ
.quelle
Oktave , 35 Bytes
Probieren Sie es online!
Ähnlich wie meine MATL-Antwort . Hier wird
unique
automatisch sortiert. Die Eingabe indiff
muss konvertiert werdendouble
, was vom Unären erledigt wird+
.quelle
Cubix,
37 32 31 2928 BytesVielen Dank an ETHProductions für den Hinweis auf eine Drei-Byte-Speicherung
Probieren Sie es hier aus ! Beachten Sie, dass die Ausgabeindizes auf 1 basieren und nicht in aufsteigender Reihenfolge.
Erweitert:
Erläuterung
Dies funktioniert, indem die Eingabe zeichenweise gelesen wird. Um zwei Zeichen zu vergleichen, subtrahieren wir einfach ihre Zeichencodes. Wenn das Ergebnis 0 ist, drucken wir die aktuelle Länge des Stapels, ein Leerzeichen, die aktuelle Länge des Stapels - 1 und ein weiteres Leerzeichen. Dann räumen wir den Stack ein wenig auf und beginnen wieder mit der Leseschleife. Wenn das Ende der Eingabezeichenfolge erreicht ist, stoppt das Programm.
quelle
#
, um die Länge des Stapels zu ermitteln, wenn Sie ihn benötigen. (LOL'ed auch am;_;
im Code;))!$w
statt!w
und ist Teil der fünften Reihe Logik der vierten Reihe bewegt? (Ich kann es jetzt nicht versuchen, weil ich aus der TürC 75 Bytes
Verwendet Leerzeichen als Begrenzer. (Ein nachgestelltes Komma sieht nicht gut aus.)
Probieren Sie es online!
quelle
C # , 115 Bytes
Golf gespielt
Ungolfed
Ungolfed lesbar
Vollständiger Code
Releases
115 bytes
- Anfangslösung.Anmerkungen
Nichts hinzuzufügen
quelle
Gelee , 8 Bytes
Probieren Sie es online!
quelle
Ṗ=ḊTµ2Ḷ+€
k, 18 Bytes
Beispiele:
Die Übersetzung nach
q
ist leichter zu verstehen:quelle
JavaScript, 52 Byte
Vielen Dank, @Neil, für das Abschlagen von 1 Byte
Empfängt Eingaben als ein 0-indiziertes Array von Zeichen.
Gibt Ausgaben als ein 1-indiziertes Array zurück
Erläuterung
Für jedes Zeichen in der Zeichenfolge
Wenn es gleich dem vorherigen Zeichen oder dem nächsten Zeichen ist, geben Sie den Index + 1 zurück, andernfalls geben Sie nicht zurück (lässt undefiniert im Array)
Entfernen Sie alle undefinierten Elemente aus dem resultierenden Array
Probieren Sie es online!
quelle
&&i
ein Byte vorbei speichern(...)*i
?0|0&&6
ist 0,1|0&&6
ist 6,0|1&&6
ist 6,1|1&&6
ist 6. Ist das nicht was Sie wollen?Python 2,
5554 BytesProbieren Sie es online!
Gibt durch Leerzeichen getrennte Indizes aus (beachte, dass dies einige Indizes doppelt anzeigt, wie dies durch OP erlaubt ist)
quelle
Perl 5 , 37 Bytes
35 Byte Code +
pl
Flags.Probieren Sie es online!
(?<=(.))\1|(.)(?=\2)
Entspricht entweder zwei wiederholten Zeichen ((?<=(.))\1
) oder einem Zeichen, das wiederholt wird ((.)(?=\2)
).Dann
print pos
druckt die Position des Spiels. (pos
Enthält den Index der aktuellen Übereinstimmung bei Verwendung in einem regulären Ausdruck mit/g
Modifikator).quelle
Perl 6 ,
6657 BytesVersuch es
Versuch es
quelle
PHP, 100 Bytes
quelle
Ruby , 51 + 1 = 52 Bytes
Verwendet die
-n
Flagge.Probieren Sie es online!
quelle
Batch, 139 Bytes
Übernimmt die Eingabe für STDIN. Verfolgt, wie viele Zahlen in der
c
Variablen gedruckt werden sollen. Diese Zahl wird auf 2 zurückgesetzt, wenn ein Paar erkannt wird. Hinweis: Bei einem Aufwand von 6 Bytes kann die Kompatibilität mit den meisten ASCII-Zeichen und nicht nur mit diesen verstärkt werdenABCD
.quelle
89 Bytes
Befinden sich drei oder mehr Zeichen in einer Zeile, werden die Indizes wiederholt. Welches @Comrade SparklePony in den Kommentaren erlaubt ist.
Ungolfed volles Programm:
quelle
QBIC , 42 Bytes
Beispielausgabe:
Erläuterung:
EDIT: QBIC hat jetzt Substring! Diese Herausforderung kann jetzt in 32 Bytes gelöst werden:
Woher:
quelle
k, 14 Bytes
Dies ist eine Funktion, die eine Zeichenfolge akzeptiert und eine Liste von Indizes zurückgibt.
Erläuterung:
Probieren Sie es online!
Wie benutzt man:
quelle
PHP, 70 Bytes
nimmt Eingaben von STDIN entgegen; renn mit
-R
.quelle