¿Qué consejos generales tienes para jugar al golf en Go? Soy nuevo en Code Golfing y busco ideas que se puedan aplicar a los problemas de code golf en general que sean al menos algo específicos para Go.
También puede hacer import ."fmt"y luego Printlny el resto de fmtlas funciones están en el espacio de nombres global. Además, no necesita punto y coma. Nunca, a menos que tenga varias declaraciones en una línea
cat
Tenga en cuenta que en Golang, las llaves deben ir en la misma línea, debido a la inserción automática de punto y coma. Más información: golang.org/doc/faq#semicolons .
gato
7
Los valores de retorno con nombre pueden guardar algunos bytes. Por ejemplo:
func x()string{
r:="" //Do stuff
return r}
Puede guardar 3 bytes con
func x()(r string){
//Do stuff
return}
Es más útil si necesita declarar múltiples variables al comienzo de su función.
¿Necesita una cadena para contener una nueva línea? No escriba \n, cree una cadena sin formato con comillas inversas y ponga una nueva línea literal en ella.
Puede colocar cualquier número de llaves de apertura en una línea, pero una línea que contiene llaves de apertura puede contener como máximo una llave de cierre.
Go tiene diferente precedencia de los operadores para operaciones de bits, <<, >>, &, etc por lo general tienen menor precedencia que +y -en la mayoría de los idiomas, pero en Ir tienen la misma precedencia que *y /.
Go
etiqueta, pero entonces, ¿se está utilizando Go para jugar al golf aquí?Respuestas:
Inspirado por la respuesta de @ EMBLEM aquí .
Puede colocar las funciones de un paquete en el espacio de nombres global cuando las importe de la siguiente manera:
fuente
Puede nombrar paquetes como desee cuando los importe.
Aprendí esto aquí .
fuente
import ."fmt"
y luegoPrintln
y el resto defmt
las funciones están en el espacio de nombres global. Además, no necesita punto y coma. Nunca, a menos que tenga varias declaraciones en una líneaLos valores de retorno con nombre pueden guardar algunos bytes. Por ejemplo:
Puede guardar 3 bytes con
Es más útil si necesita declarar múltiples variables al comienzo de su función.
fuente
Si necesita comparar muchos valores diferentes con uno solo, puede ser más eficiente en el uso del espacio
switch
con un solo caso.fuente
Declarando Múltiples Variables:
Int de conversión de cadena: (limitado pero a veces útil)
Y viceversa
fuente
fmt.Sprint
es probable que guarde bytesstrconv.Atoi
, porque es probable quefmt
ya haya importado .strconv
estaba allí solo para mostrar cuál sería el código de golf en el código normal.El compilador Go tiene funciones
print
yprintln
funciones predefinidas que no requieren importar fmt, así que en lugar de esto.Puedes escribir esto.
Tenga en cuenta que esto se envía a STDERR.
fuente
Muchas cosas en el bucle for range son opcionales.
Versión estándar:
Si
i
,v
ya se ha definido y se puede sobrescribir:Si no te importa el valor:
Si no le importa el valor y
i
ya se ha definido:Si no le importa el índice o el valor:
Si quieres un bucle infinito:
fuente
¿Necesita una cadena para contener una nueva línea? No escriba
\n
, cree una cadena sin formato con comillas inversas y ponga una nueva línea literal en ella.fuente
Puede colocar cualquier número de llaves de apertura en una línea, pero una línea que contiene llaves de apertura puede contener como máximo una llave de cierre.
Correcto:
También correcto:
También correcto:
Incorrecto:
fuente
Go tiene diferente precedencia de los operadores para operaciones de bits,
<<
,>>
,&
, etc por lo general tienen menor precedencia que+
y-
en la mayoría de los idiomas, pero en Ir tienen la misma precedencia que*
y/
.Esto podría usarse para guardar algunos paréntesis.
La mayoría de los idiomas:
Ir:
fuente
Aproveche al máximo las funciones de primera clase de Go asignando nombres largos de funciones de biblioteca a variables de una letra.
fuente