ICPC (International Collegiate Programming Contest), dünyadaki en köklü ve en prestijli programlama yarışmasıdır. ACM (Association for Computing Machinery) tarafından her yıl düzenli olarak organize edilmektedir.
ICPC, 2 aşamadan oluşan, takımlı bir yarışmadır ve merkezi Baylor Üniversitesi’nde bulunan ACM tarafından konulan kurallara göre düzenlenir. Her yıl 2000 üniversiteden, 80 ülkeden ve 6 kıtadan katılım sağlanır.
Ödül olarak, ACM-ICPC finallerinde birinci olan takıma 15.000$ ve diğer altın madalya alan takımlara da 7.500$ verilir. Gümüş ve bronz madalya alan takımlaraysa sırasıyla 6.000$ ve 3.000$ verilir. Buna ek olarak tüm yarışmada herhangi bir soruyu en erken çözen takım 1.500$, kalan soruları da ilk çözen takımlar da 1.200$ alır.
Bu ödülden de önemlisi, ICPC’ye katılmanın ve kazanmanın büyük bir prestiji vardır. Facebook, Google gibi önde gelen yazılım şirketleri ICPC ve bu tarz yarışmaları takip eder ve derece yapan kişilere iş teklifleri sunar. ICPC katılımcılarının büyük bir çoğunluğu bu tarz şirketlerde çalışmış ya da çalışıyorlardır.
ICPC’ye katılabilmek için masraflarınızı karşılayabilecek herhangi bir üniversite programına kayıtlı olmanız gerekli. Bunun dışındaki katılım koşulları hakkında ayrıntılı bilgi için : ICPC Eligibility Decision Tree
Yarışmanın Yapısı
Yarışmanın bölgesel (regional) ve final olarak isimlendirebileceğimiz 2 aşaması vardır.
ICPC Regionals: Üniversiteler tarafından düzenlenir. Bölgesel yarışmalarda başarı gösterenler sonrasında ICPC Finalleri’ne katılmaya hak kazanır. Şu anda Türkiye’nin içinde bulunduğu Güney Doğu Avrupa Bölgesi’nde Romanya’da “Politehnica University of Bucharest” ve Ukrayna’da “Vinnytsia National Technical University “ olmak üzere 2 tane bölgesel yarışma konumu var.
ICPC Finals: Bölgesel yarışmalarda elemeyi geçen takımlar her yıl Dünya’nın farklı bir şehrine çağrılır ve final etabı düzenlenir.
Yarışma Formatı
- Takımlı bir yarışmadır, takımlar 3 kişiden oluşur.
- Yarışmada toplamda zorlukları değişken 8-15 arasında sayıda soru vardır. Soruların çoğu algoritma odaklıdır.
- Yarışmanın süresi 5 saattir.
- Yarışmada katılımcılar C, C++, Java, Python ve Kotlin dillerinden istediklerini kullanabilirler, ama soruların her dilde çözüleceğinin garantisi yoktur. (ACM kendi judge’larının (değerlendirici yazılımların) C++ ve Java ile finaldeki ve bölgesellerdeki tüm soruların çözdüğünü onaylar.)
- Takımlar çözdükleri soru sayısı ve sonrasında da eğer gerekirse penaltılarına göre sıralanır.
- Penaltı, çözdükleri sorulara her yanlış gönderdikleri çözüm için 20 dakika eklenip, tüm soruları kaç dakikada çözdülerse toplanarak hesaplanır.
- Yarışma hakkındaki kurallara ayrıntılı olarak erişmek için: ICPC Finals Rules
Örnek ICPC Problemi
- Problem açıklaması: Problemin ne olduğunu ve problemde çıktı olarak ne vermesi gerektiğini açıklar.
- Girdi: Program için örnek girdi(ler) verilir. Programınız bunun dışında başka girdilerde de test edilecektir.
- Çıktı: Örnek girdinin vermesi gereken çıktı belirtilir.
- Kısıtlamalar: Genelde girdilerin aralığını, büyüklüğünü belirtir ancak problemdeki herhangi bir şey için de kısıtlamalar olabilir.
- Zaman limiti: Gönderilen çözümün bu zaman aralığında çalışması beklenir.
- Bellek limiti: Gönderilen çözümün belirtilenden daha çok bellek tüketmesi durumunda çözüm kabul edilmez.
Nasıl hazırlanmalı?
Yarışmada başarılı olmak için bolca pratik yapmalısınız, bunun için aşağıdaki siteleri kullanabilirsiniz.
Codeforces – Aktif bir topluluğu var, düzenli olarak programlama yarışmaları düzenleniyor ve geçmişte sorulan sorulara da erişebiliyorsunuz. Düzenlenen programlama yarışmaları Moskova saatine göre olduğu için genelde Türkiye için de uygun saatlerde oluyor.
Codechef - Codeforces gibi düzenli yarışmalar düzenleniyor ve aynı şekilde eski sorulara erişebiliyorsunuz.
HackerRank - Güzel bir arayüzü var ve soruları öğretici şekilde düzenlenmiş. Başlangıç için diğerlerine göre daha uygun.
Geeksforgeeks – Diğer sitelerin aksine soru çözebileceğiniz bir site değil, ama algoritmaların nasıl çalıştığını gösteren ve örnek kodlarını içeren bir site.
inzva – İstanbul tabanlı, kar amacı gütmeyen bir “hackerspace”. Türkiye’de algoritma ile uğraşan insanların sayısını arttırmak için uğraşıyor. Geçen yıl düzenlediği algoritma programı sırasında yayınladığı kitapçıklarlarda öğrenilmesi gereken konular düzenli bir şekilde olduğundan, güzel bir kaynak olabilir.
Competitive programmer’s handbook – Her şeyi içermese de, konuları hatırlayamadığınız zamanda güzel bir referans olabilir. Kısa ve öz bir şekilde anlatılmış, kodun olabildiğince sade olmasına dikkat edilmiş.
Bunlar dışındaki kaynaklar hakkında pek bi fikrim olmadığı ama daha sürüsüyle iyi kaynak olduğu için Geeksforgeeks’ten bir yazıyı daha ayrıntılı incelemek isteyenler için bırakıyorum. Burada hangi algoritmaları öğrenmeniz gerektiğini ve nasıl bir yol izlemeniz gerektiğini de bulabilirsiniz.
Türkiye Ulusal Yarışması
Türkiye Programlama Yarışması 2019’ inzva tarafından 13-15 Eylül tarihleri arasında İstanbul’da düzenlenecek. Türkiye’nin her bir yanından üniversite takımları ücretsiz olarak bu etkinlikte yer alıp üniversitelerini temsil edebilecek.
Bu yarışmada ilk 10’a giren takımlar ulaşım ve konaklama masrafları BEV.Foundation tarafından karşılanacak şekilde 18-20 Ekim tarihleri arasında Bükreş’te düzenlenecek olan SEERC’e (Güneydoğu Avrupa Bölgesi Yarışması) resmi olarak katılma hakkı kazanacak ve ayrıca SEERC’te başarılı olan takımlar ise Moskova Fizik ve Teknoloji Enstitüsü tarafından düzenlenecek olan 2020 ICPC Dünya Finalleri’nde Türkiye’yi temsil etme şansı yakalayacak. Ayrıntılı bilgi ve başvuru için:
inzva.com/algorithm/contest/2019/ulusal-programlama-yarismasi-2019