Soluciones de problemas en omegaUp

En este post queremos describirles cómo ver soluciones a los problemas en omegaUp. Para los autores de problemas también daremos algunos detalles sobre como agregar las soluciones a sus problemas.

En la vista de problema, en la parte superior podemos ver dos pestañas, Problemas y Soluciones.

Si ya resolviste el problema y quieres comparar tu solución con la solución oficial, al dar click en la pestaña de Soluciones, te mostrará un mensaje como este,

Y así verás la solución,

Por otro lado, si no has resuelto el problema el proceso para ver la soluciones será distinto.

  • Primero intenta resolverlo,
  • También puedes usar tokens para ver las soluciones. Por cada 10 problemas que resuelvas obtendrás un token. Ver una solución solo usa 1 token.
  • Si ves la solución sin antes resolver el problema, éste no te dará puntos en el ranking.

Puedes ver los tokens que tienes disponibles en las vistas de soluciones dando click en “Ver mis tokens actuales”,  y te mostrara un mensaje como en la imagen,

Para los autores de problemas

Si quieres incluir las soluciones a tus problemas debes añadir una nueva carpeta /solutions al archivo zip del problema. Dentro de la carpeta se debe agregar el archivo markdown con la solución. Las soluciones se pueden editar desde la plataforma, tal como las descripciones del problema.

Mas información aquí.

 

Reglas del Coder del Mes

El reconocimiento del Coder del Mes en omegaUp se hizo con el objetivo de reconocer a nuestros usuarios más activos. A continuación listamos las reglas del programa.

  1. Existen dos programas de Coder del Mes: Coder del Mes para Ellas y Coder del Mes General. Cada inicio de mes se publicarán los ganadores de los dos programas de Coder del Mes.
  2. La ganadora del Coder del Mes para Ellas será elegida entre las usuarias que se han identificado con el género femenino en su perfil.
  3. El Coder del Mes general no hará distinción de género.
  4. Los ganadores serán publicados en la página principal de omegaUp.com durante el mes correspondiente.
  5. El usuario con el mayor puntaje acumulado durante el mes será el ganador del Coder del Mes General.
  6. La usuaria con el mayor puntaje acumulado durante el mes será la ganadora del Coder del Mes para Ellas.
  7. Debes seguir el Código de Conducta de omegaUp.
  8. Es posible que se haga una publicación en redes sociales felicitando a los ganadores. Esto dependerá de los recursos disponibles de omegaUp. Dicha publicación incluye compartir información como el alias del usuario y el nombre del usuario.
  9. Los administradores de los programas tienen el derecho de determinar la honestidad de los usuarios en sus soluciones utilizando diferentes métodos y descalificar al usuario si se encuentran violaciones.
  10. Cualquier violación a estas reglas dará lugar a disposiciones de penalización, incluyendo descalificación al Rank General o a los programas de Coder del Mes.

omegaUp se reserva el derecho de declarar vacío al ganador de ambos programas de Coder del Mes en cualquier momento. Así como de modificar en cualquier momento cualquiera de los puntos anteriores con o sin previo aviso.

Código de Conducta en omegaUp

omegaUp es una plataforma educativa y creemos que debemos fomentar un ambiente con respeto y la mismas oportunidades para todos. Por ello creamos el siguiente Código de Conducta, que debes cumplir para utilizar omegaUp.com.

  1. En general y en especial en los concursos, cursos, el blog y redes sociales de omegaUp se crea una comunidad, donde se espera que los usuarios actúen con respeto y empatía hacia los demás.
  2. Todos los códigos enviados por los usuarios deben estar dirigidos a resolver el problema y no a violar las reglas o desestabilizar el sistema (el juez).
  3. Los usuarios no deben participar en ninguna actividad injusta que influya en los resultados propios o de cualquier otro usuario.
  4. Se debe asegurar con el profesor del curso, u organizador del concurso, si está permitido el uso de libros, notas, herramientas y código que hayas escrito previamente.
  5. Todos deben respetar los derechos de autor. Esto significa que, si  se utiliza código de otra persona, el usuario debe contar con permiso explícito del autor original para hacerlo. Igualmente, los usuarios que desean añadir un problema de un tercero a la plataforma, deben seguir las reglas de reproducción o contar con permiso explícito del autor para hacerlo.
  6. El contenido que aporten los usuarios a la plataforma no debe ser inapropiado, ni ofensivo. Esto quiere decir que no se permite contenido que promueva insultos, acoso de ningún tipo, comentarios despectivos o publicar información personal de otros.
  7. Intentar extraer el código de otro usuario sin su permiso se considera trampa.
  8. Cualquier violación a estas reglas dará lugar a disposiciones de penalización, incluyendo descalificación al Rank General o a los programas de Coder del Mes o desactivación de la cuenta.

 

Soluciones de la Fase 2 de la Liga de Programación omegaUp

  1. Problema A

Las siguientes observaciones son claves para resolver el problema.

  1. Si p \leq n, entonces (w % p) < n. Así que el máximo residuo posible es n - 1.
  2. Si w satisface la condición del enunciado, entonces hay n - 1 diferentes residuos, luego los residuos son un subconjunto de n - 1 elementos, de la colección \lbrace 0, 1, \ldots , n - 1\rbrace.
  3. El mínimo común múltiplo de 1, 2, \ldots , n es mayor o igual al producto de los primos menores o iguales a n.
  4. El producto de los primos menores o iguales a 50 es mayor a 10^{18}

Veamos el caso donde 0 no forma parte de los residuos. De 1, vemos que

w % n = n - 1

w % n - 1 = n - 2

\ldots

w % 2= 1 .

Entonces w + 1 es un común múltiplo de 2, 3, 4,  \ldots,  n.

(*) Luego, de la observación 3 vemos que

mcm(2, 3, 4,  \ldots,  n) \geq P_n

 Donde P_n es el producto de los primos menores o iguales a n.

(*) Pero P_{50} > 10^{18}. Así que si w + 1 es un común múltiplo de 2, 3, 4,  \ldots,  n entonces n \leq 50.

Ahora el caso donde 0 sí forma parte de los residuos. Se sigue que existe 1 < k \leq n tal que w % k = 0. Con la misma lógica, de 1, vemos qué

w % k - 1 = k - 2

\ldots

w % 2= 1 .

Con ayuda de  (*), vemos que k \leq 50.  ¿Cuál es el orden de los residuos mayores a k?. Para esto, consideremos el mismo orden que usamos en el caso donde 0 no forma parte de los residuos.

El residuo k - 1 que originalmente pertenecía a k tiene dos direcciones: ser el residuo de un numero mayor que k, o k - 1 es el residuo que queda  descartado.

Sea M - 1 el residuo que queda descartado, entonces w + 1 debe ser común múltiplo de n, n - 1, n - 2, \ldots , M + 1, y para esto,

(w + 1) \geq n * (n - 1) * (n - 2)  * \ldots * (M + 1)

Lo cual sería imposible si n - M  \geq 50.

Ahora, si no descartamos los residuos de k + 1, \ldots , k + 50, entonces w + 1 \geq  (k + 1) * \ldots  * (k + 50) lo cual sería de nuevo imposible.

Por lo tanto, M + 50 > n y M - 50 < 1.

De modo que, si n > 100, la respuesta es “No”.  El problema ahora se limíta a n \leq 100 y w \leq 10^{18}.

Para éste problema, podemos guardar todos los residuos de w con los números menores o iguales a n en una estructura que nos maneje operaciones básicas de conjuntos, como un set. Usando el set, la respuesta es “Si”, si el tamaño del set después de añadir los residuos es n - 1, y “No” en caso contrario.

Tratemos cada query de manera independientemente, y nos tomamos a_1, a_2, \ldots, a_k como los puntos dados en la query.

El problema es equivalente a encontrar un círculo con el menor radio r posible, tal que todos los puntos de la query están dentro de él.  La respuesta sería el radio r.

Él cuál es un problema equivalente a encontrar el menor radio r tal que existe al menos un punto contenido en cada círculo con centro a_1, a_2, \ldots a_n y radio r.

Si dicho punto p existe, entonces existe al menos un par de círculos que se intersecten en algun punto T. Por supuesto, la distancia de p a T es menor o igual a r.

Por lo tanto, la respuesta puede ser encontrada con una búsqueda binaria.

  1. Fíjamos el radio r, el cual mandamos a la búsqueda binaria.
  2. Enumeramos los k círculos.
  3. Encontramos y enumeramos las intersecciones para cada par de círculos.
  4. Para cada intersección, recorremos cada centro. Si hay un centro a_ique tiene una distancia menor o igual a r entonces el menor radio que buscamos sí es menor o igual a r.

