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]
Probieren Sie es online!
Bearbeiten: Die Antwort wurde mit der offiziellen SPL-Implementierung kompatibel gemacht. Ich konnte sie vorher nicht zum Laufen bringen.
Golfed 6 Bytes, weil Szenennummern nicht aufeinander folgen müssen.
Erklärung :
SPL ist ein Esolang, der so gestaltet ist, dass er Shakespeares Stücken ähnelt. Positive Substantive haben den Wert 1 (hier wird cat verwendet) und negative Substantive den Wert -1 (keine wurden verwendet, aber pig ist eine davon). Adjektive modifizieren eine Konstante, indem sie sie mit 2 multiplizieren.
N.
Alles bis zum ersten Punkt ist der Titel und spielt keine Rolle.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Die Zeichen sind ganzzahlige Variablen, jede hat auch einen Stapel, aber ich musste diese Funktion nicht verwenden.
Act I:.
Scene I:.
Acts und Szenen werden als Goto-Labels verwendet
[Enter Puck and Ford]
Es ist nur sinnvoll, wenn genau zwei Charaktere gleichzeitig auf der Bühne stehen.
Puck:Listen to thy heart!
Liest eine Nummer und erinnert Ford daran.
Ford:You is the difference between a cat and I.
Wie Sie sehen, ist Engrish in SPL gültig. Dies macht Pucks Wert "der Unterschied zwischen einer Katze und mir". Aber was bedeutet es? cat
ist ein positives Nomen, also ist es Puck = 1 - Ford
.
Scene II:.
[Exeunt]
Exeunt ist nur ein Plural von "exit" und ohne Argumente bedeutet dies, dass jeder auf der Bühne verlässt.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
Es ist auch, Page = 1 - Ford
aber es wird von einem anderen Schauspieler gesprochen, also I
wäre es falsch. Da es sich um eine Schleife handelt, kann ich den Wert von nicht einfach kopieren Puck
.
Scene III:.
Page:You is the product of Puck and I.
Ziemlich unkompliziert. Ajax = Puck * Page
.
Is you as big as zero?
"as [adj] as" ist der ==
Operator.
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.
Wenn Ajax == 0 ... "cat" ist 1, "big cat" ist 2, "big big cat" ist 4 und so weiter. Nach dem Ersetzen der einfachen Konstanten erhalten wir "die Summe der Summe der Summe von 32 und 8 und 2 und 1" -> "die Summe der Summe von 40 und 2 und 1" -> "die Summe von 42 und 1" -> "43", das ist das ASCII für +.
If not,you fat fat fat fat fat cat.
ansonsten ist es nur "fat fat fat fat fat cat", also erhält Ajax den Wert 32, den ASCII-Wert für ein Leerzeichen.
Speak thy mind!
Dies ist der Befehl zur Ausgabe eines Zeichens.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
Dies ist ein Schleifenkonstrukt. "Sie summieren Sie und Katze" erhöht Seite undif(Page != Ford) goto Scene III
. Der Rest des Programms verwendet dieselben Komponenten, daher ist hier eine besser lesbare Pseudocode-Version:
Szene 1:
Eingabe = [Eingabenummer];
Zeile = 0 - Eingabe + 1;
Szene 2:
col = 0 - Eingabe + 1;
Szene 3:
temp = row * col;
if (temp == 0) {
temp = '+';
}sonst{
temp = '';
}
Putchar (Temp);
Seite = Seite + 1;
if (Page! = Ford) gehe zu Scene3;
Ajax = 10;
Putchar (Ajax);
Puck = Puck + 1;
if (Puck! = Ford) gehe zu Scene2;