Neste desafio, você receberá uma sequência alfabética como entrada. Definiremos o "anti-string" de uma determinada entrada como a string com o caso de todas as letras invertidas. Por exemplo
AaBbbUy -> aAbBBuY
Você deve escrever um programa que use uma string como entrada e procure a substring contígua mais longa cuja anti-string também seja uma substring contígua. As duas substrings não devem se sobrepor.
Como exemplo, se você recebeu a string
fAbbAcGfaBBagF
As partes em negrito seriam o par anti-corda mais longo.
Seu programa deve, uma vez encontrado o par, recolhê-los em um único caractere cada. Isso deve ser feito removendo todos, exceto o primeiro caractere de cada substring. Por exemplo, a sequência acima
fAbbAcGfaBBagF
se tornaria
fAcGfagF
Seu programa deve repetir o processo até que o par mais longo de cadeia de caracteres seja um único caractere ou menor.
Por exemplo, trabalhando com a mesma string, o novo par mais longo após o colapso é
fAcGfagF
Então, cortamos a corda novamente
fAcGag
Agora, a string não pode ser recolhida ainda mais, portanto devemos produzi-la.
No caso de empate entre pares candidatos (exemplo AvaVA
), você pode fazer uma redução ( AaA
ou AvV
, mas não Aa
).
Isso é código-golfe, então as respostas serão pontuadas em bytes, com menos bytes sendo melhores.
Casos de teste
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Motivações
Embora esse problema possa parecer arbitrário, é realmente um problema que encontrei ao criar código para processar polígonos fundamentais. Esse processo pode ser usado para reduzir um polígono fundamental a um n- polígono menor . Depois que eu tentei, pensei que seria um bom pequeno golfe.
aaaAAAaaa -> aAaaa
?