尼姆打高尔夫球的秘诀


11

您在尼姆打高尔夫球有哪些一般提示?我正在寻找可以应用于代码高尔夫球问题的想法,并且这些想法至少也特定于Nim(例如,“删除评论”不是答案)。

请为每个答案发布一个提示。

Answers:


7

灵活的调用语法

对于函数调用语法,Nim非常灵活。例如,以下是通过一个参数调用函数的一些方法:

ord(c)
ord c
c.ord

以及使用两个参数调用函数的方法:

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

选择最适合您的情况的高尔夫版本,尤其是关于优先级的版本。例如,比较:

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

相对于:

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

请注意,这max a,b有时甚至可行。

7

使用future模块

future模块包含两个主要的字节节省功能:lambda和列表推导。Lambda非常有用。

例如,这:

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

可以简化为:

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

节省一个字节。但是请注意,lambda不能在参数列表之外使用-因此,要测试您的代码,您必须执行以下操作:

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

同样,列表推导也可以与future模块一起使用。例如,以下代码打印出一个@[...]小于100的所有方格的seq(),可被4整除:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]

为了更公平地进行比较,应注意,有时可以使用any代替string(我假设您选择的是最长的类型名称),但这仍然可以节省。
Sp3000

@ Sp3000我不知道您可以使用any,谢谢提示!您应该将其发布为答案。

对于一个更好的比较,你可以做proc(s:any):any=s&", world!",丢弃<space>f了一个匿名proc
SP3000

6

无符号运算符

使用非负整数时,有时最好使用无符号运算符。具体来说,如果可能,请使用/%%%代替divmod

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.