Jakie masz ogólne wskazówki na temat gry w golfa w Go? Jestem nowy w Code Golfing i szukam pomysłów, które można zastosować do problemów z golfem w kodzie, które są przynajmniej nieco specyficzne dla Go.
Proszę zachować jedną wskazówkę na odpowiedź.
Jakie masz ogólne wskazówki na temat gry w golfa w Go? Jestem nowy w Code Golfing i szukam pomysłów, które można zastosować do problemów z golfem w kodzie, które są przynajmniej nieco specyficzne dla Go.
Proszę zachować jedną wskazówkę na odpowiedź.
Odpowiedzi:
Zainspirowany odpowiedzią @ EMBLEM tutaj .
Możesz zaimportować funkcje pakietu do globalnej przestrzeni nazw podczas importowania:
package main
import ."fmt"
func main() {
Printf("Hello World!")
}
Podczas importowania możesz nazwać paczki, jak chcesz.
package main
import f "fmt"
func main() {
f.Printf("Hello World\n")
}
Nauczyłem się tego tutaj .
import ."fmt"a Printlnpozostałe fmtfunkcje znajdują się w globalnej przestrzeni nazw. Nie potrzebujesz też średników. Zawsze, chyba że masz wiele wypowiedzi w wierszu
Deklarowanie wielu zmiennych:
i,s:=0,""
var(i int;s string)
Konwersja tekstu z ciągu: (ograniczona, ale czasem pomocna)
n:=byte("9"[0])-48 // actual type is uint8
n,_:=strconv.Atoi("9")
I wzajemnie
s:=string(9+48)
s:=strconv.Itoa(9)
fmt.Sprintprawdopodobnie zaoszczędzi bajty strconv.Atoi, ponieważ prawdopodobnie fmtjuż zaimportowałeś .
strconvbył tam tylko po to, aby pokazać, jaki byłby kod golfowy w normalnym kodzie.
Kompilator Go ma predefiniowane funkcje printi printlnfunkcje, które nie wymagają importowania fmt, więc zamiast tego.
package main
import."fmt"
func main(){Printf(`Hello World
`)}
Możesz to napisać.
package main
func main(){print(`Hello World
`)}
Zauważ, że dane wyjściowe do STDERR.
Wiele rzeczy w pętli dla zakresu jest opcjonalne.
Wersja standardowa:
for i,v:=range a{
// Do stuff
}
W przypadku i, vzostała już zdefiniowana i może być zastąpiony:
for i,v=range a{
// Do stuff
}
Jeśli nie zależy ci na wartości:
for i:=range a{
// Do stuff
}
Jeśli nie zależy ci na wartości i izostało już zdefiniowane:
for i=range a{
// Do stuff
}
Jeśli nie zależy ci na indeksie lub wartości:
for range a{
// Do stuff
}
Jeśli chcesz mieć nieskończoną pętlę:
for{
// Do stuff
}
Potrzebujesz ciągu znaków, który zawiera nowy wiersz? Nie pisz \n, twórz nieprzetworzony ciąg z cudzysłowami i wstaw w nim dosłowny znak nowej linii.
s:="\n" // 7 bytes
s:=`
` // 6 bytes
Możesz umieścić dowolną liczbę nawiasów otwierających w jednym wierszu, ale linia zawierająca nawiasy otwierające może zawierać maksymalnie jeden nawias zamykający.
Poprawny:
func main(){if true{switch{case 1==1:for{break
}}}}
Popraw także:
func main(){if true{switch{case 1==1:for{break}
}}}
Popraw także:
func main(){if true{switch{case 1==1:for{
break}}}}
Błędny:
func main() {
if true{for{break}}
}
Go ma inny priorytet operatora dla operacji bitowych <<, >>, &, itd. Zazwyczaj mają niższy priorytet niż +i -w większości języków, ale idź mają ten sam priorytet jak *i /.
Precedence Operator
5 * / % << >> & &^
4 + - | ^
3 == != < <= > >=
2 &&
1 ||
Można to wykorzystać do zapisania niektórych nawiasów.
Większość języków:
(a&b)*c
Udać się:
a&b*c
W pełni wykorzystaj pierwszorzędne funkcje Go, przypisując długie nazwy funkcji bibliotecznych zmiennym jednoliterowym.
import."strings"
r:=Replace
Gotag, ale czy Go jest tu nawet używany do gry w golfa?