This graph shows how many times the word ______ has been mentioned throughout the history of the program.
Hay que saber, para que la gente te conozca un poquito, Martín, eres de Chile, pero ¿qué edad tienes? ¿Qué estás haciendo? ¿Estás estudiando? Porque creo que eres de la Universidad Católica de Chile, si no me equivoco.
Pues un poco para que la gente te conozca, ¿a qué te estás dedicando y cómo llegaste a presentarte a este evento?
Bueno, yo tengo 23 años, estoy ya en mi quinto año de ingeniería civil, se llama acá en Chile, que mi universidad es un poco extraña en ese sentido.
Típicamente uno estudia, no sé, computación, licenciatura en ciencia de computación, algo de ese estilo, ingeniería de software.
Bueno, la Universidad Católica en Chile hace esta cosa rara. Hay una carrera que se llama ingeniería, y uno entra y tiene como tres años de plan común en que pasé hasta por termodinámica.
Y ahora me estoy especializando en computación y dura cinco años y medio la carrera.
Bueno, pero ya te queda poquito, ¿no?
Sí, sí, sí. Este año y medio año.
¡23 años! ¡Madre mía, 23 años! Y mira lo que han logrado. ¿Cómo empezó la historia? ¿Cómo fue el primer contacto con este evento, el TCS Code Vita? ¿Te lo propusieron o te apuntaste tú?
El TCS Code Vita lo conocí por un compañero de programación competitiva que había participado el año pasado.
Y de hecho salió segundo. Eso no es tan conocido, pero era un chileno.
Bueno, salió segundo puesto. Se llevó 7 mil dólares a la casa. Bueno, menos impuestos, por supuesto.
Los impuestos están siempre. Y por eso mismo yo dije, y bueno, y todos mis compañeros en programación competitiva, que es un ámbito bastante cerrado, por cierto.
O sea, cerrado, me refiero a poca gente. Conoces a todos.
Claro.
No hay tanta gente en programación competitiva.
Y bueno, nos enteramos de esto y dijimos, ya, vamos a probar. Fue una buena suerte. Y lo inscribimos todos de a uno.
Claro. ¿Qué os inscribisteis? ¿Toda la clase o qué?
Sí, lo inscribimos todos los que conocíamos. Bueno, a Mauricio se llama, el año pasado.
Lo inscribimos por si acaso y bueno, lo seguimos dando, lo seguimos dando, lo seguimos dando y terminamos de repente en India y no nos lo queríamos.
Claro. En la India, para que la gente lo sepa, porque claro, la gente se cree, bueno, ya está. No, es que en la India solo llegaron 24 finalistas. 24 finalistas.
¿Cómo? A mí lo que me gustaría saber, Martín, es, desde ese primer contacto que al final te apuntas y todo esto, ¿cuál ha sido el paso a paso que ha tenido que ser llegar hasta la India?
¿Qué tuviste que enfrentarte en cada una de las pruebas? ¿Cómo fue el proceso desde el registro, las primeras pruebas eliminatorias y todo esto?
Bueno, si no me equivoco hubieron dos rondas. Primera ronda, bueno, estaba online, yo estaba en la playa, de hecho, me tocó justo la semana de vacaciones de la universidad y lo di desde la playa, fue divertido.
Y no sé qué pasó con las coincidencias, pero la segunda ronda me tocó en el parque con Guilleo, estando de camping en el sur de Chile.
¿Cómo te explico? Que no había señal, no había electricidad, no había nata. Y yo llevé mi computador, le eché como, mi computador es muy pesado, es medio viejo, tengo que comprar uno, quizás los 10.000 dólares sean para eso.
Pero, yo, no sé, te digo, queso, salchicha y un computador de 3 kilos en la mochila. Bueno, me di cuenta que la competencia dura 6 horas, entonces no me iba a dar la batería para 6 horas.
¿6 horas? O sea, la competencia, la primera eliminatoria son 6 horas.
Ajá, las dos rondas. La primera ronda era 6 horas, la segunda también.
¡Ostras!
Incluso ponen una práctica de 6 horas, por si queréis quemar 6 horas de lluvia.
Y, bueno, entonces, digo, bueno, tengo dos opciones. Hago la competencia media, 3 horas, tenía que encima subir un cerro, que era un trekking como de otras 4 horas, para poder conseguir un poquito de señal.
Y hago la competencia en poco tiempo, la hago mal.
O, tomo un bus al pueblo más cercano, Melipeuco, y la quedaba como a una hora. Y la hago ya. Y yo estaba así como, no estaba seguro de qué quería hacer, porque en ese momento yo no le daba el peso a la competencia.
Claro, ahí en ese momento tú no te imaginabas que ibas a ganar.
Que era imposible.
O sea, ya ir a la India hubiera sido una locura, ¿no? Pero ya ganarlo no estaba ni en tus planes ni nada, ¿no? Tú estabas como, bueno, vamos a pasarlo bien y ya está.
Claro, ni siquiera yo no pensé que iba a poder ir a la India, así que era como, ya tengo una chance de ir a la India por 40 lucas acá, que son como 40 dólares el bus de vuelta, porque era un bus para mí solo.
Y dije, ya, no vamos a perder esta oportunidad, como la vida es una, 40 lucas menos, bueno, me voy a arrepentir mucho, así que después todos mis compañeros terminan yendo a la India y yo no voy a ir.
Así que lo apagué y terminé yendo y pasé seis horas en un restaurante. El tipo del restaurante súper simpático me traía hielo, me vi ahí sufriendo las seis horas.
Menos más que lo hice, porque si no...
Ya ves. No, ahora en ese momento, o sea, tienes que pensar de, madre mía, ¿cómo a veces una decisión que parece poco trascendental en nuestra vida, no?
El hecho de que estabas ahí, que habías salido, a ver, si te hubieras quedado y hubieras hecho la competencia de cualquier forma, pues a lo mejor no lo hubieras logrado y cómo eras perdido hasta un pedazo de oportunidad, ¿no?
Mira, hay gente por aquí que ya dice, oye, ¿cómo eran las pruebas? Porque sí, fueron seis horas, pero ¿qué tenías que hacer en esas seis horas?
¿Qué es esto de la programación competitiva? ¿En qué trataban las pruebas que tenías que hacer ahí para dedicarte seis horas en esto?
Bueno, programación competitiva es algo bastante amplio, mucho más amplio que el Codevita, el TSS, Codevita.
Que por si acaso se pronuncia Codevita, no Codevita, no sé por qué funciona así los indios.
Codevita, hostia, qué curioso, ¿eh? Uno que intenta, no, lo voy a pronunciar bien, no sé qué, Codevita, vale, vale.
Sí, un poco raro, pero bueno, los que conocen programación competitiva de otros ámbitos, hay hartas otras competencias, el ICTC, el Codejam, bueno, es muy similar a eso.
También los que conocen las preguntas de tipo entrevista, tipo Topcoder o Leadcode, son similares a eso.
Y para los que no conocen, bueno, es un poco distinto a la programación típica, en el sentido de que cuando tú programas algo, típicamente es un programa súper grande.
Tú quieres hacer un proyecto, que haga algo que funcione y que haga algo, y tú puedes expandir el scope de tu proyecto cuanto quieras, pero acá se intenta, bueno, ponerte a prueba.
Entonces destilan a un problema como casi de juguete, que es, intenta medir de la forma más pura posible tu habilidad de programación.
Entonces, te ponen un desafío que, no sé, te pueden pedir los problemas más simples, por ejemplo, te pueden pedir, no sé, ordenar una lista.
Eso sería como un problema trivial, así como de...
Voy a dar un ejemplo al tiro, porque probablemente lo voy a terminar dando después igual.
El problema G, si no me equivoco de la competencia, porque están enumerados, siempre están enumerados con letras, de la A, B, C, así hasta la J.
El problema G, te va a dar un cubo Rubik, no voy a poner técnico al tiro.
Entonces, te va a dar un cubo Rubik, a ver si alguien se lo cura.
Y este cubo Rubik, le dicen que hay alguien que lo quiere armar, ¿sí?
Sí.
Pero esta persona que lo quiere armar tiene una hermana malvada.
Entonces, la hermana malvada va a tomar...
¿Una hermana malvada?
La hermana malvada, así lo describen, no tiene que armar el cubo Rubik.
Entonces, esta hermana malvada va a elegir una esquina de tu cubo Rubik y va a tomar dos stickers, ¿cierto?
Que los cubos Rubik tienen como stickers de colores.
Sí.
Va a tomar dos stickers y los va a intercambiar.
Y resulta que eso hace imposible resolver el cubo Rubik.
Entonces, la pobre persona que se quedó con su cubo Rubik, que no sabe si le intercambiaron en las caras o no,
va a querer saber si es que su hermana hizo algo malo o no.
Entonces, te preguntan y te da la descripción del cubo Rubik.
Y tú tienes que determinar si es que le intercambiaron un color y si es que le intercambiaron dos colores.
Entonces, ¿qué esquina le intercambiaron?
Y tienes que escribir el algoritmo para detectarlo.
Pues, tienes que escribir un programa.
Bueno, uno puede elegir ahí entre Python, C++, lo que tú quieras.
Ah, pues, mira, justamente eso lo estaban preguntando bastante, que decía la gente.
¿Y en qué lenguajes de programación lo podías hacer?
¿Qué lenguaje de programación elegiste de tú, Martín?
Ese problema en particular lo resolví en C++.
C++, ostras, Martín, lo veas, ¿eh?
Y encima, me ha encantado eso porque, de hecho, es en particular.
O sea, que ibas cambiando de lenguaje para no aburrirte.
Es decir, bueno, este lo voy a hacer en Python, este lo voy a hacer en C++, este lo voy a hacer en Salvador.
Ahora, ¿en serio? ¿Cuál era la estrategia para decidir qué lenguaje utilizabas en cada prueba?
En programación competitiva, yo en mi vida diaria uso, bueno, no digo vida diaria, pero cuando me gusta, cuando programa por gusto o para trabajo,
uso, me gusta usar Rast, me gusta usar Lua, me gusta usar Python, sobre todo Python con, bien estricto, con Pipo, todo ese tema.
Pero para programación competitiva yo lo veo como una cosa aparte, porque en programación competitiva no se mide, por ejemplo, la limpieza de tu código.
Tú tienes una tarea y la tarea la tienes que terminar lo antes posible y da lo mismo como.
Yo me acuerdo siempre que había un problema que me tope una vez, que te daban una fórmula matemática, que tú podías ver que era obviamente cierta y te pedían comprobar que era cierta.
Y imprimías sí si es que se cumplía para un cierto caso específico con números particulares y no si es que no se cumplía.
Y bueno, para resolver ese problema lo único que tenías que hacer era imprimir sí.
Tu programa era de una línea, era print yes, porque la fórmula era cierta, tú la podías ver y era obviamente cierta.
Claro.
No querías que chequees nada. Eso es, como que uno toma los medios necesarios para lograr el objetivo y nada más importa.
¿No importa la velocidad de ejecución? Por ejemplo, que te digan, porque claro, al final, ¿qué es lo más importante?
¿Cómo de rápido resuelves el problema o cómo de rápido luego se ejecuta la solución?
Esto es un problema de optimización. Tú tienes restricciones.
Ah, no, no.
A ti te ponen, a ti te ponen, no, estoy molestando.
A ti te ponen, el programa tiene que dar el output correcto y tiene un límite de tiempo.
Típicamente está por el orden de un segundo, de repente cinco segundos, qué sé yo.
Entonces tú tienes que tener cuidado de que tu programa corra, bueno, eficientemente.
No puede hacer una estupidez con cinco force metidos uno dentro de otro, porque si no, el tiempo se te acaba.
Vale, vale.
Pero dentro del tiempo límite, si tú tienes tiempo de sobra, tú puedes hacer todas las barbaridades que quieras hacer.
Entonces, una vez que estás dentro del time limit, que se llama, lo siguiente que buscas es poder programarlo lo más rápido posible.
Por eso digo que puedes cambiar entre SebasMás y Python. Esos son los dos lenguajes que usas.
SebasMás cuando necesito velocidad, que el programa corra rápido, quizás estoy más justo en el tiempo.
Y cuando tengo tiempo de sobra, mucho tiempo de sobra, Python es como cien veces más lento que ese además,
puedo usar Python y me simplifico la vida.
Ahora, de repente, estoy tan acostumbrado a hacerse más que el uso correcto.
Vale, vale. O sea que, claro, lo único que te preocupa es eso, que tengas un tiempo límite, que digas,
hostia, un algoritmo es tan lento. Claro, lo intentan para evitar que hagas cosas muy a fuerza bruta,
de decir, voy a hacer una solución lo más guarra posible ahí.
Y claro, lo que pasa es que ahí lo que está pasando es que tu solución no es nada eficiente y te penaliza.
O sea que es un tema más de que tú tienes seis horas, pero es como resolver rápido.
Tienes que un ejercicio detrás de otro, lo tienes que ir resolviendo, lo tienes que ir resolviendo,
me imagino que contra una batería de test, o sea, muy parecido a lo de lead code, hacker rank y todo esto.
Y puedes utilizar el lenguaje que quieras.
Y entre los lenguajes, dices que está C++, está también Python, hay más lenguajes.
¿Hay gente que utiliza JavaScript ahí para trolear o...?
No utiliza JavaScript siquiera, yo creo que no.
No, yo que sé, a lo mejor dicen, pues yo lo voy a hacer con JavaScript y tal.
Claro, y en BrainFact también, en el siguiente paso, ¿no?
Bueno, Martín, veo que no eres muy fan de JavaScript, ¿no? No eres muy fan.
No, pero de TypeScript sí. JavaScript siento que es un desastre.
TypeScript como que intenta abarchar los errores.
Es que a ti lo que no esté tipado, porque también has visto que has dicho que Python,
a ti te gusta que esté tipado, o sea, que no utilizas Python sin tipar.
Pero en la competitiva, no te pones a perder el tiempo poniendo tipos, ¿eh?
Seguro que, no, no, esto es un número, me voy a asegurar que esto es un número.
Voy a perder aquí estos segundos para ponerme a tipar cada una de las cosas,
mientras el indio que está al lado, ahí con JavaScript, console.log, no sé qué.
Claro, ya me imagino, ya me imagino que no.
Vale, vale, muy bien, entonces, hiciste esa pedazo de...
Y en ese momento de la competición de las 6 horas, ¿tú sabes en ese momento
contra quién estás enfrentándote?
Me imagino que es cientos de personas a la vez, porque son unas eliminatorias,
¿o no lo sabes y te dan el resultado más adelante?
No, el puntaje es en vivo.
¿En vivo?
Tú puedes ver y, bueno, sirve mucho para identificar los problemas fáciles.
Claro.
Porque en esta competencia en particular, tú cuando abres un problema, lo pinchas,
pero si es cierto, empieza a contar el tema.
Y hasta que lo resuelves, sigue contando el tema.
Entonces, la estrategia óptima acá es el problema-problema.
Ves el primer problema, lo resuelves.
Ves el siguiente problema, lo resuelves.
Y así.
¿Y te lo puedes saltar?
O sea, podrías decir, con este no puedo, voy al siguiente mientras.
Sí, pero mientras que no lo resuelvas, el tiempo sigue contando.
Entonces, una vez que abriste un problema, te conviene resolverlo.
Y por eso sirve mucho ver cuáles son los problemas que a la gente le está saliendo.
Porque puedes saber con antelación cuáles son fáciles y cuáles no.
¡Ostras!
Claro, y ahí haces estrategia también.
El ejercicio C han tardado menos de un minuto.
Voy a por ese que lo voy a sacar bastante rápido.
Ah, bastante interesante, interesante.
Muy bien.