Lời khuyên cho việc chơi golf ở Nim


11

Bạn có lời khuyên chung nào cho việc chơi golf ở Nim ? Tôi đang tìm kiếm những ý tưởng có thể áp dụng cho các vấn đề về golf-code và ít nhất cũng hơi cụ thể đối với Nim (ví dụ: "xóa bình luận" không phải là một câu trả lời).

Xin vui lòng gửi một lời khuyên cho mỗi câu trả lời.

Câu trả lời:


7

Cú pháp cuộc gọi linh hoạt

Nim khá linh hoạt khi nói đến chức năng gọi cú pháp. Ví dụ, đây là một số cách để gọi một hàm với một đối số:

ord(c)
ord c
c.ord

Và các cách để gọi một hàm với hai đối số:

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

Chọn phiên bản golf nhất phù hợp với tình huống của bạn, đặc biệt là về quyền ưu tiên. Ví dụ: so sánh:

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

Như trái ngược với:

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

Lưu ý rằng max a,bthậm chí hoạt động (đôi khi).
Đồng

7

Sử dụng futuremô-đun

Các futuremô-đun chứa hai chính tính năng byte tiết kiệm: lambdas và danh sách comprehensions. Lambdas cực kỳ hữu ích.

Ví dụ: cái này:

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

có thể rút ngắn lại điều này:

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

mà tiết kiệm một byte. Tuy nhiên, lưu ý rằng lambdas không thể được sử dụng bên ngoài danh sách tham số - vì vậy để kiểm tra mã của bạn, bạn sẽ phải làm một cái gì đó như thế này:

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

Đồng thời, việc hiểu danh sách có thể được sử dụng với futuremô-đun. Ví dụ: mã này in một seq ( @[...]) của tất cả các ô vuông nhỏ hơn 100 chia hết cho 4:

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

Để so sánh công bằng hơn, cần lưu ý rằng đôi khi bạn có thể sử dụng anythay vì string(Tôi giả sử bạn đã chọn tên loại dài nhất), nhưng điều này vẫn tiết kiệm bất kể.
Sp3000

@ Sp3000 Tôi không biết bạn có thể sử dụng any, cảm ơn vì tiền boa! Bạn nên đăng nó như là một câu trả lời.
Đồng

Để so sánh thậm chí tốt hơn, bạn có thể làm proc(s:any):any=s&", world!", bỏ <space>fmột ẩn danhproc
Sp3000

6

Toán tử chưa ký

Khi làm việc với các số nguyên không âm, đôi khi sử dụng các toán tử không dấu là tốt hơn. Cụ thể, nếu có thể, sử dụng /%%%thay vì divmod.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.