El costo de cada chequeo en la búsqueda binaria es O(k^3). Y la búsqueda binaria tiene un costo de aproximádamente 50 operaciones. Pero precalculando las soluciones, de 4, para todos los l puntos antes de contestar las preguntas, reducimos el costo del chequeo a O(k^2), lo cual ya es suficiente para resolver el problema.

Lo que buscamos, es la cantidad de subconjuntos tales que su \&  es igual a 0. Esta cantidad puede verse como la cantidad de subconjuntos totales, menos la cantidad de subconjuntos tales que su \& es diferente de 0. Ahora, esta cantidad puede verse como la cantidad de subconjuntos cuyo  \& tienen exactamente un bit prendido, más la cantidad de subconjuntos cuyo \& tienen exactamente dos bits prendidos, \ldots, más la cantidad de subconjuntos cuyo \& tienen exactamente 20 bits prendidos (esto ya que 10^6 \leq 2^{20}).

Para esto usaremos el principio de inclusión – exclusión. De modo que la cantidad que buscamos esta dada por

S_ 0 - S_1 + S_2 - S_3 + \ldots + S_{20}

Donde S_i nos dice cuantos subconjuntos tienen  un ~and~ con al menos i bits prendidos.

Ahora, S_i puede ser calculado con la ayuda de una SOS (Sum Over Subsets) DP.

Para esto,  sea mask alguna máscara de bits en [1, 2^{20}], y definamos m como el ~and~ de algún subconjunto del arreglo, tal que mask \& m = mask. Es decir, mask es una submáscara de m. Entonces, DP[mask] nos dice cuántas diferentes m existen. (dos m se consideran diferentes, si las posiciones de los elementos en el arreglo que la componen no son todas iguales). Está DP puede calcularse de la siguiente manera.

  1. Los casos base los formamos añadiendo la cantidad de ocurrencias de x en el arreglo, a DP[x].
  2. Fíjamos bit \in [1, 20], de izquierda a derecha.
  3. Para cada mask en [0, 2^{20}], tal que mask tiene el bit-ésimo bit apagado  (mas formalmente, mask \& (1 << bit)  = 0 ) se hace la transición DP[mask | (1 << bit)] += DP[mask].

De modo que S_i = 2^{DP[m]}, para cada m una máscara con al menos i bits prendidos.

Sean p_1, p_2, \ldots, p_m las posiciones de la cadena en donde hay un 1.

Definimos r cómo la posición donde yace la rana, y b como la cantidad de brincos que ha dado hasta el momento. Inicialmente, r = p_1 y b = 0. La respuesta puede encontrarse mediante siguiente algoritmo.

  1. Encontrar j tal que p_j - r \leq k y p_{j + 1} > k
  2. Hacemos

    b = b + 1 y r = p_j

  3. Repetimos mientras r \neq p_m.

La respuesta final es b. El algoritmo se puede implementar con complejidad lineal usando la técnica de two pointers (usando r y j como los pointers).

Rescatando la cantidad de ocurrencias para cada vocal (no hay que olvidarse de contar las mayúsculas) mientras recorremos la cadena, estamos listos para imprimir las tres respuestas. Las cuales son

(a)  Tamaño de la cadena.

(b)  Suma de las ocurrencias de cada vocal.

(c)  Imprimir la cadena de derecha a izquierda.

Salvemos los dos vectores dados a_1, a_2, \ldots , a_n y b_1, b_2, \ldots , b_n, y generemos un nuevo vector c_1 = (a_1 + b_1), \ldots, c_n = (a_n + b_n). La solucion es imprimir c_1, c_2, \ldots, c_n.

 

Todos los videos del curso de Introducción la Programación con C++

Actualización 10/04/20: El curso ha terminado y este post incluye los 11 videos.

Como parte de la iniciativa #QuédateEnCasaConOmegaUp estuvimos impartiendo un curso de Introducción a C++ en vivo a través de Facebook Live.

