Nim'de golf için ipuçları


11

Nim'de golf yapmak için hangi genel ipuçlarınız var ? Ben kod-golf sorunları uygulanabilir ve aynı zamanda en azından biraz Nim (örneğin "yorumları kaldırmak" bir cevap değildir) belirli fikirler arıyorum.

Lütfen cevap başına bir ipucu gönderin.

Yanıtlar:


7

Esnek çağrı sözdizimi

İşlev çağrısı sözdizimi söz konusu olduğunda Nim oldukça esnektir. Örneğin, bir işlevi bir argümanla çağırmanın bazı yolları şunlardır:

ord(c)
ord c
c.ord

Ve bir işlevi iki argümanla çağırmanın yolları:

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

Durumunuza en uygun, özellikle öncelikli olmak için en golf halini seçin. Örneğin, karşılaştırın:

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

Aksine:

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

max a,bHatta işe yaradığını unutmayın (bazen).
Bakır

7

futureModülü kullanın

futureLambda'lar ve liste türetimi: modül iki ana bayt tasarrufu özellikleri içerir. Lambdalar son derece kullanışlıdır.

Örneğin, bu:

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

bu kısaltılabilir:

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

bayt tasarrufu sağlar. Bununla birlikte, lambdasların bir parametre listesinin dışında kullanılamayacağını unutmayın - bu nedenle kodunuzu test etmek için aşağıdaki gibi bir şey yapmanız gerekecektir:

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

Ayrıca, liste kavrayışları futuremodül ile birlikte kullanılabilir . Örneğin, bu kod @[...]100'den küçük tüm karelerden bir seq ( ) 4 ile yazdırılır :

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

Daha adil bir karşılaştırma için bazen (en uzun tip adını seçtiğinizi varsayıyorum) anyyerine bazen kullanabileceğinizi belirtmek gerekir string, ancak bu yine de kaydeder.
Sp3000 26:16

@ Sp3000 Kullanabileceğinizi bilmiyordum any, bahşiş için teşekkürler! Bunu bir cevap olarak göndermelisin.
Bakır

Daha da iyi bir karşılaştırma için, anonim için proc(s:any):any=s&", world!"bırakarak yapabilirsiniz<space>fproc
Sp3000

6

İmzasız operatörler

Negatif olmayan tamsayılarla çalışırken, bazen imzasız operatörler kullanmak daha iyidir. Mümkünse Özellikle, kullanmak /%ve %%yerine divve mod.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.