Los problemas de Ada Byron

Los problemas a resolver durante el concurso son siempre aplicaciones de consola, por lo que reciben los datos de ejecución a través de la entrada estándar, y envían los resultados a la salida estándar.

Los problemas se centran principalmente en cuestiones de algoritmia y estructuras de datos. Para poder poner a prueba la corrección de las soluciones de los participantes, la implementación en cuestión debe probarse con muchos casos de entrada; debido a eso, la entrada de los programas es multicaso. Esto significa que si, por ejemplo, el problema consiste en indicar el último dígito del factorial de un número dado, la entrada de ese problema estará compuesta de muchos números ("casos") para que el código de extracción del último dígito se ponga a prueba muchas veces.

Es importante, por lo tanto, que los participantes tengan destreza con la entrada y salida estándar del lenguaje de programación que utilicen. Por ello se aconseja realizar ejercicios utilizando las librerías correspondientes de cada lenguaje.

Las soluciones de los participantes a los problemas no sólo deben ser correctas, sino que deben ejecutarse dentro de unos límites de tiempo razonables. Esto no significa que haya que perseguir la eficiencia de manera extrema (preocupándose, por ejemplo, por usar desplazamiento de bits en lugar de divisiones), pero sí se deben evitar, en la medida de lo posible, implementaciones lentas cuando hay otras similares en dificultad de programación más eficientes en ejecución. Por ejemplo, no suele ser aconsejable usar cadenas para manejar números y sus dígitos si se puede hacer utilizando los tipos numéricos del lenguaje.

También se hace necesario prestar atención a la complejidad del algoritmo. Algunos problemas están planteados persiguiendo que se implemente una solución con una complejidad concreta, y las restricciones de tiempo y los casos configurados en el juez persiguen precisamente impedir que soluciones ineficientes entren en tiempo. Ten en cuenta que las soluciones son probadas con muchos casos de prueba antes de lanzar el veredicto. Los casos de prueba mostrados en el enunciado deben entenderse como ejemplos para ayudar en la comprensión del enunciado, pero no como los únicos casos con los que la solución debe funcionar. Los casos más grandes (y exigentes en tiempo) no aparecen en el enunciado sino que son probados por el juez automático.

Tipos de problemas

El concurso consta de entre ocho y doce problemas de los más diversos temas. A modo de guía, aparece a continuación una lista con distintos conceptos de programación (y referencias a problemas de ejemplo que los utilizan) que se puede esperar que aparezcan en los problemas de los concursos. Esta lista no debe considerarse cerrada. Los problemas del concurso podrían necesitar otras técnicas de programación distintas que no aparecen reflejadas aquí.

La lista ni siquiera debe entenderse como una guía sobre qué conceptos son más fáciles o menos. Problemas que se resuelven con conceptos de programación relativamente sencillos pueden ser más complicados de resolver que otros que utilicen conceptos más avanzados (por ejemplo este ejercicio no requiere conocimientos avanzados de programación pero no es fácil de resolver).

Conceptos de primer curso

  • Expresiones
    • Goteras
    • Double Decker
  • Condicionales, bucles simples y anidados.
    • Triángulos
    • Escudos del ejército romano
  • Arrays unidimensionales y bidimensionales
    • Abadías pirenáicas
    • La comida de los pollitos
  • Ordenación y búsqueda binaria
    • Carreras de coches
  • Recursión
    • Móviles
    • Helados de cucurucho
  • Estructuras y cadenas
    • Escalera de color
    • Estrofas

Conceptos de segundo curso

  • Pilas, listas, colas
    • El tren del amor
    • Solitario
  • Conjuntos, árboles y diccionarios
    • Números cubifinitos
    • Convirtiendo expresiones
    • Referencias cruzadas
  • Vuelta atrás y divide y vencerás
    • Completa la suma
    • Desórdenes temporales

Conceptos de cursos superiores

  • Colas de prioridad
    • Pájaros en vuelo
  • Grafos
    • Haciendo trampas en serpientes y escaleras
    • Repartiendo paquetes
  • Algoritmos voraces
    • Agujeros en la manguera
    • ¡En primera línea de playa!
  • Programación dinámica
    • Tiro al patíndromo
    • Las vacas pensantes
  • Geometría computacional
    • La ardilla viajera

Entrena

Puedes intentar resolver problemas en distintos jueces en línea, como ¡Acepta el reto!, el juez on-line con problemas de ediciones anteriores.