Bonjour à tous! Je m'appelle Lida et j'organise des compétitions de programmation depuis 12 ans. (Bonjour, Lida!) Cette année, j'ai rejoint l'équipe VKontakte et supervise maintenant la Coupe VK. Pendant 5 saisons, ce fut un championnat de programmation sportive uniquement. Mais le temps est venu de changements majeurs.
Nous avons supprimé la plupart des restrictions, annulé le format de paire et ajouté trois nouvelles directions. VK Cup 2019 est une compétition en ligne pour les programmeurs de l'Olympiade, les développeurs mobiles, les concepteurs et les spécialistes de l'apprentissage automatique avec une grande finale hors ligne à Saint-Pétersbourg.
Dans cet article, je vous dirai que nous en avons inventé un nouveau, et mes collègues feront des recommandations aux participants. L'inscription à la VK Cup est ouverte sur vk.cc/cup jusqu'au 4 décembre - il ne reste qu'une semaine! Tous les détails sur les pistes et les étapes sont sous la coupe.

VKontakte pour les Jeux olympiques
De nombreuses sociétés informatiques organisent leurs concours - c'est une façon de parler des tâches intéressantes auxquelles elles sont confrontées. L'équipe VKontakte a été l'une des premières en 2012 à organiser ses propres tournois. Les développeurs eux-mêmes les ont initiés - les lauréats des concours internationaux de programmation ont toujours travaillé chez VK. Quatre champions du monde dans l'équipe maintenant.
Les moteurs que les développeurs créent sont le fondement de VKontakte. C'est en eux que l'efficacité est particulièrement importante, à chaque milliseconde. Comment atteindre des performances maximales? Connaître en profondeur les algorithmes et les structures de données, et s'adapter également aux limites de mémoire données. Ce sont ces exigences élevées qui sont imposées au code des participants à la Coupe VK.
Depuis 2012, le format a un peu changé, mais l'essence est restée la même: les participants de 14 à 23 ans ont concouru à la programmation de l'Olympiade, seul ou en équipe de deux personnes. Si vous avez atteint la finale deux fois, vous ne pouvez plus participer. Il est temps de changer.
Ă€ bas les restrictions
La VK Cup 2019 se déroulera en format solo. Nous supprimons la barre supérieure en fonction de l'âge et de la limite du nombre de finales. Ainsi, cette année, les meilleurs participants des années précédentes et des spécialistes expérimentés pourront revenir au championnat. Mais le plus important - en plus de la programmation sportive, il sera possible de concourir dans l'apprentissage automatique, le développement mobile et la conception. Vous pouvez participer à plusieurs pistes en même temps - si, bien sûr, il y a assez de temps.
Chaque piste se composera de trois tours:
- La qualification se déroulera en ligne du 6 au 16 décembre et sera ouverte à tous. Le prochain tour sera les 256 meilleurs participants de chaque piste.
- Nous organiserons également l'étape de qualification en ligne - en février 2020. Ici, les participants trouveront des tâches plus complexes et un temps plus court. 40 auteurs des décisions les plus réussies dans chaque piste iront en finale.
- La finale se tiendra à Saint-Pétersbourg en avril 2020. Dans la confrontation à plein temps, les participants concourront pour le prix principal de chaque piste - 524 288 roubles (2 ^ 19).
Moteur de piste
Qualification. Les participants résoudront les problèmes sur la plate-forme Codeforces dans n'importe quel langage de programmation pratique. Vous pouvez même résoudre des problèmes avec vos mains, en séparant chaque test individuel.
Étape de qualification. Il sera important de résoudre chaque problème le plus tôt possible afin de marquer plus de points et d'obtenir une invitation à la finale.
La finale. Les participants concourront selon les règles standard de Codeforces: ils pourront obtenir des points supplémentaires s'ils trouvent des erreurs dans les décisions des autres participants.
Conseils de Boris Minaev
Borya est le champion du monde de programmation ICPC 2015, 2e place de la VK Cup 2015, à la tête de l'équipe de base de données VKontakte.
- Résolvez les problèmes par ordre croissant de complexité. Choisissez celui qui a dépassé le plus de participants.
- N'allez pas en cycles dans une tâche si elle ne vous cède pas. Fixez-vous immédiatement une limite: «Si je n'avance pas dans la solution en 15 minutes, je passe à la suivante.
- Testez la solution avant de l'envoyer. Assurez-vous de l'exécuter sur les cas limites. Avant cela, relisez la section avec des restrictions sur les données d'entrée.
- Parfois, l'idée d'une solution peut être inventée en fonction des restrictions de la condition. Par exemple, vous avez une tâche dans laquelle n objets sont donnés. Si n <10, alors peut-être dans la solution il est nécessaire d'itérer sur toutes les permutations d'objets. Si n <20, alors écrivez la recherche récursive dans 2 ^ n. Si n <1000, proposer une programmation dynamique pour n ^ 2. Et si n est d'environ un million - très probablement, vous devez penser dans le sens d'une solution linéaire.
- Si vous avez reçu WA, relisez le code plusieurs fois et ne voyez toujours pas l'erreur, puis essayez d'écrire une solution plus simple. Comparez ensuite sur de petits tests si les solutions originales et nouvelles donnent toujours la même réponse. Si vous résolvez un problème sur une arborescence non pondérée, exécutez à nouveau la solution, mais sélectionnez une racine différente.
- Utilisez des environnements de développement comme CLion ou IDEA. Ils peuvent trouver des erreurs standard comme des variables non initialisées ou des morceaux de code inaccessibles.
- Ajoutez plus d'assertions Ă votre code. Trouver la raison RE est beaucoup plus facile que WA.
Track Mobile
Qualification. Nous testerons la connaissance d'algorithmes simples qui sont souvent nécessaires pour implémenter des écrans standards d'applications mobiles, ainsi que les connaissances théoriques de notre plateforme mobile. Le prochain tour sera de 128 participants de chaque plate-forme.
Étape de qualification. Il sera nécessaire de prioriser correctement. Quel est le meilleur: être le plus à l'heure possible ou exécuter chaque tâche avec le plus de soin possible? La finale inclura les 20 meilleurs développeurs.
La finale. Chaque participant devra démontrer ses compétences produit: monter, implémenter et soumettre un nouveau projet en utilisant uniquement les écrans développés lors du cycle précédent.
Conseils d'Oleg Smirnov
Oleg dirige l'équipe Android VKontakte et a composé des tâches pour la piste de développement mobile VK Cup.
- Assurez-vous avant le début de la compétition que vous avez configuré un IDE (Android Studio), que les plugins nécessaires sont connectés, que l'émulateur fonctionne et qu'il existe un véritable appareil à développer.
- Comprendre le système de construction Gradle et ses paramètres.
- Lisez les termes et conditions et découvrez le SDK minimum que vous devrez prendre en charge. N'écrivez pas de code universel pour toutes les plates-formes, résolvez le problème en fonction des conditions définies.
- S'il n'y a pas de besoin urgent, n'utilisez pas NDK dans le projet. Presque toutes les tâches peuvent être résolues à l'aide du SDK.
- Faites attention aux droits de candidature. Vérifiez que toutes les demandes d'autorisation sont effectuées.
- Gardez une trace des performances de l'application: système de fichiers, mise en réseau, animations d'interface utilisateur fluides.
- Définissez l'ensemble minimal de bibliothèques avec lesquelles travailler. Utilisez le temps pour résoudre la tâche, pas pour étudier les bibliothèques.
- Il sera utile d'examiner le travail du SDK VK.
Conception de la voie
Qualification. Nous veillerons à ce que les participants puissent non seulement développer des éléments de conception individuels, mais également remarquer des erreurs.
Étape de qualification. Nous proposons de développer des interfaces d'éléments individuels de VKontakte ou de services indépendants. Il sera important de trouver un compromis entre l'échelle de l'idée et le temps de développement.
La finale. Les participants devront parler de leur idée et présenter le design.
Conseils d'Alexei Mazelyuk
Lesha est une designer senior VK et lauréate du concours VK Designers en 2015 et 2017.
- Décomposez la tâche en plus petites. Essayez d'allouer du temps et de prioriser afin d'être à l'heure. Si vous parvenez à faire quelque chose plus rapidement que prévu, il y aura du temps pour les fonctionnalités et les améliorations.
- Définissez le public et le contexte.
- Pensez Ă l'avance aux outils que vous souhaitez utiliser.
- Notez des idées. Choisissez le meilleur et continuez à travailler avec eux. Pas assez de temps pour tout.
- Le papier et le crayon fonctionnent parfois mieux qu'un éditeur graphique.
- Résolvez le problème, ne dessinez pas de belles images. Les tendances ne doivent pas être ignorées, mais tout doit être approprié.
- Utilisez judicieusement les réalisations de vos collègues. Parfois, il vaut mieux prendre quelque chose de prêt, plutôt que de réinventer la roue. Mais n'oubliez pas que les nouvelles solutions pratiques sont mieux notées que la prochaine copie.
- Engagez-vous en détail si vous en avez le temps.
- La présentation est importante! Besoin de vendre la décision au jury. Utilisez une présentation simple et claire.
- Ne vous pliez pas avec la quantité de texte dans la présentation, utilisez la vidéo.
Track ML
Qualification. En réponse, vous devrez télécharger les données traitées et chaque décision sera évaluée à l'aide d'une métrique prédéfinie. Les données de la tâche peuvent être traitées hors ligne ou même manuellement.
Étape de qualification. Le code de l'approche que les participants développeront sera téléchargé sur le système de test - toutes les solutions seront testées sur la même infrastructure, dans des conditions de ressources informatiques limitées.
La finale. Les participants résoudront une tâche pratique difficile.
Conseils de Danila Savenkova
Danya a inscrit les meilleurs concurrents Mercedes à kaggle. Il est également programmeur VK senior.
- Pour la validation locale, essayez de reproduire le même principe de partitionnement qui a été utilisé lorsque les organisateurs du test ont sélectionné l'ensemble de test (faites attention à l'heure, le cas échéant, et à l'ID). Si possible, utilisez la validation croisée. Cette méthode est pratiquement hors de la boîte en mesure d' évaluer l'importance des changements dans la métrique . Assurez-vous de corriger la graine lors de la rupture de l'ensemble de données.
- Former et faire la moyenne des différents modèles. Cela peut fonctionner mieux qu'un modèle - rappelez-vous le théorème de la limite centrale. XGBoost avec différents sids sont également des modèles différents (l'essentiel est de ne pas oublier de faire un sous-échantillon <1 et / ou un colsample <1). XGBoost, CatBoost et LightGBM sont également des modèles différents dans ce contexte.
- Utilisez sklearn.Pipeline. Lorsque model.fit inclut l'ensemble du pipeline depuis le prétraitement des données jusqu'à l'obtention des prédictions, il devient beaucoup plus facile à vivre et beaucoup moins susceptible de faire des erreurs avec la validation locale.
- Si vous voulez postekat - faites attention Ă cross_val_predict, cette fonction vous aidera grandement.
- Faites des fonctionnalités. Empiler, mélanger, définir des hyperparamètres - presque tout le monde peut le faire. Les gagnants sont ceux qui ont proposé les fonctionnalités les plus réussies. Eh bien, ou ceux qui ont trouvé un visage. Ou ceux qui ont de la chance. Et le plus souvent, une combinaison de ces facteurs fonctionne;)
Si vous avez encore des questions sur VK Cup, écrivez aux messages privés de VK VK: vk.com/cup . Vous pouvez y trouver les règles et suivre l'avancement du championnat.
J'espère que vous apprécierez la nouvelle Coupe VK et nous rencontrerons quelques lecteurs lors de la finale à Saint-Pétersbourg. Bonne chance à tous!