Recopilación jueces online.

B

Intro

La verdad es que yo he aprendido a programar, en parte, utilizando jueces online y ahora los utilizo para "concursar" si me aburro un poco. Los considero una de las mejores ideas que he visto en mi vida la verdad, por lo que me he decidido a abrir un thread tratando de recopilar toda la información que tengo sobre estos sitios.

Acepto sugerencias de lugares nuevos, sobre el thread en sí ... lo que sea. Mi idea es que no solamente se quede con mi aportación si no que crezca lo máximo posible.

¿Qué son los online judges?

Wiki.

En resumen : se trata de webs que albergan una colección de problemas de programación que aceptan envíos de código el cual compilan, ejecutan, capturan el output generado y lo comparan con la solución correcta. Se pueden utilizar tanto para aprender como para organizar concursos de programación.
Los lenguajes más comunes suelen ser C++ y Java, aunque se suelen soportar bastantes más.

Antes de pasar a listar los jueces y lugares que conozco me gustaría recalcar los siguientes aspectos :

-Los problemas suelen ser tales que se pueden escribir completos en un sólo fichero de código, por lo que hacerlos NO te va a enseñar a programar de cara a proyectos/en equipo, lo cual no quita que lo aprendido sea útil. Remarco esto porque uno de los efectos negativos de estas webs es que han creado una generación bastante grande de picaproblemas que, si los sacas de un juez online, no saben hacer nada. De hecho hay que tratar de no perder las "formas", porque los jueces online pueden acabar enseñando malas costumbres en ese aspecto.

-Muchísimos problemas piden que implementes cosas que o bien ya se encuentran en las librerías estándar o bien son absurdas como ellas solas. Estos problemas son para practicar y conocer algoritmos.

-Los jueces online suelen tener ciertas restricciones respecto al código enviado, las que me vienen a la cabeza son :
--No suelen aceptar mains con parámetros. Es decir : main(int argc, char **argv, char **envp) por ejemplo.
--No aceptan llamadas a sistema (se puede incluir pipe,mknod,system,exec*,fork ... y las que se os ocurran) ni creacion de threads.
Decir que esto me ayuda a afirmar lo anteriormente dicho : estos sitios valen para aprender ALGORITMIA, pero hay campos y metodologías que no conocerás si sólo te limitas a esto. Recomiendo muchísimo utilizar lo que sabes para tratar de hacer algo grande y que te guste.

Una vez dicho esto, paso a listar los jueces que conozco y a comentar ciertos aspectos sobre ellos :

Jutge

www.jutge.org
Es el juez de la UPC. Se utiliza en varias asignaturas de Ingeniería Informática y de Matemáticas. También se utiliza para la Olimpiada Informática Española
y los concursos de programación de la UPC y FME (la facultad de matemáticas de la UPC).

Aspectos destacables :

  • Soporta, en teoría, infinidad de lenguajes.

  • Los problemas suelen estar en catalán y/o inglés. Algunos también están en castellano.

  • Cuenta con una lista pública llamada "learning to program" ideal para (valga la redundancia) aprender a programar. Si mal no recuerdo empieza pidiendo programas bastante sencillos como sumar dos números y trata varios aspectos fundamentales como bucles, bucles anidados, recursividad, vectores y matrices.

  • Otra lista interesante es la llamada "algorithms". Contiene problemas de backtracking, programación dinámica, grafos, d&c ... Ideal para gente que ya domine lo básico.

  • Hay problemas que solo piden una funcion concreta (ellos te especifican el header y tú tienes que implementarla). Creo que estos solo pueden hacerse en c++.

  • También se encuentran disponibles los problemas de los concursos. Formalidad aparte, para sacar algunos problemas tienes que tenerlos cuadraos.

  • En realidad fue una putada que lo implementaran para los exámenes de programación.

UVa Online Judge

http://uva.onlinejudge.org
Juez de la Universidad de Valladolid. Se puede utilizar para practicar, pero tengo entendido que también se utiliza para albergar concursos. Como dato de cultura : debes resolver seis de doce problemas del UVa que se te asignan aleatoriamente para poder participar en el concurso de programación de la UPC.

