Análisis de diferencias en salidas para envíos de problemas educativos

Hemos liberado una nueva funcionalidad que será muy útil para los usuarios que comienzan a utilizar la plataforma, ya que contarán con una herramienta más para apoyarlos en su aprendizaje. Esta funcionalidad les permitirá ver un análisis de las diferencias entre las salidas que dan sus programas y las salidas oficiales para los envíos de problemas educativos.

¿En qué consiste el análisis de las diferencias?

Para todos los problemas educativos que accedan vía cursos, los usuarios podrán comparar el resultado que obtuvo la salida de la solución que acaban de enviar, contra el resultado que se espera de acuerdo a los casos que subió el creador del problema.

Ventajas

El uso de esta herramienta traerá beneficios, tanto para profesores como para estudiantes, los cuales se describen a continuación:

Profesor

  • Tiempo: Al permitir a los estudiantes ser más autodidactas, el profesor tendrá más tiempo para revisar temas de mayor relevancia o donde los estudiantes presentan más problemas. 

Alumno

  • Problemas auto didácticos: Al recibir retroalimentación más completa desde la plataforma, el estudiante puede realizar más problemas, los cuales lo irán guiando con las pistas para llegar a la solución de los problemas sin necesidad de contar con la figura del profesor.

¿Cómo funciona esta nueva herramienta?

Profesor

Lo primero que se debe tomar en cuenta por parte del profesor / creador de problemas es que el problema sea meramente educativo, quiere decir, que este no vaya a ser tomado en cuenta o ya se esté usando en concursos, ya que esto podría dar ventaja a usuarios que ya hayan visto las salidas esperadas. 

Una vez que ya se definió que el problema se utilizará con fines educativos se procede a la configuración. 

Si el problema es nuevo, se sigue el mismo procedimiento como para crear cualquier problema: Menú > Problemas > Crear un problema, donde se encontrará el siguiente campo:

Las opciones disponibles son:

  • Ninguno (predeterminado): El problema continúa como siempre ha existido, sin mostrar diferencias de salidas en los casos.
  • Sólo ejemplos: Se mostrarán las diferencias de salidas para todos los casos que se guardaron en el directorio examples.
  • Todos: Se mostrarán las diferencias de salidas para todos los casos que se agregaron en el archivo .zip, incluidos los ejemplos.

En caso de que el problema ya exista y se desee agregar esta configuración, se debe ingresar a la sección de editar problema de la forma tradicional: Menú > Usuario > Mis problemas, y después dar clic en el icono de Editar problema . En este formulario también se encontrará disponible la configuración:

El siguiente paso es agregar el problema a algún curso; recuerda que esta configuración sólo funciona en ese lugar.

 

Estudiante

Para que los estudiantes puedan aprovechar esta herramienta deben estar inscritos al curso que contenga problemas educativos. 

1.- El primer paso a realizar es ingresar al curso, tal como se hace tradicionalmente, seleccionar la tarea en la que estará trabajando y elegir el problema educativo.

2.- Después se debe enviar una solución y esperar a que el juez de omegaUp evalúe el envío. En el listado de envíos aparece el botón para ver los detalles, dar clic.

3.- En la ventana que aparece se mostrará la información de los casos, con su respectivo puntaje por cada grupo.

4.- Puedes presionar cualquiera de los botones   para ver la diferencia en las salidas de los casos, si todos los casos del grupo son los mismos que los esperados o si hay alguna salida que no coincide.

En la siguiente animación se puede ver su funcionamiento tal como le aparecerá al estudiante en el curso:

 

Administración de Identidades

Hemos liberado una nueva funcionalidad en omegaUp para que puedas administrar identidades dentro de un grupo. Si has sido organizador de un concurso o curso, seguramente has requerido de la ayuda de algún miembro de omegaUp para dar de alta las cuentas de los usuarios que participarán en el evento que organizaste con este script. Con esta nueva funcionalidad serás capaz de realizar todas las acciones por tu cuenta.

¿Qué es una Identidad?

Una identidad en omegaUp es una cuenta con los privilegios suficientes para ingresar a un curso o concurso para el cual haya sido creada. Anteriormente, para que un usuario pudiera ingresar al curso o concurso, era necesario hacer los cambios necesarios en el código descrito en el párrafo anterior.

Ventajas

Las ventajas que se tienen con esta nueva funcionalidad se describen a continuación:

Profesor / organizador

  • Rapidez: Al poder crear sus identidades, el organizador puede disponer de ellas en el momento que las da de alta. Ya no es necesario esperar a que se haga el despliegue con los usuarios que se pretenden agregar.
  • Control: Estas cuentas de identidades ahora las podrá visualizar en el mismo lugar donde están las cuentas de los usuarios que se agregan al curso.
  • Seguridad: Es muy importante señalar que una vez que la identidad se asocia a un concursante, esta ya no puede ser utilizada por nadie más. Ya no será necesario reutilizar cuentas.

