Estudio

Para obtener el éxito en estas competencias es muy importante atender dos grandes frentes: Razonamiento lógico-matemático y programación de computadoras. En la ODI los competidores deberán ser capaces de analizar los problemas planteados e identificar conceptos lógico-matemáticos y algorítmicos que le ayuden a resolverlos, y por último escribir las soluciones de los problemas en uno de los lenguajes permitidos: C, C#, C+, Pascal o Python.

Los competidores deben conocer y entender la estructura básica y la operación de una computadora (CPU, Memoria, E/S). Se espera que sean capaces de utilizar una computadora estándar con una interfaz gráfica, su sistema operativo y el entorno de desarrollo provisto. En particular, deben de tener ciertas competencias en la gestión básica de archivos (creación de carpetas, archivos, copiado y pegado, redireccionamiento de entrada y salida).

¡Esta competencia está abierta a todos! Si eres un principiante absoluto a la programación, puedes iniciar aprendiendo a través de este enlace: http://learn.code.org/. Es un curso de programación totalmente gratuito. La opción para cambiar a español se encuentra en la última parte de esa página.

Tópicos de Competencia

El banco de tópicos de problemas de la ODI es sustancial. Para ayudarte a planificar tu estudio, lo listamos debajo:

Temario 1. Matemáticas

  1. Aritmética y Geometría
    1. Enteros, Operaciones (incl. exponenciación), comparación.
    2. Propiedades de los enteros (positivos, negativos, pares, impares, divisibles, primos).
    3. Fracciones, porcentajes.
    4. Puntos, vectores, coordenadas cartesianas (en 2D).
    5. Distancia Euclidiana, Teorema de Pitágoras.
    6. Segmento de línea, propiedades de la intersección.
    7. Ángulos.
    8. Triángulos, rectángulos, cuadrados, círculos.
  2. Estructuras Discretas
    1. Funciones (inyección, inversas, composición, biyección).
    2. Relaciones (reflexivas, simétricas, transitivas, relaciones de equivalencia, orden total/lineal, orden lexicográfico).
    3. Conjuntos (diagramas de Venn, complementos, productos cartesianos, conjuntos potencias).
    4. Tablas de verdad.


Temario 2: Ciencias de Computación

  1. Fundamentos de Programación
    1. Conocer al menos uno de estos lenguajes: C, C++, C#, Pascal o Python. ¡No es ventaja conocer más de uno!
    2. Variables, tipos, expresiones y asignación.
    3. Entrada/Salida estándar.
    4. Estructuras de condicionales y de iteración.
    5. Funciones y paso de parámetros.
  2. Técnicas de Resolución de Problemas y Algoritmos
    1. Estrategias Generales de Resolución de Problemas (entender-planificar-hacer-revisar, separación de intereses, generalización, especialización, distinción de casos, trabajando hacia atrás).
    2. El rol de los algoritmos en el proceso de resolución de problemas.
    3. Estrategias de implementación para algoritmos.
    4. Estrategias de depuración.
    5. El concepto y propiedades de los algoritmos (corrección, eficiencia).
  3. Estructuras de Datos Fundamentales
    1. Tipos primitivos (valores de verdad (verdadero o falso), enteros, decimales).
    2. Arreglos
  4. Estrategias Algorítmicas
    1. Estrategias de diseño de bucles simples.
  5. Algoritmos computacionales fundamentales
    1. Operaciones simples sobre enteros.
    2. Manipulación simple de arreglos (llenar, desplazar, rotar, invertir, mínimo y máximo, suma de prefijos).

Libros

Los siguientes libros proveen una buena introducción a las competencias de programación y a los tópicos de las ciencias de la computación involucrados en las mismas:

  • Skiena, S., Revilla, M. (2008). Desafíos de Programación. NY: Lulu. ISBN 978-1409277293.
  • Halim, S. (2013). Competitive Programming 3. NY: Lulu.

Lenguajes de Programación

Unos enlaces que enseñan lenguajes de programación en específico:

Recursos En Línea

En Code.Org (http://learn.code.org/) se encuentra un curso gratuito de introducción a la informática y a la programación. Otros sitios como Coursera (www.coursera.org) y Udacity (www.udacity.com) tienen cursos similares, los cuales no asumen ningún conocimiento de programación previo.

En TopCoder (http://community.topcoder.com/tc?module=Static&d1=tutorials&d2=alg_index) se encuentra una rica lista de tutoriales de distintos tipos de algoritmos.

Introducción a Algorítmos (http://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/)

 En CodingBat (http://codingbat.com/) puedes poner a prueba tu conocimiento de Python.