¿Que es la programación competitiva?
Publicado: 13 Nov 2017, 20:51
La programación competitiva es un deporte mental que generalmente se realiza a través de Internet o una red local, que involucra a los participantes que intentan programar de acuerdo con las especificaciones proporcionadas. Los concursantes se conocen como programadores deportivos. La programación competitiva es reconocida y respaldada por varias compañías multinacionales de software y de Internet, como Google y Facebook. Hay varias organizaciones que organizan concursos de programación de forma regular.
Una competencia de programación generalmente involucra al presentador presentando un conjunto de problemas lógicos o matemáticos a los concursantes (que pueden variar en número de decenas a varios miles), y los concursantes deben escribir programas informáticos capaces de resolver cada problema. La evaluación se basa principalmente en la cantidad de problemas resueltos y el tiempo dedicado a la redacción de soluciones exitosas, pero también puede incluir otros factores (calidad de producción producida, tiempo de ejecución, tamaño del programa, etc.)
Historia
Uno de los concursos más antiguos conocidos es ACM-ICPC, que se originó en la década de 1970, y ha crecido hasta incluir 88 países en su edición de 2011. El interés en la programación competitiva ha crecido mucho desde 2000, y está fuertemente relacionado con el crecimiento de Internet, lo que facilita la celebración de concursos internacionales en línea, eliminando los problemas geográficos.
Descripción general
El objetivo de la programación competitiva es escribir código fuente de programas informáticos que puedan resolver problemas determinados. Una gran mayoría de los problemas que aparecen en los concursos de programación son de naturaleza matemática o lógica. Estas tareas típicas pertenecen a una de las siguientes categorías: combinatoria, teoría de números, teoría de grafos, geometría, análisis de cadenas y estructuras de datos. Los problemas relacionados con la inteligencia artificial también son populares en ciertas competiciones.
Independientemente de la categoría del problema, el proceso de resolver un problema se puede dividir en dos grandes pasos, construir un algoritmo eficiente e implementar el algoritmo en un lenguaje de programación adecuado (el conjunto de lenguajes de programación permitidos varía de un concurso a otro). Estas son las dos habilidades más comúnmente probadas en competencias de programación.
En la mayoría de concursos, el juicio se realiza automáticamente por máquinas anfitrionas, conocido comúnmente como jueces. Cada solución presentada por un concursante se ejecuta en el juez contra un conjunto de casos de prueba (generalmente secretos). Normalmente, los problemas de concurso tienen un sistema de marcado de todo o nada, lo que significa que una solución es "Aceptada" solo si produce resultados satisfactorios en todos los casos de prueba ejecutados por el juez, y se rechaza de otra manera. Sin embargo, algunos problemas de competencia pueden permitir la calificación parcial, dependiendo del número de casos de prueba aprobados, la calidad de los resultados o algún otro criterio especificado. Algunos otros concursos solo requieren que el concursante presente el resultado correspondiente a los datos de entrada dados, en cuyo caso el juez solo tiene que analizar los datos de salida enviados.
Competiciones notables
Hay dos tipos de formatos de competencia: a corto y largo plazo. Cada ronda de competencia a corto plazo suelen durar pocas horas, usualmente entre una a tres horas. Las competiciones a largo plazo pueden durar de unos pocos días a algunos meses.
Corto plazo
Largo plazo
La comunidad de programación en todo el mundo ha creado y mantenido varios recursos de Internet dedicados a la programación competitiva. Ofrecen concursos independientes con o sin premios menores. Además, los archivos de problemas pasados son un recurso popular para la capacitación en programación competitiva. Éstas incluyen:
Una competencia de programación generalmente involucra al presentador presentando un conjunto de problemas lógicos o matemáticos a los concursantes (que pueden variar en número de decenas a varios miles), y los concursantes deben escribir programas informáticos capaces de resolver cada problema. La evaluación se basa principalmente en la cantidad de problemas resueltos y el tiempo dedicado a la redacción de soluciones exitosas, pero también puede incluir otros factores (calidad de producción producida, tiempo de ejecución, tamaño del programa, etc.)
Historia
Uno de los concursos más antiguos conocidos es ACM-ICPC, que se originó en la década de 1970, y ha crecido hasta incluir 88 países en su edición de 2011. El interés en la programación competitiva ha crecido mucho desde 2000, y está fuertemente relacionado con el crecimiento de Internet, lo que facilita la celebración de concursos internacionales en línea, eliminando los problemas geográficos.
Descripción general
El objetivo de la programación competitiva es escribir código fuente de programas informáticos que puedan resolver problemas determinados. Una gran mayoría de los problemas que aparecen en los concursos de programación son de naturaleza matemática o lógica. Estas tareas típicas pertenecen a una de las siguientes categorías: combinatoria, teoría de números, teoría de grafos, geometría, análisis de cadenas y estructuras de datos. Los problemas relacionados con la inteligencia artificial también son populares en ciertas competiciones.
Independientemente de la categoría del problema, el proceso de resolver un problema se puede dividir en dos grandes pasos, construir un algoritmo eficiente e implementar el algoritmo en un lenguaje de programación adecuado (el conjunto de lenguajes de programación permitidos varía de un concurso a otro). Estas son las dos habilidades más comúnmente probadas en competencias de programación.
En la mayoría de concursos, el juicio se realiza automáticamente por máquinas anfitrionas, conocido comúnmente como jueces. Cada solución presentada por un concursante se ejecuta en el juez contra un conjunto de casos de prueba (generalmente secretos). Normalmente, los problemas de concurso tienen un sistema de marcado de todo o nada, lo que significa que una solución es "Aceptada" solo si produce resultados satisfactorios en todos los casos de prueba ejecutados por el juez, y se rechaza de otra manera. Sin embargo, algunos problemas de competencia pueden permitir la calificación parcial, dependiendo del número de casos de prueba aprobados, la calidad de los resultados o algún otro criterio especificado. Algunos otros concursos solo requieren que el concursante presente el resultado correspondiente a los datos de entrada dados, en cuyo caso el juez solo tiene que analizar los datos de salida enviados.
Competiciones notables
Hay dos tipos de formatos de competencia: a corto y largo plazo. Cada ronda de competencia a corto plazo suelen durar pocas horas, usualmente entre una a tres horas. Las competiciones a largo plazo pueden durar de unos pocos días a algunos meses.
Corto plazo
- ACM-ICPC - una de las competiciones más antiguas, para estudiantes de universidades en grupos de 3 personas cada uno, patrocinado por IBM
ACSL - competencia de ciencias de la computación con porciones escritas y de programación, para estudiantes de escuela media / secundaria
Google Code Jam - concurso celebrado desde 2003, proporcionado y patrocinado por Google
Facebook Hacker Cup - competencia celebrada desde 2011, proporcionada y patrocinada por Facebook
HackerRank Ad Infinitum - Math Programming Contest de HackerRank
CodeChef Cook-Off - un concurso de programación estilo ACM-ICPC celebrado el segundo el último domingo de cada mes
CodeChef LunchTime - una serie de Programación Junior celebrada el último domingo de cada mes, para estudiantes de escuela media / secundaria
CodeChef SnackDown - Un concurso anual de programación global con multiples rondas patrocinado por CodeChef
Competencia de programación IEEEXtreme - competencia anual para miembros estudiantes de IEEE celebrada desde 2006 por IEEE
IOI - una de las competiciones más antiguas, para estudiantes de secundaria
TopCoder Open - Algorithm - competición celebrada desde 2004 por TopCoder
Algoritmo Yandex - concurso realizado desde 2013 por Yandex
Largo plazo
- Concursos de programación de Al Zimmermann: una competencia de tres meses, organizada una o dos veces al año
CodeChef Long Challenges
Google AI Challenge - competiciones bi-anuales para los estudiantes, que funcionó desde 2009 hasta 2011
Semana de código HackerRank - concurso de 7 días por HackerRank
Halite: un desafío de programación de IA celebrado de noviembre de 2016 a febrero de 2017, patrocinado por Two Sigma y Cornell Tech
Concurso de programación ICFP - concurso anual de 3 días celebrado desde 1998 por la Conferencia Internacional de Programación Funcional
Kaggle
Concurso de programación de inteligencia artificial abierto de la Copa AI de Rusia
TopCoder Marathon matches
La comunidad de programación en todo el mundo ha creado y mantenido varios recursos de Internet dedicados a la programación competitiva. Ofrecen concursos independientes con o sin premios menores. Además, los archivos de problemas pasados son un recurso popular para la capacitación en programación competitiva. Éstas incluyen:
- http://hackerrank.com/
http://geeksforgeeks.org/
http://codeforces.com/
http://www.hackerearth.com/
http://www.codechef.com/
https://en.wikipedia.org/wiki/CodinGame
http://www.topcoder.com/
http://projecteuler.net/
https://atcoder.jp/
http://www.spoj.com/
http://www.poj.org/
http://www.coderbyte.com/
http://riddles.io/
http://csacademy.com/
http://uva.onlinejudge.org/
http://kattis.com/
https://codecup.online/