Il tuo obiettivo: data una stringa di parentesi, genera la distanza minima di Damerau-Levenshtein richiesta per trasformare la stringa di input in una stringa in cui le parentesi sono bilanciate.
Ingresso
La stringa di input conterrà solo parentesi e nessun altro carattere. Cioè, è una combinazione di uno qualsiasi dei personaggi in (){}[]<>
. È possibile accettare input come una stringa o una matrice di caratteri. Non è possibile fare altre ipotesi sulla stringa di input; potrebbe essere arbitrariamente lungo (fino alla dimensione massima supportata dalla tua lingua), potrebbe essere vuoto, le parentesi potrebbero essere già bilanciate, ecc.
Distanza Damerau-Levenshtein
La distanza Damerau-Levenshtein tra due stringhe è il numero minimo di inserzioni, eliminazioni, sostituzioni di caratteri singoli e trasposizioni (scambio) di due caratteri adiacenti.
Produzione
L'output dovrebbe essere la distanza minima di Damerau-Levenshtein tra la stringa di input e una stringa in cui le parentesi sono abbinate. L'output dovrebbe essere un numero , non la stringa bilanciata risultante.
Una coppia di parentesi è considerata "abbinata" se le parentesi aperta e chiusa sono nell'ordine giusto e non hanno caratteri al loro interno, come
()
[]{}
O se anche ogni sottoelemento al suo interno è abbinato.
[()()()()]
{<[]>}
(()())
Gli elementi secondari possono anche essere nidificati a più livelli di profondità.
[(){<><>[()]}<>()]
<[{((()))}]>
(Grazie a @DJMcMayhem per la definizione)
Casi test
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(Grazie a @WheatWizard per aver risolto metà dei casi di test)
Questo è code-golf , vince meno byte!
I tuoi invii dovrebbero essere testabili, il che significa che dovrebbe generare un risultato per ogni caso di test in non più di un'ora.
[<>]
o []<>
o<>