Aspectos destacables :

  • La gran mayoría de problemas son de concursos, por lo que la dificultad media es bastante mayor a la de Jutge.

  • Una buena forma de resolver problemas es mirar UVa Hunting ( http://uhunt.felix-halim.net/ ). En esa web introduces tu nombre de usuario y te aparece la lista de problemas que aun no has resuelto ordenados por el número de usuarios que lo han resuelto, lo cual es bastante buen indicador de su dificultad.

  • Los veredictos dan bastante poca información, aunque no es difícil encontrar posts de gente hablando sobre casi cualquier problema.

  • Te dice el tiempo y espacio usado por tu programa para resolver el problema. Supongo que viva Asia, pero para casi el 100% de problemas alguien lo ha resuelto en 0.00 y usando el mínimo espacio.

Sphere Online Judge

www.spoj.pl
De mis favoritos. Cuenta con problemas "para toda la familia". No tiene un curso de aprender a programar lo básico, por lo que si no lo dominas se recomienda empezar por ahí antes de ponerte con este juez.

Aspectos destacables :

  • Tiene los problemas separados por categorías ( classical, tutorial ... ). Los "tutorial" son bastante asequibles y suelen ser enunciados "directos", bastante ideal para practicar algoritmos en general.

  • Tiene problemas bastante curiosos que no he visto en otros jueces. El que más gracia me hizo era uno en el que se te pedía provocar un SIGSEGV en la menor cantidad de código posible. Tu puntuación era el número de carácteres de tu código, ordenándolas crecientemente.

  • A diferencia de otros jueces, que tu programa supere los juegos de prueba públicos ya es bastante garantía de que funciona bien. O al menos eso he observado.

  • Permite ordenar los problemas por número de usuarios que lo han resuelto correctamente, lo cual suele ser un bastante buen indicador de su dificultad.

TopCoder

www.topcoder.com
Realmente es una plataforma de concursos de programación en general (no solamente de algoritmia, también hay de proyectos en sí). La incluyo en la lista porque la colección de problemas es perfectamente accesible y se puede utilizar para practicar sin necesidad de participar. Personalmente no me gusta mucho.

Aspectos destacables :

  • Soporta cuatro (y a la práctica tres) lenguajes.

  • Funciona bastante diferente al resto de jueces antes mencionados. Para entrar y enviar los problemas necesitas descargar un applet de java bastante poco cómodo en mi opinión.

  • Se pide que implementes un método ya especificado, por lo que el input ya viene con formato. El applet cuenta con una herramienta para poner casos de prueba de forma directa. En principio debería ser más cómodo, pero supongo que será por la costumbre de testear los programas redireccionando archivos con el input puesto que me agobia … O quizá que le quita parte de gracia el no tener que pensar cómo quieres guardar/representar el input.

  • Que tu programa supere los tests en modo práctica NO es garantía de que funcione realmente bien, dado que solamente se le pasan los "pretests" si no me equivoco (en los concursos los programas tienen que responder bien a pretests, test cases enviados por otros usuarios y finalmente un system test).

  • Los problemas están ordenados por dificultad en función de la división (1 o 2) y por puntuación : fácil(250), medio(500) y difícil(1000). No es raro encontrar que un problema de 500 puntos en div2 sea el de 250 en div1.

  • Puedes ver las soluciones enviadas por otra gente. Muy útil para aprender.

CodeForces

www.codeforces.com
Plataforma rusa de concursos de algoritmia. El funcionamiento de concursos es similar al de TopCoder pero sin utilizar applet alguno.

Aspectos destacables :

  • Los problemas se pueden agrupar por temática (grafos,dinámica,mates ...) y normalmente se puede saber su dificultad por la letra que llevan en el identificador dado que en los concursos los problemas se suelen nombrar con A,B,C,D,E por dificultad. Los problemas "A" y "B" se suelen poder hacer rápido. A partir de la "C" se necesita estrujarse un poco el cerebro.

  • Si estás programando por practicar puedes ver la totalidad de juegos de prueba a los que se somete tu programa y en cuál ha fallado, cosa que se agradece.
    No solamente se somete a los pretests.

  • Se suelen subir tutoriales a posteriori sobre los cinco problemas del concurso más reciente, explicando qué metodo han seguido y exponiendo el coste del algoritmo en cuestión. Bastante útil.

  • Como en TopCoder ; puedes ver las soluciones enviadas por otra gente.

Project Euler

http://projecteuler.net
Poco que decir sobre este sitio. Se expone el enunciado de los problemas y sólo se pide que introduzcas la respuesta correcta. La temática en general es de cálculo de propiedades de números, series y similares ... la gracia está en tratar de hacer un programa que no te tarde 1500 años en calcular lo que se te pide. Bastante divertido y da pie a utilizar bastantes más recursos e ingenios que los jueces habituales (threads, por ejemplo).

5
B

Personalmente he usado bastante el UVA, pero si programo sin un fin determinado (y real) me acabo aburriendo... Voy haciendo de 10 en 10 segun me pongo xD.

Conozco tambien a varios Gold o algo asi de Topcoder, en general conozco bastante gente viciada a este tipo de concursos pero a mi no me llama del todo.

B

Yo solo conozco TopCoder, y desde Google lo recomiendan de cara a entrenarse para sus entrevistas (con lo que no debe de tener malos problemas). A mí la plataforma no me gustó nada, pero bueno...

A ver si después de exámenes me pillo alguno y hago unos cuantos :)

1 respuesta
B

#3 No, si la plataforma en sí es bastante famosa y realmente petarlo en TC suele ser buen indicador de que malo malo no eres. La opinión la he puesto de cara a utilizar estos sitios para aprender más que para competir.

1
eisenfaust

Falta CodeChef.

Personalmente todos me parecen una mierda. El unico que se libra un poco es SPOJ por la cantidad de lenguajes soportados.

Project Euler tambien puede ser interesante para algunos.

1 respuesta
B

#5 Mándame por MP detalles y datos sobre ese sitio y lo incluyo si quieres. La verdad es que no lo conocía.

Usuarios habituales