¿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
D
un 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:
X
yY
son constantes comocat
,I
oyou
[op]
son operaciones comonicer
,the sum of
Si 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:
a
lugar dean
othe
, excepto las expresionesthe sum of
y similares, ya que no funcionarán cona
.am
,be
o enis
lugar deare
oart
.I
lugar deme
omyself
.you
en lugar dethee
,thou
,thyself
oyourself
.big
para adjetivos.cat
para números positivos.pig
para números negativos.zero
para cero.worse
paraA < B
(en lugar desmaller
opunier
).nicer
paraA > B
(en lugar debetter
,bigger
,fresher
,friendlier
ojollier
).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 of
let us
the ghost
( así ) (pero quién usaría este personaje de todos modos)if so
yif 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 tothy
funciona, 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 to
incluso 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 X
es 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:
Thy
ythyself
son más cortos queyour
yyourself
.Is
es 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 so
segundos. ¡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 x
oRecall@
etc. obras),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(sinmind
)fuente
Speak thy
oLet us Scene I
Use 'dos veces' y la propiedad distributiva
En lugar de:
Utilizar:
Esto ahorra 2 bytes por cada
twice
2 usos debig
8 bytes (con un espacio) ytwice
solo 6 bytes.fuente