Alumno / participante

  • Privacidad: Siempre y cuando las identidades se den de alta con nombres genéricos, los datos de los usuarios no serán expuestos en ninguna parte de la plataforma.
  • Control: El usuario podrá agregar a su cuenta tantas identidades le sean asignadas, lo cual tiene una gran ventaja, ya que todos los problemas que resuelva con cualquiera de sus identidades serán tomados en cuenta para su rankeo.

¿Cómo funciona la Administración de Identidades?

Crear Identidades

En la animación anterior se muestra cómo crear un grupo con identidades, este proceso se describe paso a paso a continuación:

1. Ingresa a la sección de Mis Grupos.

Una vez que ingresas a omegaUp, y en el menú superior busca la opción Concursos > Mis grupos:

2. Crear el grupo

Si ya creaste el grupo pasa al punto 3, de lo contrario presiona el botón de Crear grupo:

Llena los datos de nombre y descripción del Grupo, el alias se genera automáticamente de acuerdo al nombre del grupo. Una vez que has llenado los datos, presiona el botón de Crear grupo:

3. Selecciona el grupo

Busca tu grupo en el listado, al encontrarlo da clic sobre el para que te mande al detalle:

4. Crear las identidades

Si cuentas con los permisos suficientes, en esta pantalla encontrarás una pestaña de Crear identidades, al dar clic en ella te aparecerá lo siguiente:

Vas a ver un botón que dice seleccionar el archivo, da clic para que puedas cargar un archivo en formato CSV.

5. Llena el archivo

Si ya tienes el archivo CSV con las identidades a crear, pasa al punto 6, de lo contrario aquí te indicamos cómo generarlo.

Aquí puedes descargar el template para que puedas registrar a todos los usuarios desde algún programa de Hoja de cálculo. Cuando guardes los cambios cerciórate de que el archivo lo guardas en el formato correcto (CSV). Este es el ejemplo de un archivo para subir.

Las consideraciones que debes tener al crear el archivo son las siguientes:

Todos los campos son obligatorios y deben seguir con las siguientes reglas:

  • username: Mismas reglas que cuando se da de alta un usuario desde la página de registro.
  • name: Mismas reglas que cuando se da de alta un usuario desde la página de registro.
  • country_id: Debes ingresar el código del país o la región según iso3166-2, ejemplo: Si los concursantes son de México, entonces debes escribir el código MX.
  • state_id: Mismo caso que el campo anterior, debes buscar el código del estado/provincia/distrito al que pertenezca según iso3166-2, este código está compuesto por [país o región-estado o provincia o distrito]. Sólo escribe los dígitos que están después del caracter -. Ejemplo: Si los concursantes son de Guanajuato, México, debes escribir GUA.
  • gender: Si tienes identificados a los concursantes, puedes indicar una de las siguientes opciones: [male, female, other, decline]. Recuerda que si escribes cualquier cosa distinta a las 4 opciones listadas, te aparecerá un error al querer subir el archivo.
  • school: Si ya tienes registrada la escuela en la plataforma, escribe el nombre tal cual está dada de alta, de lo contrario, se va a generar un nuevo registro de escuela.

Guarda el archivo en formato CSV como se mencionó anteriormente.

6. Sube el archivo

Elige el archivo con las identidades que deseas dar de alta y da clic en abrir:

Todas las identidades te deben de aparecer en formato de tabla como se muestra en la siguiente imagen:

Una vez que las puedas visualizar, revisa que los datos son correctos. En caso de que tengas información incorrecta, vuelve a modificar tu archivo de identidades, guárdalo y regresa al punto 4.

Si los datos son los correctos, da clic en el botón de Crear identidades. Listo, ahora ya cuentas con identidades ligadas a un grupo.

Como puedes notar, en la tabla de arriba se visualizan las contraseñas asignadas a cada identidad, es recomendable que las guardes en algún lugar seguro para posteriormente compartirlas con los participantes de tu concurso o curso (lo puedes hacer presionando el botón   que aparece justo debajo del botón de Crear Identidades) ya que si te sales de esta pantalla, no las podrás volver a consultar.

Nota: Las contraseñas se hashean y se almacenan en la base de datos: quiere decir que ya no se puede revertir para visualizar la contraseña.

Para tener un mejor control sobre las identidades que creaste, estas cuentan con un identificador en el username: [nombre-del-grupo:username], de esta forma siempre tendremos una asociación directa entre identidades y grupo.

En caso de que no hayas guardado las contraseñas, no te preocupes, las puedes regenerar volviendo a subir el .csv. Alternativamente si sólo quieres restablecer la contraseña de un sólo alumno, puedes hacer eso desde la pestaña de miembros, tal como se muestra en la siguiente animación:

Cambiar Password

También puedes editar información de las identidades, recuerda que solamente el creador de las identidades puede realizar esta acción. La forma de hacerlo se muestra en la siguiente animación:

Actualizar información básica

Ya que le compartiste las identidades a los respectivos participantes, ellos pueden ingresar a la plataforma de la misma forma que cualquier otro usuario, la diferencia que van a notar es que estas cuentas no podrán editar sus datos, en la siguiente animación se muestra:

Ingresar a omegaUp por medio de una identidad

Un caso que pudiera ser muy común es que un usuario tenga que agregar varias identidades.

