Conseils pour jouer au golf à Nim


11

Quels conseils avez-vous pour jouer au golf à Nim ? Je recherche des idées qui peuvent être appliquées aux problèmes de code-golf et qui sont également au moins quelque peu spécifiques à Nim (par exemple, "supprimer les commentaires" n'est pas une réponse).

Veuillez poster un pourboire par réponse.

Réponses:


7

Syntaxe d'appel flexible

Nim est assez flexible en ce qui concerne la syntaxe des appels de fonction. Par exemple, voici quelques façons d'appeler une fonction avec un seul argument:

ord(c)
ord c
c.ord

Et des façons d'appeler une fonction avec deux arguments:

max(a,b)
a.max(b)
a.max b

Choisissez la version la plus golfique qui convient à votre situation, notamment en ce qui concerne la priorité. Par exemple, comparez:

abs(n)+2
n.abs+2
(abs n)+2

Par opposition à:

abs(n+2)
(n+2).abs
abs n+2

Notez que max a,bmême fonctionne (parfois).
— Cuivre

7

Utilisez le futuremodule

Le futuremodule contient deux fonctionnalités d'économie d'octets principales: les lambdas et les listes de compréhension. Les lambdas sont extrêmement utiles.

Par exemple, ceci:

proc f(s:any):any=s&", world!"

peut être raccourci à ceci:

import future
s=>s&", world!"

ce qui économise un octet. Notez cependant que les lambdas ne peuvent pas être utilisés en dehors d'une liste de paramètres - donc pour tester votre code, vous devrez faire quelque chose comme ceci:

import future
proc test(f: string -> string) = echo f "Hello"
test(s=>s&", world!")

De plus, les compréhensions de liste peuvent être utilisées avec le futuremodule. Par exemple, ce code imprime une seq ( @[...]) de tous les carrés inférieurs à 100 divisible par 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]

Pour une comparaison plus juste, il convient de noter que vous pouvez parfois utiliser à la anyplace de string(je suppose que vous avez choisi le nom de type le plus long), mais cela enregistre malgré tout.
— Sp3000

@ Sp3000 Je ne savais pas que vous pouviez utiliser any, merci pour le conseil! Vous devez poster cela comme réponse.
— Cuivre

Pour une comparaison encore meilleure, vous pouvez le faire proc(s:any):any=s&", world!"en laissant tomber l' <space>fanonymatproc
— Sp3000

6

Opérateurs non signés

Lorsque vous travaillez avec des entiers non négatifs, il est parfois préférable d'utiliser des opérateurs non signés. Spécifiquement, si possible, utilisez /%et %%au lieu de divet mod.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.