Anunciando omegaUp Escuelas

Con el objetivo de continuar mejorando las habilidades de programación de los estudiantes, nos emociona anunciar el lanzamiento de un nuevo proyecto: omegaUp Escuelas.  Nuestro objetivo es llevar omegaUp a los salones de clases, creando una plataforma educativa, intuitiva y fácil de utilizar que se adapte a las necesidades de los profesores y estudiantes. La plataforma es una herramienta de aprendizaje que permite a los profesores enseñar a sus alumnos pensamiento algorítmico mediante la solución de problemas. Con ello, el estudiante desarrollará habilidades que le ayudarán en su crecimiento profesional.

paginaPrincipal

 

En omegaUp Escuelas, el profesor puede crear sus propios cursos con tareas y exámenes utilizando problemas propios o problemas públicos que ya existen en la plataforma. En el primer caso, el profesor puede hacer uso de los recursos que tenemos disponibles en omegaUp para publicar sus problemas. Esto le permitirá adaptar la plataforma a su curso y a las necesidades de sus estudiantes. Si el profesor opta por la segunda opción, éste contará con una clasificación de problemas por tema y por nivel. Así, él puede seleccionar con mayor facilidad los problemas que apoyen el proceso de aprendizaje de sus alumnos.editarCurso

 

Además, ahora los profesores pueden registrar a sus estudiantes en un curso y seguir su avance en las tareas y exámenes asignados. A fin de facilitar la tarea administrativa del profesor, este puede descargar la lista de estudiantes y su avance a una hoja de cálculo, que le permite realizar un análisis más detallado de su curso.

progresoEstudiantes

Con esta nueva iniciativa, los estudiantes cuentan con una plataforma más organizada donde pueden tener fácil acceso a sus tareas y exámenes además de revisar su avance general en tiempo real.

omegaUp Escuelas aún está en desarrollo, pero la versión beta ya está disponible. Actualmente, se están llevando a cabo pruebas piloto en dos escuelas: ITSUR y CBTis 217. Gracias a Luis Germán Gutiérrez Torres y sus estudiantes por ayudarnos en este proceso.

Cada día el número de organizaciones y escuelas que están probando omegaUp Escuelas está creciendo. La OMI está utilizando la plataforma para crear cursos de entrenamiento. En cuanto a escuelas, tenemos un total de 16 cursos creados. Gracias a todos ellos por darnos la oportunidad de apoyarlos en este proceso de enseñanza-aprendizaje.

Te invitamos a que visites omegaUp Escuelas y comiences a utilizarla. Si tienes alguna duda de cómo utilizarla, cómo incorporar la plataforma a tus clases, o si tienes algún comentario, escríbenos a escuelas@omegaup.org.

Solución a “Jardinero”

Concurso: Preselectivo para la IOI 2015, Etapa 1, Problemset 6
Autor: Saúl Germán Gutiérrez Calderón
Fuente: Saúl Germán Gutiérrez Calderón (recopilado de los ACM-ICPC World Finals 2010, problema I)

En este problema, una búsqueda exhaustiva con podas bastaba para que corriera en tiempo.

La búsqueda podía tener como estado al renglón y a la columna en la que se estaban, más las casillas por las que ya se había pasado más el numero de la siguiente casilla a esconderse que se necesitaba.

Las podas que se utilizaron en la solución oficial fueron las siguientes (otras podas podrían también conseguir 100 puntos):

  1. Que pasara el tiempo en el que se debería llegar a un escondite.
  2. Que se pasara por un escondite cuando no se debía.
  3. Que no fuera capaz de llegar al siguiente escondite a tiempo.
  4. Que el camino que se llevaba volviera imposible una ruta válida. Si la ruta dejaba a algunas posiciones “encerradas” o dividía al mundo en dos, entonces la ruta actual no llevaba a ningún recorrido valido. Esto se podía checar haciendo una búsqueda en profundidad o en amplitud desde alguna posición no visitada (la posición (0,1) es bastante conveniente porque siempre estará libre).

Aquí está el código de la solución:

Solución a “Planetas”

Concurso: Preselectivo para la IOI 2015, Etapa 1, Problemset 4
Autor: Freddy Román Cepeda
Fuente: Edgar Augusto Santiago Nieves

La observación principal de este problema es que siempre hay N-1 lugares estables para el meteorito, y que cada uno de éstos se encuentra entre parejas consecutivas de planetas. Primero notemos que ningún lugar estable puede estar más a izquierda que todos los planetas, ya que la fuerza neta sobre éste lo haría moverse a la derecha. Por la misma razón, no pueden haber lugares estables después del último planeta hacia la derecha.

Ahora, para ver que siempre hay un lugar estable entre cualquier pareja consecutiva de planetas hay que analizar la función que describe la fuerza entre el meteorito y el planeta: \frac{1}{\left | X_i - M \right |}. Supongamos que el meteorito está entre los planetas i e i+1. Cuando M \approx X_i la fuerza que atrae al meteorito hacia el planeta i es suficientemente grande para forzar al meteorito a moverse a la izquierda sin importar la fuerza de los planetas que se encuentren a la derecha (nota que el denominador se hace muy pequeño). Lo mismo ocurre con el planeta i+1 cuando el meteorito está muy cerca de él. Pero esto quiere decir que existe un único punto p entre los dos planetas en el que la fuerza neta sobre el meteorito es 0. (Este argumento se puede formalizar utilizando cálculo.)

Además, es sencillo observar que el meteorito se movería a la izquierda si estuviera entre el planeta i y el punto p, y a la derecha si estuviera entre el punto p y el planeta i+1. Por lo tanto, podemos hacer una búsqueda binaria para encontrar el punto p para cada pareja de planetas consecutivos.

Como hay N-1 parejas y calcular la fuerza neta sobre el meteorito en algún punto arbitrario toma tiempo O(N), la complejidad total de este algoritmo es O(N^2 I) donde I es la cantidad de iteraciones que realice la búsqueda binaria. También hay que ordenar los planetas, ya que la descripción del problema no asegura que vendrán ordenados. Por lo tanto, la solución final tiene complejidad O(N \lg N + N^2 I).

El siguiente código implementa esta solución:

Solución a “Números Libres”

Concurso: Preselectivo para la IOI 2015, Etapa 1, Problemset 1
Autor: Freddy Román Cepeda
Fuente: Edgar Augusto Santiago Nieves

Para resolver este problema hacía falta tener en mente la definición de square-free. Como tanto a y b no son divisibles por el cuadrado de un primo, la única manera de que su producto deje de ser square-free sería que ambos compartieran un factor primo.

Para obtener todos los puntos de la primer subtarea bastaba con computar a \times b e iterar sobre todos los números menores a ese producto y revisar si es divisible por el cuadrado de alguno de ellos.

Para obtener los puntos de la segunda subtarea era suficiente iterar hasta \max(\sqrt{a}, \sqrt{b}), para factorizar a a y b.

Por último, para obtener el resto de los puntos bastaba notar que si a y b comparten un factor primo, entonces su máximo común divisor es distinto de 1.

El siguiente código implementa esta solución: