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.
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.
Câu trả lời:
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!")
}
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 .
import ."fmt"
và sau đó Println
và các fmt
chứ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
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.Sprint
có khả năng lưu byte hơn strconv.Atoi
, vì bạn có thể đã nhập fmt
.
strconv
là ở đó chỉ để cho biết mã golf sẽ là gì trong mã thông thường.
Trình biên dịch Go đã được xác định trước print
và các println
hà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.
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
}
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}}
}
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 +
và -
trong hầu hết các ngôn ngữ, nhưng tại Gò họ có ưu tiên giống như *
và /
.
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
Go
thẻ, nhưng sau đó, Go thậm chí có được sử dụng để chơi gôn ở đây không?