.
Ajax,.
Ford,.
Act I:.
Scene I:.
[Enter Ajax and Ford]
Scene II:.
Ford:
Open your mind.Is sky nicer than you?If so, let us return to scene IV.
Ajax:
Open your mind.You is sum you and sum big big big big big big pig and big big big big cat!
Scene III:.
Ford:
Speak thy mind.
Ajax:
You is sum you and pig!Is you as big as zero?If so, let us return to scene II.Let us return to scene III.
Scene IV:.
[Exeunt]
Versión sin golf:
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Act I: In which the lengths of runs are decoded.
Scene I: A silent entrance.
[Enter Romeo and Juliet]
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Juliet:
Open your mind. Is my mother jollier than thou? If so,
we must proceed to scene IV.
Romeo:
Open your mind. Thou art the sum of thyself and the sum of my good aunt and
the difference between nothing and the quotient of the square of twice the sum
of thy foul fat-kidneyed goat and thy death and thy evil variable!
Scene III: In which Romeo snaps and brutally insults Juliet.
Juliet:
Speak thy mind.
Romeo:
Thou art the sum of thyself and a hog! Art thou as rotten as nothing? If so,
let us return to scene II. Let us return to scene III.
Scene IV: Finale.
[Exeunt]
Estoy usando el compilador Python SPL de drsam94 , que tiene algunos errores (por lo que, por ejemplo, lo uso en Open your mindlugar de Open thy minden la versión de golf).
Para ejecutar este programa, use:
$ python splc.py rld.spl > rld.c
$ gcc rld.c -o rld.exe
$ echo -n ":144,1'1" | ./rld
:4444,'
Cómo funciona
SPL es un lenguaje de programación esotérico diseñado para hacer que los programas se vean como obras de Shakespeare. Lo hace mediante el uso de caracteres como variables, y el procesamiento se realiza haciendo que los personajes se digan cosas entre sí.
The Decoding of the Lengths of Veronan Runs - A Drama of PPCG.
Este es el título de la obra; es ignorado por el compilador.
Romeo, quite a character.
Juliet, Romeo's lover and multiplicand.
Aquí estamos declarando las variables utilizadas en el resto del programa. Todo está entre ,y .el compilador lo ignora. En este caso, declaramos que se Romeousa para contener el carácter que se decodifica y que se Julietusa para mantener la longitud de ejecución del personaje.
Act I: In which the lengths of runs are decoded.
Aquí declaramos el primer y único acto en el programa. Los actos y las escenas son como etiquetas; se puede saltar a ellos en cualquier momento usando let us return to scene IIo alguna variante de eso. Solo usamos un acto, porque es suficiente para nuestras necesidades. Una vez más, el compilador ignora cualquier cosa entre :y ..
Scene I: A silent entrance.
Aquí declaramos la primera escena. Las escenas están numeradas en números romanos: la primera es Scene I, la segunda Scene II, y así sucesivamente.
[Enter Romeo and Juliet]
Esta es una dirección escénica; en él, le decimos a las variables Romeoy Julietque entren en el "escenario". Solo dos variables pueden estar en el "escenario" a la vez; la etapa se usa para que el compilador pueda determinar qué variable está abordando qué cuando habla. Como solo tenemos dos variables, Romeo y Julieta permanecerán en el escenario durante todo el programa.
Scene II: In which neither Romeo nor Juliet believes the other open-minded.
Otra declaración de escena. Se saltará a la escena II para decodificar otra duración de ejecución.
Juliet:
Esta forma de declaración significa que Julieta comenzará a hablar. Todo hasta la próxima Romeo:declaración de dirección de escena o escena / acto será una línea pronunciada por Juliet, y por lo tanto "yo" se referirá a Juliet, "usted" / "you" a Romeo, etc.
Open your mind.
Este comando almacena el valor ordinal de un solo carácter de STDIN en Romeo.
Is my mother jollier than thou?
En SPL, los sustantivos se traducen a 1 o -1 dependiendo de si son positivos o negativos. En este caso, se my mothertraduce en 1. Los adjetivos (positivos o negativos) multiplican su sustantivo por 2.
Esta es una pregunta; en ella, Juliet pregunta si my mother(también conocido como 1) es "más alegre" que Romeo. Los comparativos se traducen a less than(si son negativos, como worse) o greater than(si son positivos, como jollier). Por lo tanto, esta pregunta se reduce a Is 1 greater than you?.
La razón por la que hacemos esta pregunta es para detectar el final de la entrada. Como el valor de EOFvaría según la plataforma, pero generalmente es menor que 1, lo usamos para detectarlo.
If so, we must proceed to scene IV.
Si se evalúa la pregunta anterior true, saltamos a la escena IV, que es simplemente el final del programa. En resumen, si detectamos un EOF, finalizamos el programa.
Romeo:
Ahora es la línea de Romeo: "yo" y "tú" se refieren a Romeo y Julieta, respectivamente.
Open your mind.
Nuevamente, esta declaración coloca el valor ordinal de un solo carácter de STDIN en Julieta, que en este caso es la longitud de ejecución del carácter almacenado en Romeo.
Thou art the sum of thyself and the sum of my good aunt and the difference
between nothing and the quotient of the square of twice the sum of thy foul
fat-kidneyed goat and thy death and thy evil variable!
Este es demasiado largo para pasar con gran detalle, pero solo confía en mí en que se traduce Juliet -= 48. Hacemos esto porque Juliet tiene el valor ASCII de un número, y ord('0') == 48; al restar 48, traducimos del valor ASCII de un número al número mismo.
Scene III: In which Romeo snaps and brutally insults Juliet.
Otra declaración de escena. Este es para el ciclo en el que imprimimos repetidamente el valor de carácter de Romeo, Julietveces.
Juliet:
Speak thy mind.
Esta declaración hace que Romeo imprima su valor como personaje; es decir, cualquier valor de carácter que se haya almacenado previamente en Romeo ahora se genera.
Romeo:
Thou art the sum of thyself and a hog!
Un cerdo es un sustantivo negativo, por lo que se a hogtraduce en -1; por lo tanto, esta declaración se evalúa como Juliet -= 1.
Art thou as rotten as nothing?
Romeo aquí pregunta si Julieta está "tan podrida como", o igual a 0.
If so, let us return to scene II.
Si el valor de Juliet es 0, volveremos a la escena II para decodificar la longitud de la carrera de otro personaje.
Let us return to scene III.
De lo contrario, volvemos a la escena III para dar salida al personaje de Romeo nuevamente.
Scene IV: Finale.
[Exeunt]
Esta declaración de escena final es solo un marcador para el final del programa. La [Exeunt]dirección del escenario es necesaria para que el compilador realmente genere la escena final.