What general tips do you have for golfing in Nim? I'm looking for ideas which can be applied to code-golf problems and which are also at least somewhat specific to Nim (e.g. "remove comments" is not an answer).
Please post one tip per answer.
Code Golf Stack Exchange is a question and answer site for programming puzzle enthusiasts and code golfers. It only takes a minute to sign up.Sign up to join this community
Nim is pretty flexible when it comes to function call syntax. For example, here are some ways to call a function with one argument:
ord(c) ord c c.ord
And ways to call a function with two arguments:
max(a,b) a.max(b) a.max b
Choose the golfiest version that works right for your situation, especially regarding precedence. For example, compare:
abs(n)+2 n.abs+2 (abs n)+2
As opposed to:
abs(n+2) (n+2).abs abs n+2
future module contains two main byte-saving features: lambdas and list comprehensions. Lambdas are extremely useful.
For example, this:
proc f(s:any):any=s&", world!"
can be shortened to this:
import future s=>s&", world!"
which saves a byte. Note, however, that lambdas can't be used outside of a parameter list -- so to test your code, you'll have to do something like this:
import future proc test(f: string -> string) = echo f "Hello" test(s=>s&", world!")
As well, list comprehensions can be used with the
future module. For example, this code prints a seq (
@[...]) of all squares less than 100 divisible by 4:
import future echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
When working with nonnegative integers, sometimes it's better to use unsigned operators. Specifically, if possible, use
%% instead of