Web

“Code Golf” con Ruby

“Code Golf” es el arte de escribir código utilizando el menor número de caracteres posibles. La idea es originaria del mundo Perl (“Perl Golf), aunque en Ruby también se pueden conseguir muy buenos resultados.

La obsesión por tratar de minimizar el número de bytes utilizados en un programa proviene de tiempos pasados, cuando la memoria era un bien escaso y cada byte era importante. En realidad hoy en día esto no tiene demasiado sentido, pero esto no quiere decir que no se haga. Un ejemplo podrían ser las competiciones 1k de JavaScript o Perl Apocalypse.

Desafortunadamente, el código que se produce en este tipo de competiciones a menudo es muy difícil de entender, ya que por lo general se basa en el uso de diversos hacks y accesos directos. La idea de este post es recoger algunas técnicas para lograr disminuir el número de caracteres utilizados en nuestro código pero sin perder la legibilidad del mismo.

Prerequisitos:

  • Un equipo con Ruby instalado.

Tips:

Veamos algunos consejos para reducir el tamaño de nuestro código Ruby:

  • Asignación masiva Casi todo el mundo conoce esta técnica, la idea es inicializar todas las variables en la misma línea.
  • Crear arrays utilizando la notación %w Podemos crear arrays de strings de la siguiente forma:
  • Utilizar el operador ternario para las operaciones lógicas
  • Utilizar el operador ternario de forma encadenada
  • Usar la notación científica para números grandes Si vas a usar números grandes mejor escribir 1e6 que 1000000.
  • Usar “->” para las expresiones lambdasDesde ruby 1.9 podemos utilizar “->” para la sintaxis de las expresiones lambdas en vez de la palabra reservada “lambda”.
  • Usar “Map” para iterarLos iteradores suelen ser mejores que los bucles, y “map” es mejor que “each”, no solo porque tiene menos caracteres sino porque además crea una nueva proyección del contenido iterado.

Ejemplo:

Para finalizar, a modo de ejemplo, voy a escribir un método que recibe por parámetro dos números y calcula la suma de todos los múltiplos del primer número hasta el valor del segundo parámetro. Sum(3, 14) calculará la suma de todos los múltiplos de 3 hasta 14 (3 + 6 + 9 + 12 = 30).