Befestigen Sie die Zahnspangen usw

15

Wenn Sie dies akzeptieren möchten, müssen Sie die Mindestanzahl von Klammern, Klammern und Klammern hinzufügen , damit eine bestimmte Zeichenfolge (die nur Klammern, Klammern und Klammern enthält) die richtige Klammerzuordnung aufweist. Die Anzahl der hinzugefügten Symbole muss durch den maximalen Abstand zwischen den Klammernpaaren getrennt werden. Sie müssen nur eine richtige Antwort zurückgeben, die diesen beiden Regeln entspricht. Sollten weitere Bindungen bestehen, können diese nach Ihrem Ermessen unterbrochen werden.

Beispiele:

input      output
                          // Empty String is a legal input
[          []             // Boring example
[()]       [()]           // Do nothing if there's nothing to be done
({{        ({{}})         // NOT (){}{} (0 + 0 + 0). Maximum distance is 4 + 2 + 0, ({{}})
[([{])]}   {[([{}])]}     // NOT [([])]{[([])]} or similar

Sie können ein Programm oder eine Funktion schreiben , die Eingabe über STDIN als Zeichenfolgenargument für Ihre Funktion empfangen, die die Ausgabe als Zeichenfolge zurückgibt oder sie an STDOUT (oder die nächstgelegene Alternative) ausgibt. Optional können Sie eine einzelne nachgestellte Newline in die Ausgabe aufnehmen.

Sie können davon ausgehen, dass die Eingabezeichenfolge nur aus den folgenden 6 Zeichen besteht (oder nicht): [](){}(Sie müssen nicht unterstützen <>)

Dies ist , das kürzeste Programm gewinnt. Standardlücken sind natürlich verboten .

durron597
quelle
Wollten Sie den Titel direkt unter dem eigentlichen Titel wiederholen oder den Tag direkt über den eigentlichen Tags wiederholen? Ich frage Sie nur, ob Sie aus der Sandbox kopiert und vergessen haben, sie zu entfernen.
Rainbolt
@ Rainbolt Das erste Nein (Sandkasten), das
zweite
1
@AlexA. Ich kann sehen, wie sie sich in geringfügigen Punkten unterscheiden, aber ich denke, sie sind zu ähnlich, um als separate Fragen betrachtet zu werden.
NinjaBearMonkey
Meinetwegen. Es ist sicher nicht trocken und ich werde nicht weitermachen, es zu schließen, wenn andere sich dagegen entscheiden.
NinjaBearMonkey
Ich würde es als anders betrachten. Zur Wiedereröffnung gewählt.
Nderscore

Antworten:

1

Python 2 - 198

Ich hatte gehofft, einige der Erkenntnisse ein wenig zu verbessern, aber jetzt nicht viel Zeit zu haben, um wirklich verschiedene Methoden zu testen.

s="()[]{}";f=s.find
def F(S):
 r=m=""
 for c in S:
    i=f(c)^1
    if i%2:m=c+m;r+=c
    else:
     for d in m:
        if d==s[i]:break
        r+=s[f(d)^1]
     else:r=s[i]+r+c
     m=m[1:]
 for c in m:r+=s[f(c)^1]
 return r

Das OP enthielt kein Beispiel wie {[([{}])]}{[(mit benachbarten Gruppen), aber ob diese Funktionalität erforderlich ist oder nicht, gibt dies das richtige aus{[([{}])]}{[]}

KSab
quelle
Wie ist das 198 Bytes?
Zacharý
@ ZacharyT, Tabs ( \t) werden als 4 Leerzeichen beim Stapelüberlauf formatiert, aber ich wechsle tatsächlich Tabs und Leerzeichen (Sie können dies für Einrückungsstufen in Python 2 tun, nicht 3), so dass die erste Stufe die [space]zweite ist, die [tab]dritte die [tab][space]vierte Stufe ist [tab][tab]. Das Eingeben des Codes mit Leerzeichen gibt mir 227 von hier aus mothereff.in/byte-counter , und ich zähle 10 Tabs, also 227 - (3 * 10) = 197. Huh, ich denke, ich habe tatsächlich um einen Weg zurück zu viel gezählt, als ich hat das geposted.
KSab
DANG! Das ist ein wirklich guter Trick. (Eingabe am Zeilenende). Sie können die untere for-Schleife und die return-Anweisung kombinieren return r+[s[f(c)^1]for c in m], um Bytes zu sparen.
Zacharý
1

Haskell, 513

Die Funktion h. Die vorherige Version gab keine korrekten Antworten für "({{)["und"({{)}}"

import Control.Monad

m '('=')'
m '['=']'
m '{'='}'
m ')'='('
m ']'='['
m '}'='{'

data B=B Char[B]|N[B]|Z B Char[B]
instance Eq B where(==)a b=q a==q b
instance Ord B where(<=)a b=q a<=q b

w(B o s)=o:(s>>=w)++[m o]
v(N k)=k>>=w
n(B _ k)=(sum$n<$>k)+1
q(N k)=sum$n<$>k

u(Z(Z g pc pk) c k)=Z g pc(pk++[B c k])
u(Z(N pk) c k)=N(pk++[B c k])
t(N k)=N k
t z=t$u z

f z c|elem c "([{"=[Z z c[]]
f z@(Z p o k) c|m c==o=[u z]|2>1=(u$Z(Z p o [])(m c)k):f(u z)c
f (N k)c=[Z(N[])(m c)k]

h s=v.minimum$t<$>foldM f(N [])s
Matt
quelle