Consejos para jugar golf en Nim

11

¿Qué consejos generales tienes para jugar al golf en Nim ? Estoy buscando ideas que se puedan aplicar a problemas de código de golf y que también sean al menos algo específicas para Nim (por ejemplo, "eliminar comentarios" no es una respuesta).

Por favor, publique un consejo por respuesta.

trichoplax
fuente

Respuestas:

7

Sintaxis flexible de llamadas

Nim es bastante flexible cuando se trata de la sintaxis de llamadas de función. Por ejemplo, aquí hay algunas formas de llamar a una función con un argumento:

ord(c)
ord c
c.ord

Y formas de llamar a una función con dos argumentos:

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

Elija la versión más adecuada para su situación, especialmente con respecto a la precedencia. Por ejemplo, compare:

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

Opuesto a:

abs(n+2)
(n+2).abs
abs n+2
Sp3000
fuente
Tenga en cuenta que max a,bincluso funciona (a veces).
Cobre
7

Usa el futuremódulo

El futuremódulo contiene dos características principales para guardar bytes: lambdas y listas de comprensión. Las lambdas son extremadamente útiles.

Por ejemplo, esto:

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

se puede acortar a esto:

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

que ahorra un byte. Sin embargo, tenga en cuenta que las lambdas no se pueden usar fuera de una lista de parámetros, por lo que para probar su código, tendrá que hacer algo como esto:

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

Además, las comprensiones de listas se pueden usar con el futuremódulo. Por ejemplo, este código imprime una secuencia ( @[...]) de todos los cuadrados de menos de 100 divisibles por 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
Cobre
fuente
Para una comparación más justa, debe tenerse en cuenta que a veces puede usar en anylugar de string(supongo que eligió el nombre de tipo más largo), pero aún así se guarda.
Sp3000
@ Sp3000 No sabía que podría usar any, gracias por la sugerencia! Deberías publicar eso como respuesta.
Cobre
Para una comparación aún mejor, puede hacerlo proc(s:any):any=s&", world!", dejando el <space>fanónimoproc
Sp3000
6

Operadores sin firmar

Cuando se trabaja con enteros no negativos, a veces es mejor usar operadores sin signo. Específicamente, si es posible, use /%y en %%lugar de divy mod.

Sp3000
fuente