tło
Stack Cats to odwracalny ezoteryczny język stworzony przez Martina Endera. Każde polecenie w stosie kotów jest albo odwrotnością samego siebie (reprezentowaną jako znak symetryczny, np. -_:T|), Albo ma swoje polecenie odwrotne (reprezentowane jako odbicie lustrzane, takie jak () {} [] <>). Stack Cats ma silne wymagania składniowe, aby cały program był lustrzanym odbiciem samego siebie. Zauważ, że oznacza to, że każdy poprawny program Stack Cats jest naturalnym ambigramem obrazu lustrzanego .
Oto cały zestaw poleceń Stack Cats:
- Samosymetryczny:
!*+-:=ITX^_| - Pary symetryczne:
(){}[]<>\/
Wszelkie inne znaki są nieprawidłowe; każde wejście zawierające znak spoza powyższego zestawu znaków powinno dawać wartość false.
Język ma dodatkowe ograniczenie ()i {}pary muszą być zawsze zrównoważone, ale dla uproszczenia nie musisz sprawdzać tego warunku.
Oto kilka przykładów prawidłowego programu Stack Cats (ponownie, pamiętaj, że nie sprawdzasz zrównoważonych elementów):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Te nie są:
b<+>d
())(
({[<++<]})
Wyzwanie
Napisz program lub funkcję, która określa, czy podany ciąg jest poprawnym programem Stack Cats. Twój kod powinien być także naturalnym ambigramem obrazu lustrzanego , co oznacza:
- Twój kod powinien być lustrzanym odbiciem samego siebie.
- Twój kod może mieć jedną lub więcej nowych linii, o ile cały kod, wyświetlany w sposób naturalny, jest lustrzanym odbiciem samego siebie.
- Możesz pominąć lub dodać końcowe białe spacje w każdej linii, ponieważ nie zmienia to wyświetlania.
- Znaki tabulacji są niedozwolone, ponieważ wyświetlają się niejasności.
Uwaga: Twój kod nie musi być prawidłowym programem Stack Cats; może zawierać pewne dodatkowe znaki, które nie są dozwolone w Stack Cats. (Pełna lista znajduje się poniżej).
Na przykład następujące dwa programy są symetryczne (a zatem prawidłowe przesłanie ), podczas gdy trzeci nie jest:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- Jeśli chodzi o „symetrię lustrzaną”, brana jest pod uwagę tylko symetria w stylu Stack Cats (np.
({IH})Nie jest poprawnym przesłaniem, mimo że ma symetrię lustrzaną). - Twój kod może zawierać tylko te zestawy znaków oraz znak nowej linii:
- Samosymetryczny: spacja (
0x20) +!"'*+-.8:=AHIMOTUVWXY^_ovwx| - Pary symetryczne:
()/\<>[]bdpq{}
- Samosymetryczny: spacja (
Zestaw znaków jest wybierany tak, aby był ściśle symetryczny lub samosymetryczny, gdy jest wyświetlany jako kod w SE.
Wejście i wyjście
Zakres wejściowy jest dowolnym ciągiem jednej linii drukowalnych znaków ASCII .
Możesz wybrać wejście jako ciąg znaków, listę znaków lub listę wartości ASCII.
Możesz wybrać wyjście:
- Dowolna z wartości prawdy / fałszu określona przez wybrany język
- Rzeczywiste wartości wyników mogą się różnić między danymi wejściowymi (np. Wyjście 1 dla prawdziwego wejścia i 2 dla innego prawdziwego).
- Zamiana wartości prawdy i fałszu jest niedozwolona.
- Dowolne dwie stałe wartości odpowiednio dla wartości prawda / fałsz
- W takim przypadku wartości wynikowe powinny być dokładnie jedną z dwóch stałych wartości.
W formularzu należy podać metodę wprowadzania i wartości wyjściowe.
Warunki wygranej
To jest golf golfowy , więc wygrywa najmniej bajtów w każdym języku.
Notatki
- Standardowe luki są jak zwykle zabronione.
- Oczywiście możesz to rozwiązać w Stack Cats, ale jest szansa, że nie możesz użyć flagi, która pozwala zmniejszyć rozmiar kodu o połowę. I jest to bardzo trudny do opanowania język: P
#zabronione?