Guía introductoria a Programa-me, concurso de programación para alumnos de FP en España. Consejos y pistas para practicar y afrontar el concurso para estudiantes y profesores
2. Mi nombre es José Ráez. He hecho esta
presentación para ayudar y animar a otros
estudiantes y centros a participar.
Nuestro equipo, RuralHome The Nightmare,
formado junto a Raúl Ortiz y Rubén Fernández,
fue campeón de la fase regional y final nacional
de 2017.
Actualmente soy programador Back-End en C#
y Java.
3. Es un concurso de programación español para
alumnos de Formación Profesional de 1º y 2º. Los
alumnos participan en grupos de 3.
Se divide en dos fases: una fase regional dividida
en varias competiciones por regiones, y una fase
nacional donde van los primeros puestos de las
fases regionales.
Participar es gratis o con una pequeña cuota de
inscripción para material del concurso.
Puedes visitar la página principal del concurso en
http://www.programa-me.com o en twitter
@programame
¿Qué es Programa-me?
4. Además, participar tiene ventajas
● El formato del concurso es similar a las entrevistas
técnicas que hacen las compañías.
○ Conocer cómo afrontarlas os dará una gran ventaja
durante la entrevista.
○ Es incluso recomendable echar un ojo a los problemas
como práctica para afrontar una próxima entrevista.
● Es una gran incorporación a vuestro currículum.
○ Solamente por participar ya os diferenciais de otros
alumnos.
○ Lograr buenas posiciones os servirá para entrar en la mira
de empresas.
● Viviréis una experiencia de trabajo en equipo real.
○ Tendréis que aprender a repartir, priorizar y resolver en
entornos de tiempo limitado.
6. Acepta el reto www.aceptaelreto.com
En el encontrarás todo tipo de problemas divididos por
materia y dificultad, así como los problemas de otras
ediciones. Aquí podrás prepararte para el concurso.
Concursos de calentamiento www.programa-me.com
Así mismo, suelen hacerse ediciones de calentamiento alrededor de navidad. Contacta con los
organizadores para conocer que se está organizando ese año.
Calentamiento Navidad: http://programa-me.com/2018/reg/navidad/
También podéis probar en Las 12 Uvas: http://www.las12uvas.es/2017/#/quees
8. ● Para buscar nuevos problemas, recomiendo buscar
por Categorías > Programación
● No hace falta seguir el orden propuesto, los
problemas no están por orden de dificultad.
● Al principio céntrate en pensar cómo resolverías los
problemas con tus compañeros.
○ Según se acerque el concurso, intenta programarlos
y subirlos a la web para coger soltura y
acostumbrarte a posibles fallos.
10. En esta sección hablaremos sobre el funcionamiento de los problemas de Acepta el reto y
Programa-me, para evitar tener dudas con cómo entran los datos y poder centrarnos en buscar la
solución.
11. Entrada y salida de datos
● La entrada siempre va por el flujo estándar y la salida siempre va por la salida estándar. La entrada
y la salida además tienen que ir ser una linea (C y C++: carácter 'n', Java: println o carácter 'n')
● ¡La salida no tiene que salir después de toda la entrada! De hecho, debéis escribir la solución
después de cada línea/problema.
● Alumnos de 1º: Aunque no se pueden incluir librerías, se les puede proveer un fichero con métodos
leerLinea y escribir para que no tengan que enfrentarse a I/O o flujos.
13. Consejos:
● Java: Usad split para separar los datos.
C y C++: Cread una función que simule split con strtok
(necesitareis memoria dinámica).
○ Es SUPER ÚTIL para poder luego iterar sobre los
datos rápidamente.
○ No convirtáis los datos a sus tipos reales hasta que
los uséis para operar.
○ C y C++: También podéis usar scanf()
● Si tenéis una frase o dibujo formado por varias líneas,
recordad que podéis iterar por un string como si de un
array se tratase. (También en números para ir cifra por
cifra)
● Así mismo, recordad que cuando busquéis un valor en
concreto, basta con poner la cadena que lo generaría (por
ejemplo, si la fecha 25/11 entra como "25 11" podéis mirar
directamente si es igual, no hace falta que saquéis los dos
números).
● Por último: ¡no hace falta que verifiqueis que los datos son
válidos! Siempre obedecerán el formato presentado.
14. Además, los problemas irán introduciendo los datos generalmente de una de estas 3 formas:
15. Estructuras de datos
● Conocimientos de manejos de arrays y strings es más que suficiente para afrontar las pruebas con
garantías. Conocimiento de listas y diccionarios puede dar ventaja pero no es necesario.
● Matrices: practicar el patrón de "pintado".
Recursiva que recorre todas las celdas
disponibles.
● ¡Cuidado al ordenar números como strings!
● Problemas de ordenamiento pueden ser
bastante fáciles o difíciles. Ante la duda,
dejadlos para el final.
17. Puntuación
● Tu puntuación es tus problemas resueltos. Para desempatar, el tiempo hasta la resolución con penalizaciones.
● Al tiempo se suma el minuto en que has resuelto el problema y minutos extra de penalización por intento para
resolverlo (los fallos en problemas sin resolver no cuentan). Siempre aparece Intentos/Tiempo total.
● Esta es una razón por la que es super importante localizar y resolver los problemas fáciles rápido.
○ Equipo 1 y 2: 3 problemas resueltos en el minuto 30 sin fallos.
○ Equipo 1: 3 | 40 -- Primero P1: minuto 2, P2: minuto 8, P3: minuto 30. 2 + 8 + 30 = 40.
○ Equipo 2: 3 | 70 -- Resolvió primero el P3 en el minuto 22. Luego resolvió el P1 en el minuto 23 y luego el
P2 en el minuto 25. Pese a tardar solo 1 y 3 minutos en P1 y P2, al resolverlos más tarde tienen peor
puntuación.
18. Unas notas finales:
● Durante el concurso es mucho más importante ser
corto a la hora de escribir que claro, y poder reusar
todo el código que sea posible.
○ Códigos de lectura/escritura, iteración,
transformación... contra más generales mejor,
para poder copiarlos de problema en problema.
● C y C++ disponen de un código más escueto y
tiempos de ejecución más rápidos
Java en el JDK tiene muchísimas utilidades.
¡Conoce bien las ventajas de tu lenguaje!
● Duerme bien la noche antes del concurso.
● Os podéis llevar hojas al concurso con código o notas
que os puedan servir de utilidad. También tenéis
disponible las APIs de C++ y Java.
● ¡Pasadlo bien!
20. Otros concursos:
Para seguir poniéndote a prueba.
Las 12 Uvas (Diciembre)
http://www.las12uvas.es
Google Hash Code (Marzo)
https://hashcode.withgoogle.com
Tuenti Challenge (Abril)
https://contest.tuenti.net
Everis Codefest (Noviembre)
http://codefest.everis.com
21. Webs internacionales:
Profundiza en algoritmia. Recruiting internacional.
LeetCode - https://leetcode.com/
Ideal para practicar y aprender algoritmia. Sus
problemas y foros vienen con guías para su
resolución o con soluciones alternativas.
HackerRank- https://hackerrank.com
Sitio con competiciones y reclutamiento
internacional. Ideal para probar competiciones
avanzadas y destacar a nivel técnico (tiene su
propia clasificación).
22. Despedida y contacto
Muchas gracias por llegar hasta aquí, y espero que
os haya animado a participar y/u os haya ayudado.
Si tenéis alguna duda o queréis dejarme un saludo,
podéis encontrarme en:
-Twitter: @joshiraez
-E-mail: contacto@joseraez.com
-LinkedIn: http://joseraez.com
También he creado un repositorio para que
podamos compartir recursos para el concurso:
https://github.com/joshiraez/RecursosProgramame
23. Agradecimientos
Quería aprovechar para dar mis agradecimientos a:
Nuria Fuentes, nuestra entrenadora y profesora de programación.
Por introducirnos al concurso y apoyarnos durante todo el camino,
además de ser una magnífica profesora y persona.
A Manuel, Jesús, Raúl y Rubén, mis compañeros de equipo
Por todo el esfuerzo y los buenos momentos en el camino a la fase
nacional de las ediciones 2016 y 2017 de Programa-me.