miércoles, 7 de mayo de 2014

TuentiChallenge4: Diario de un developer yonki (1)

Los fuentes Java de mis soluciones están disponibles en Github:
https://github.com/andresviedma/tuentichallenge4

Día 0

Querido diario:

Hoy he decidido que voy a presentarme al concursillo de programación que organiza Tuenti. Ya que no pude presentarme al Code Jam de Google como otros años porque estaba de viaje, voy a intentarlo con uno más patrio. No sé ni cómo va, y la verdad es que entre el curro y el finde que me he pegado de viajes y de dormir poco estoy bastante cansado. Pero pone que dura una semana y está el puente, así que seguro que hay tiempo de sobra para resolver los problemas que te pongan. ¡¡¡Esto lo gano fijo!!!.



Como voy a andar bien de tiempo creo que voy a hacerlo en algún otro lenguaje que no sea Java. ¿Qué tal en Dart, ya que le estoy dando caña últimamente?. O si no podría hacerlos en Groovy... bueno, bah, ya lo pienso cuando me ponga con ello.

¿Serán algorítmicos como los de Google?. Igual debería mirarme cosas de algorítmica, lo del backtracking, los A estrella, recorridos de grafos y todas esas mandangas, que lo di en la Facultad hace un mollón de años pero no me acuerdo de nada. Y siempre estoy igual, que oye, molaría poner cara de molón y decir: "¡Voy a resolverlo en un momentín con el algoritmo Magicflush!". O igual debería mirarme los problemas que han puesto otros años para hacerme una idea de cómo van... aunque bueno, seguro que estos serán facilones. Va, aunque sean las 8 de la tarde me voy a dormir una siesta y luego lo pienso.


Día 1

Querido diario:

Ayer al final también dormí muy poco, me quedé dormido cuando sonó el despertador de la siesta porque estaba baldado, y luego me desperté a la 1 o así y ya no me pude volver a dormir hasta casi por la mañana. Necesito un fin de semana para recuperarme del fin de semana. Menos mal que viene el puente y podré descansar.

Ya empezó el concursito de marras. Cuando he vuelto del teatro, aunque era ya tarde y yo estaba cansado, he mirado el primer ejercicio para ver qué pinta tienen los ejercicios. ¡Había 1582 personas registradas! En fin, igual no va a ser esto tan fácil.

Por lo que he visto, hay que ejecutar unas herramientas que te pasan para ejecutar una prueba corta y ver si vas bien, y luego otra más fuerte para enviarlo, que sólo se puede hacer una vez. Cuando fui a programar en Dart, me di cuenta de que iba a tener que usar Futures para toda la entrada / salida, y me dio tal pereza solo de pensarlo que al final pasé. Descarté también Groovy, por la pereza que me daba ya solo meterme cuando realmente no tengo fluidez ninguna con el lenguaje (estoy empezando a pensar que esto de programar con sueño no es bueno). ¡Qué demonios, voy a tirar con Java y así empiezo de una vez!.

El ejercicio 1, Anonymous Poll, es bastante sencillote, no tiene mucha ciencia. En estos concursos muchas veces la gente programa las cosas con gran economía de líneas, usando arrays a tope y con un número mínimo de funciones. Como a mi eso no me va mucho y además dicen que para el concurso se valorará la calidad del código, he optado por organizar los ejercicios con sus clases, sus métodos, etc., quedará todo más claro aunque también más largo.


El ejercicio 2, F1 Bird's Eye Circuit, se trataba de recibir en una sola línea el diseño de un circuito, con sus rectas y curvas, y ensamblarlo y pintarlo ya en dos dimensiones. A pesar de que era bien tarde pensé que era facilón y lo podía hacer en un momentín. Una vez terminado de programar me he dado cuenta de una cosa: tenía trampa. Al leerlo la primera vez me pareció que el primer caracter de la cadena se suponía que estaba mirando hacia la derecha. Pero al releerlo me he dado cuenta de que no, que el que se supone que está mirando a la derecha es un caracter '#' que hay por ahí, y que se supone que es la salida. ¡En el fondo fue una suerte que la haya releído, porque en el programa de la prueba daba la casualidad que todos los casos de prueba salían correctos!.

¡Primer What The Fuck!.



Si hubiera estado más despierto probablemente hubiera optado por comenzar a leer la cadena por la posición del caracter '#' y santas pascuas. Pero no, claro, he hecho algo mucho más bizarro: cuando llega el caracter # miro en qué dirección se supone que estoy mirando y la guardo en una variable, y luego ¡giro la pista al pintarla!, cambiando unos caracteres por otros según si miramos en horizontal o en vertical, o según cómo queden las curvas al girarlas. Un poco infernal, la verdad, con la tontería me han dado las 4 de la mañana. Estoy roto. A dormir.


Día 2

Querido diariozzz:

Lo volví a hacer. Después de la charla de @adelatorrefoss en MadriAgil y de ver el fútbol, por fin, a las tantas, me he vuelto a poner con el concursillo. No sé cuántos ejercicios hay, pero esto no parece tener fin.

El ejercicio 3, The Gambler's Club, es, es, es... ¡ey, es Guybrush Threepwood!, ¡¡¡Monkey Island!!!.


Está bien, ¡TENÍA que hacerlo!. ¡La de tiempo que habré pasado yo con los monkeys!. ¡Y seguro que un ingeniero amante del Monkey Island sería un genio que habría ideado un reto divertidísimo!...

Pues no.

Resulta que una vez leído te dabas cuenta de que se trataba de, a partir de un conjunto de datos, obtener la ecuación con la que se obtienen. Si conoces algún programa matemático, esto se resuelve en un pis-pas. YO NO. ¡Llevo sin usar un programa matemático desde la Universidad, hace cuatro o cinco millones de años! (redondeando).

