N.Puck,.Page,.Ford,.Ajax,.Act I:.Scene I:.[Enter Puck and Ford]Puck:Listen to thy heart!Ford:You is the difference between a cat and I.Scene V:.[Exeunt][Enter Page and Ajax]Ajax:You is the difference between a cat and Ford.Scene X:.Page:You is the product of Puck and I.Is you as big as zero?If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.If not,you big big big big big cat.Speak thy mind!Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene X.Page:You is the sum of a big big big cat and a big cat.Speak thy mind![Exit Page][Enter Puck]Ajax:You is the sum of you and a cat.Is you as big as Ford?If not,let us return to Scene V.[Exeunt]
Provalo online!
Modifica: reso la risposta compatibile con l'implementazione ufficiale di SPL - non riuscivo a farlo funzionare prima.
Golfato 6 byte perché i numeri di scena non devono essere consecutivi.
Spiegazione :
SPL è un esolang progettato per assomigliare alle commedie di Shakespeare. I sostantivi positivi hanno il valore di 1 (qui si usa il gatto ) e i sostantivi negativi hanno il valore di -1 (nessuno è stato usato ma il maiale è uno di questi). Gli aggettivi modificano una costante moltiplicandola per 2.
N.
Tutto fino al primo punto è il titolo e non importa.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
I personaggi sono variabili intere, ognuna di esse ha anche uno stack ma non ho avuto bisogno di usare quella funzione.
Act I:.
Scene I:.
Gli atti e le scene sono usati come etichette di goto
[Enter Puck and Ford]
È utile solo se sul palco sono presenti esattamente due personaggi contemporaneamente.
Puck:Listen to thy heart!
Legge un numero e fa ricordare a Ford.
Ford:You is the difference between a cat and I.
Come puoi vedere Engrish è valido in SPL. Questo rende il valore di Puck "la differenza tra un gatto e io". Ma cosa significa? cat
è un sostantivo positivo, quindi lo è Puck = 1 - Ford
.
Scene II:.
[Exeunt]
Exeunt è solo un plurale di "uscita", e senza argomenti significa che tutti sul palco escono.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
È anche, Page = 1 - Ford
ma è parlato da un attore diverso, quindi I
sarebbe sbagliato. Dal momento che è un ciclo, non posso semplicemente copiare il valore di Puck
.
Scene III:.
Page:You is the product of Puck and I.
Ormai abbastanza semplice. Ajax = Puck * Page
.
Is you as big as zero?
"as [agg] as" è l' ==
operatore.
If so,you is the sum of the sum of the sum of a big big big big big cat and a big big big cat and a big cat and a cat.
Se Ajax == 0 ... "cat" è 1, "big cat" è 2, "big big cat" è 4 e così via. Dopo aver sostituito le costanti semplici otteniamo "la somma della somma della somma di 32 e 8 e 2 e 1" -> "la somma della somma di 40 e 2 e 1" -> "la somma di 42 e 1" -> "43", ovvero ASCII per +.
If not,you fat fat fat fat fat cat.
altrimenti è solo "grasso grasso grasso grasso grasso gatto", quindi Ajax ottiene il valore di 32, ASCII per uno spazio.
Speak thy mind!
Questo è il comando per emettere un personaggio.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
Questo è un costrutto circolare. Pagina "incrementi di te e gatto" e if(Page != Ford) goto Scene III
. Il resto del programma utilizza gli stessi componenti, quindi ecco una versione pseudocodice più leggibile:
Scena 1:
input = [numero input];
riga = 0 - input + 1;
SCENE2:
col = 0 - input + 1;
Scene3:
temp = riga * col;
if (temp == 0) {
temp = '+';
}altro{
temp = '';
}
putchar (temp);
Pagina = Pagina + 1;
if (Page! = Ford) vai a Scene3;
Ajax = 10;
putchar (Ajax);
Disco = Disco + 1;
if (Puck! = Ford) vai a Scene2;