Sie erhalten eine Zeichenfolge s
. Es ist garantiert, dass die Zeichenfolge gleich ist und mindestens ein [
s und ]
s hat. Es ist auch garantiert, dass die Klammern ausgeglichen sind. Die Zeichenfolge kann auch andere Zeichen enthalten.
Das Ziel ist die Ausgabe / Rückgabe einer Liste von Tupeln oder einer Liste von Listen, die Indizes für jedes [
und jedes ]
Paar enthalten.
Hinweis: Die Zeichenfolge ist nullindexiert.
Beispiel:
!^45sdfd[hello world[[djfut]%%357]sr[jf]s][srtdg][]
sollte zurückkehren
[(8, 41), (20, 33), (21, 27), (36, 39), (42, 48), (49, 50)]
oder so ähnlich. Tupel sind nicht erforderlich. Listen können ebenfalls verwendet werden.
Testfälle:
input:[[asdf][][td([)ty54g% ]hg[[f]u][f[[jhg][gfd]sdf]sdfs]ghd]fr43f]
output:[(0, 62),(1, 6), (7, 8), (9, 56), (13, 22), (25, 30), (26, 28), (31, 52), (33, 47), (34, 38), (39, 43)]
input:[[][][][]][[][][][[[[(]]]]]))
output:[(0, 9), (1, 2), (3, 4), (5, 6), (7, 8), (10,26),(11, 12), (13, 14), (15, 16), (17, 25), (18, 24), (19, 23), (20, 22)]
input:[][][[]]
output:[(0, 1), (2, 3), (4, 7), (5, 6)]
input:[[[[[asd]as]sd]df]fgf][][]
output:[(0, 21), (1, 17), (2, 14), (3, 11), (4, 8), (22, 23), (24, 25)]
input:[]
output:[(0,1)]
input:[[(])]
output:[(0, 5), (1, 3)]
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes für jede Programmiersprache.
code-golf
string
balanced-string
Windmühle Cookies
quelle
quelle
Antworten:
Brain-Flak Classic , 108 Bytes
Probieren Sie es online!
Speichert jede Öffnung
[
im richtigen Stapel und gibt sie aus, wenn wir a drücken]
.quelle
Python 2 , 74 Bytes
Probieren Sie es online!
quelle
JavaScript,
6962 BytesEin kurzes Stück Golf im Zug nach Hause. Kann wohl noch verbessert werden.
Nimmt Eingaben als ein Array von Zeichen und gibt ein Objekt aus, wobei die Schlüssel die Indizes der
[
s sind und deren Werte die Indizes der entsprechenden]
s sind.Probieren Sie es online aus
quelle
Haskell ,
9279 BytesProbieren Sie es online!
Erläuterung
Wir erstellen eine Funktion,
g
die 3 Argumente akzeptiert.a
, das sind die Standorte aller unerreichten[
s.n
Dies ist die Anzahl der verarbeiteten Zeichenx
Das ist die Charaktere unverarbeitet.Wenn unser erster Charakter ist
]
, entfernen wiru
von der Vorderseite unserena
und kehren(u,n)
plus zurück, was sonst noch übrig bleibt.Wenn unser erstes Zeichen nicht ist
]
, das ist entweder[
oder etwas anderes, erhöhen wirn
und fügen[n|s=='[']
der Vorderseite hinzua
.[n|s=='[']
wird sein,[n]
obs=='['
und[]
sonst.Wenn wir keine Zeichen mehr haben, geben wir die leere Liste zurück.
quelle
Java 10, 95 Bytes
Ein ungültiges Lambda, das die Eingabezeichenfolge als
int[]
Unicode-Codepunkt verwendet.Probieren Sie es online
Ungolfed
Danksagung
quelle
r
undw
als Teil des Codes, nicht als Parameter:s->{int r=0,w=0;...}
.Vim, 89 Bytes
Kommentiert
<C-V>
ist 0x16.<C-M>
ist 0x0d.<C-X>
ist 0x18.Probieren Sie es online!
quelle
QBasic (QB64),
137127112 BytesWir benötigen
vierzwei Bytes, da die Herausforderung eine 0-Indizierung erfordert. Mein erster QBasic-Beitrag, Feedback ist erwünscht.\r\n
->\n
)Sieht bei der Ausführung so aus:
quelle
?
stattprint
(der Compiler automatisch erweitert diesprint
), brauchen Sie nicht die Räume zwischen den Strings in Anführungszeichen undTHEN
in denIF
s, und Sie können die Dropi
nachNEXT
.0
und entferntto
? Ich bin verwirrt ...if c$="["
werden kannif"["=c$
,elseif c$="]"
werden kannelseif"]"=c$
,end if
kann sichendif
, und mit einer leichten Änderung des Ausgangs,?b(n),i
kann sich?b(n)i
(QBasic 1.1 ist , was ich verwenden, Ihren Fall könnte anders sein).?b(n)i
funktioniertPyth, 26 Bytes
Probieren Sie es hier aus
Erläuterung
quelle
C,x"[" MQ #.e*qb\[t+lhfSI/LT"[]"._>Q
. Edit: Mir ist es auch ein bisschen gelungen Golf zu spielen, ich bin jetzt unter 30.R ,
141 133 115 112108 BytesProbieren Sie es online!
Nichts Besonderes. 1-indiziert, weil ich es gesagt habe. R nicht wirklich Stapel, so dass ich ursprünglich verwendet
c
,head
undtail
den gleichen wörtlichen Effekt zu erhalten. Ungolfed original version (Aktualisierungen mitutf8ToInt
, um einige Bytes zu entfernen, wobei der Anfang des Vektors als oberster Punkt des Stapels verwendet wird, und MissbrauchT
und integrierteF
Funktionen, um die Initialisierung der Stapel zu vermeiden.):quelle
T`` and
F`1:nchar(y)
ist kürzer alsseq_along(x)
. Sehr schöne Lösung übrigens :)gregexpr
das der richtige Weg ist.22 28 22
stattdessen zurück22 28 21
), wahrscheinlich ist die (ab) Verwendung von T / F nicht wirklich sicher: D. Das ist kürzer und scheint zu funktionieren -> Online ausprobieren!Viertens (gviertens) , 75 Bytes
Probieren Sie es online!
Missbraucht den Gleitkommastapel, erlaubt aber die Verwendung von a
do loop
da der Code den Rückgabestapel nicht (manuell) berührt.Erläuterung
[
, setzen Sie auf Gleitkommastapel]
vom Gleitkommastapel abgerufen und mit der aktuellen Position ausgegebenCode-Erklärung
quelle
Netzhaut , 36 Bytes
Probieren Sie es online! Erläuterung:
Erstellen Sie eine Liste aus den Übereinstimmungsergebnissen.
Verwenden Sie die folgende Ersetzung, um die Liste anstelle der Übereinstimmungen zu generieren.
Übereinstimmungen zulassen.
Dies ist eine Anwendung der .NET-Bilanzkreise. Das
[
stimmt wörtlich überein, dann werden so viele Zeichen wie möglich verbraucht. Wenn alle nachfolgenden[
übereinstimmen, wird die Übereinstimmung zum$2
Stapel hinzugefügt . Wenn dieser Stapel nicht leer ist, können wir eine Übereinstimmung finden]
, indem wir die Übereinstimmung vom Stapel entfernen. Andernfalls können wir alles abgleichen, was nicht a ist]
(das[
wurde bereits früher abgeglichen). Das Match stoppt, wenn es dem Matching]
für das entspricht[
, da der$2
Stack zu diesem Zeitpunkt (jetzt) leer ist.Die Substitution besteht aus zwei durch Komma getrennten Variablen. Der
.
gibt an, dass die Länge der Variablen anstelle ihres Werts verwendet werden soll. Das>
bedeutet, dass die Variable im Hinblick auf das rechte Trennzeichen und nicht auf die Übereinstimmung ausgewertet werden soll. Die$`
Variable bezieht sich auf das Präfix der Übereinstimmung, was bedeutet, dass$.`
die Position des[
; Der>
Modifikator ändert dies auf das Präfix des rechten Trennzeichens der Übereinstimmung, das die Position der Übereinstimmung angibt]
.quelle
Jelly ,
22 21 2019 BytesZweifellos ist es in Jelly möglich, die Hälfte dieser Byteanzahl ...
Ein monadischer Link, der eine Liste von Zeichen akzeptiert und eine Liste von Ganzzahlen zurückgibt.
Als vollständiges Programm akzeptiert es einen String und gibt eine Darstellung dieser Liste aus.
Probieren Sie es online!
Wie?
quelle
œ¿
und seine Verwandten zu verwenden, konnte aber keine Lösung finden. Dies war am nächsten ich bekam.SWI-Prolog 254 Bytes
Beispiel:
quelle
C (gcc) 87 Bytes
Probieren Sie es online!
Erläuterung
Um die Zeichenfolgenindizes der öffnenden Klammer zu verfolgen, wird die Eingabezeichenfolge überschrieben und als Stapel verwendet.
Probieren Sie es online!
quelle
Gelee , 20 Bytes
Probieren Sie es online!
Es hat eine Nebenwirkung auf das Register, ich hoffe, es darf eine Funktion sein.
quelle
Japt v1.4.5, 23 Bytes
Probieren Sie es online!
Ausgepackt und wie es funktioniert
Die Ausgabe ist ein abgeflachtes Array von
[closing index, opening index]
. Wenn die umgekehrte Reihenfolge nicht gewünscht ist,w
erledigt das Hinzufügen am Ende den Job (+1 Byte).quelle
Common Lisp, 95 Bytes
Lange Version Testsdruckt:
quelle
K (ngn / k) ,
3837 BytesProbieren Sie es online!
{
}
Funktion mit Argumentx
"[]"=\:x
zwei boolesche Listen für die Vorkommen von"["
und"]"
a:
zuweisena
|/
Boolesches "oder" der beiden Listen&
Wo (bei welchen Indizes) stehen die Klammern?b:
zuweisenb
-/
eine Liste mit 1 für"["
, -1 für"]"
und 0 überall sonst+\
Teilsummen|':
paarweise Maxima (jedes Element wird mit dem vorherigen maximal, das ursprüngliche Element bleibt gleich)Dies repräsentiert die Klammertiefe für jedes Zeichen. Wir indizieren es mit
b
(Nebeneinander indizieren) und erhalten die Klammertiefe nur für die Klammern.=
"group by" - Ein Wörterbuch, das die Tiefen der Indizes abbildet, bei denen sie auftreten,/
Verketten Sie die Werte im Wörterbuch, ohne die Schlüssel zu beachten0N 2#
Umwandlung in eine zweispaltige Matrix (Liste der Listen)b@
Indexb
mit jedem Element der Matrixquelle
Jelly ,
20 bis18 Bytes1 Byte dank @ user202729 gespeichert, der mich informiert, dass
µ€
ist)
Probieren Sie es online!
Nachdem ich einige Stunden damit gerungen habe, um es zum Laufen zu bringen ... bin ich ehrlich überrascht, dass es so kurz geworden ist :-)
Erläuterung
quelle
CJam , 25 Bytes
Überraschend wettbewerbsfähig - verliert nur gegen Japt und Jelly [ Edit : und Charcoal und Stax :(]
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 109 Bytes
Probieren Sie es online!
quelle
Pyth ,
2826 BytesTestsuite.
Im Moment ist es länger als der Ansatz von Mnemonic, aber ich habe das Gefühl, dass ich ein bisschen Golf spielen kann und glücklicherweise werden auch keine pythonisch-imperativen Strukturen wie diese verwendetV
. Die ursprüngliche Version war 36 Bytes und hatte auch zahlreiche Fehler.Wie es funktioniert
quelle
{I#.e,t+lhfSI/LT`Y._>Q
Fast funktioniert für 22 Bytes ...Perl 5, 53 Bytes
Führen Sie so
perl -nE '<above code snippet>'
. Übernimmt die Eingabe über stdin.Wie üblich ist die optimale Perl-Lösung für das Problem ein regulärer Ausdruck. Wir versuchen, jedes Klammerpaar, das keine Paare enthält, mit einer ziemlich albern aussehenden Zeichenklasse (
s/\[[^][]*\]/.../
) abzugleichen . Wenn die Übereinstimmung erfolgreich ist, ersetzen wir den übereinstimmenden Text1
immer und immer wieder durch die Ziffer, damit wir diese Klammern nicht versehentlich erneut zuordnen, und drucken die Indexe der Übereinstimmung aus. Spülen und wiederholen.quelle
Stax , 13 Bytes
Führen Sie es aus und debuggen Sie es
Es verwendet den Eingabestapel, um offene Klammerpaare zu verfolgen. Hier ist das Programm entpackt, ungolfed und kommentiert.
Führen Sie dieses aus
quelle
Holzkohle , 20 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Durchlaufen Sie den impliziten Bereich der Länge der Eingabezeichenfolge.
Schalte den aktuellen Charakter ein.
In diesem
[
Fall verschieben Sie den aktuellen Index in die vordefinierte Array-Variable.Wenn es eine ist
]
Fall ist, lassen Sie den neuesten Index aus der Array-Variablen ausgeben und drucken Sie ihn und den aktuellen Index, getrennt durch ein Komma, und beginnen Sie eine neue Zeile. Alternative Ausgabeformate würden, falls akzeptabel, einige Bytes sparen:]I⟦⊟υιω
Speichert 2 Bytes, druckt jedoch jeden Index in einer separaten Zeile, wobei die Indexpaare doppelt beabstandet werden.]I⟦⊟υι
Die Indizes werden einfach in separaten Zeilen gedruckt, wodurch es schwierig ist, sie zu unterscheiden.quelle