Antecedentes
Stack Cats es un lenguaje esotérico reversible creado por Martin Ender. Cada comando en Stack Cats es el inverso de sí mismo (representado como un carácter simétrico, como -_:T|
), o tiene su comando inverso (representado como la imagen especular, como ()
{}
[]
<>
). Stack Cats tiene un fuerte requisito sintáctico de que todo el programa debe ser la imagen especular de sí mismo. Tenga en cuenta que esto significa que cualquier programa válido de Stack Cats es un ambigrama de imagen espejo natural .
Aquí está todo el conjunto de comandos de Stack Cats:
- Auto-simétrica:
!*+-:=ITX^_|
- Pares simétricos:
()
{}
[]
<>
\/
Cualquier otro personaje no es válido; cualquier entrada que tenga un carácter que no esté en el conjunto de caracteres anterior debería generar falso.
El lenguaje tiene una restricción adicional ()
y los {}
pares deben estar siempre equilibrados, pero en aras de la simplicidad, no tiene que verificar esta condición.
Los siguientes son algunos ejemplos de un programa válido de Stack Cats (una vez más, tenga en cuenta que no verifica los parens equilibrados):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Estos no son:
b<+>d
())(
({[<++<]})
Desafío
Escriba un programa o función que determine si la cadena dada es un programa válido de Stack Cats. Su código también debe ser un ambigrama de imagen espejo natural , lo que significa:
- Su código debe ser una imagen especular de sí mismo.
- Su código puede tener una o más líneas nuevas, siempre y cuando todo el código, mostrado de forma natural, sea una imagen reflejada de sí mismo.
- Puede omitir o agregar espacios en blanco al final de cada línea, ya que no cambia la visualización.
- Los caracteres de tabulación no están permitidos ya que tienen cierta ambigüedad en la pantalla.
Nota: su código no tiene que ser un programa válido de Stack Cats; puede contener ciertos caracteres adicionales que no están permitidos en Stack Cats. (Consulte a continuación la lista completa).
Por ejemplo, los siguientes dos programas son simétricos (y, por lo tanto, una presentación válida ), mientras que el tercero no lo es:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- Con respecto a la "simetría de espejo", solo se considera la simetría de estilo Stack Cats (por ejemplo,
({IH})
no es una presentación válida, aunque tenga simetría de espejo). - Su código solo puede contener estos conjuntos de caracteres, además de nueva línea:
- Auto-simétrica: espacio (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- Pares simétricos:
()
/\
<>
[]
bd
pq
{}
- Auto-simétrica: espacio (
El conjunto de caracteres se elige para ser estrictamente simétrico o auto-simétrico cuando se muestra como código en SE.
Entrada y salida
El rango de entrada es cualquier cadena de una línea de caracteres ASCII imprimibles .
Puede elegir tomar la entrada como una cadena, una lista de caracteres o una lista de valores ASCII.
Puede elegir la salida:
- Cualquiera de los valores de verdad / falsedad definidos por el idioma de su elección
- Los valores de resultado reales pueden diferir entre las entradas (por ejemplo, la salida 1 para una entrada verdadera y 2 para otra verdadera).
- El intercambio de valores de verdad y falsedad no está permitido.
- Dos valores constantes para verdadero / falso respectivamente
- En este caso, los valores del resultado deben ser exactamente uno de los dos valores constantes.
Debe especificar su método de entrada y valores de salida en su envío.
Condición ganadora
Este es el código de golf , por lo que gana los bytes más bajos en cada idioma.
Notas
- Las lagunas estándar están prohibidas como de costumbre.
- Por supuesto, puede resolver esto en Stack Cats, pero la posibilidad es que no pueda usar una bandera que permita reducir el tamaño de su código a la mitad. Y es un lenguaje muy difícil de aprender: P
#
no permitido?