ニムでのゴルフのヒント


11

ニムでゴルフをするための一般的なヒントは何ですか?私は、コードゴルフの問題に適用でき、少なくともNimに固有のアイデアを探しています(たとえば、「コメントの削除」は答えではありません)。

回答ごとに1つのヒントを投稿してください。

回答:


7

柔軟な呼び出し構文

Nimは、関数呼び出し構文に関しては非常に柔軟です。たとえば、1つの引数を使用して関数を呼び出す方法は次のとおりです。

ord(c)
ord c
c.ord

そして、2つの引数で関数を呼び出す方法:

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ラムダとリスト内包:モジュールは、主に2つのバイトを節約する機能が含まれています。ラムダは非常に便利です。

たとえば、これ:

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

これに短縮できます:

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

これによりバイトが節約されます。ただし、パラメーターリストの外ではラムダを使用できないことに注意してください。したがって、コードをテストするには、次のようにする必要があります。

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

同様に、リスト内包表記もfutureモジュールで使用できます。たとえば、次のコードは、@[...]4で割り切れる100未満のすべての正方形のseq()を出力します。

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

符号なし演算子

非負の整数を使用する場合、符号なし演算子を使用した方がよい場合があります。具体的には、可能であれば、/%andの%%代わりにdivandを使用しますmod

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.