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.
fuente
aaaAAAaaa -> aAaaa
?Respuestas:
Perl,
6461 bytesIncluye
+1
parap
fuente
JavaScript (ES6), 200 bytes
Utiliza matrices de caracteres para E / S.
Pruébalo en línea!
fuente
Retina , 119 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Duplique la entrada y voltee el caso de la primera copia.
Si no hay anti-cadenas en absoluto, elimine el duplicado invertido.
Enumere todas las posibles cadenas de caracteres contraídas.
Ordénelos en orden de longitud, tome el anti-string más corto (es decir, el anti-string más largo) y repita hasta que todos los anti-string se hayan colapsado.
fuente
Python 3 ,
189181bytesGracias a Jonathan Frech por hacerlo puro de una sola línea.
Pruébalo en línea!
Mi propia versión, ahora obsoleta (189 bytes):
Pruébalo en línea!
any()
para romper los bucles anidados temprano, yset()
para el objeto global mutable utilizable en la comprensión. El resto es solo la implementación directa de los requisitosstr.swapcase
.Python 2 , 160 bytes
Pruébalo en línea!
Resulta que el bucle for anidado regular con ruptura temprana
return
es mucho más corto que el truco "inteligente"any
.fuente
set
como función predeterminada no colisionará con más llamadas, ya que creo que su código muestra completamente el conjunto como vacío.x
se quedaría sin estar vacío. Como lo tienes, creo que cumple.C (gcc) ,
240238227225222216 bytesoncetrece bytes; golfb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
ab|=abs(S[p+m]-S[q+m])-32
ab|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
afor(...;...;S[++p]=S[p+L]);
.Pruébalo en línea!
fuente
Python 2 , 180 bytes
Pruébalo en línea!
fuente
Stax , 30 bytes
Ejecutar y depurarlo
La representación ascii correspondiente del mismo programa es esta.
Utiliza un enfoque regex. Regex repetidamente reemplazo de cadena. Los construye a partir de cada subcadena contigua del valor actual. Por ejemplo, para la entrada
fAbbAcGfaBBagF
, una de las subcadenas esAbbA
, en cuyo caso la expresión regularAbbA(.*)aBBa
se reemplazará porA$1a
.fuente
Wolfram Language (Mathematica) , 148 bytes
Pruébalo en línea!
fuente
Japt
-h
, 33 bytesIntentalo
fuente