Ihr Ziel: Ausgeben des minimalen Damerau-Levenshtein-Abstands für eine Reihe von Klammern, damit aus der Eingabe-Zeichenfolge eine Zeichenfolge mit ausgeglichenen Klammern wird.
Eingang
Die Eingabezeichenfolge enthält nur Klammern und keine anderen Zeichen. Das heißt, es ist eine Kombination aller Zeichen in (){}[]<>
. Sie können Eingaben entweder als Zeichenfolge oder als Array von Zeichen annehmen. Sie dürfen keine anderen Annahmen über die Eingabezeichenfolge treffen. Es kann beliebig lang sein (bis zu der von Ihrer Sprache unterstützten Maximalgröße), leer sein, die Klammern bereits ausgeglichen sein usw.
Damerau-Levenshtein Entfernung
Der Damerau-Levenshtein-Abstand zwischen zwei Zeichenfolgen ist die minimale Anzahl von Einfügungen, Löschungen, Ersetzungen einzelner Zeichen und Transpositionen (Vertauschen) zweier benachbarter Zeichen.
Ausgabe
Die Ausgabe sollte der minimale Damerau-Levenshtein-Abstand zwischen der Eingabezeichenfolge und einer Zeichenfolge sein, in der die Klammern übereinstimmen. Die Ausgabe sollte eine Zahl sein , nicht die resultierende ausgeglichene Zeichenfolge.
Ein Klammerpaar wird als "übereinstimmend" betrachtet, wenn die öffnende und schließende Klammer in der richtigen Reihenfolge sind und keine Zeichen enthalten, z
()
[]{}
Oder wenn jedes Unterelement in ihm auch übereinstimmt.
[()()()()]
{<[]>}
(()())
Unterelemente können auch mehrere Ebenen tief verschachtelt werden.
[(){<><>[()]}<>()]
<[{((()))}]>
(Danke an @DJMcMayhem für die Definition)
Testfälle
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(Danke an @WheatWizard für die Lösung der Hälfte der Testfälle)
Das ist Code-Golf , die wenigsten Bytes gewinnen!
Ihre Einsendungen sollten testbar sein, das heißt, sie sollten in nicht mehr als einer Stunde ein Ergebnis für jeden Testfall ausgeben.
[<>]
oder []<>
oder<>