Hallo allerseits! Mein Name ist Lida und ich leite seit 12 Jahren Programmierwettbewerbe. (Hallo, Lida!) In diesem Jahr bin ich dem VKontakte-Team beigetreten und beaufsichtige jetzt den VK-Cup. Für 5 Jahreszeiten war es eine Sportprogramm nur Meisterschaft. Aber es ist Zeit für große Veränderungen.
Wir haben die meisten Einschränkungen aufgehoben, das Paarformat aufgehoben und drei neue Richtungen hinzugefügt. Der VK Cup 2019 ist ein Online-Wettbewerb für Olympiade-Programmierer, Entwickler von Mobilgeräten, Designer und Spezialisten für maschinelles Lernen mit einem großen Offline-Finale in St. Petersburg.
In diesem Artikel werde ich Ihnen mitteilen, dass wir eine neue Idee haben, und meine Kollegen werden den Teilnehmern Empfehlungen geben. Die Anmeldung zum VK Cup ist bis zum 4. Dezember unter vk.cc/cup möglich - nur noch eine Woche! Alle Details zu den Tracks und Bühnen sind unter dem Schnitt.

VKontakte für die Olympischen Spiele
Viele IT-Unternehmen veranstalten ihre Wettbewerbe - auf diese Weise können Sie über die interessanten Aufgaben sprechen, mit denen sie konfrontiert sind. Das VKontakte-Team war eines der ersten, das 2012 eigene Turniere organisierte. Die Entwickler selbst haben sie initiiert - die Gewinner internationaler Programmierwettbewerbe haben schon immer bei VK gearbeitet. Vier Weltmeister im Team.
Die von Entwicklern erstellten Engines bilden die Grundlage von VKontakte. Bei ihnen ist Effizienz besonders wichtig - jede Millisekunde. Wie erreicht man maximale Leistung? Sie kennen die Algorithmen und Datenstrukturen genau und passen auch in die vorgegebenen Speichergrenzen. Es sind so hohe Anforderungen, die an den Code der VK-Cup-Teilnehmer gestellt werden.
Seit 2012 hat sich das Format ein wenig geändert, aber das Wesentliche ist geblieben: Teilnehmer zwischen 14 und 23 Jahren nahmen allein oder in Zweierteams an der Olympiade teil. Wenn Sie das Finale zweimal erreicht haben, können Sie nicht mehr teilnehmen. Es ist Zeit, sich zu ändern.
Nieder mit den Einschränkungen
Der VK Cup 2019 wird im Solo-Format ausgetragen. Wir streichen die obere Leiste für das Alter und die Begrenzung der Anzahl der Endspiele - damit die besten Teilnehmer der vergangenen Jahre und erfahrenen Spezialisten in diesem Jahr in die Meisterschaft zurückkehren können. Am wichtigsten ist jedoch, dass neben der Sportprogrammierung auch das maschinelle Lernen, die mobile Entwicklung und das Design im Wettbewerb stehen. Sie können an mehreren Tracks gleichzeitig teilnehmen - wenn natürlich genügend Zeit vorhanden ist.
Jede Strecke besteht aus drei Runden:
- Die Qualifikation findet vom 6. bis 16. Dezember online statt und steht allen offen. Die nächste Runde werden die 256 besten Teilnehmer in jeder Strecke sein.
- Wir werden die Qualifikation auch online durchführen - im Februar 2020. Hier finden die Teilnehmer komplexere Aufgaben und eine kürzere Zeit. 40 Autoren der erfolgreichsten Entscheidungen in jedem Track werden ins Finale kommen.
- Das Finale findet im April 2020 in St. Petersburg statt. Bei einer Vollzeit-Auseinandersetzung kämpfen die Teilnehmer um den Hauptpreis für jeden Titel - 524.288 Rubel (2 ^ 19).
Track Engine
Qualifikation. Die Teilnehmer lösen Probleme auf der Codeforces-Plattform in einer beliebigen Programmiersprache. Sie können sogar Probleme mit Ihren Händen lösen, indem Sie jeden einzelnen Test auseinander nehmen.
Qualifikation. Es wird wichtig sein, jedes Problem so schnell wie möglich zu lösen, um mehr Punkte zu erzielen und eine Einladung zum Finale zu erhalten.
Das Finale. Die Teilnehmer nehmen an den Standardregeln von Codeforces teil: Sie erhalten zusätzliche Punkte, wenn sie Fehler in den Entscheidungen anderer Teilnehmer finden.
Tipps von Boris Minaev
Borya ist der ICPC-Programmweltmeister 2015, 2. Platz im VK Cup 2015, Leiter des VKontakte-Datenbankteams.
- Lösen Sie Probleme in der Reihenfolge zunehmender Komplexität. Wählen Sie diejenige, die die meisten Teilnehmer bestanden hat.
- Gehen Sie bei einer Aufgabe nicht in Zyklen, wenn sie Ihnen nicht nachgibt. Legen Sie sich sofort ein Limit fest: "Wenn ich innerhalb von 15 Minuten keine Lösung mehr erarbeite, gehe ich zum nächsten über."
- Testen Sie die Lösung vor dem Senden. Stellen Sie sicher, dass es in Grenzfällen ausgeführt wird. Lesen Sie zuvor den Abschnitt mit Einschränkungen für die Eingabedaten erneut.
- Manchmal kann die Idee einer Lösung basierend auf den Einschränkungen in der Bedingung erfunden werden. Beispielsweise haben Sie eine Aufgabe, in der n Objekte angegeben werden. Wenn n <10 ist, ist es in der Lösung möglicherweise erforderlich, alle Permutationen von Objekten zu durchlaufen. Wenn n <20, dann schreibe rekursive Suche in 2 ^ n. Wenn n <1000 ist, lassen Sie sich eine dynamische Programmierung für n ^ 2 einfallen. Und wenn n ungefähr eine Million ist, müssen Sie höchstwahrscheinlich in Richtung einer linearen Lösung denken.
- Wenn Sie WA erhalten haben, lesen Sie den Code mehrmals neu und sehen Sie den Fehler immer noch nicht. Versuchen Sie dann, eine einfachere Lösung zu schreiben. Vergleichen Sie dann bei kleinen Tests, ob die ursprüngliche und die neue Lösung immer die gleiche Antwort geben. Wenn Sie ein Problem in einem ungewichteten Baum lösen, führen Sie die Lösung einfach erneut aus, wählen Sie jedoch einen anderen Stamm aus.
- Verwenden Sie Entwicklungsumgebungen wie CLion oder IDEA. Sie können Standardfehler wie nicht initialisierte Variablen oder nicht erreichbare Codeteile finden.
- Fügen Sie Ihrem Code weitere Zusicherungen hinzu. Den RE-Grund zu finden ist viel einfacher als WA.
Track Mobile
Qualifikation. Wir werden das Wissen über einfache Algorithmen, die häufig für die Implementierung von Standardbildschirmen für mobile Anwendungen benötigt werden, sowie das theoretische Wissen über unsere mobile Plattform testen. Die nächste Runde wird 128 Teilnehmer von jeder Plattform sein.
Qualifikation. Es wird notwendig sein, Prioritäten zu setzen. Was ist besser - um so viel Zeit wie möglich zu haben oder um jede Aufgabe so sorgfältig wie möglich zu bearbeiten? Das Finale wird die Top 20 Entwickler umfassen.
Das Finale. Jeder Teilnehmer muss seine Produktkenntnisse unter Beweis stellen: Ein neues Projekt nur unter Verwendung der in der vorherigen Runde entwickelten Bildschirme erstellen, umsetzen und einreichen.
Tipps von Oleg Smirnov
Oleg leitet das Android Team VKontakte und komponierte Aufgaben für den VK Cup Mobile Development Track.
- Stellen Sie vor dem Start des Wettbewerbs sicher, dass Sie eine IDE (Android Studio) konfiguriert haben, die erforderlichen Plugins verbunden sind, der Emulator funktioniert und ein echtes Gerät für die Entwicklung vorhanden ist.
- Verstehen Sie das Gradle-Build-System und seine Einstellungen.
- Lesen Sie die Allgemeinen Geschäftsbedingungen und informieren Sie sich über das Mindest-SDK, das Sie unterstützen müssen. Schreiben Sie keinen universellen Code für alle Plattformen, sondern lösen Sie das Problem anhand der festgelegten Bedingungen.
- Wenn keine dringende Notwendigkeit besteht, verwenden Sie NDK nicht im Projekt. Fast jede Aufgabe kann mit dem SDK gelöst werden.
- Anwendungsrechte beachten. Stellen Sie sicher, dass alle Berechtigungen angefordert wurden.
- Behalten Sie die Anwendungsleistung im Auge: Dateisystem, Netzwerk, reibungslose Benutzeroberflächenanimationen.
- Definieren Sie die Mindestanzahl an Bibliotheken, mit denen gearbeitet werden soll. Nutze die Zeit, um die Aufgabe zu lösen und nicht, um die Bibliotheken zu studieren.
- Es wird nützlich sein, sich die Arbeit von VK SDK anzuschauen.
Track Design
Qualifikation. Wir sorgen dafür, dass die Teilnehmer nicht nur einzelne Gestaltungselemente entwickeln, sondern auch Fehler feststellen können.
Qualifikation. Wir bieten an, Schnittstellen einzelner Elemente von VKontakte oder eigenständige Dienste zu entwickeln. Es wird wichtig sein, einen Kompromiss zwischen dem Umfang der Idee und der Entwicklungszeit zu finden.
Das Finale. Die Teilnehmer müssen über ihre Idee sprechen und das Design präsentieren.
Tipps von Alexei Mazelyuk
Lesha ist eine hochrangige VK-Designerin und Gewinnerin des VK-Designer-Wettbewerbs in den Jahren 2015 und 2017.
- Teilen Sie die Aufgabe in kleinere auf. Versuchen Sie, Zeit zuzuweisen und Prioritäten zu setzen, um rechtzeitig zu sein. Wenn Sie etwas schneller als geplant erledigen, bleibt Zeit für Funktionen und Verbesserungen.
- Definieren Sie das Publikum und den Kontext.
- Überlegen Sie sich im Voraus, welche Tools Sie verwenden möchten.
- Ideen aufschreiben. Wählen Sie die Besten und arbeiten Sie mit ihnen weiter. Nicht genug Zeit für alles.
- Papier und Bleistift funktionieren manchmal besser als ein Grafikeditor.
- Löse das Problem, zeichne keine schönen Bilder. Trends sollten nicht ignoriert werden, aber alles sollte angemessen sein.
- Nutzen Sie die Leistungen Ihrer Kollegen mit Bedacht. Manchmal ist es besser, etwas fertig zu machen, als das Rad neu zu erfinden. Denken Sie jedoch daran, dass neue, praktische Lösungen höher bewertet werden als die nächste Kopie.
- Gehen Sie detailliert darauf ein, wenn Sie Zeit dafür haben.
- Präsentation ist wichtig! Müssen die Entscheidung an die Jury verkaufen. Verwenden Sie eine einfache und übersichtliche Darstellung.
- Biegen Sie nicht mit der Textmenge in der Präsentation, verwenden Sie das Video.
ML verfolgen
Qualifikation. Als Antwort müssen Sie die verarbeiteten Daten herunterladen, und jede Entscheidung wird anhand einer vordefinierten Metrik bewertet. Daten aus der Aufgabe können offline oder sogar manuell verarbeitet werden.
Qualifikation. Der Code für den Ansatz, den die Teilnehmer entwickeln werden, wird in das Testsystem hochgeladen. Alle Lösungen werden auf derselben Infrastruktur unter Bedingungen begrenzter Computerressourcen getestet.
Das Finale. Die Teilnehmer lösen eine schwierige praktische Aufgabe.
Tipps von Danila Savenkova
Danya trat bei kaggle in die Top-Liste der Mercedes-Kandidaten ein. Er ist auch ein leitender VK-Programmierer.
- Versuchen Sie für die lokale Validierung, dasselbe Partitionsprinzip zu reproduzieren, das bei der Auswahl des Testsatzes durch die Testorganisatoren verwendet wurde (achten Sie auf die Zeit, falls vorhanden, und auf die ID). Wenn möglich, Kreuzvalidierung verwenden. Diese Methode ist praktisch sofort einsatzbereit und kann die Signifikanz von Änderungen in der Metrik bewerten . Achten Sie darauf, den Startwert zu korrigieren, wenn Sie den Datensatz auflösen.
- Zug und Durchschnitt verschiedener Modelle. Dies funktioniert möglicherweise besser als ein Modell - denken Sie an den zentralen Grenzwertsatz. XGBoost mit verschiedenen Seiten sind auch verschiedene Modelle (die Hauptsache ist, daran zu denken, dass Subsamples <1 und / oder Colsample <1 sind). In diesem Zusammenhang sind auch XGBoost, CatBoost und LightGBM verschiedene Modelle.
- Verwenden Sie sklearn.Pipeline. Wenn model.fit die gesamte Pipeline von der Datenvorverarbeitung bis zum Abrufen von Vorhersagen einschließt, ist das Leben wesentlich einfacher und die Wahrscheinlichkeit von Fehlern bei der lokalen Validierung ist geringer.
- Wenn Sie postekat möchten, achten Sie auf cross_val_predict, diese Funktion wird sehr helfen.
- Funktionen ausführen. Stapeln, Mischen, Einstellen von Hyperparametern - das kann fast jeder. Die Gewinner sind diejenigen, die die erfolgreichsten Features entwickelt haben. Na ja, oder diejenigen, die ein Gesicht gefunden haben. Oder diejenigen, die Glück haben. Und öfter funktioniert eine Kombination dieser Faktoren;)
Wenn Sie noch Fragen zu VK Cup haben, schreiben Sie an VK VKs private Nachrichten: vk.com/cup . Dort finden Sie die Regeln und können den Fortschritt der Meisterschaft verfolgen.
Ich hoffe, Ihnen gefällt der neue VK Cup und wir werden uns beim Finale in St. Petersburg mit einigen Lesern treffen. Viel Glück an alle!