Code golf es un tipo de competición de programación informática recreativa en la que los participantes se esfuerzan por lograr el código fuente más corto posible que resuelva un determinado problema. [1] [2] Los desafíos y torneos de Code golf también pueden denominarse con el lenguaje de programación utilizado (por ejemplo, Perl golf ).
El término "golf codificado" se deriva de la similitud de su objetivo con el del golf convencional , donde los participantes buscan lograr la puntuación más baja posible, en lugar de la más alta, como es el estándar en la mayoría de los sistemas de puntuación de deportes y juegos. Mientras que los jugadores de golf convencionales intentan minimizar la cantidad de golpes de palo necesarios para completar el campo, los golfistas codificados se esfuerzan por reducir la cantidad de caracteres necesarios para escribir el programa.
La longitud del programa más corto posible que produce una salida dada (en cualquier lenguaje de programación fijo) se conoce como la complejidad de Kolmogorov de la salida, y su estudio matemático se remonta al trabajo de Andrey Kolmogorov en 1963. Sin embargo, el golf de código puede ser más general que esto, ya que a menudo especifica una transformación de entrada-salida general que se debe realizar en lugar de solicitar una única salida sin entrada.
Aunque el término "golf de código" aparentemente se utilizó por primera vez en 1999 con Perl [ 3] y luego se popularizó mediante el uso de Perl para escribir un programa que realizaba cifrado RSA , [4] se sabe que una competencia informal similar fue popular entre los primeros piratas informáticos de APL . La naturaleza desafiante de optimizar agresivamente el tamaño del programa ha sido reconocida desde hace mucho tiempo; por ejemplo, un manual de codificación de 1962 para la computadora GIER de Regnecentralen señala que "es un deporte que requiere mucho tiempo codificar con el menor número posible de instrucciones" y recomienda no hacerlo para la programación práctica. [5] Hoy en día, el término ha crecido para cubrir una amplia variedad de lenguajes, lo que incluso ha desencadenado la creación de lenguajes dedicados al golf.
Se han creado varios lenguajes nuevos específicamente pensados para el golf de código. Algunos ejemplos son GolfScript, Flogscript, Stuck y Vyxal, que son lenguajes Turing-completos que proporcionan estructuras para expresar ideas de forma concisa en código. Debido a que los lenguajes de golf compiten por una brevedad extrema, su diseño sacrifica la legibilidad, que es importante para los entornos de producción prácticos, y por lo tanto suelen ser esotéricos . Sin embargo, a veces un lenguaje está diseñado para un propósito práctico pero resulta ser adecuado para el golf de código.
Un ejemplo de código GolfScript para imprimir 1000 dígitos de pi : [6]
;''6666,-2%{2+.2/@*\/10.3??2*+}*`1000<~\;
Los sitios web de golf con código incluyen lenguajes de golf novedosos creados por los usuarios para ganar desafíos de golf con código. Otros lenguajes populares son 05AB1E, Husk, Pyth, CJam y Jelly.
Algunas preguntas de Code Golf, como las que se plantean en sitios de programación general, pueden no requerir implementación en un lenguaje de programación específico . Sin embargo, esto limita el estilo de problemas que los diseñadores de problemas pueden plantear (por ejemplo, al limitar el uso de ciertas características del lenguaje). Además, la creación de tales preguntas "abiertas" ha dado como resultado el diseño de dialectos de lenguaje de programación específicos de Code Golf, como REBMU (un dialecto de REBOL ). Tanto las competencias en línea como las en vivo también pueden incluir límites de tiempo.