Quels conseils généraux avez-vous pour jouer au golf dans le langage de programmation Shakespeare? Je cherche des idées qui peuvent être appliquées aux problèmes de code-golf et qui sont aussi au moins quelque peu spécifiques à SPL (par exemple, "supprimer les commentaires" n'est pas une réponse).
Merci de poster un pourboire par réponse.
Réponses:
(Eh bien ... puisque c'est la langue que j'ai adoptée 1 , je me sens obligé d'ajouter quelque chose ici)
Utilisez des noms de variables courts
Ouais, ouais, ouais, c'est assez standard en code-golf, vous utilisez simplement des noms de variables d'une longueur de lettre, pas de nouvelles ici. Ou est-il? Parce que les gars qui ont créé SPL étaient assez farfelus pour ne laisser aucun nom pour les variables de leur langue: ils doivent provenir de jeux Shakesperian qui, en termes de longueur de caractère, sont pénibles pour le tush royal - mais si vous codez en SPL , vous le savez déjà. Donc, mon conseil serait d'utiliser des personnages avec des noms courts, comme Ajax , Ford , Page ou Puck , au lieu de l'archevêque de Cantorbéry , par exemple.
C'est tout ce que j'ai, j'ai peur.
1 - puisque mes compétences en Java sont équivalentes à celles d'un nouveau-né.
la source
(après avoir fait la précédente, je viens de me souvenir de quelques choses)
Choisissez votre code avec soin
Un exemple, pour essayer d'expliquer ce que cela signifie.
et
produit exactement le même résultat, c'est-à-dire que le personnage parlé prend la valeur 64 (puisque, en supposant que vous lisiez ma longue bataille avec SPL , vous savez que les deux lignes équivalent à 2 * 2 * 2 * 2 * 2 * 2 * 1); cependant, le premier a 59 octets, tandis que le second compte 107 octets.
Pourtant, personne ne sera assez dément pour entrer dans un défi code-golf avec SPL, alors ...
la source
a big big big big big big cat
, économiser 4 octets de plus? Je sais que ça gâche l'art… mais c'est du code golf après tout. ;)Tout chiffre romain est un numéro de scène valide
Cela signifie qu'au lieu de:
Tu peux faire:
la source
D
un chiffre romain valide? IIRC, c'est 500 (mais je ne sais pas s'il est valable dans SPL)Supprimer les mots inutiles
Regardez ceci (insertion de nouvelles lignes et d'espaces pour la lisibilité):
On dirait bien joué au golf hein? Voici un formulaire inintelligible encore plus dépouillé:
Pour référence, voici une liste de mots facilement supprimables du code:
big cat
, sinon vous avez toujours besoin du 'est'Légende:
X
etY
sont des constantes commecat
,I
ouyou
[op]
sont des opérations telles quenicer
,the sum of
Si j'en rencontre d'autres, je l'ajouterai à la liste.
Pour plus de références, voici l’en-tête le plus court pour démarrer un programme:
Essayez-le en ligne!
Ajoutez Page et Ford comme caractères supplémentaires si nécessaire.
la source
Utilisez des mots courts
Alors les voici:
a
au lieu dean
outhe
, sauf les expressionsthe sum of
et similaires, car elles ne fonctionneront pasa
.am
,be
ou auis
lieu deare
ouart
.I
au lieu deme
oumyself
.you
lieu dethee
,thou
,thyself
ouyourself
.big
pour les adjectifs.cat
pour les nombres positifs.pig
pour les nombres négatifs.zero
pour zéro.worse
pourA < B
(au lieu desmaller
oupunier
).nicer
pourA > B
( au lieu debetter
,bigger
,fresher
,friendlier
oujollier
).la source
Le "retournons à la scène X" peut être utilisé même si le personnage à qui on parle est en dehors de la scène. Donc au lieu de:
Tu peux faire:
la source
Supprimer les espaces redondants
Outre les triviales (deux espaces adjacents, adjacents à une ponctuation, adjacents à une nouvelle ligne, à la fin) (à quelques exceptions près), l'espace après les jetons suivants peut être supprimé:
the sum of
let us
the ghost
( comme ça ) (mais qui utiliserait ce personnage quand même)if so
etif not
(enlever le,
après, et ne pas avoir besoin d'ajouter un espace Exemple:.if solet usact I
)listen to
(çalisten tothy
marche, comme ça )Note: Ceci ne fonctionne pas avec l' interpréteur Perl . C'est probablement juste un effet involontaire causé par le comportement d'analyse de Flex. La "norme linguistique" n’est pas claire à ce sujet.
la source
Vous n'êtes pas obligé de permuter les gens en conditions conditionnelles.
Par exemple,
est plus long que
la source
Au lieu de soustraire, ajouter des constantes
est plus long que
la source
Les sauts peuvent être plus courts
Vous pouvez utiliser
return to
même si la scène est en avance et vice versa. En fait, l'interprète ne se soucie même pas de l'omettre complètement. Cela signifie que ces trois déclarations sont équivalentes à 100%:la source
Let usscene X
est suffisant .Utilisez une seule scène
Normalement, vous ne pouvez pas réutiliser la première scène d'un acte, car elle a toujours la
[Enter Ajax and Puck]
première chose à faire. Cependant, vous pouvez commencer par ceci[Exeunt]
pour pouvoir réutiliser la première scène d’une pièce.[Exeunt]
est un octet plus court que de déclarer une nouvelle scène et passer à un acte équivaut à deux octets de moins que de sauter à une scène.Ex: un programme de chat simple
Essayez-le en ligne!
À:
Essayez-le en ligne!
la source
Utilisez des mots plus courts
Exemples:
Thy
etthyself
sont plus courts queyour
etyourself
.Is
est plus court queare
.et plus...
la source
Utiliser des conditionnels intelligents
Par exemple, n'utilisez pas
Mais plutôt,
la source
If (so|not)
ne doit pas immédiatement suivre la comparaison.la source
If so
secondes. Cela peut être utile pour éviter de répéter des comparaisons!Utiliser des constantes pour stocker de grands nombres
Par exemple, si vous avez
Vous pouvez simplement déclarer une autre personne en haut
et changez votre code en
la source
Les gotos ne sont pas les seules commandes utilisables avec
If (so|not)
la source
Toutes les nouvelles lignes sont ignorées
la source
Utiliser
<
ou>
au lieu de==
Ne s'applique pas à toutes les situations, mais c'est un peu plus court:
Puck == Ajax
Puck <Ajax ou Puck> Ajax
4 octets plus court pour les deux!
la source
Vous n'avez pas besoin de la fin
.
ou!
.Essayez-le en ligne!
Cela peut aussi être utilisé avant une
[
. (merci jimmy23013)Exemples:
,.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]
Ne fonctionne pas dans:
,.Ajax,.Page,.Act I:.Scene I:[Enter Ajax]
(juste aprèsScene {number}:
) (cependant ça marche, je ne sais pas pourquoi),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Listen to your heart
(et variantes plus courtes),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Let us return to scene I
(et variantes plus courtes),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Recall
(seulement après videRecall
,Recall x
ouRecall@
fonctionne etc.),.Ajax,.Page,.Act I:.Scene I:.[Enter Ajax and Page]Ajax:Speak thy
(sansmind
)la source
Speak thy
ouLet us Scene I
Utilisez 'deux fois' et la propriété distributive
Au lieu de:
Utilisation:
Cela économise 2 octets par
twice
puisque 2 utilisations debig
soit 8 octets (avec un espace) ettwice
n’est que de 6 octets.la source