Tips untuk bermain golf di Nim

11

Tips umum apa yang Anda miliki untuk bermain golf di Nim ? Saya mencari ide yang dapat diterapkan untuk masalah kode-golf dan yang juga setidaknya agak spesifik untuk Nim (mis. "Hapus komentar" bukan jawaban).

Silakan kirim satu tip per jawaban.

trichoplax
sumber

Jawaban:

7

Sintaks panggilan fleksibel

Nim cukup fleksibel ketika datang ke sintaks fungsi panggilan. Misalnya, berikut adalah beberapa cara untuk memanggil suatu fungsi dengan satu argumen:

ord(c)
ord c
c.ord

Dan cara memanggil fungsi dengan dua argumen:

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

Pilih versi golf yang paling sesuai dengan situasi Anda, terutama tentang prioritas. Sebagai contoh, bandingkan:

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

Sebagai lawan:

abs(n+2)
(n+2).abs
abs n+2
Sp3000
sumber
Perhatikan bahwa max a,bbahkan berfungsi (kadang-kadang).
Tembaga
7

Gunakan futuremodul

The futuremodul berisi dua byte hemat utama fitur: lambdas dan daftar comprehensions. Lambda sangat berguna.

Sebagai contoh, ini:

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

dapat disingkat menjadi ini:

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

yang menghemat satu byte. Perhatikan, bagaimanapun, bahwa lambdas tidak dapat digunakan di luar daftar parameter - jadi untuk menguji kode Anda, Anda harus melakukan sesuatu seperti ini:

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

Selain itu, daftar pemahaman dapat digunakan dengan futuremodul. Sebagai contoh, kode ini mencetak seq ( @[...]) dari semua kotak kurang dari 100 dibagi dengan 4:

import future
echo lc[x*x|(x<-1..9,x*x mod 4==0),int]
Tembaga
sumber
Untuk perbandingan yang lebih adil, perlu dicatat bahwa Anda terkadang dapat menggunakannya any alih-alih string(Saya berasumsi Anda memilih nama jenis terpanjang), tetapi ini tetap menghemat.
Sp3000
@ Sp3000 Saya tidak tahu Anda bisa menggunakan any , terima kasih atas tipnya! Anda harus memposting itu sebagai jawaban.
Tembaga
Untuk perbandingan yang lebih baik, Anda dapat melakukannya proc(s:any):any=s&", world!", menjatuhkan <space>funtuk anonimproc
Sp3000
6

Operator yang tidak ditandatangani

Saat bekerja dengan bilangan bulat negatif, terkadang lebih baik menggunakan operator yang tidak ditandatangani. Secara khusus, jika mungkin, gunakan /%dan %%bukannya divdan mod.

Sp3000
sumber