Dicas para jogar golfe em Nim

11

Que dicas gerais você tem para jogar golfe em Nim ? Estou procurando idéias que possam ser aplicadas a problemas de código-golfe e que também sejam pelo menos um pouco específicas para Nim (por exemplo, "remover comentários" não é uma resposta).

Poste uma dica por resposta.

Trichoplax
fonte

Respostas:

7

Sintaxe de chamada flexível

Nim é bastante flexível quando se trata de sintaxe de chamada de função. Por exemplo, aqui estão algumas maneiras de chamar uma função com um argumento:

ord(c)
ord c
c.ord

E maneiras de chamar uma função com dois argumentos:

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

Escolha a versão mais adequada para a sua situação, principalmente em relação à precedência. Por exemplo, compare:

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

Ao contrário de:

abs(n+2)
(n+2).abs
abs n+2
Sp3000
fonte
Observe que max a,baté funciona (às vezes).
Copper
7

Use o futuremódulo

O futuremódulo contém dois recursos principais de economia de bytes: lambdas e compreensão de lista. Lambdas são extremamente úteis.

Por exemplo, isto:

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

pode ser reduzido para isso:

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

que salva um byte. Observe, no entanto, que lambdas não podem ser usadas fora de uma lista de parâmetros - portanto, para testar seu código, você terá que fazer algo assim:

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

Também, a compreensão da lista pode ser usada com o futuremódulo. Por exemplo, esse código imprime um seq ( @[...]) de todos os quadrados menores que 100 divisíveis por 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
Cobre
fonte
Para uma comparação mais justa, note que às vezes você pode usar em anyvez de string(suponho que você tenha escolhido o nome do tipo mais longo), mas isso ainda salva independentemente.
SP3000
@ Sp3000 Eu não sabia que você poderia usar any, obrigado pela dica! Você deve postar isso como resposta.
Copper
Para uma comparação ainda melhor, você pode fazer proc(s:any):any=s&", world!", descartando a opção <space>fanônima.proc
Sp3000 20/12/16
6

Operadores não assinados

Ao trabalhar com números inteiros não negativos, às vezes é melhor usar operadores não assinados. Especificamente, se possível, use /%e em %%vez de dive mod.

Sp3000
fonte