Quels conseils généraux avez-vous pour jouer au golf à Go? Je suis nouveau au golf de code et cherche des idées qui peuvent être appliquées aux problèmes de golf de code en général qui sont au moins quelque peu spécifiques à Go.
Veuillez conserver un pourboire par réponse.
Go
balise, mais alors, est-ce que Go est même utilisé pour jouer au golf ici?Réponses:
Inspiré par la réponse de @ EMBLEM ici .
Vous pouvez placer les fonctions d'un package dans l'espace de noms global lorsque vous les importez comme ceci:
la source
Vous pouvez nommer les packages comme vous le souhaitez lorsque vous les importez.
J'ai appris cela ici .
la source
import ."fmt"
et puisPrintln
et le reste desfmt
fonctions sont dans l'espace de noms global. De plus, vous n'avez pas besoin de points-virgules. Jamais, sauf si vous avez plusieurs relevés sur une ligneLes valeurs de retour nommées peuvent économiser quelques octets. Par exemple:
Vous pouvez enregistrer 3 octets avec
C'est plus utile si vous devez déclarer plusieurs variables au début de votre fonction.
la source
Si vous avez besoin de comparer de nombreuses valeurs différentes à une seule, il peut être plus efficace d'utiliser un
switch
avec un seul cas.la source
Déclaration de plusieurs variables:
Int From String Conversion: (limité mais parfois utile)
Et vice versa
la source
fmt.Sprint
est susceptible d'économiser des octetsstrconv.Atoi
, car vous avez probablementfmt
déjà importé .strconv
c'était juste pour montrer ce que serait le golf-code en code normal.Le compilateur Go a des fonctions prédéfinies
print
etprintln
qui ne nécessitent pas d'importer fmt, donc au lieu de cela.Vous pouvez écrire ceci.
Notez que cela sort vers STDERR.
la source
Beaucoup de choses dans la boucle de plage for sont facultatives.
Version standard:
Si
i
,v
a déjà été défini et peut être remplacé:Si vous ne vous souciez pas de la valeur:
Si vous ne vous souciez pas de la valeur et
i
a déjà été défini:Si vous ne vous souciez pas de l'indice ou de la valeur:
Si vous voulez une boucle infinie:
la source
Besoin d'une chaîne pour contenir une nouvelle ligne? N'écrivez pas
\n
, créez une chaîne brute avec des guillemets et mettez-y une nouvelle ligne littérale.la source
Vous pouvez placer n'importe quel nombre d'accolades ouvrantes sur une seule ligne, mais une ligne contenant des accolades ouvrantes peut contenir au plus une accolade fermante.
Correct:
Aussi correct:
Aussi correct:
Incorrect:
la source
Go a priorité différente de l' opérateur pour les opérations de bits,
<<
,>>
,&
, etc. ont généralement une priorité plus faible que+
et-
dans la plupart des langues, mais Go ils ont la même priorité que*
et/
.Cela pourrait être utilisé pour enregistrer certaines parenthèses.
La plupart des langues:
Aller:
la source
Tirez pleinement parti des fonctions de première classe de Go en attribuant des noms de fonction de bibliothèque longs aux variables à une lettre.
la source