Alguém nos deu uma sequência, mas todos os caracteres parecidos com colchetes foram transformados em caracteres normais, e não sabemos quais, nem mesmo quantos eram. Tudo o que sabemos é que, se houvesse L1,L2,L3,...,LN
diferentes tipos de colchetes à esquerda e R1,R2,R3,...,RN
diferentes tipos correspondentes de colchetes à direita, todos sendo distintos (2N caracteres de colchete distinto), uma sequência seria válida se for uma das (+ é concatenação normal da sequência):
L1+X+R1
,,L2+X+R2
...,,LN+X+RN
ondeX
é uma sequência válida,X+Y
, ondeX
eY
são cadeias válidas,Qualquer caractere único que não seja um colchete.
A cadeia vazia
Sabemos que eles começaram com uma sequência válida antes de alterar os colchetes e não os transformaram em caracteres que já existiam na sequência. Também havia pelo menos um par para cada suporte. Você pode reconstruir quais caracteres foram originalmente pares de colchetes esquerdo e direito (encontre as seguintes condições Li
e Ri
siga-as)?
Saída dos pares de caracteres entre colchetes. Por exemplo, se (){}[]
realmente houver caracteres entre colchetes, você pode enviar (){}[]
ou {}[]()
ou [](){}
etc. Pode haver várias maneiras de fazer isso para uma sequência, basta retornar uma para que não haja atribuição de colchetes com mais pares (consulte exemplos). Observe que a cadeia de saída sempre deve ter um comprimento uniforme.
Exemplos:
abcc
- c
não pode ser um colchete, pois não há outro caractere com duas ocorrências, mas ab
pode ser um par de colchetes, portanto, você produziria exatamente ab
.
fffff
- qualquer string com no máximo um caractere não pode ter colchetes; portanto, você retornaria a string vazia ou não produziria nada.
aedbedebdcecdec
- essa sequência não pode ter colchetes porque há 1 a, 2 bs, 3 cs, 4 ds e 5 es, portanto, dois caracteres não ocorrem o mesmo número de vezes, o que é um requisito para ter colchetes.
abcd
- possíveis atribuições são ab
, cd
, abcd
, cdab
, adbc
, bcad
, ac
, ad
, bc
e bd
, (bem como a atribuição vazio, o que todos eles têm), mas você deve retornar uma das atribuições mais longas, então você deve retornar abcd
, cdab
, adbc
, ou bcad
.
aabbcc
, abc
- estes dois temos ab
, ac
e bc
como pares válidos. Você deve retornar um desses pares, não importa qual.
abbac
- aeb têm a mesma contagem de caracteres, mas na verdade não podem funcionar, pois um deles ocorre à esquerda e à direita de todas as ocorrências da outra. Não devolva nada.
aabcdb
- cd
e ab
são os dois pares exatos de colchetes, portanto, produzam um cdab
ou outro abcd
.
abcdacbd
- apenas um par pode ser alcançada de uma vez, mas ab
, ac
, bd
, cd
, e ad
são todos os possíveis pares você pode retornar. Não importa qual par você escolher, ele tem um caso em que um único outro personagem está dentro dele, que proíbe quaisquer outros pares, exceto no caso de ad
, onde os outros pares bc
e cb
não são possíveis sozinho, quer, e por isso não pode ser possível com ad
.
Este é o código golf, pelo que o código mais curto em bytes vence. A entrada é de STDIN, se possível, para o seu idioma. Se não for possível, indique o método de entrada na sua resposta.
fonte
abcd
, a saídaadbc
também seria aceitável, certo?Respostas:
Ruby, 373 bytes
Isso usa uma versão em golf do analisador de pilha aqui .
Provavelmente pode ser mais simplificado, mas acho que meu cérebro não aguenta mais.
Todos os casos de teste: http://ideone.com/gcqDkK
Com espaço em branco: http://ideone.com/pLrsHg
Ungolfed (principalmente): http://ideone.com/oM5gKX
fonte