Wskazówki do gry w golfa w Nim

11

Jakie masz ogólne wskazówki na temat gry w golfa w Nim ? Szukam pomysłów, które można by zastosować do problemów z golfem i które są przynajmniej w pewnym stopniu specyficzne dla Nima (np. „Usuń komentarze” nie jest odpowiedzią).

Proszę zamieścić jedną wskazówkę na odpowiedź.

trichopaks
źródło

Odpowiedzi:

7

Elastyczna składnia połączeń

Nim jest dość elastyczny, jeśli chodzi o składnię wywołań funkcji. Na przykład oto kilka sposobów wywoływania funkcji z jednym argumentem:

ord(c)
ord c
c.ord

I sposoby wywoływania funkcji z dwoma argumentami:

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

Wybierz najbardziej golfową wersję, która najlepiej pasuje do Twojej sytuacji, szczególnie jeśli chodzi o pierwszeństwo. Na przykład porównaj:

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

W przeciwieństwie do:

abs(n+2)
(n+2).abs
abs n+2
Sp3000
źródło
Pamiętaj, że max a,bnawet działa (czasami).
Copper
7

Użyj futuremodułu

futureModuł zawiera dwa główne bajt oszczędzania funkcje: lambdas i listowych. Jagnięta są niezwykle przydatne.

Na przykład:

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

można skrócić do tego:

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

co oszczędza bajt. Pamiętaj jednak, że lambdas nie mogą być używane poza listą parametrów - więc aby przetestować kod, musisz zrobić coś takiego:

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

Z futuremodułem można również używać wyrażeń listowych. Na przykład ten kod wypisuje seq ( @[...]) wszystkich kwadratów mniejszych niż 100 podzielnych przez 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
Miedź
źródło
Dla bardziej sprawiedliwego porównania należy zauważyć, że czasami możesz użyć anyzamiast string(zakładam, że wybrałeś najdłuższą nazwę typu), ale to nadal oszczędza.
Sp3000,
@ Sp3000 Nie wiedziałem, że możesz użyć any, dzięki za wskazówkę! Powinieneś opublikować to jako odpowiedź.
Miedź
Aby uzyskać jeszcze lepsze porównanie, możesz to zrobić proc(s:any):any=s&", world!", <space>fproc
pozostawiając
6

Niepodpisani operatorzy

Podczas pracy z nieujemnymi liczbami całkowitymi czasem lepiej jest używać niepodpisanych operatorów. W szczególności, jeśli to możliwe, użyj /%i %%zamiast divi mod.

Sp3000
źródło