Cuando ganar es tu perfil

Hola a todos! Mi nombre es Lida y llevo 12 años organizando concursos de programación. (¡Hola, Lida!) Este año me uní al equipo VKontakte y ahora superviso la Copa VK. Durante 5 temporadas fue un campeonato único de programación deportiva. Pero ha llegado el momento de grandes cambios.


Eliminamos la mayoría de las restricciones, cancelamos el formato de par y agregamos tres nuevas direcciones. VK Cup 2019 es una competencia en línea para programadores de la Olimpiada, desarrolladores móviles, diseñadores y especialistas en aprendizaje automático con una gran final fuera de línea en San Petersburgo.


En este artículo, le diré que se nos ocurrió uno nuevo, y mis colegas darán recomendaciones para los participantes. La inscripción para VK Cup está abierta en vk.cc/cup hasta el 4 de diciembre, ¡solo queda una semana! Todos los detalles sobre las pistas y los escenarios están debajo del corte.



VKontakte para los Juegos Olímpicos


Muchas empresas de TI celebran sus concursos, esta es una forma de hablar sobre las tareas interesantes que enfrentan. El equipo VKontakte fue uno de los primeros en 2012 en organizar sus propios torneos. Los propios desarrolladores los iniciaron: los ganadores de los concursos de programación internacional siempre han trabajado en VK. Cuatro campeones mundiales en el equipo ahora.


Los motores que crean los desarrolladores son la base de VKontakte. Es en ellos que la eficiencia es especialmente importante, en la cuenta, cada milisegundo. ¿Cómo lograr el máximo rendimiento? Conozca profundamente los algoritmos y las estructuras de datos, y también se ajuste a los límites de memoria dados. Son requisitos tan altos los que se imponen en el código de los participantes de la Copa VK.


Desde 2012, el formato ha cambiado un poco, pero la esencia sigue siendo la misma: los participantes de 14 a 23 años compitieron en la programación de la Olimpiada, solos o en equipos de dos personas. Si llegó dos veces a la final, no podrá volver a participar. Es hora de cambiar.


Abajo las restricciones


VK Cup 2019 se llevará a cabo en formato individual. Eliminamos la barra superior por edad y el límite en el número de finales, por lo que este año los mejores participantes de los últimos años y especialistas experimentados podrán volver al campeonato. Pero lo más importante: además de la programación deportiva, será posible competir en aprendizaje automático, desarrollo móvil y diseño. Puedes participar en varias pistas al mismo tiempo, si, por supuesto, hay suficiente tiempo.


Cada pista constará de tres rondas:


  1. La calificación se realizará en línea del 6 al 16 de diciembre y estará abierta a todos. La próxima ronda serán los 256 mejores participantes en cada pista.
  2. También llevaremos a cabo la etapa de calificación en línea, en febrero de 2020. Aquí, los participantes encontrarán tareas más complejas y un tiempo más corto. 40 autores de las decisiones más exitosas en cada pista irán a la final.
  3. La final se celebrará en San Petersburgo en abril de 2020. En la confrontación a tiempo completo, los participantes competirán por el premio principal de cada pista: 524,288 rublos (2 ^ 19).

Motor de la pista


Calificación. Los participantes resolverán problemas en la plataforma Codeforces en cualquier lenguaje de programación conveniente. Incluso puede resolver problemas con sus manos, desarmando cada prueba individual.
Etapa clasificatoria. Será importante resolver cada problema lo antes posible para sumar más puntos y obtener una invitación para la final.
El final Los participantes competirán de acuerdo con las reglas estándar de Codeforces: podrán obtener puntos adicionales si encuentran errores en las decisiones de otros participantes.


Consejos de Boris Minaev


Borya es el campeón mundial de programación ICPC 2015, segundo lugar en la Copa VK 2015, jefe del equipo de base de datos VKontakte.


  • Resolver problemas en orden de complejidad creciente. Elija el que pasó la mayoría de los participantes.
  • No vaya en ciclos en una tarea si no se rinde ante usted. Establezca inmediatamente un límite: "Si no avanzo en una solución en 15 minutos, pasaré a la siguiente".
  • Pruebe la solución antes de enviar. Asegúrese de ejecutarlo en casos límite. Antes de eso, vuelva a leer la sección con restricciones en los datos de entrada.
  • A veces, la idea de una solución se puede inventar en función de las restricciones de la condición. Por ejemplo, tiene una tarea en la que se dan n objetos. Si n <10, entonces tal vez en la solución sea necesario iterar sobre todas las permutaciones de objetos. Si n <20, entonces escribe búsqueda recursiva en 2 ^ n. Si n <1000, proponga una programación dinámica para n ^ 2. Y si n es aproximadamente un millón, lo más probable es que deba pensar en la dirección de una solución lineal.
  • Si recibió WA, vuelva a leer el código varias veces y todavía no ve el error, luego intente escribir una solución más simple. Luego compare en pruebas pequeñas si las soluciones originales y nuevas siempre dan la misma respuesta. Si está resolviendo un problema en un árbol no ponderado, simplemente ejecute la solución nuevamente, pero seleccione una raíz diferente.
  • Utilice entornos de desarrollo como CLion o IDEA. Pueden encontrar errores estándar como variables no inicializadas o partes de código inalcanzables.
  • Agregue más afirmaciones a su código. Encontrar la razón RE es mucho más fácil que WA.

Track Mobile


