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]
Wypróbuj online!
Edycja: dostosowałem odpowiedź do oficjalnej implementacji SPL - wcześniej nie mogłem jej uruchomić.
Gra w golfa 6 bajtów, ponieważ numery scen nie muszą być następujące po sobie.
Wyjaśnienie :
SPL to esolang zaprojektowany tak, aby wyglądał jak gra Szekspira. Rzeczowniki dodatnie mają wartość 1 (tutaj używany jest kot ), a rzeczowniki ujemne mają wartość -1 (nie użyto żadnego, ale świnia jest jednym z nich). Przymiotniki modyfikują stałą, mnożąc ją przez 2.
N.
Wszystko do pierwszej kropki jest tytułem i nie ma znaczenia.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Znaki są zmiennymi całkowitymi, każdy z nich ma również stos, ale nie musiałem korzystać z tej funkcji.
Act I:.
Scene I:.
Akty i sceny są używane jako etykiety goto
[Enter Puck and Ford]
Przydaje się to tylko wtedy, gdy na scenie jednocześnie znajdują się dokładnie dwie postacie.
Puck:Listen to thy heart!
Czyta cyfrę i sprawia, że Ford ją pamięta.
Ford:You is the difference between a cat and I.
Jak widać, język angielski jest ważny w języku SPL. To sprawia, że wartość Pucka „różni się między kotem a mną”. Ale co to oznacza? catjest rzeczownikiem pozytywnym, więc jest Puck = 1 - Ford.
Scene II:.
[Exeunt]
Exeunt to tylko liczba „wyjście” i bez argumentów oznacza, że wszyscy na scenie wychodzą.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
Jest to również Page = 1 - Fordwypowiedziane przez innego aktora, więc Ibyłoby źle. Ponieważ jest to pętla, nie mogę po prostu skopiować wartości Puck.
Scene III:.
Page:You is the product of Puck and I.
Już teraz całkiem proste. Ajax = Puck * Page.
Is you as big as zero?
„as [przym] as” to ==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.
Jeśli Ajax == 0 ... „kot” ma wartość 1, „duży kot” ma wartość 2, „duży duży kot” ma wartość 4 itd. Po podstawieniu prostych stałych otrzymujemy „sumę sumy 32 i 8 oraz 2 i 1” -> „sumę sumy 40 i 2 i 1” -> „sumę 42 i 1” -> „43”, czyli ASCII dla +.
If not,you fat fat fat fat fat cat.
inaczej jest to po prostu „gruby gruby gruby gruby gruby kot”, więc Ajax otrzymuje wartość 32, ASCII za spację.
Speak thy mind!
Jest to polecenie do wypisywania znaku.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
To konstrukcja pętli. Przyrosty „sumujesz siebie i kota”, oraz if(Page != Ford) goto Scene III. Reszta programu wykorzystuje te same komponenty, więc tutaj jest bardziej czytelna wersja pseudokodu:
Scena 1:
input = [numer wejściowy];
wiersz = 0 - wejście + 1;
Scena 2:
col = 0 - wejście + 1;
Scena 3:
temp = wiersz * col;
if (temp == 0) {
temp = „+”;
}jeszcze{
temp = '';
}
putchar (temp);
Strona = strona + 1;
if (Page! = Ford) goto Scene3;
Ajax = 10;
putchar (Ajax);
Krążek = Krążek + 1;
if (Puck! = Ford) goto Scene2;