Fondo
Inspirado en que soy un palíndromo. ¿Eres tú? , donde se presenta el hecho impactante de que " ()()
no es un palíndromo, pero ())(
", me pregunté qué es ()()
y la respuesta es simplemente: ¡es una cuerda con un eje de simetría vertical!
La tarea
Escriba un programa o función que tome una cadena S (o el equivalente apropiado en su idioma) como entrada, verifique la simetría a lo largo del eje vertical y devuelva un valor verdadero o falso en consecuencia. Puede utilizar cualquier medio razonable para tomar la entrada y proporcionar la salida.
Simetría reflexiva
La simetría de reflexión alrededor de un eje vertical (o simetría izquierda-derecha) significa que si coloca un espejo verticalmente en el centro exacto de la cuerda, la imagen reflejada de la primera mitad de la cuerda es idéntica a la segunda mitad de la cuerda.
Por ejemplo, las siguientes cadenas son simétricas de reflexión alrededor de un eje vertical:
()()
()()()
[A + A]
WOW ! WOW
OH-AH_wx'xw_HA-HO
(<<[[[T*T]]]>>)
(:)
)-(
())(()
qpqp
mientras que los siguientes no son:
())(
((B))
11
+-*+-
WOW ! wow
(;)
qppq
Reglas del concurso
• Su programa o función recibirá solo caracteres ASCII imprimibles. Puede incluir o no la cadena vacía (que es simétrica, por supuesto) como entrada legal, lo que es mejor para usted.
• Los caracteres ASCII que pueden considerarse simétricos con respecto a los ejes verticales son los siguientes (observe el espacio inicial y la diferencia entre letras mayúsculas y minúsculas):
!"'+*-.:=AHIMOTUVWXY^_ovwx|
Los caracteres ASCII que pueden considerarse "reflejados" y sus caracteres correspondientes son:
()<>[]{}qpbd/\
Tenga en cuenta que, dado que están reflejados, puede tener ambos ()
, así como )(
, /\
y \/
, etc.
Todos los demás caracteres imprimibles ASCII deben considerarse asimétricos y sin un carácter correspondiente reflejado.
• Este es un desafío de código de golf : cuanto más corto sea su programa, medido en bytes, mejor, en cualquier lenguaje de programación.
• ¡Felicitaciones a las personas que producirán un programa simétrico!
Nota : esta pregunta no es un duplicado de "Palindrome conveniente" , que requiere verificar las cadenas palindrómicas en las que se invierten los paréntesis. Esta pregunta es diferente por dos razones:
1) es una restricción de la otra pregunta para lo que concierne a los caracteres sin paréntesis, ya que solo los caracteres simétricos pueden aparecer en orden inverso.
2) Dado que se basa en el concepto de simetría, y no en un concepto de “palíndromo conveniente”, personajes de espejo pueden aparecer tanto en el orden, es decir, []
y ][
, y esto hace que el programa de resolverlo diferente de los programas que resuelven el otro problema .
8
considera "simétrico"?Respuestas:
JavaScript (ES6),
130125113 bytesEditar: Guardado 5 bytes gracias a @Arnauld. Ahorró otros 11 bytes gracias a @YairRand.
fuente
includes()
? Tales como/[- !"'+*.:=AHIMO^_ovwx|T-Y]/.test(c)
.[...s].reverse().map(...)
:s::[].map().reverse()
si está de acuerdo con el uso de las nuevas funciones ES-next. enlaceGelatina ,
6962 bytesPruébalo en línea!
Todos los casos de prueba
-7 bytes gracias a @JonathanAllan
Cómo funciona
fuente
¢FiЀ;1Ạðaµ¢yU⁼
->¢Ff@ð¢yU⁼
...}pd\”,Ṛ$Fœs©2Ff@ð®yU⁼
...}pd\”,Ṛ$F©f@ð®œs2¤yU⁼
es posiblemente más agradable)Python 3,
211208195 bytesGuardado 13 bytes gracias a Jonathan Allan.
fuente
2*x
yrange(7)
; 3. use la multiplicación para evitar la>2
prueba; 4. use bit a bit no en ellen(S)
para evitar elnot
denot len(S)%2
; 5. Utilice el hecho de que''in'blah'
esTrue
para permitir la multiplicación de cadena~len(S)%2*s[len(S)//2]in s
.SOGL V0.12 , 88 bytes
Pruébalo aquí!
~ 24 bytes para agregar
qpbd
reflejo y 6 bytes para(x-1 XOR 1) + 1
: /fuente
Kotlin 1.1,
201199 bytesEmbellecido
Prueba
No se puede ejecutar en TIO porque 1.1 no es compatible
fuente
Python 2 ,
182167163162160158 bytesPruébalo en línea!
Guardado 2 bytes gracias a Jonathan Allan
Explicación Primero, necesitamos construir la lista de todos los caracteres que no tienen una simétrica (el propio carácter:,
A
... u otro carácter(
para)
, ...):m("","")
devuelve una cadena con todos los caracteres disponibles.m("","").translate(None," \t!\"'+*-.:=AHIMOTUVWXY^_ovwx|"+t+w))
elimina de todos los caracteres disponibles los caracteres que tienen una simétrica.Luego, asignamos cada carácter a su carácter simétrico y eliminamos los caracteres que no tienen un carácter simétrico con
s.translate(m(t+w,w+t),<chars that don't have a symmetric>)
Si el resultado es igual a la cadena invertida, tenemos una cadena simétrica.
fuente
t
yw
puede evitar el escape, por ejemplow="(<]{\pb"
. Guarde otro byte confrom string import*;m=maketrans
(personalmente voy por una nueva línea cuando;
no guarda bytes). Además, no necesita nombrar la función siempre que sea reutilizable y no recursiva, lo que ahorra otros 2.f=
, pero su versión es más limpia.Perl 5 , 102 + 1 (-p) = 103 bytes
Pruébalo en línea!
fuente
Scala , 140 bytes
Pruébalo en línea!
fuente