Quels conseils généraux avez-vous pour jouer au golf dans des langages de programmation en 2 dimensions? Je suis à la recherche de conseils qui peuvent être appliqués aux problèmes de code-golf et qui sont spécifiques aux langages de programmation 2D, mais qui ne sont spécifiques à aucun langage (les réponses comme "supprimer les commentaires" et "utiliser l' M
opération" ne sont pas des réponses).
Veuillez poster un pourboire par réponse.
Réponses:
Évitez les espaces horizontaux
Souvent, le code laissera de grands espaces vides sur le côté gauche du programme, ainsi.
Cela ajoute 4 octets, lorsque cela pourrait être évité en alignant à gauche.
Si vous devez utiliser de grands espaces vides, essayez de les rendre verticaux plutôt qu'horizontaux.
contre
la source
Utilisez une dimension si possible
En règle générale, des programmes plus simples peuvent être écrits sur une seule ligne. Par exemple, le programme chat classique pourrait être:
Mais on pourrait abuser du comportement d'emballage et faire ceci:
Ou, dans les langues sans un tel comportement d'habillage:
(En supposant que
?
cela ne saute pas.) Dans le cas d'un langage sans habillage, une boucle explicite est souvent meilleure.Avec des commandes de saut
Dans les langages 2D avec des commandes de saut et de saut conditionnel, un programme pourrait ressembler à ceci:
Cela pourrait également être:
(si
!
est un trampoline et&
saute en position)la source
ioiioiioi
etc.?io;
faire, et tout ce que je sais, c'est que?
ça ne saute pas. Il semble que ce soient des commandes de poissons, mais je ne pense pas qu'elles soient très standard.Les retours chariot sont trop d'octets
Moins vous pouvez faire de 2D, mieux c'est. Un retour chariot est un autre no-op. Sans ignorer les conseils de @ATaco et @ ASCII uniquement, essayez de conserver la dimension Y aussi petite que possible.
Cette
est mieux que
la source
\n
(saut de ligne) est une fin de ligne régulièrement utilisée dans le texte aligné à gauche sur les systèmes POSIX, bien que Windows et Mac OS (pré-macOS) utilisent des combinaisons de\n
( saut de ligne) et\r
(retour chariot).SEC (ne vous répétez pas)
Bien que l'abstrait avec des fonctions soit généralement plus long dans Code Golf, il peut vraiment aider pour les langages 2D. Essayez de retravailler votre code pour qu'il puisse réutiliser le même extrait, en le saisissant / en le sortant avec deux branches d'exécution différentes.
la source
Chemins d'entrelacement
Habituellement, dans un langage 2D, il existe une IP qui se déplace selon les commandes de direction. Étant donné que les espaces sont des octets gaspillés, il est presque toujours plus efficace de réorganiser le programme afin qu'il se rapproche le plus souvent possible de la gauche, ce qui évite d'avoir besoin d'espaces de remplissage inutiles.
la source
Utilisez des miroirs
Les miroirs peuvent parfois être utilisés dans deux chemins en même temps (chaque chemin rebondit sur un côté du miroir). Cela peut ne pas sembler utile, mais cela peut vous permettre de réorganiser votre programme, ou si vous en avez beaucoup si les changements de direction peuvent être remplacés par moins de miroirs.
la source
Mémorisez les idiomes
Voici quelques "idiomes" qui font certaines choses, selon la nature de la langue.
Code pseudo-linéaire
Si la génération de code dynamique est nécessaire, il peut être utile d'utiliser le modèle de code pseudo-linéaire:
En supposant
\
et env
pensant à ce qu'ils font habituellement.Boucle infinie
Dans presque tous les langages 2D,
><
est une boucle infinie et incassable. Si, pour une raison quelconque, vous devez le faire, c'est la meilleure façon, malgré la beauté de cela:En fait, si vous faites de votre code une ligne , vous pouvez simplement utiliser
^
ouv
, en tant que tel:Cela
v
enverra l'IP à lui-même, s'enroulant autour. Vous pouvez toujours être en mesure d'utiliser cette approche dans tous les cas où une commande directionnelle pointe vers une série de non-opérations (relatives).Cadre Quine
Habituellement, les langages avec un framework chaîne / guillemet peuvent avoir une quine comme celle-ci:
Pour> <>, cela ressemblerait à:
Sauf que celui-ci se termine avec une erreur de terminaison. C'est probablement le plus court > <> quine , ou, du moins, le plus court que j'ai trouvé.
la source
<
dans la quine> <>?"
extrémités se retrouvent du mauvais côté. L'astuce est bonne sinon, j'ai utilisé ce cadre général dans beaucoup de mes réponses