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]
In Nim, there is no implicit conversion of int->bool or bool->int. It is thus advantageous for golfing to use
0>1 to get the values for true and false, as one might use
0 in C. This can help with, for example, the creation of infinite loops.
;to end statements
Oftentimes, a lot of Nim bytes come from the mandatory indentation of two spaces. This can sometimes be avoided by utilizing
; to break statements.
For example (a bit contrived, but nevertheless effectively demonstrating the idea):
while 1>0:echo "Hello";echo"World"