sfondo
Stack Cats è un linguaggio esoterico reversibile creato da Martin Ender. Ogni comando in Stack Cats è l'inverso di se stesso (rappresentato come un carattere simmetrico, come -_:T|
), o ha il suo comando inverso (rappresentato come l'immagine speculare, come ()
{}
[]
<>
). Stack Cats ha un forte requisito sintattico che l'intero programma dovrebbe essere l'immagine speculare di se stesso. Si noti che ciò significa che qualsiasi programma Stack Cats valido è un ambigramma di immagine speculare naturale .
Ecco l'intero set di comandi di Stack Cats:
- Self-simmetrica:
!*+-:=ITX^_|
- Coppie simmetriche:
()
{}
[]
<>
\/
Qualsiasi altro personaggio non è valido; qualsiasi input che abbia un carattere non nel set di caratteri sopra dovrebbe produrre false.
La lingua ha ulteriori vincoli che ()
e{}
coppie devono essere sempre bilanciate, ma per semplicità, non è necessario verificare questa condizione.
Di seguito sono riportati alcuni esempi di un programma Stack Cats valido (di nuovo, si noti che non si controlla la presenza di parentesi bilanciate):
{[+]==[+]}
[)>^<(]
({T)}|{(T})
<(*]{[:!-_:>}<[<)*(>]>{<:_-!:]}[*)>
Questi non sono:
b<+>d
())(
({[<++<]})
Sfida
Scrivi un programma o una funzione che determina se la stringa specificata è un programma Stack Cats valido. Il tuo codice dovrebbe anche essere un ambigramma di immagine speculare naturale , il che significa:
- Il tuo codice dovrebbe essere un'immagine speculare di se stesso.
- Il tuo codice può avere una o più nuove righe, purché l'intero codice, visualizzato in modo naturale, sia un'immagine speculare di se stesso.
- È possibile omettere o aggiungere spazi bianchi finali su ciascuna riga, poiché non cambia la visualizzazione.
- I caratteri di tabulazione non sono consentiti poiché presentano alcune ambiguità in mostra.
Nota: il codice non deve essere un programma Stack Cats valido; può contenere alcuni caratteri extra che non sono ammessi in Stack Cats. (Vedi sotto per l'elenco completo.)
Ad esempio, i seguenti due programmi sono simmetrici (e quindi una presentazione valida ), mentre il terzo no:
({bTd})
[<q|p>]
({bTd})
IXI
({bTd})
IXI
- Per quanto riguarda la "simmetria speculare", viene presa in considerazione solo la simmetria in stile Stack Cats (ad es
({IH})
non è un contributo valido, anche se ha una simmetria speculare). - Il tuo codice può contenere solo questi set di caratteri, oltre a newline:
- Auto-simmetrico: spazio (
0x20
) +!"'*+-.8:=AHIMOTUVWXY^_ovwx|
- Coppie simmetriche:
()
/\
<>
[]
bd
pq
{}
- Auto-simmetrico: spazio (
Il set di caratteri viene scelto come strettamente simmetrico o auto-simmetrico quando viene visualizzato come codice su SE.
Ingresso e uscita
L'intervallo di input è qualsiasi stringa di una riga di caratteri ASCII stampabili .
Puoi scegliere di prendere l'input come una stringa, un elenco di caratteri o un elenco di valori ASCII.
Puoi scegliere di produrre:
- Qualsiasi valore di verità / falsità definito dalla lingua di tua scelta
- I valori dei risultati effettivi possono differire tra gli ingressi (ad es. Uscita 1 per un ingresso sincero e 2 per un altro sincero).
- Lo scambio di valori di verità e falsità non è consentito.
- Qualsiasi due valori costanti rispettivamente per true / false
- In questo caso, i valori del risultato dovrebbero essere esattamente uno dei due valori costanti.
È necessario specificare il metodo di input e i valori di output nell'invio.
Condizioni vincenti
Questo è code-golf , quindi vince il byte più basso in ogni lingua.
Appunti
- Le scappatoie standard sono vietate come al solito.
- Ovviamente puoi risolverlo in Stack Cats, ma la possibilità è che non puoi usare un flag che ti consenta di ridurre della metà la dimensione del tuo codice. Ed è un linguaggio davvero difficile da imparare: P
#
non consentito?