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.
fonte
aaaAAAaaa -> aAaaa
?Respostas:
Perl,
64bytesInclui
+1
parap
fonte
JavaScript (ES6), 200 bytes
Usa matrizes de caracteres para E / S.
Experimente online!
fonte
Retina , 119 bytes
Experimente online! O link inclui casos de teste. Explicação:
Duplique a entrada e vire a caixa da primeira cópia.
Se não houver anti-strings, exclua a duplicada invertida.
Liste todos os possíveis anti-strings recolhidos.
Classifique-os em ordem de comprimento, pegue o menor (ou seja, o maior anti-fio) e repita até que todos os anti-fios tenham sido recolhidos.
fonte
Python 3 ,
189181 bytesAgradecemos a Jonathan Frech por torná-lo puro one-liner.
Experimente online!
Minha própria versão, agora obsoleta (189 bytes):
Experimente online!
any()
romper loops aninhados cedo eset()
para objetos globais mutáveis que possam ser utilizados na compreensão. O resto é apenas a implementação direta dos requisitos usandostr.swapcase
.Python 2 , 160 bytes
Experimente online!
Acontece que o loop aninhado regular com quebra antecipada
return
é bem mais curto do que o truque "inteligente"any
.fonte
set
padrão mutável como função não colidirá com outras chamadas, pois acho que seu código exibe o conjunto totalmente vazio.x
seria deixado para trás por não estar vazio. Como você tem, eu acho que está em conformidade.C (gcc) ,
240238227225222216 bytesonzetreze bytes; jogou golfeb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
parab|=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];
parafor(...;...;S[++p]=S[p+L]);
.Experimente online!
fonte
Python 2 , 180 bytes
Experimente online!
fonte
Stax , 30 bytes
Execute e depure
A representação ascii correspondente do mesmo programa é essa.
Ele usa uma abordagem regex. Regex repetidamente substituição de string. Ele os cria a partir de cada substring contíguo do valor atual. Por exemplo, para a entrada
fAbbAcGfaBBagF
, uma das substrings éAbbA
, nesse caso a regexAbbA(.*)aBBa
será substituída porA$1a
.fonte
Wolfram Language (Mathematica) , 148 bytes
Experimente online!
fonte
Japonês
-h
, 33 bytesTente
fonte