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.