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]
Pruébalo en línea!
Editar: hizo que la respuesta fuera compatible con la implementación oficial de SPL.
Golfó 6 bytes porque los números de escena no tienen que ser consecutivos.
Explicación :
SPL es un esolang diseñado para parecerse a las obras de Shakespeare. Los sustantivos positivos tienen el valor de 1 (aquí se usa cat ) y los sustantivos negativos tienen el valor de -1 (no se usaron ninguno pero pig es uno de ellos). Los adjetivos modifican una constante multiplicándola por 2.
N.
Todo hasta el primer punto es el título y no importa.
Puck,. row counter
Page,. column counter
Ford,. input
Ajax,. temp
Los caracteres son variables enteras, cada uno de ellos también tiene una pila, pero no necesitaba usar esa función.
Act I:.
Scene I:.
Los actos y las escenas se usan como etiquetas de goto
[Enter Puck and Ford]
Solo es útil si exactamente dos personajes están en el escenario al mismo tiempo.
Puck:Listen to thy heart!
Lee un número y hace que Ford lo recuerde.
Ford:You is the difference between a cat and I.
Como puede ver, Engrish es válido en SPL. Esto hace que el valor de Puck sea "la diferencia entre un gato y yo". Pero, ¿qué significa? cat
es un sustantivo positivo, entonces lo es Puck = 1 - Ford
.
Scene II:.
[Exeunt]
Exeunt es solo un plural de "salida", y sin argumentos significa que todos en el escenario salen.
[Enter Page and Ajax]
Ajax:You is the difference between a cat and Ford.
También es, Page = 1 - Ford
pero lo habla un actor diferente, por I
lo que estaría mal. Como es un bucle, no puedo simplemente copiar el valor de Puck
.
Scene III:.
Page:You is the product of Puck and I.
Bastante sencillo por ahora. Ajax = Puck * Page
.
Is you as big as zero?
"as [adj] as" es el ==
operador.
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.
Si Ajax == 0 ... "gato" es 1, "gato grande" es 2, "gato grande" es 4 y así sucesivamente. Después de sustituir las constantes simples obtenemos "la suma de la suma de la suma de 32 y 8 y 2 y 1" -> "la suma de la suma de 40 y 2 y 1" -> "la suma de 42 y 1" -> "43", que es el ASCII para +.
If not,you fat fat fat fat fat cat.
de lo contrario, es solo "gato gordo gordo gordo gordo", por lo que Ajax obtiene el valor de 32, el ASCII por un espacio.
Speak thy mind!
Este es el comando para generar un carácter.
Ajax:
You sum you and cat.Is you as big as Ford?If not,let us return to Scene III.
Esta es una construcción de bucle. "Sumas tú y gato" incrementa la página, y if(Page != Ford) goto Scene III
. El resto del programa usa los mismos componentes, así que aquí hay una versión de pseudocódigo más legible:
Escena 1:
input = [número de entrada];
fila = 0 - entrada + 1;
Escena2:
col = 0 - entrada + 1;
Escena3:
temp = fila * col;
if (temp == 0) {
temp = '+';
}más{
temp = '';
}
putchar (temp);
Página = Página + 1;
if (Page! = Ford) goto Scene3;
Ajax = 10;
putchar (Ajax);
Puck = Puck + 1;
if (Puck! = Ford) pasa a Scene2;