Seu objetivo: Dada uma sequência de colchetes, produza a distância mínima de Damerau-Levenshtein necessária para transformar a sequência de entrada em uma sequência em que os colchetes estejam balanceados.
Entrada
A sequência de entrada conterá apenas colchetes e nenhum outro caractere. Ou seja, é uma combinação de qualquer um dos caracteres (){}[]<>
. Você pode receber a entrada como uma sequência ou uma matriz de caracteres. Você não pode fazer outras suposições sobre a sequência de entrada; pode ser arbitrariamente longo (até o tamanho máximo suportado pelo seu idioma), pode estar vazio, os colchetes já devem estar balanceados etc.
Distância Damerau-Levenshtein
A distância Damerau-Levenshtein entre duas cadeias é o número mínimo de inserções, exclusões, substituições de caracteres únicos e transposições (troca) de dois caracteres adjacentes.
Saída
A saída deve ser a distância mínima de Damerau-Levenshtein entre a sequência de entrada e uma sequência na qual os colchetes são correspondentes. A saída deve ser um número , não a sequência balanceada resultante.
Um par de colchetes é considerado "correspondente" se os colchetes de abertura e fechamento estiverem na ordem correta e não tiverem caracteres dentro deles, como
()
[]{}
Ou se todos os subelementos dentro dele também corresponderem.
[()()()()]
{<[]>}
(()())
Os subelementos também podem ser aninhados em várias camadas de profundidade.
[(){<><>[()]}<>()]
<[{((()))}]>
(Obrigado a @DJMcMayhem pela definição)
Casos de teste
Input Possible Balanced Output
Empty Empty 0
[](){}<> [](){}<> 0
[(){}<> [(){}<>] 1
[(]) []() 1
[[[[[[[[ [][][][] 4
(](<>}[>(}>><(>(({}] ()(<>)[(<><>){}] 7
>]{])< []{()} 3
([)}}>[ (){}<> 4
{<((<<][{{}>[<) <>(<<[]>{}>[]) 5
{><({((})>}}}{(}} {<><({()})>}{}{()} 4
(](<)>}[>(}>>{]<<(]] (<()<><<>()>>[])<()> 9
}})( {}() 2
(Obrigado ao @WheatWizard por resolver metade dos casos de teste)
Isso é código-golfe , o menor número de bytes vence!
Seus envios devem ser testáveis, ou seja, devem gerar um resultado para cada caso de teste em não mais de uma hora.
[<>]
ou []<>
ou<>