Calificación. Pondremos a prueba el conocimiento de algoritmos simples que a menudo se necesitan para implementar pantallas estándar de aplicaciones móviles, así como el conocimiento teórico de nuestra plataforma móvil. La próxima ronda será de 128 participantes de cada plataforma.
Etapa clasificatoria. Será necesario priorizar correctamente. ¿Qué es mejor: llegar lo más a tiempo posible o trabajar en cada tarea con el mayor cuidado posible? Las finales incluirán a los 20 mejores desarrolladores.
El final Cada participante tendrá que demostrar sus habilidades de producto: presentar, implementar y presentar un nuevo proyecto utilizando solo las pantallas desarrolladas en la ronda anterior.


Consejos de Oleg Smirnov


Oleg lidera el equipo Android VKontakte y compuso tareas para la pista de desarrollo móvil VK Cup.


  • Antes del comienzo de la competencia, asegúrese de tener configurado un IDE (Android Studio), que los complementos necesarios estén conectados, que el emulador esté funcionando y que haya un dispositivo real para el desarrollo.
  • Comprenda el sistema de compilación Gradle y su configuración.
  • Lea los términos y condiciones y descubra el SDK mínimo que deberá admitir. No escriba código universal para todas las plataformas, resuelva el problema en función de las condiciones establecidas.
  • Si no hay una necesidad urgente, no use NDK en el proyecto. Casi cualquier tarea se puede resolver con el SDK.
  • Presta atención a los derechos de solicitud. Verifique que se hayan realizado todas las solicitudes de permisos.
  • Realice un seguimiento del rendimiento de la aplicación: sistema de archivos, redes, animaciones fluidas de la IU
  • Defina el conjunto mínimo de bibliotecas para trabajar. Use el tiempo para resolver la tarea, no para estudiar las bibliotecas.
  • Será útil observar el trabajo de VK SDK.

Diseño de pista


Calificación. Nos aseguraremos de que los participantes no solo puedan desarrollar elementos de diseño individuales, sino que también noten errores.
Etapa clasificatoria. Ofrecemos desarrollar interfaces de elementos individuales de VKontakte o servicios independientes. Será importante encontrar un compromiso entre la escala de la idea y el tiempo de desarrollo.
El final Los participantes deberán hablar sobre su idea y presentar el diseño.


Consejos de Alexei Mazelyuk


Lesha es una diseñadora senior de VK y ganadora del concurso VK Designers en 2015 y 2017.


  • Divide la tarea en otras más pequeñas. Intenta asignar tiempo y prioriza para llegar a tiempo. Si logra hacer algo más rápido de lo planeado, habrá tiempo para características y mejoras.
  • Definir la audiencia y el contexto.
  • Piense de antemano en las herramientas que desea utilizar.
  • Anote ideas. Elija el mejor y continúe trabajando con ellos. No hay suficiente tiempo para todo.
  • El papel y el lápiz a veces funcionan mejor que un editor de gráficos.
  • Resuelve el problema, no dibujes hermosos dibujos. Las tendencias no deben ser ignoradas, pero todo debe ser apropiado.
  • Utilice sabiamente los logros de sus colegas. A veces es mejor tener algo listo, en lugar de reinventar la rueda. Pero recuerde que las nuevas soluciones convenientes tienen una calificación más alta que la siguiente copia.
  • Participe en detalles si tiene tiempo para esto.
  • ¡La presentación es importante! Necesito vender la decisión al jurado. Use una presentación simple y clara.
  • No doble con la cantidad de texto en la presentación, use el video.

Track ML


Calificación. Como respuesta, deberá descargar los datos procesados, y cada decisión se evaluará utilizando una métrica predefinida. Los datos de la tarea se pueden procesar sin conexión o incluso manualmente.
Etapa clasificatoria. El código para el enfoque que desarrollarán los participantes se cargará al sistema de prueba: todas las soluciones se probarán en la misma infraestructura, en condiciones de recursos informáticos limitados.
El final Los participantes resolverán una tarea práctica difícil.


Consejos de Danila Savenkova


Danya ingresó a los mejores concursantes de Mercedes en kaggle. También es un programador senior de VK.


  • Para la validación local, intente reproducir el mismo principio de partición que se usó cuando los organizadores de la prueba seleccionaron el conjunto de prueba (preste atención a la hora, si la hay, y al ID). Si es posible, use validación cruzada. Este método está prácticamente listo para usar y puede evaluar la importancia de los cambios en la métrica . Asegúrese de arreglar la semilla cuando rompa el conjunto de datos.
  • Entrenar y promediar diferentes modelos. Esto puede funcionar mejor que un modelo: recuerde el teorema del límite central. XGBoost con diferentes sids también son modelos diferentes (lo principal es recordar hacer submuestra <1 y / o colsample <1). XGBoost, CatBoost y LightGBM también son modelos diferentes en este contexto.
  • Usa sklearn.Pipeline. Cuando model.fit incluye toda la canalización desde el preprocesamiento de datos hasta la obtención de predicciones, se vuelve mucho más fácil vivir y es mucho menos probable que cometa errores con la validación local.
  • Si desea postekat, preste atención a cross_val_predict, esta función será de gran ayuda.
  • Hacer características. Apilar, mezclar, configurar hiperparámetros: casi todos pueden hacer esto. Los ganadores son aquellos que obtuvieron las características más exitosas. Bueno, o los que encontraron una cara. O los que tienen suerte. Y más a menudo funciona una combinación de estos factores;)



Si aún tiene preguntas sobre VK Cup, escriba a los mensajes privados de VK VK: vk.com/cup . Allí puedes encontrar las reglas y controlar el progreso del campeonato.


Espero que disfruten de la nueva Copa VK y nos reuniremos con algunos lectores en la final en San Petersburgo. ¡Buena suerte a todos!

Source: https://habr.com/ru/post/477792/


All Articles