Dans ce défi, vous recevrez une chaîne alphabétique en entrée. Nous définirons "l'anti-chaîne" d'une entrée donnée comme étant la chaîne avec la casse de toutes les lettres inversées. Par exemple
AaBbbUy -> aAbBBuY
Vous devez écrire un programme qui prend une chaîne en entrée et recherche la sous-chaîne contiguë la plus longue dont l'anti-chaîne est également une sous-chaîne contiguë. Les deux sous-chaînes ne doivent pas se chevaucher.
Par exemple, si vous avez reçu la chaîne
fAbbAcGfaBBagF
Les parties en gras seraient la paire anti-cordes la plus longue.
Votre programme doit, une fois qu'il a trouvé la paire, les réduire en un seul caractère chacun. Il doit le faire en supprimant tout sauf le premier caractère de chaque sous-chaîne. Par exemple, la chaîne ci-dessus
fAbbAcGfaBBagF
deviendrait
fAcGfagF
Votre programme doit ensuite répéter le processus jusqu'à ce que la paire anti-chaîne la plus longue soit un seul caractère ou plus courte.
Par exemple, en travaillant avec la même chaîne, la nouvelle paire la plus longue après l'effondrement est
fAcGfagF
Donc, nous réduisons à nouveau la chaîne
fAcGag
Maintenant, la chaîne ne peut plus être réduite, nous devons donc la sortir.
Dans le cas d'une égalité entre les paires de candidats (exemple AvaVA
), vous pouvez effectuer l'une AaA
ou l' autre réduction ( ou AvV
, mais pas Aa
).
Il s'agit de code-golf donc les réponses seront notées en octets avec moins d'octets mieux.
Cas de test
fAbbAcGfaBBagF -> fAcGag
AvaVA -> AaA / AvV
QQQQQQQ -> QQQQQQQ
fAbbAcQQQQaBBacqqqqA -> fAbcQBcq
gaq -> gaq
fAbbAcGfaBBagFaBBa -> fcGaBBag
Les motivations
Bien que ce problème puisse sembler arbitraire, c'est en fait un problème que j'ai rencontré lors de la création de code pour traiter les polygones fondamentaux. Ce processus peut être utilisé pour réduire un polygone fondamental à un n -gon plus petit . Après l'avoir essayé, j'ai pensé que cela ferait un joli petit golf.
la source
aaaAAAaaa -> aAaaa
?Réponses:
Perl,
6461 octetsComprend
+1
pourp
la source
JavaScript (ES6), 200 octets
Utilise des tableaux de caractères pour les E / S.
Essayez-le en ligne!
la source
Rétine , 119 octets
Essayez-le en ligne! Le lien inclut des cas de test. Explication:
Dupliquez l'entrée et retournez le cas de la première copie.
S'il n'y a pas d'anti-chaînes du tout, supprimez le double retourné.
Liste toutes les anti-chaînes réduites possibles.
Triez-les par ordre de longueur, prenez la plus courte (c'est-à-dire la plus longue anti-chaîne) et répétez jusqu'à ce que toutes les anti-chaînes aient été réduites.
la source
Python 3 ,
189181 octetsNous remercions Jonathan Frech pour l'avoir rendu pur doublure.
Essayez-le en ligne!
Ma propre version, désormais obsolète (189 octets):
Essayez-le en ligne!
any()
pour briser les boucles imbriquées tôt, etset()
pour un objet global mutable utilisable dans la compréhension. Le reste n'est que la simple mise en œuvre des exigences à l'aidestr.swapcase
.Python 2 , 160 octets
Essayez-le en ligne!
Il s'avère que la boucle imbriquée régulière avec une percée précoce
return
est beaucoup plus courte que l'astuce "intelligente"any
.la source
set
tant que fonction par défaut ne entrera pas en collision avec d'autres appels, car je pense que votre code affiche complètement l'ensemble pour qu'il soit vide.x
ne serait pas vide. Comme vous l'avez, je pense qu'il est conforme.C (gcc) ,
240238227225222216 octetsonzetreize octets; jouéb|=S[p+m]!=S[q+m]+32-(S[q+m]>90)*64
au golfb|=abs(S[p+m]-S[q+m])-32
àb|=32-S[p+m]+S[q+m]&63
.for(...;...;p++)S[p+1]=S[p+L];
au golffor(...;...;S[++p]=S[p+L]);
.Essayez-le en ligne!
la source
Python 2 , 180 octets
Essayez-le en ligne!
la source
Stax , 30 octets
Exécuter et déboguer
La représentation ascii correspondante du même programme est la suivante.
Il utilise une approche regex. Il regex à plusieurs reprises le remplacement de chaîne. Il les construit à partir de chaque sous-chaîne contiguë de la valeur actuelle. Par exemple pour l'entrée
fAbbAcGfaBBagF
, l'une des sous-chaînes estAbbA
, auquel cas l'expression régulièreAbbA(.*)aBBa
sera remplacée parA$1a
.la source
Wolfram Language (Mathematica) , 148 octets
Essayez-le en ligne!
la source
Japt
-h
, 33 octetsEssayez-le
la source