Contexte
Inspiré par I'm a palindrome. Es-tu? , où il est présenté le fait choquant que "ce ()()
n'est pas un palindrome, mais ())(
", je me suis demandé ce que c'est ()()
et la réponse est simple: c'est une corde avec un axe de symétrie vertical!
La tâche
Écrivez un programme ou une fonction qui prend en entrée une chaîne S (ou l'équivalent approprié dans votre langue), vérifie la symétrie le long de l'axe vertical et renvoie une valeur véridique ou fausse en conséquence. Vous pouvez utiliser tous les moyens raisonnables pour prendre l'entrée et fournir la sortie.
Symétrie réflexionnelle
La symétrie réflexive autour d'un axe vertical (ou symétrie gauche-droite) signifie que si vous placez un miroir verticalement au centre exact de la chaîne, l'image réfléchie de la première moitié de la chaîne est identique à la seconde moitié de la chaîne.
Par exemple, les chaînes suivantes sont symétriques par réflexion autour d'un axe vertical:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
alors que les suivants ne le sont pas:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Règlement du concours
• Votre programme ou fonction ne recevra que des caractères ASCII imprimables. Vous pouvez inclure ou non la chaîne vide, (qui est symétrique, bien sûr!) Comme entrée légale, ce qui est mieux pour vous.
• Les caractères ASCII qui peuvent être considérés comme symétriques par rapport aux axes verticaux sont les suivants (notez l'espace initial et la différence entre les majuscules et les minuscules):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Les caractères ASCII qui peuvent être considérés comme «en miroir» et leurs caractères correspondants sont:
()<>[]{}qpbd/\
Notez que, comme ils sont en miroir, vous pouvez avoir à la fois ()
ainsi que )(
, /\
et \/
, etc.
Tous les autres caractères imprimables ASCII doivent être considérés comme asymétriques et sans caractère correspondant en miroir.
• C'est un défi de code-golf : plus votre programme est court, mesuré en octets, mieux c'est, dans n'importe quel langage de programmation.
• Félicitations aux personnes qui produiront un programme symétrique!
Remarque : cette question n'est pas un doublon de "Palindrome pratique" , qui nécessite de vérifier les chaînes palindromiques dans lesquelles les parenthèses sont inversées. Cette question est différente pour deux raisons:
1) c'est une restriction de l'autre question pour ce qui concerne les caractères non parenthèses, puisque seuls les caractères symétriques peuvent apparaître dans l'ordre inverse.
2) Puisqu'il est basé sur le concept de symétrie et non sur un concept de «palindrome commode», les caractères en miroir peuvent apparaître dans les deux ordres, c'est []
-à- dire et ][
, ce qui rend le programme pour le résoudre différent des programmes qui résolvent l'autre problème. .
8
considéré comme "symétrique"?Réponses:
JavaScript (ES6),
130125113 octetsEdit: 5 octets enregistrés grâce à @Arnauld. 11 octets supplémentaires enregistrés grâce à @YairRand.
la source
includes()
? Tels que/[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
.[...s].reverse().map(...)
au golf à:s::[].map().reverse()
si vous êtes d'accord avec l'utilisation de nouvelles fonctionnalités ES-next. lienGelée ,
6962 octetsEssayez-le en ligne!
Tous les cas de test
-7 octets grâce à @JonathanAllan
Comment ça marche
la source
¢FiЀ;1Ạðaµ¢yU⁼
->¢Ff@ð¢yU⁼
...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
soit sans doute plus agréable)Python 3,
211208195 octetsEnregistré 13 octets grâce à Jonathan Allan.
la source
2*x
etrange(7)
; 3. utiliser la multiplication pour éviter le>2
test; 4. utilisez au niveau du bit pas sur lelen(S)
pour éviter lenot
denot len(S)%2
; 5. utiliser le fait que''in'blah'
c'estTrue
pour permettre la multiplication des chaînes~len(S)%2*s[len(S)//2]in s
.SOGL V0.12 , 88 octets
Essayez-le ici!
~ 24 octets pour ajouter la
qpbd
mise en miroir et 6 octets pour(x-1 XOR 1) + 1
: /la source
Kotlin 1.1,
201199 octetsEmbellie
Tester
Impossible de s'exécuter sur TIO car 1.1 n'est pas pris en charge
la source
Python 2 ,
182167163162 162160158 octetsEssayez-le en ligne!
Enregistré 2 octets grâce à Jonathan Allan
Explication Tout d'abord, nous devons construire la liste de tous les caractères qui n'ont pas de symétrie (le caractère lui-même:,
A
... ou un autre caractère(
pour)
, ...):m("","")
renvoie une chaîne avec tous les caractères disponibles.m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
supprime de tous les caractères disponibles les caractères qui ont une symétrie.Ensuite, nous mappons chaque caractère à son caractère symétrique et supprimons les caractères qui n'ont pas de caractère symétrique avec
s.translate(m(t+w,w+t),<chars that don't have a symmetric>)
Si le résultat est égal à la chaîne inversée, nous avons une chaîne symétrique.
la source
t
etw
vous pouvez renoncer à la fuite, par exemplew="(<]{\pb"
. Enregistrer un autre octet avecfrom string import*;m=maketrans
(personnellement, je vais pour une nouvelle ligne lorsque le;
ne sauvegarde pas les octets). De plus, vous n'avez pas besoin de nommer la fonction tant qu'elle est réutilisable et non récursive, ce qui économise encore 2.f=
, mais votre version est plus propre.Perl 5 , 102 + 1 (-p) = 103 octets
Essayez-le en ligne!
la source
Scala , 140 octets
Essayez-le en ligne!
la source