Supongamos el siguiente ejemplo: El alumno Juan Pérez utiliza frecuentemente la plataforma de omegaUp, porque en ella puede practicar con problemas de programación. En la escuela que asiste, su maestra decidió crear un curso en la plataforma y dio de alta las identidades con las que quiere que ingresen sus alumnos. Además, por su buen desempeño, Juan es invitado a un concurso estatal de programación, donde el organizador ya ha creado las identidades con las que ingresarán los participantes de dicho concurso.

En este caso Juan ya cuenta con su usuario de la plataforma, y aparte le han compartido dos cuentas con identidades adicionales. Si quiere que todos los problemas que resuelva tanto en su escuela, como en el concurso sean contabilizados para su posición en la tabla de mejores coders, lo que debe hacer es lo que se muestra en la siguiente animación:

Vincular identidad con usuario

El usuario debe ingresar a omegaUp con su cuenta que comúnmente utiliza.

Después debe dirigirse a Mi perfil en el menú superior derecho, y después da clic en Editar Perfil tal como se muestra en la siguiente imagen:

Una vez que dentro de la pantalla de Editar Perfil, si se desplaza un poco, debajo de Editar tu perfil se puede encontrar la sección de Administrar Identidades. Sólo es cuestión de que agregue el username y la contraseña de la identidad para que esta se asocie a la cuenta.

Atentamente,
El equipo de omegaUp

Concursos Virtuales

¿Te gustaría revivir un concurso de programación que ya pasó? ¿Te gustaría ver cómo se mueve la tabla de posiciones en tiempo real mientras vas subiendo tus soluciones? ¿Te gustaría saber cómo te “hubiera ido” en “aquél concurso” al que no pudiste ir?

¡El futuro es hoy! Todo esto ya es posible en omegaUp gracias a la nueva funcionalidad de “concursos virtuales”.

Para activar esta nueva funcionalidad simplemente elige un concurso en la arena y selecciona “Concurso virtual”, el concurso empezará y la lista de posiciones se irá actualizando conforme los participantes del concurso fueron subiendo sus soluciones, así podrás saber cómo te va con respecto a los competidores que participaron en el concurso.

Kudos a Vincent, estudiante de Japón, por implementar esta nueva funcionalidad el verano pasado como parte de su internship en Google Summer of Code.

¡Gracias a Google por el apoyo para llevar este proyecto a cabo a través de Google Summer of Code! Esperamos poder ser parte de este programa en el futuro.

Aquí les dejamos unos concursos interesantes:

– OPI 2017 https://omegaup.com/arena/CPIO2017-virtual-uJq/virtual

– OMI 2017 (día 1) https://omegaup.com/arena/OMI2017DIA1PUBLICO/virtual

– OMI para Secundarias 2018 https://omegaup.com/arena/OMIS2018PUBLICO/virtual

– OMI para Primarias 2018 https://omegaup.com/arena/OMIP2018PUBLICO/virtual

Participa en esta y más conversaciones en nuestro blog: https://blog.omegaup.com/concursos-en-modo-virtual/

Concursos en Modo Virtual

Estimados usuarios de omegaUp

Estamos muy felices de anunciar que hemos implementado una nueva funcionalidad de concursos en modo virtual en omegaUp 🙂

¿Qué es un concurso en modo virtual?

Concursos en modo virtual te permite reproducir un concurso pasado en un modo especial que imita el concurso real como sucedió. Con el scoreboard reproduciéndose en sincronía con el concurso original.

Estos son los pasos a seguir para crear y participar en un concurso en modo virtual:

  1. Crear concurso virtual.
    Crear el concurso virtual es muy simple! Solo tienes que ir a la sección de concursos en arena, buscar el concurso que te interesa y hacer click en el botón de modo virtual.
  2. Pon un tiempo y hora de inicio para tu concurso virtual.
  3. Entra a tu concurso virtual.
    Simplemente haz click en comenzar concurso. También puedes invitar a tus amigos o rivales a tu concurso en modo virtual!
  4. Disfruta el entrenamiento!


Verás a otros usuarios en tu concurso virtual en el scoreboard y mini rank. Tú aparecerás como usuario-[virtual]. El scoreboard estará sincronizado con el del concurso original en todo momento.

El crédito de esta funcionalidad va para nuestro becario Vincent Fango que desarrolló este proyecto (https://github.com/SpaceWhite). Si te interesa conocer detalles técnicos sobre la implementación de esta funcionalidad puedes escucharlos de Vincent mismo: https://www.youtube.com/channel/UChhWcITUEZy7f0wLPlQgE8A?view_as=subscriber

 

Nota: En concursos en modo virtual no podrás añadir, editar ni borrar problemas. Tampoco podrás cambiar la duración del concurso entre otras configuraciones.

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.

Ya pueden filtrar los problemas por Tags

Si van a la lista de problemas, podrán notar que algunos tienen tags! Si hacen click en alguno, filtrarán la lista de problemas para que únicamente se muestren los problemas con ese tag. Si están buscando problemas de Karel, este cambio los va a hacer muy felices.

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: