En este desafío, se le dará una cadena alfabética como entrada. Definiremos el "anti-string" de una entrada dada para que sea el string con el caso de todas las letras invertidas. Por ejemplo
AaBbbUy -> aAbBBuY
Debe escribir un programa que tome una cadena como entrada y busque la subcadena contigua más larga cuyo anti-cadena también sea una subcadena contigua. Las dos subcadenas no deben superponerse.
Como ejemplo si te dieron la cadena
fAbbAcGfaBBagF
Las partes en negrita serían el par de cuerdas anti-cuerda más largo.
Su programa debe, una vez que ha encontrado el par, colapsarlos en un solo carácter cada uno. Debería hacer esto eliminando todos menos el primer carácter de cada subcadena. Por ejemplo, la cadena de arriba
fAbbAcGfaBBagF
se convertiría
fAcGfagF
Luego, su programa debe repetir el proceso hasta que el par más largo de cadena anti-cadena sea un solo carácter o más corto.
Por ejemplo, trabajando con la misma cadena, el nuevo par más largo después del colapso es
fAcGfagF
Entonces colapsamos la cuerda nuevamente
fAcGag
Ahora la cadena no se puede contraer más, por lo que deberíamos generarla.
En el caso de un empate entre pares candidatos (ejemplo AvaVA
) puede hacer una reducción ( AaA
o AvV
, pero no Aa
).
Este es el código de golf, por lo que las respuestas se puntuarán en bytes, con menos bytes mejor.
Casos de prueba
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Motivaciones
Si bien este problema puede parecer arbitrario, en realidad es un problema que encontré al hacer el código para procesar polígonos fundamentales. Este proceso puede usarse para reducir un polígono fundamental a un n -gon más pequeño. Después de que lo probé, pensé que sería un bonito y pequeño golf.
aaaAAAaaa -> aAaaa
?