Consigli per giocare a golf a Nim


11

Quali consigli generali hai per giocare a golf a Nim ? Sto cercando idee che possano essere applicate a problemi di code-golf e che siano almeno in qualche modo specifiche per Nim (es. "Rimuovere i commenti" non è una risposta).

Si prega di inviare un suggerimento per risposta.

Risposte:


7

Sintassi delle chiamate flessibile

Nim è piuttosto flessibile quando si tratta di sintassi delle chiamate di funzione. Ad esempio, ecco alcuni modi per chiamare una funzione con un argomento:

ord(c)
ord c
c.ord

E modi per chiamare una funzione con due argomenti:

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

Scegli la versione più golfistica adatta alla tua situazione, soprattutto per quanto riguarda la precedenza. Ad esempio, confronta:

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

Al contrario di:

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

Nota che max a,bfunziona anche (a volte).
Rame,

7

Usa il futuremodulo

Il futuremodulo contiene due principali funzionalità di risparmio di byte: lambda e comprensione dell'elenco. Le lambda sono estremamente utili.

Ad esempio, questo:

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

può essere abbreviato in questo:

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

che salva un byte. Nota, tuttavia, che lambdas non può essere utilizzato al di fuori di un elenco di parametri, quindi per testare il tuo codice, dovrai fare qualcosa del genere:

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

Inoltre, è possibile utilizzare la comprensione dell'elenco con il futuremodulo. Ad esempio, questo codice stampa un seq ( @[...]) di tutti i quadrati inferiori a 100 divisibili per 4:

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

Per un confronto più equo, va notato che a volte è possibile utilizzare anyinvece di string(suppongo che tu abbia scelto il nome del tipo più lungo), ma questo salva comunque.
Sp3000,

@ Sp3000 Non sapevo che potessi usare any, grazie per il suggerimento! Dovresti pubblicarlo come risposta.
Rame

Per un confronto ancora migliore, puoi farlo proc(s:any):any=s&", world!", lasciando cadere <space>fun anonimoproc
Sp3000

6

Operatori non firmati

Quando si lavora con numeri interi non negativi, a volte è meglio usare operatori non firmati. In particolare, se possibile, utilizzare /%e %%anziché dive mod.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.