Mẹo chơi gôn


25

Bạn có lời khuyên chung nào cho việc chơi golf trong môn cờ vây? Tôi chưa quen với Code Golfing và đang tìm kiếm những ý tưởng có thể áp dụng cho các vấn đề về golf nói chung ít nhất là phần nào cụ thể cho Go.

Hãy giữ một mẹo cho mỗi câu trả lời.


3
Chúng tôi có thể muốn tạo Gothẻ, nhưng sau đó, Go thậm chí có được sử dụng để chơi gôn ở đây không?
Tối ưu hóa

@Optimizer Tôi đã từng
mèo

3
Nên đổi tên tiêu đề thành "Mẹo để đi lfing"
Uriel

Câu trả lời:


12

Lấy cảm hứng từ câu trả lời của @ EMBLEM tại đây .

Bạn có thể đặt các chức năng của gói trong không gian tên toàn cầu khi bạn nhập chúng như sau:

package main

import ."fmt"

func main() {
    Printf("Hello World!")
}

9

Bạn có thể đặt tên cho các gói bất cứ thứ gì bạn thích khi bạn nhập chúng.

package main

import f "fmt"

func main() {
    f.Printf("Hello World\n")
}

Đã học điều này ở đây .


3
Bạn cũng có thể làm import ."fmt"và sau đó Printlnvà các fmtchức năng còn lại nằm trong không gian tên toàn cầu. Ngoài ra, bạn không cần dấu chấm phẩy. Bao giờ, trừ khi bạn có nhiều câu lệnh trên một dòng
mèo

Lưu ý rằng trong Golang, niềng răng phải đi trên cùng một đường, vì chèn dấu chấm phẩy tự động. Thông tin thêm: golang.org/doc/faq#semiaolons .
con mèo

7

Các giá trị trả về được đặt tên có thể lưu một vài byte. Ví dụ:

func x()string{
r:="" //Do stuff
return r}

Bạn có thể lưu 3 byte với

func x()(r string){
//Do stuff
return}

Sẽ hữu ích hơn nếu bạn cần khai báo nhiều biến khi bắt đầu hàm.


7

Nếu bạn cần so sánh nhiều giá trị khác nhau với một giá trị duy nhất, việc sử dụng một switchvới một trường hợp có thể sẽ hiệu quả hơn về không gian .

if x==1||x==2||x==3||x==4{}
switch x{case 1,2,3,4:}

2

Khai báo nhiều biến:

i,s:=0,""

var(i int;s string)

Chuyển đổi từ chuỗi: (giới hạn nhưng đôi khi hữu ích)

n:=byte("9"[0])-48 // actual type is uint8

n,_:=strconv.Atoi("9")

Và ngược lại

s:=string(9+48)

s:=strconv.Itoa(9)

fmt.Sprintcó khả năng lưu byte hơn strconv.Atoi, vì bạn có thể đã nhập fmt.
EMBLEM

@EMBLEM Tôi nghĩ strconvlà ở đó chỉ để cho biết mã golf sẽ là gì trong mã thông thường.
Benny Jobigan

2

Trình biên dịch Go đã được xác định trước printvà các printlnhàm không yêu cầu nhập fmt, vì vậy thay vì điều này.

package main
import."fmt"
func main(){Printf(`Hello World
`)}

Bạn có thể viết này.

package main
func main(){print(`Hello World
`)}

Lưu ý rằng điều này xuất ra STDERR.


1

Rất nhiều thứ trong vòng lặp cho phạm vi là tùy chọn.

Phiên bản tiêu chuẩn:

for i,v:=range a{
// Do stuff
}

Nếu i, vđã được xác định và có thể được ghi đè:

for i,v=range a{
// Do stuff
}

Nếu bạn không quan tâm đến giá trị:

for i:=range a{
// Do stuff
}

Nếu bạn không quan tâm đến giá trị và iđã được xác định:

for i=range a{
// Do stuff
}

Nếu bạn không quan tâm đến chỉ số hoặc giá trị:

for range a{
// Do stuff
}

Nếu bạn muốn một vòng lặp vô hạn:

for{
// Do stuff
}

1

Cần một chuỗi để chứa một dòng mới? Đừng viết \n, tạo một chuỗi thô với backquote và đặt một dòng mới theo nghĩa đen.

s:="\n" // 7 bytes
s:=`
` // 6 bytes

0

Bạn có thể đặt bất kỳ số lượng dấu ngoặc mở nào trên một dòng, nhưng một dòng chứa dấu ngoặc nhọn có thể chứa nhiều nhất một dấu ngoặc nhọn.

Chính xác:

func main(){if true{switch{case 1==1:for{break
}}}}

Cũng đúng:

func main(){if true{switch{case 1==1:for{break}
}}}

Cũng đúng:

func main(){if true{switch{case 1==1:for{
break}}}}

Sai:

func main() {
    if true{for{break}}
}

0

Go có độ ưu tiên điều hành khác nhau cho các hoạt động bit, <<, >>, &, vv thường có độ ưu tiên thấp hơn +-trong hầu hết các ngôn ngữ, nhưng tại Gò họ có ưu tiên giống như */.

Precedence    Operator
5             *  /  %  <<  >>  &  &^
4             +  -  |  ^
3             ==  !=  <  <=  >  >=
2             &&
1             ||

Điều này có thể được sử dụng để lưu một số dấu ngoặc đơn.

Hầu hết các ngôn ngữ:

(a&b)*c

Đi:

a&b*c

0

Sử dụng đầy đủ các hàm hạng nhất của Go bằng cách gán tên hàm thư viện dài cho các biến một chữ cái.

import."strings"
r:=Replace
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.