El material del curso está disponible de forma abierta y gratuita en la plataforma de omegaUp y puedes acceder en este enlace  (https://omegaup.com/course/introduccion_a_cpp) para ver el material y resolver los ejercicios en línea.

Aquí te dejamos un enlace a todos los videos y estaremos actualizando este post con cada video nuevo en la serie:

Continue reading “Todos los videos del curso de Introducción la Programación con C++”

Soluciones de la Fase 1 de la Liga de Programación omegaUp

Para este problema, consideramos un arreglo de ocurrencias O sobre los elementos del arreglo. De modo que la respuesta está dada por

\sum\limits_{i=A}^B O_{i}

Si consideramos el mismo arreglo de ocurrencias O sobre los elementos del arreglo, la respuesta está dada por O_k.

Podemos generar todos los elementos de la secuencia de Fibonacci hasta 30000, y guardarlos en un mapa M, de modo que M_k = 1 si k es un elemento de Fibonnaci, y M_k = 0 en caso contrario. Generamos la respuesta simplemente iterando desde i = 4 hasta i = N - 1, e imprimimos i si M_i = 0.

La clave para este problema, es usar variables que no provoquen un desbordamiento, por ejemplo, unsigned long long. Luego, es conocido que la serie de Fibonacci crece rápidamente, lo suficiente, como para generar la secuencia con todos sus elementos menores o iguales a N, guardando por cada uno su respectiva posición en ella. Por lo tanto, basta con checar si N es un elemento, e imprimir su posición. En caso de no serlo, imprimimos -1.

Este tipo de problema es conocido como straight-forward. Podemos guardar las estaciones de radio, y checar cuál estación es la mas cercana a la frecuencia dada, con una simple resta. En caso de haber dos estaciones con la misma distancia, la respuesta es la mayor. Solo debemos cuidar que la frecuencia esté dentro del rango permitido.

En este problema lo que tenemos es un grafo dirigido acíclico con aristas pesadas (intuitivamente, es un árbol, sin la propiedad de que cualquier par de nodos estan conectados por un único camino).
Los vértices son los eventos temporales, las aristas son dirigidas de p_i a i, y su peso es d_i. Además, cada vértice contiene un valor extra r_i. Un grafo que podemos asociar al primer caso de ejemplo es el siguiente.

Sean v_1 y v_k dos vértices distintos, tales que v_1 es ancestro de v_k. Es decir, existe un camino v_1 \rightarrow v_2 \rightarrow \ldots \rightarrow v_k en el grafo. Definimos S(v_1, v_k) como

\sum\limits_{i=1}^{k - 1} d_{v_i}

 

Es decir, la suma de los pesos en las aristas del camino.
De modo que el problema se convierte en: Para cada vertice v, contar cuántos vértices u en su “subárbol” \; existen tales que

r_u - S(v, u) \geq 0

Porque esto siginifica que tenemos suficientes segundos para viajar por el tiempo desde u hasta v.

Consideremos un arreglo E, donde la entrada E_v guarda cuántos descendientes u de v satisfacen

r_u - S(v, u) \geq 0

Pero

r_u - S(p_v, u) < 0

Donde p_v es el padre de v. Si v = 0, entonces no hace falta considerar a su padre, puesto que no podemos viajar por el tiempo a algún ancestro de 0 (ya que ni siquiera existe alguno).

En otras palabras, E_v guarda cuántos descendientes de v llegan a lo mas al vértice v.

También consideremos un arreglo D, donde la entrada D_v guarda cuántos descendientes u de v satisfacen

r_u - S(v, u) < 0

Es decir, D_v guarda cuántos descendientes de v no pueden llegar al vertice v.

Y además mantengamos un arreglo T, donde la entrada T_v guarda el tamaño del “subárbol” de v (incluyendo a v). En otras palabras, cuántos descendientes tiene v en total mas el mismo.

Por lo tanto, la respuesta final para el vértice v está dada por

(T_v - 1) - \sum\limits_{v \rightarrow u} (E_u + D_u)

donde u es un hijo directo de v.
Ya que esto calcula cuántos descendientes de v si pueden llegar a v.

Para el cálculo de nuestros arreglos, hacemos una dfs sobre el “árbol”  (partiendo del vertice 0). Para cada vértice u, hacemos una búsqueda binaria sobre un arreglo que mantenga la suma acumulada de los costos sobre las aristas que forman parte del camino de 0 a u, que nos devuelva el máximo ancestro v al que podemos llegar desde u.  Lo que nos dice que  E_v actualiza su valor a E_v + 1 (inicialmente, E_1 = E_2  = \ldots = E_n = 0). Esto se puede hacer usando un arreglo global. La idea es añadir la suma acumulada, luego explorar recursivamente el subárbol de u, y luego quitar la suma acumulada que añadimos. Esto es particularmente sencillo si usamos un vector de la STL para el arreglo global.

El arreglo T se calcula facilmente en la misma dfs, ya que

T_v = 1 + \sum\limits_{v \rightarrow u} (T_u)

Ahora podemos generar D, al estilo de programacion dinámica usando E. Notemos que

D_v = \sum\limits_{v \rightarrow u} (E_ u + D_u)

Lo que se puede hacer en la misma DFS.

Por lo tanto, nuestro algoritmo tiene complejidad O(Nlog(N)).

Primero reescribamos la expresión dada como

k = \dfrac{xy}{x + y}

De donde podemos despejar y como

y = \dfrac{xk}{x - k}

Sin perdida de generalidad, supongamos x \leq y, entonces se tiene

x \leq \dfrac{xk}{x - k}

x^2 \leq 2xk

x \leq 2k

Por lo tanto, podemos iterar x desde 1 hasta 2k, obtenemos y, y verificamos que k = \dfrac{xy}{x + y}, y > 0.

Guardamos las parejas que satisfazcan dichas condiciones y las imprimimos en el orden requerido, cuidando no repetir alguna respuesta.

Lo que nos deja con un algoritmo de complejidad O(k).

Una solución alternativa es la siguiente:

Te puedes dar cuenta que x, y > k, entonces el problema se convierte a  buscar a y b que cumplan

\dfrac{1}{k} = \dfrac{1}{k + a} + \dfrac{1}{k + b}

con a,b > 0. Si simplificas la igualdad llegas a que k^2 = ab, así que todo se reduce a encontrar las parejas de divisores a, b de k^2.  Lo que deja también un algoritmo de complejidad O(k).

Nota: Agradezco a José Tapia y a Carlos Galeana por su colaboración en el problema G.

Quédate en casa con omegaUp – nuestra respuesta al COVID-19

Querida comunidad omegaUp:

La epidemia del COVID-19 ha causado cambios importantes en nuestra vida diaria, trabajo, escuela y familia. Para ayudar a manejar el Distanciamiento Social a toda nuestra comunidad, hemos creado la campaña Quédate en casa con omegaUp: una serie de iniciativas educacionales en línea para apoyar la continuidad de la educación tecnológica en Latinoamérica.

1. Tutoriales para Profesores: ¿Cómo usar omegaUp para dar clases de programación en línea?

omegaUp.com es una plataforma gratuita en Español que ayuda a estudiantes a mejorar sus habilidades en Ingeniería de Software resolviendo retos de programación de una forma divertida y competitiva. Profesores de más de 100 escuelas de nivel Medio Superior y Superior en México y Latinoamérica usan la plataforma para dejar tareas y exámenes con retos de programación que los alumnos pueden resolver en línea.

Te invitamos a ver nuestros video-tutoriales para saber cómo funciona la plataforma de omegaUp y cómo puedes usarla para administrar tus cursos de programación en línea. Aquí dejamos el primer tutorial, en los próximos días produciremos más tutoriales que publicaremos en nuestra página de Facebook:

2. Para estudiantes: Ciclo de Conferencias en línea vía Facebook Live

Experiencias de Carrera es uno de los programas sociales de omegaUp que busca conectar el talento latinoamericano con experiencia en la industria de la Ingeniería de Software con estudiantes para motivarlos a continuar en el ramo de las Ciencias Computacionales y compartir la experiencia de trabajar en compañías como Google, Microsoft, Facebook entre otras.

Usualmente omegaUp organiza estas pláticas para las instituciones reconocidas como La Escuela del Mes y Clubes de Programación omegaUp. Sin embargo durante Marzo y Abril abriremos el ciclo de conferencias a todos los estudiantes que deseen entrar a través de Facebook Live. Síguenos en nuestra página de Facebook para que te enteres de las fechas y no te pierdas a ninguno de nuestros excelentes ponentes.

3. Para estudiantes: Aprende a programar en C++ con omegaUp – curso en línea

 

En omegaUp estamos preparando un curso en línea gratuito y abierto al público en general para aprender a programar en C++ en línea, con omegaUp. El curso estará basado en el material de Introducción a C++ que tenemos disponible en la plataforma de omegaUp.

Este curso será una excelente oportunidad para alumnos de nivel Medio Superior y Superior que deseen ampliar sus conocimientos de Ingeniería de Software, o todos aquellos simplemente empezar a incursionar en el amplio mundo de las Ciencias Computacionales.

Síguenos en nuestra página de Facebook para conocer los horarios y más detalles sobre el curso.

4. Liga de Programación omegaUp

¿Estás interesado en el mundo de la programación competitiva? omegaUp organizará la 1er Liga de Programación omegaUp, una serie de concursos semanales abiertos al público en general con temas y niveles de dificultad variados, empezando el próximo Jueves 26 de Marzo.

Demuestra tus habilidades de resolución de problemas computacionales y mejora tu nivel compitiendo contra los mejores. Para más detalles sobre las bases, registro, premios y fechas consulta nuestra página de Facebook.

5. Para nuestros amigos en Centroamérica: 1er Copa Centroamericana de Programación

En omegaUp también estamos organizando la 1er Copa Centroamericana de Programación, una competición dirigida a nuestra comunidad de El Salvador, Honduras y Guatemala. El concurso se llevará a cabo el Sábado 25 de Abril. Para mayor información sobre los requisitos y registro te invitamos a leer nuestras bases aquí.


En estos momentos difíciles es cuando más creemos que podemos contribuir a la causa educacional. Por favor ayúdanos a compartir este mensaje con el hashtag #QuédateEnCasaConOmegaUp. Estamos en contacto y por favor cuiden de su salud y la de sus familiares manteniéndose en casa.

Joe Ponce
Director Ejecutivo, omegaUp

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

El nuevo ranking de escuelas de omegaUp

Rankings de escuelas

Queremos presentarles el nuevo ranking de escuelas de omegaUp, tanto mensual como histórico. Cada uno de ellos funciona de manera similar, salvo por algunas variaciones que detallaremos a continuación:

  • El score de una escuela para el ranking mensual, se obtiene a partir de la suma de los puntos que provee cada problema que los usuarios de la escuela han resuelto dentro del mes actual. 

Contamos los puntos de cada problema una única vez, por lo que si 10 usuarios de una misma escuela, resolvieron el mismo problema que otorgaba 0.5 puntos, la contribución de éstos es 0.5 y no 5 (0.5*10).

  • El score de una escuela para el ranking histórico es calculado de la misma manera que el rank mensual, con el diferencial de que el score se calcula a partir de todos los problemas que se resolvieron desde que la escuela fue creada.

Recuerda que un problema se cuenta como resuelto por una escuela, siempre que un usuario asociado a la misma, lo haya resuelto. Si dicho usuario, luego modifica su escuela actual en su perfil, dicho problema y el puntaje que éste aportaba al score de su escuela anterior, no se mueven a la nueva, puesto que a la fecha en que resolvió dicho problema, el usuario aún no pertenecía su nueva escuela.

Así que si lo que un coder desea es que su escuela mejore su score en el ranking de omegaUp, debe priorizar que los alumnos de la misma resuelvan la mayor cantidad de problemas distintos en la plataforma, pues el hecho de que varios resuelvan el mismo problema, aportaría lo mismo a que uno solo lo haga.

Atentamente,

El equipo de omegaUp

Insignias de Usuario en omegaUp

Estimados coders,

Tenemos el agrado de presentarles una nueva característica de la plataforma: “Insignias de Usuario”. Estas insignias son pequeños reconocimientos para los diversos logros alcanzados por ustedes y se encuentran ya disponibles en la plataforma.

Para ver las insignias que has obtenido, simplemente debes acceder a tu perfil en omegaUp, ahora existe una nueva sección donde se listarán todas tus insignias conseguidas:

Además, si quieres ver todas las insignias existentes, solo debes hacer click en el enlace Ver todas, que se encuentra al costado del número de insignias obtenidas. Recuerda que al poner el mouse sobre el ícono de la insignia, podrás ver la descripción de lo que tienes que hacer para poder obtener dicha insignia. Hay insignias que tienen un ícono sombreado por completo de negro, eso significa que aún no la has obtenido, ¡podrás ver el ícono de la insignia una vez la obtengas!

Si quieres ver un poco más de información de una insignia, basta con que hagas click sobre ella, de esta manera, podrás acceder a una vista más detallada:

Y eso no es todo… Ahora, cada vez que recibas una insignia nueva, recibirás también una notificación, así siempre estarás al tanto de los nuevos reconocimientos adquiridos.

Y si te estás llenando de notificaciones, puedes marcarlas como leídas a todas, o de manera individual.

¡Tú también puedes proponer nuevas insignias, solo debes seguir la Guía para la propuesta de Insignias de omegaUp!

Esperamos que te guste esta nueva característica y que puedas desbloquear todas las insignias de usuario en omegaUp.