Hice un programa que obtuviera los datos de la web y me puse a buscar en Google. Los ojos se me cerraban, pero ey! ¡en cuanto lo encontrara podría irme a dormir!. Rosario en mano y cantándole a los angelitos, probé con Excel. ¡Meeeeeeec!. Nones. Ni conseguí sacar ecuaciones con dos variables, ni conseguí sacar una ecuación convincente con una variable dejando la otra fija. Probé entonces con Wolphram Alpha, que sabía que se podían hacer cosas de este estilo. Al ir a meter los datos, veo que la cajica está deshabilitada y tiene un bonito botoncico donde pone "Subscribe to Pro". La madre que los parió. O dicho de otra forma, ¡segundo WTF!.

Buscando, buscando, buscando, vi que la cosa estaba chunga. Y a estas horas daba una pereza tremenda ponerse a instalar nada para probar programitas matemáticos, y encima en Linux. Viendo la curva en Excel, daba la impresión de que la ecuación tenía que ser polinomial, y me extrañaba que Excel no la sacara. ¡A ver si es que había que hacer una interpolación!. Dicho y hecho, me copié una clase que encontré por ahí que hacía una interpolación trilineal y ahí que la metí. Con un par. Porque yo lo valgo. Y encima funcionaba. Qué grande soy. Pues a tomar viento, la envío y fuera.

Claro, que en cuanto la he enviado me he dado cuenta de que eso no iba a funcionar ni de coña. Te avisaban de que el programa de prueba usaba números menores o iguales a 30, que eran justo los de la muestra de datos. Y claro, en cualquier interpolación, por chunga que sea, si le pides uno de los puntos de la muestra te lo va a devolver con una precisión perfecta. Por otra parte, también te avisaban de que en los datos de prueba que se ejecutaban al enviar, se usaban todos números mayores, los de muestra llegaban solo hasta 30, y los de la prueba final llegaban hasta mil y pico. O sea, que la interpolación a hacer gárgaras. ¿Para qué demonios sirve una interpolación si todos los datos están tan alejados de la muestra?.

Deprimido al darme cuenta de lo ocurrido y después de echar un trago del peor orujo que tenía como penitencia, he decidido que no podía acostarme así.

Así que he pasado al ejercicio 4, Shape shifters, y ¡oooooooooh, es Mística!. ¡Un ingeniero amante de Mística sería un genio que habría ideado un reto divertidísimo!... obviamente.



Se trataba de tener una cadena de caracteres de inicio y otra de fin, y un conjunto de estados intermedios posibles, y de crear transiciones de estados cambiando un caracter hasta llegar al objetivo. Con un recorrido de todas las posibilidades de transiciones y un control para no pasar por estados repetidos se resolvía con cierta facilidad, aunque ya me imagino que no será lo óptimo. Son casi las 5 de la mañana pero ¡entregado!. Y veo que han puesto un "top" y aparezco ya en él en el hipotético puesto 100, absolutamente falso porque no cuenta si los ejercicios están bien o mal, solo los que se han entregado. ¡Y hay un tío que ya tiene hechos 15! Para mi que la gente no trabaja...

En cualquier caso... ¡ay!, no me quito de la cabeza al puñetero Guybrush, la madre que lo engendró... ¡y el resto de su familia, obtenida a partir de estúpidas interpolaciones trilineales!.


Día 3

Queridozzz diariozzz:

Son las 12 de la noche y acabo de volver del entrenamiento de basket. Esta mañana he tenido que madrugar un poco más porque venían a revisarme la caldera, así que creo que estoy empezando a sentirme mucho más cercano a los zombis (más majos ellos!).

Viendo las máquinas que hay en el puñetero concurso, creo que voy a ver si presento un par de ejercicios más, que... ¡diablos!, ¡¡¡he mirado y resulta que hay 20 ejercicios!!!. Y a 2 por día no me va a dar tiempo aunque, Guybrush aparte, por suerte no son excesivamente complicados.

Pero primero voy a tirarme un rato en el sofá a relajarzzzzzzzzzzzZZZZZZZZZZzzzzzzzzzzZZZZzzz


¡OJO!: Esta entrada continúa en:





5 comentarios:

  1. Muy entretenido el post Andrés, y coincides conmigo además en haberte complicado un poco la vida con el ejercicio 3... bueno en tu caso, te has complicado una barbaridad!! jaja que bueno lo de la interpolación trilineal!!

    Un saludo

    ResponderEliminar
    Respuestas
    1. Sí jajaja seguro que he sido el único idiota que ha tirado por ahí! Ya nunca volveré a ver a Guybrush de la misma forma ;-) Saludos!

      Eliminar
    2. Cuando he visto cuál era la ecuación me quería morir xD
      (una simple raíz de x^2 + y^2, mira que soy melón!)

      Eliminar
  2. Muy entretenida la entrada Andrés. Si llegas a publicar el código de las soluciones, avísame para añadirlo a mi blog, que estoy recopilando los envíos de todos.
    También te invito a leerlo que iré explicando cada solución. http://lagunex.com
    Saludos.

    ResponderEliminar
    Respuestas
    1. Gracias, Lagunex. Sí, ya lo he visto y lo tengo en mente, de hecho como tengo ya los biorritmos hechos polvo estaba a punto de subirlo ahora mismo, pero por una vez voy a ver si me controlo y si eso los subo ya mañana ;-) ¡Que ya hace falta una solución en Java! Saludos

      Eliminar

cookie consent