¿Qué consejos generales tiene para jugar al golf en el lenguaje de programación de Shakespeare? Estoy buscando ideas que se puedan aplicar a problemas de código de golf y que también sean al menos algo específicas para SPL (por ejemplo, "eliminar comentarios" no es una respuesta).
Por favor, publique un consejo por respuesta.

Respuestas:
(Bueno ... dado que este es mi lenguaje adoptado 1 , siento que estoy obligado a agregar algo aquí)
Use nombres cortos de variables
Sí, sí, sí, eso es bastante estándar para el golf de código, solo usas nombres de variables de una letra, no hay noticias aquí. O hay Debido a que los chaps que crearon SPL eran lo suficientemente extraños como para no permitir ningún nombre para las variables de su lenguaje: deben provenir de obras de Shakesperian que, en términos de longitud del personaje, es un dolor en la lucha real, pero, si estás codificando en SPL Ya lo sabes. Por lo tanto, mi consejo sería utilizar caracteres con nombres cortos, como Ajax , Ford , Page o Puck , en lugar del Arzobispo de Canterbury , por ejemplo.
Eso es todo lo que tengo, me temo.
1 - ya que mis habilidades en Java son equivalentes a las de un recién nacido.
fuente
(después de hacer la anterior, solo recordé algunas cosas)
Elige tu código cuidadosamente
Un ejemplo, para tratar de explicar lo que esto significa.
y
produce el mismo resultado exacto, que es hacer que el personaje que se habla asuma el valor 64 (ya que, suponiendo que lea mi larga batalla con SPL , sabe que ambas líneas son equivalentes a 2 * 2 * 2 * 2 * 2 * 2 * 1); sin embargo, el primero tiene 59 bytes, mientras que el segundo tiene un bytecount de 107.
Aún así, nadie estará lo suficientemente demente como para entrar en un desafío de código de golf con SPL, así que ...
fuente
a big big big big big big cat, ¿guardar 4 bytes más? Sé que arruina el arte ... pero este es el código golf después de todo. ;)Cualquier número romano es un número de escena válido.
Eso significa que en lugar de:
Tu puedes hacer:
fuente
Dun número romano válido? IIRC, son 500 (pero no estoy seguro si es válido en SPL)Eliminar palabras innecesarias
Mire esto (insertando nuevas líneas y espacios en blanco para facilitar la lectura):
Se ve muy golfista ¿eh? Aquí hay una forma ininteligible aún más simple:
Como referencia, aquí hay una lista de palabras fácilmente extraíbles del código:
big cat, de lo contrario, aún necesita el 'es'Leyenda:
XyYson constantes comocat,Ioyou[op]son operaciones comonicer,the sum ofSi me encuentro con algún otro, lo agregaré a la lista.
Para referencia adicional, aquí está el encabezado más corto para comenzar un programa:
Pruébalo en línea!
Agregue Page y Ford como caracteres adicionales según sea necesario.
fuente
Usa palabras cortas
Así que aquí están:
alugar deanothe, excepto las expresionesthe sum ofy similares, ya que no funcionarán cona.am,beo enislugar deareoart.Ilugar demeomyself.youen lugar dethee,thou,thyselfoyourself.bigpara adjetivos.catpara números positivos.pigpara números negativos.zeropara cero.worseparaA < B(en lugar desmalleropunier).nicerparaA > B(en lugar debetter,bigger,fresher,friendlierojollier).fuente
El "vamos a volver a la escena X" se puede usar incluso si el personaje con el que se habla está fuera del escenario. Entonces en lugar de:
Tu puedes hacer:
fuente
Eliminar espacios redundantes
Además de los triviales (dos espacios adyacentes, adyacentes a una puntuación, adyacentes a una nueva línea, al final) (con algunas excepciones), se puede eliminar el espacio después de los siguientes tokens:
the sum oflet usthe ghost( así ) (pero quién usaría este personaje de todos modos)if soyif not(quitar el,después de esto, y no es necesario añadir ningún espacio Ejemplo:.if solet usact I)listen to(asílisten tothyfunciona, así )Nota: Esto no funciona con el intérprete de Perl . Probablemente sea solo un efecto involuntario causado por el comportamiento de análisis de Flex. El "estándar de idioma" no está claro al respecto.
fuente
No tiene que cambiar personas en condicionales.
Por ejemplo,
es más largo que
fuente
En lugar de restar, agregue constantes
es más largo que
fuente
Los saltos pueden ser más cortos.
Puede usar
return toincluso si la escena está por delante, y viceversa. De hecho, al intérprete ni siquiera le importa si lo omite por completo. Esto significa que estas tres declaraciones son 100% equivalentes:fuente
Let usscene Xes suficiente .Use solo una escena
Normalmente, no se puede reutilizar la primera escena de un acto, ya que siempre tiene lo
[Enter Ajax and Puck]primero. Sin embargo, puedes hacer un prefacio[Exeunt]para poder reutilizar la primera escena de una obra.[Exeunt]es un byte más corto que declarar una nueva escena, y saltar a un acto es dos bytes menos que saltar a una escena.Por ejemplo: un programa simple para gatos
Pruébalo en línea!
A:
Pruébalo en línea!
fuente
Usa palabras más cortas
Ejemplos:
Thyythyselfson más cortos queyouryyourself.Ises más corto queare.y más...
fuente
Use condicionales inteligentes
Por ejemplo, no uses
Sino más bien
fuente
If (so|not)no tiene que seguir de inmediato la comparación.fuente
If sosegundos. ¡Esto puede ser útil para evitar repetir las comparaciones!Use constantes para almacenar grandes números
Por ejemplo, si tienes
Puedes declarar a otra persona en la parte superior
y cambia tu código a
fuente
Gotos no son los únicos comandos utilizables con
If (so|not)fuente
Se ignoran todas las líneas nuevas.
fuente
Use
<o en>lugar de==No es aplicable a todas las situaciones, pero es bastante más corto:
Puck == Ajax
Puck <Ajax o Puck> Ajax
¡4 bytes más cortos para ambos!
fuente
No necesitas el final
.o!.Pruébalo en línea!
Esto también se puede usar antes de a
[. (gracias jimmy23013)Ejemplos:
,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:You cat,.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Open mind[Exeunt]No funciona en:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax](justo despuésScene {number}:) (sin embargo, esto funciona, no sé por qué),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart(y variantes más cortas),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I(y variantes más cortas),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall(sólo después de vacíoRecall,Recall xoRecall@etc. obras),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy(sinmind)fuente
Speak thyoLet us Scene IUse 'dos veces' y la propiedad distributiva
En lugar de:
Utilizar:
Esto ahorra 2 bytes por cada
twice2 usos debig8 bytes (con un espacio) ytwicesolo 6 bytes.fuente