Articulo de referencia

Código golf

El code golf es un tipo de competición recreativa de programación informática en la que los participantes se esfuerzan por conseguir el código fuente más corto posible que resue...

El code golf es un tipo de competición recreativa de programación informática en la que los participantes se esfuerzan por conseguir el código fuente más corto posible que resuelva un problema determinado. [ 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 ).

Etimología

El término "golf de código" deriva de la similitud de su objetivo con el del golf convencional , donde los participantes buscan obtener la puntuación más baja posible, en lugar de la más alta, como es habitual en la mayoría de los sistemas de puntuación de deportes y juegos. Mientras que los jugadores de golf convencional intentan minimizar el número de golpes necesarios para completar el recorrido, los golfistas de código se esfuerzan por reducir el número de caracteres necesarios (o pulsaciones de teclas, para extender la metáfora) para escribir el programa.

Historia

La longitud del programa más corto posible que produce una salida determinada (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, ya que a menudo especifica una transformación general de entrada-salida que debe realizarse, en lugar de solicitar una única salida sin entrada.

Si bien el término "code golf" aparentemente se usó 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 hackers 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 consume mucho tiempo codificar con la menor cantidad posible de instrucciones" y lo desaconseja para la programación práctica. [ 5 ] Hoy en día, el término ha crecido para abarcar una amplia variedad de lenguajes, lo que incluso ha impulsado la creación de lenguajes dedicados al golf.

Idiomas específicos para el golf

Se han creado varios lenguajes de programación nuevos específicamente para la práctica del "goal de código". Estos lenguajes sacrifican la legibilidad en aras de una brevedad extrema y, a menudo, proporcionan funciones de alto nivel con nombres de un solo carácter, lo que los hace inadecuados en entornos de producción donde la mantenibilidad es más importante que el tamaño del código.

Historia

El primer lenguaje dedicado al golf del que se tiene constancia es GolfScript, [ 6 ] lanzado en 2007, con un derivado llamado floGScript lanzado al año siguiente.

En 2014, se lanzó CJam, fuertemente inspirado en GolfScript. [ 7 ]

En 2015, motivado por CJam y APL, e inspirado por J , Jelly fue lanzado y se posicionaría como un contendiente dominante para el lenguaje más conciso durante muchos años.

Desde 2015, se han lanzado numerosos lenguajes de programación específicos para el golf. Algunos ejemplos destacados son Japt, Pyth, 05AB1E, Charcoal y Vyxal.

Diseño

Algunos lenguajes de programación para golf, como Japt y Python, se transpilan a lenguajes de programación convencionales [ 8 ] (en este caso, JavaScript y Python, respectivamente). Esto facilita el aprendizaje y garantiza una base sólida para el diseño y el rendimiento del lenguaje. Además, simplifica la creación de intérpretes web, que permiten a los usuarios utilizar el lenguaje sin necesidad de descargar nada.

Muchos lenguajes modernos para el golf, inspirados o relacionados con golfscript, se basan en pilas y son concatenativos , pero varios lenguajes inspirados en Jelly, que es tácito y funcional , siguen sus pasos. Otros paradigmas, como los lenguajes de coincidencia de patrones , también aparecen en menor medida.

La mayoría de los lenguajes de programación para el golf son de alto nivel, y casi todos reducen los símbolos a un solo carácter. En implementaciones modernas, como Vyxal, estos lenguajes utilizan conjuntos de caracteres de un solo byte para que todos los comandos sean imprimibles, lo que reduce aún más la legibilidad debido a la variedad de símbolos, especialmente por la incompatibilidad de los comentarios de código con el objetivo del golf de código.

Los lenguajes de programación para golf casi siempre hacen un uso intensivo de la sobrecarga de operadores, y la mayoría incluye formas de compresión de texto fácilmente accesibles . En la mayoría de los lenguajes, el cierre de paréntesis y otras estructuras sintácticas son opcionales al final del programa. Como principio de diseño general, los lenguajes dedicados al golf son altamente implícitos, y la mayoría son tácitos .

Ejemplos

Un ejemplo de código GolfScript para imprimir 1000 dígitos de pi : [ 9 ]

;'' 6666,-2%{2+.2/@*\/10.3??2*+}* `1000<~\; 

Un ejemplo de código Vyxal 3 para Fizz buzz , anotado con una explicación: [ 10 ]

⑤ƛ35f≛kF½•∨,⁡​‎‎⁡⁠⁡‏⁠‎⁡⁠⁢‏‏​⁡⁠⁡‌⁢​‎‎⁡⁠ ⁣‏⁠‎⁡⁠⁤‏⁠‎⁡⁠⁢⁡‏‏​⁡⁠⁡‌⁣​‎‎⁡⁠⁢⁢‏‏​⁡⁠⁡‌⁤ ​‎‎⁡⁠⁢⁣‏⁠‎⁡⁠⁢⁤‏⁠‎⁡⁠⁣⁡‏‏​⁡⁠⁡‌⁢⁡​‎‎⁡⁠ ⁣⁢‏‏​⁡⁠⁡‌⁢⁢​‎‎⁡⁠⁣⁣‏‏​⁡⁠⁡‌⁢⁣​‎‎⁡⁠⁣⁤‏‏​⁡⁠⁡‌ ⑤ƛ ## ‎⁡mapa sobre 1..100 35f ## ‎⁢hace 3 o 5... ≛ ## ¿Dividir el número? El resultado es una máscara de bits de 2 bits de ancho. kF½ ## ‎⁤["Fizz", "Zumbido"] • ## ‎⁢⁡multiplicar el anterior por la máscara de bits y luego concatenar ∨ ## ‎⁢⁢si anterior es falso (cadena vacía), insertar implícitamente n , ## ‎⁢⁣imprimir 

Tipos de golf de código

Algunas preguntas de Code Golf, como las que se plantean en sitios web de programación general, no requieren la implementación en un lenguaje de programación específico . Sin embargo, esto limita el estilo de problemas que los creadores pueden plantear (por ejemplo, al restringir el uso de ciertas características del lenguaje). Además, la creación de estas preguntas "abiertas" ha dado lugar al diseño de dialectos de lenguajes de programación específicos para Code Golf, como REBMU (un dialecto de REBOL ). Tanto las competiciones en línea como las presenciales pueden incluir límites de tiempo.

Aplicaciones prácticas

En 2019, los investigadores de criptografía Xavier Bonnetain, Léo Perrin y Shizhu Tian utilizaron el juego de golf de códigos y el concepto estrechamente relacionado de complejidad de Kolmogorov para demostrar que la caja S utilizada en los algoritmos criptográficos de Streebog y Kuznyechik era significativamente menos aleatoria de lo que afirmaban sus creadores. [ 11 ]

Véase también

Referencias

  1. Code Golf Stack Exchange. Acerca de code-golf . Consultado el 21 de diciembre de 2021.
  2. "Introducción a Code-golf | ASSIST Software Rumania" . Consultado el 23 de marzo de 2023 .
  3. Greg Bacon (1999-05-28). "Re: Incrementar un valor en una porción" . Grupo de noticias : comp.lang.perl.misc . Usenet: 7imnti$mjh$1@info2.uah.edu . Recuperado el 2011-07-12 .  
  4. Back, Adam. "RSA en 5 líneas de perl" . Consultado el 10 de enero de 2011 .
  5. ^ Andersen, cristiano; Abuela, cristiana (1962). Lærebog i Kodning para GIER (PDF) . vol. 1 (3 ed.). Copenhague: Regnecentralen. pag. 104 . Consultado el 16 de mayo de 2020 .   
  6. "Cronología de los lenguajes del golf - Esolang" . esolangs.org . Consultado el 2 de enero de 2026 .
  7. "CJam" . SourceForge . 1 de octubre de 2016. Consultado el 2 de enero de 2026 .
  8. ^ "japt/README.md en master · ETHproductions/japt" . GitHub . Consultado el 2 de enero de 2026 .
  9. "Ejemplos de GolfScript" . Consultado el 23 de marzo de 2023 .
  10. "1, 2, Fizz, 4, Buzz" . Code Golf Stack Exchange . Consultado el 2 de enero de 2026 .
  11. Bonnetain, Xavier; Perrin, Léo; Tian, ​​Shizhu (2019), "Anomalías y búsqueda en el espacio vectorial: herramientas para el análisis de cajas S" , Lecture Notes in Computer Science , Cham: Springer International Publishing, pp. 196–223 , doi : 10.1007/978-3-030-34578-5_8 , ISBN  978-3-030-34577-8, consultado el 12 de mayo de 2025
  • CodeGolf.StackExchange.com: Preguntas y respuestas sobre acertijos de programación y code golf.
  • Golf en la wiki de lenguajes de programación esotéricos
  • Lista de idiomas específicos para el golf
  • Lista de todos los lenguajes utilizados 10 veces o más en Code Golf Stack Exchange, ordenados por brevedad.