Hello! My name is Lida, and I have been running programming competitions for 12 years. (Hello, Lida!) This year I joined the VKontakte Team and now oversee the VK Cup. For 5 seasons it was a sports programming only championship. But the time has come for major changes.
We removed most of the restrictions, canceled the pair format and added three new directions. VK Cup 2019 is an online competition for Olympiad programmers, mobile developers, designers and machine learning professionals with a grand offline final in St. Petersburg.
In this article I will tell you what we have come up with new, and my colleagues will give recommendations for the participants. Registration for VK Cup is open at vk.cc/cup until December 4 - there is only a week left! All the details about the tracks and stages are under the cut.
VKontakte for the Olympics
Many IT companies hold their competitions - this is a way to talk about interesting tasks that they face. The VKontakte team was one of the first in 2012 to organize its own tournaments. The developers themselves initiated them - the winners of international programming competitions have always worked at VK. Four world champions in the Team now.
The engines that developers create are the foundation of VKontakte. It is in them that efficiency is especially important, on the count - every millisecond. How to achieve maximum performance? Know deeply the algorithms and data structures, and also fit into the given memory limits. It is such high requirements that are imposed on the code of VK Cup participants.
Since 2012, the format has changed a little, but the essence has remained the same: participants from 14 to 23 years old competed in the Olympiad programming, alone or in teams of two people. If you twice reached the final, then you canβt participate again. It's time to change.
Down restrictions
VK Cup 2019 will be held in solo format. We remove the upper bar for age and the limit on the number of finals - so this year the best participants of past years and experienced specialists will be able to return to the championship. But most importantly - in addition to sports programming, it will be possible to compete in machine learning, mobile development and design. You can participate in several tracks at the same time - if, of course, there is enough time.
Each track will consist of three rounds:
- Qualification will be held online from December 6 to 16 and will be open to all. The next round will be the 256 best participants in each track.
- We will also conduct the qualifying stage online - in February 2020. Here, participants will find more complex tasks and a shorter time. 40 authors of the most successful decisions in each track will go to the finals.
- The final will be held in St. Petersburg in April 2020. In the full-time confrontation, participants will compete for the main prize of each track - 524,288 rubles (2 ^ 19).
Track Engine
Qualification. Participants will solve problems on the Codeforces platform in any convenient programming language. You can even solve problems with your hands, taking apart each individual test.
Qualifying stage. It will be important to solve each problem as soon as possible in order to score more points and get an invitation to the finals.
The final. Participants will compete according to the standard Codeforces rules: they will be able to get additional points if they find errors in the decisions of other participants.
Tips from Boris Minaev
Borya is the ICPC 2015 programming world champion, 2nd place in the VK Cup 2015, head of the VKontakte database team.
- Solve problems in order of increasing complexity. Choose the one that passed the most participants.
- Do not go in cycles in a task if it does not give in to you. Immediately set yourself a limit: βIf I donβt advance in a solution in 15 minutes, then Iβll move on to the next.β
- Test the solution before sending. Be sure to run it on boundary cases. Before that, re-read the section with restrictions on the input data.
- Sometimes the idea of ββa solution can be invented based on the restrictions in the condition. For example, you have a task in which n objects are given. If n <10, then perhaps in the solution it is necessary to sort through all permutations of objects. If n <20, then write recursive search in 2 ^ n. If n <1000, then come up with dynamic programming for n ^ 2. And if n is about a million - most likely, you need to think in the direction of a linear solution.
- If you received WA, re-read the code several times, and still do not see the error, then try writing a simpler solution. Then compare on small tests whether the original and new solutions always give the same answer. If you are solving a problem on an unweighted tree, then just run the solution again, but select a different root.
- Use development environments like CLion or IDEA. They can find standard errors like uninitialized variables or unreachable pieces of code.
- Add more assertions to your code. Finding the RE reason is much easier than WA.
Track Mobile
Qualification. We will test the knowledge of simple algorithms that are often needed to implement standard screens of mobile applications, as well as the theoretical knowledge of our mobile platform. The next round will be 128 participants from each platform.
Qualifying stage. It will be necessary to correctly prioritize. Which is better - to be in time as much as possible or to work through each task as carefully as possible? The finals will include the top 20 developers.
The final. Each participant will have to demonstrate their product skills: come up, implement and submit a new project using only the screens developed in the previous round.
Tips from Oleg Smirnov
Oleg leads the Android Team VKontakte and composed tasks for the VK Cup mobile development track.
- Make sure before the start of the competition that you have an IDE (Android Studio) configured, the necessary plug-ins are connected, the emulator is working and there is a real device for development.
- Understand the Gradle build system and its settings.
- Read the terms and conditions and find out about the minimum SDK that you will need to support. Do not write universal code for all platforms, solve the problem based on the set conditions.
- If there is no urgent need, do not use NDK in the project. Almost any task can be solved using the SDK.
- Pay attention to application rights. Verify that all permissions requests are made.
- Keep track of application performance: file system, networking, smooth UI animations.
- Define the minimum set of libraries to work with. Use time to solve the task, not to study the libraries.
- It will be useful to look at the work of VK SDK.
Track Design
Qualification. We will make sure that the participants can not only develop individual design elements, but also notice errors.
Qualifying stage. We suggest developing interfaces for individual VKontakte elements or independent services. It will be important to find a compromise between the scale of the idea and the development time.
The final. Participants will need to talk about their idea and present the design.
Tips from Alexei Mazelyuk
Lyosha is a senior VK designer and winner of the VK Designers contest in 2015 and 2017.
- Break the task down into smaller ones. Try to allocate time and prioritize in order to be in time. If you manage to do something faster than planned, there will be time for features and improvements.
- Define the audience and context.
- Think in advance about the tools you want to use.
- Jot down ideas. Choose the best and continue to work with them. Not enough time for everything.
- Paper and pencil sometimes work better than a graphical editor.
- Solve the problem, not draw beautiful pictures. Trends should not be ignored, but everything should be appropriate.
- Wisely use the achievements of colleagues. Sometimes it's better to take something ready, rather than reinvent the wheel. But remember that new convenient solutions are rated higher than the next copy.
- Engage in detail if you have time for this.
- Presentation is important! Need to sell the decision to the jury. Use a simple and clear presentation.
- Do not bend with the amount of text in the presentation, use the video.
Track ML
Qualification. As an answer, you will need to load the processed data, and each decision will be evaluated using a predefined metric. Data from the task can be processed offline or even manually.
Qualifying stage. The code for the approach that the participants will develop will be uploaded to the testing system - all solutions will be tested on the same infrastructure, in conditions of limited computing resources.
The final. Participants will solve a difficult practical task.
Tips from Danila Savenkova
Dania entered the top Mercedes contestants at kaggle. He is also a senior VK programmer.
- For local validation, try to reproduce the same principle of partitioning that was used when the test organizers selected the test set (pay attention to the time, if any, and to the ID). If possible, use cross-validation. This method is practically out of the box able to evaluate the significance of changes in the metric . Be sure to fix the seed when breaking the dataset.
- Train and average different models. This may work better than one model β remember the central limit theorem. XGBoost with different sids are also different models (the main thing is to remember to make subsample <1 and / or colsample <1). XGBoost, CatBoost, and LightGBM are also different models in this context.
- Use sklearn.Pipeline. When model.fit includes the entire pipeline from data preprocessing to obtaining predictions, it becomes much easier to live and much less likely to make mistakes with local validation.
- If you want postekat - pay attention to cross_val_predict, this function will greatly help.
- Do features. Stacking, blending, setting hyperparameters - almost everyone can do this. The winners are those who came up with the most successful features. Well, or those who found a face. Or those who are lucky. And more often a combination of these factors works;)
If you still have questions about VK Cup, write to VK VK's private messages: vk.com/cup . There you can find the rules and monitor the progress of the championship.
I hope you enjoy the new VK Cup and we will meet with some readers at the finals in St. Petersburg. Good luck to all!