fundo
Stack Cats é uma linguagem esotérica reversível feita por Martin Ender. Cada comando no Stack Cats é o inverso de si mesmo (representado como um caractere simétrico, como -_:T|), ou possui seu comando inverso (representado como a imagem no espelho, como () {} [] <>). O Stack Cats tem um forte requisito sintático de que todo o programa seja a imagem de espelho de si mesmo. Observe que isso significa que qualquer programa Stack Cats válido é um ambigrama natural de imagem espelhada .
Aqui está todo o conjunto de comandos do Stack Cats:
- Auto-simétrico:
!*+-:=ITX^_| - Pares simétricos:
(){}[]<>\/
Quaisquer outros caracteres são inválidos; qualquer entrada com um caractere que não esteja no conjunto de caracteres acima deve gerar false.
A língua tem restrição adicional que ()e {}pares deve ser sempre equilibrada, mas por uma questão de simplicidade, você não tem que verificar para essa condição.
A seguir estão alguns exemplos de um programa Stack Cats válido (novamente, observe que você não verifica parênteses balanceados):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Estes não são:
b<+>d
())(
({[<++<]})
Desafio
Escreva um programa ou função que determine se a sequência fornecida é um programa Stack Cats válido. Seu código também deve ser um ambigrama natural de imagem espelhada , o que significa:
- Seu código deve ser uma imagem em espelho de si mesmo.
- Seu código pode ter uma ou mais novas linhas, desde que o código inteiro, exibido naturalmente, seja uma imagem em espelho.
- Você pode omitir ou adicionar espaços em branco à direita em cada linha, pois isso não altera a exibição.
- Caracteres de tabulação não são permitidos, pois têm alguma ambiguidade em exibição.
Nota: seu código não precisa ser um programa Stack Cats válido; pode conter certos caracteres extras que não são permitidos no Stack Cats. (Veja abaixo a lista completa.)
Por exemplo, os dois programas a seguir são simétricos (e, portanto, um envio válido ), enquanto o terceiro não é:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- Em relação à "simetria de espelho", apenas a simetria no estilo Stack Cats é considerada (por exemplo,
({IH})não é um envio válido, mesmo que tenha simetria de espelho). - Seu código pode conter apenas esses conjuntos de caracteres, além de nova linha:
- Auto-simétrico: espaço (
0x20) +!"'*+-.8:=AHIMOTUVWXY^_ovwx| - Pares simétricos:
()/\<>[]bdpq{}
- Auto-simétrico: espaço (
O conjunto de caracteres é escolhido para ser estritamente simétrico ou auto-simétrico quando exibido como código no SE.
Entrada e saída
O intervalo de entrada é qualquer sequência de uma linha de caracteres ASCII imprimíveis .
Você pode optar por receber a entrada como uma sequência, uma lista de caracteres ou uma lista de valores ASCII.
Você pode escolher a saída:
- Qualquer um dos valores de verdade / falsidade, conforme definido pelo idioma de sua escolha
- Os valores reais do resultado podem diferir entre as entradas (por exemplo, saída 1 para uma entrada de verdade e 2 para outra).
- Não é permitido trocar valores de verdade e falsidade.
- Quaisquer dois valores constantes para verdadeiro / falso, respectivamente
- Nesse caso, os valores do resultado devem ser exatamente um dos dois valores constantes.
Você deve especificar seu método de entrada e valores de saída no seu envio.
Condição vencedora
Isso é código-golfe , portanto, os bytes mais baixos em cada idioma vencem.
Notas
- As brechas padrão são proibidas como de costume.
- É claro que você pode resolver isso no Stack Cats, mas a chance é que você não possa usar um sinalizador que permita reduzir o tamanho do código pela metade. E é uma linguagem seriamente difícil de entender: P
#não permitido?