Ayons une fonction qui prend une chaîne et supprime toutes les paires de caractères identiques adjacents. Par exemple
Notez que lorsque deux paires se chevauchent, nous n'en supprimons qu'une seule.
Nous appellerons une chaîne parfaitement appariée si une application répétée donne finalement la chaîne vide. Par exemple, la chaîne au-dessus de n'est pas parfaitement appariée car si nous appliquons à nouveau , nous obtenons toujours . Cependant, une chaîne comme est parfaitement appariée car si nous appliquons trois fois, nous obtenons la chaîne videf a b a e a b b c c a d d e f
Votre tâche consiste à écrire un code informatique parfaitement couplé qui prend une chaîne (ASCII imprimable) et décide s'il est parfaitement couplé. Le bytestring de votre source doit être lui-même une chaîne parfaitement appariée , bien que votre code ne doive pas nécessairement être limité à ASCII imprimable.
Vous pouvez générer deux valeurs distinctes: une pour le cas où l'entrée est parfaitement appariée et une autre pour les cas où elle ne l'est pas.
Il s'agit d'une question de code-golf, donc les réponses seront notées en fonction de la taille en octets de leur source, moins d'octets étant meilleurs.
Cas de test
la source
Réponses:
Haskell,
146124 octetsSans commentaires. Renvoie soit
True
ouFalse
.Essayez-le en ligne!
Edit: -22 octets grâce à @Cat Wizard
la source
Python 2 , 94 octets
Essayez-le en ligne!
L'étape de mise à jour entière
ss=[cc+ss,ss[1:]][cc==ss[:1]]
s'annule juste=[+,[
.la source
05AB1E ,
26 24 22 2018 octets-2 octets grâce aux ovs . Renvoie 0 si la chaîne est parfaitement appariée, 1 sinon.
Essayez-le en ligne!
Versions précédentes
Celui-ci repose uniquement sur un comportement indéfini (il n'y a donc pas de "code mort"), et génère [['0']] pour les chaînes parfaitement appariées et [['1']] pour les chaînes non parfaitement adaptées:
Et la version de 22 octets, expliquée, qui est juste ce qui précède mais n'abuse pas de l'UB et donne des valeurs sensées .
la source
Cubix , 54 octets
Ne produit rien si la chaîne est parfaitement appariée et
1
sinon.Essayez-le ici
Cubifié
Explication
La plupart des caractères sont nécessaires pour coupler parfaitement le code. En remplaçant ceux par
.
(no-op), nous obtenonsCela peut être divisé en trois étapes:
i
et la?
).la source
V ,
20, 18 octetsEssayez-le en ligne!
Hexdump:
Sorties 0 pour vérité, 1 pour fausse. Merci à nmjcman101 pour avoir économisé indirectement 2 octets.
la source
^$
par.
et retourner 0 pour la vérité, autre chose pour la fausse? Je suis un peu brumeux sur les règles après ne pas avoir fait ça pendant un moment.R ,
142126 octetsLogique plus stricte et quelques octets de commentaires golfés par @Giuseppe
Essayez-le en ligne!
Original:
Essayez-le en ligne!
Fonction détecteur récursif suivie d'un commentaire avec tous les caractères de la fonction dans l'ordre inverse.
la source
APL (Dyalog) , 38 octets
Essayez-le en ligne!
la source
Rétine ,
2826 octetsEssayez-le en ligne!
Sorties
`C1\).(`+0`C1\).(`+
pour fausse et`C1\).(`+1`C1\).(`+
pour cas véridiques.la source
Brain-Flak ,
228200 octetsEssayez-le en ligne!
C'est un peu une preuve de concept. Cela pourrait probablement être plus court. Il n'utilise cependant aucun commentaire.
Sorties
0,0
si l'entrée est parfaitement appariée et0,1
si l'entrée ne l'est pas.la source
sed 4.2.2 , 34 octets
Essayez-le en ligne!
Les chaînes appariées donnent une sortie vide, celles non appariées donnent
ct:
La version palindromique triviale est à 32
:;ss(.)\1ss;t;/./cc/./;t;1\).(;:
. L'ancienne solution a été:;ss((..??\??))\1ss1;t;;/./cc/./t:
(modifiée parce que la version actuelle estc
moins utilisée , edit: yay maintenant il n'y a qu'un seul caractère aprèsc
: D)(notez qu'il
;
s'agit du séparateur d'instructions):
déclare une étiquette vide:t
déclare l'étiquettet
ss((..??\??))\1ss1
est une substitution, dans sed, vous pouvez changer le délimiteur en une substitution, et c'est ce que j'ai fait en le changeants
, donc ce que cela fait est de remplacer le premier (comme indiqué par le1
à la fin)match de
((..??\??))\1
.
n'importe quel personnage.??
suivi d'un caractère facultatif facultatif\??
et une option?
avec rien
Maintenant, cette substitution est associée à elle-même, donc les
;
s avant et après sont également annulést
et retournez sur l'étiquette jusqu'à ce qu'il n'y ait plus de substitutions réussies/..?/
si.
(caractère générique) suivi d'.?
un caractère facultatif correspondcc
changer le tampon enc
la source
Brain-Flak ,
112 110108 octetsEssayez-le en ligne!
Ceci est basé sur ma réponse de Est-ce que les crochets correspondent? .
J'ai essayé de ne pas utiliser de commentaires, mais je suis resté coincé en essayant de faire la
{}
paire de nilades pop ( ). Le problème réside dans la façon la plus simple de coupler une paire de supports est de l'entourer dans une autre paire du même type. Bien que cela soit facile pour les autres nilades, la{...}
monade crée des boucles. Pour quitter la boucle, vous devez appuyer sur un 0, mais une fois que vous avez quitté la boucle, vous devez ensuite faire apparaître le 0, ce qui aggrave le problème.La solution pré-appariée de 66 octets est:
Essayez-le en ligne!
Sorties
1
ou1,0
si l'entrée est un appariement parfait,0,0
sinon.Version sans commentaire, 156 octets
Essayez-le en ligne!
Comme l'a souligné Cat Wizard, la première réponse ne fonctionne pas pour tous les interprètes, car tous ne gèrent pas les
#
commentaires. Cette version ne contient aucun commentaire.la source
Japt,
2422 octetsSorties
false
pour véridique ettrue
pour falsey.Essayez-le
la source
«e"(.)%1
marcherait?«
.Brain-Flak , 96 octets
Essayez-le en ligne!
Ne produit rien si l'entrée est parfaitement appariée, et
0
sinon.Version (d'origine) non parfaitement appariée:
Essayez-le en ligne!
la source
Haskell , 66 octets
Essayez-le en ligne!
L'assistant Cat a enregistré 6 octets.
la source
Ajouter ++ , 146 octets
Essayez-le en ligne!
Fait amusant: c'était 272 octets bien avant le début de l'explication, maintenant il bat Java.
Sorties
True
pour cordes parfaitement équilibrées etFalse
autresÀ ma grande satisfaction, cela bat la version ennuyeuse de palindromisation de 2 octets, pour éviter que le résultat ne soit imprimé deux fois. J'ai également cherché à avoir le moins de code mort possible, néanmoins il reste quelques sections commentées et le code se termine avec un code d'erreur de 1 , après avoir imprimé la valeur correcte.
NB : Un bug avec les
BF
commandes a été corrigé pendant le développement de cette réponse.Comment ça marche
*
BF
^
D,ff,@^^,
;;
€
{...}
{...}
qui est de 4 octets de plus.
`
xx:?
aa:1
Ensuite, nous entrons dans notre boucle while:
Une boucle while est une construction dans Add ++: elle opère directement sur le code, plutôt que sur les variables. Les constructions prennent une série d'instructions de code, séparées avec
,
lesquelles elles opèrent. Les instructions while et if prennent également une condition directement avant la première,
qui consiste en une seule instruction valide, telle qu'une commande infixe avec des variables. Une chose à noter: la variable active ne peut pas être omise de la condition.aa*bb
L'un des plus gros inconvénients d'Add ++ est le manque d'instructions composées, ce qui nécessite d'avoir une deuxième variable de boucle. Nous attribuons nos deux variables:
Avec le code
|
B
xx:yy
Nous arrivons ensuite à notre déclaration finale:
la source
JavaScript (ES6), 76 octets
Renvoie un booléen.
Essayez-le en ligne!
Suggéré par @Shaggy: 58 octets en retournant une chaîne vide pour un appariement parfait ou en lançant une erreur sinon.
la source
Wolfram Language (Mathematica) ,
7064 octetsEssayez-le en ligne!
Sans commentaires, 92 octets
Essayez-le en ligne!
la source
Lua , 178 octets
Essayez-le en ligne!
Bien que ce soit une solution terriblement longue, cela fait un peu usage des bizarreries spécifiques à Lua. Il s'agit en fait d'un algorithme de pile de force brute minimisé. Le programme est rendu compliqué par le fait que les modèles de Lua ne permettent pas de remplacer les paires et que l'expression régulière n'est pas intégrée.
Explication:
la source
Gol> <> , 30 octets
Essayez-le en ligne!
Tout ce qui suit le premier
B
est un excès de code et n'est pas exécuté. Une fonction qui renvoie le haut de la pile comme1
si l'entrée était un appariement parfait,0
sinon.Explication:
la source
Cubix , 30 octets
Essayez-le en ligne!
Sort
1
si la chaîne est parfaitement appariée et rien d'autre.Cubifié
Simplifié
La logique et la structure générale sont les mêmes que dans la réponse de Mnemonic, mais sans vérification explicite de la chaîne vide.
la source
Haskell , 92 octets
Essayez-le en ligne!
La réponse de @ nimi est plutôt cool, elle n'utilise aucun commentaire. Celui-ci est plus court mais utilise un commentaire.
La réponse de @ xnor est également plutôt cool, elle utilise des commentaires et est plus courte que celle-ci.
la source
Python 2 , 114 octets
Essayez-le en ligne!
Renvoie
True
les chaînes parfaitement appariées,False
sinon.(En fait, il ne parvient pas à se vérifier, car
(.)
il ne correspondra pas aux sauts de ligne dans le code!Il s'agit d'une version parfaitement appariée de:
pour lequel une perfectionnement «paresseux»
code + '##' + f(code[::-1])
donnerait 120 octets. (Autrement dit, renommer les variables, etc. pour introduire plus de paires réduites dans la moitié des commentaires du code a sauvé 6 octets.)la source
Gelée ,
26 2422 octetsEssayez-le en ligne!
Étrangement semble fonctionner sans déplacer le code en arrière vers un lien inutilisé.
Renvoie 0 si l'entrée est parfaitement appariée, 1 sinon.
Code actif:
la source
Attaché , 82 octets
Essayez-le en ligne!
Rien d'incroyable ici.
Fixpoint
une fonction qui supprime les paires consécutives.la source
Java 8,
158156154 octetsRenvoie un booléen (
true
/false
).-2 octets grâce à @raznagul .
Essayez-le en ligne.
Explication:
la source
s
àn
ajouter un second espace pourreturn s.isEmpty
vous pouvez retirers n
du commentaire, économiser 2 octets au total.