Competitive Programming Nedir?

Melike Vurucu
TechSheet
Published in
4 min readAug 11, 2023

Çevrenizde ya da Youtube gibi platformlarda Google, Meta (Facebook), Amazon gibi büyük şirketlerde çalışanların, çalışmak isteyenlerin geçirdiği süreci elbette duymuşsunuzdur.

Bu mülakatlardaki bazı eleme aşamalarında araştırma konusu olmayan, daha önceden çözülmüş algoritma ve veri yapıları soruları sorulmaktadır. Peki aslında bu elemede sorulan soruların e-spor gibi bir rekabet ortamı oluşturabileceğini hiç düşündünüz mü?

Evet, aslında bu sorular bir rekabet ortamı ve e-spor gibi bir alan oluşturuyor, bu alana da Competitive Programming, Türkçe adıyla Rekabetçi Programlama deniyor. Bu yazımda sizlere bu alanın amacını, ne yaptığını, ne gibi yarışmalara konu olduğunu ve bu alanla uğraşmanın artılarını açıklayacağım.

ICPC 2021 World Finals Dhaka Closing Ceremony World Champions Photo Tour, Massachusetts Institute of Technology

Competitive Programming, algoritma ve veri yapılarını kullanarak çözebileceğiniz belirli sayıda soruların verildiği, sizin de bu soruları kısıtlı bir süre içerisinde çözmeye çalıştığınız yarışmalardan oluşan bir alandır. Yarışmalardaki amacınız en çok sayıda soruyu en kısa sürede çözmeye çalışmak ve olabildiğince çok puan elde etmektir.

Yarışmanın formatına göre değişmekle beraber bazı yarışmalarda tek oturumda çoğunlukla 7–8 soru, toplam iki oturumdan oluşan bir yarışmada ise bir oturumda yarısı, diğer oturumda da diğer yarısı olmak üzere 6–12 soru bulunabilmektedir.

Yarışmalardaki amacınız, çözebildiğiniz kadar çok soruyu en kısa sürede en az gönderim (submission) ile göndermektir. Bu sistemde aynı sayıda soru çözen kişi veya takımlar ceza puanlarına (penalty) göre sıralanırlar. Ceza puanı ise bir soruyu çözdüğünüzde o soruyu kaçıncı dakikada çözdüğünüzün toplamı ile hesaplanır. Soruyu çözünce Kabul Almayan Submissionların Sayısı * 20 de ceza puanına eklenir.

Örneğin A sorusunu tek submission ile 100. dakikada çözdük, B sorusunu ise 120. dakikada ama 4 submission ile çözdük. Toplam ceza puanımız:
100 + 120 + 20 * 3 = 280 olacaktır.

Meta Hacker Cup gibi yarışmalarda Subtask Sistemi bulunmaktadır. Subtask Sistemi, bir sorunun tamamını çözmek yerine o sorunun belirli bir kısmını çözerek puan almanıza yarar. Bu sistemin olduğu yarışmalarda elde edebileceğiniz en yüksek puanı elde etmeye çalışırsınız ve buna göre sıralanırsınız.

Competitive Programming yarışmalarından üniversite düzeyinde olanların en büyüğü, ACM’in düzenlemekte olduğu ICPC’dir ve düzenlenen diğer yarışmaların büyük bir kısmı kural olarak ICPC’nin kurallarını referans alır.

ICPC sadece uluslararası bir yarışma değildir, çatısı altında bölgesel yarışmalar da barındırmaktadır. Bu bölgesel yarışmalarda hedef, başarılı olan takımları dünya finaline göndermektir.

Büyük şirketlerin düzenlediği yarışmalar da bulunmaktadır. Bunlardan birisi Meta’nın (Facebook) düzenlemekte olduğu Hacker Cup’tır. Hacker Cup yıllık düzenlenmekte olup eleme ve final aşamasıyla beraber 5 aşamadan oluşmaktadır.

Düzenlenen yarışmalarda belirli bir dereceye sahip olanlar, para ödülü veya tişört gibi maddi değeri olan ödüller alabilirler.

Örneğin Meta Hacker Cup’ta 2. aşamada ilk 2000'e giren ve en az bir soru çözmüş olan yarışmacılara Meta Hacker Cup tişörtü verilmektedir.
3. aşamada ilk 200'e giren yarışmacılara da “Top 200” yazılı rozetin de bulunduğu bir tişört verilmektedir.
İlk 25 finalist ise sıralamalarına göre dolar bazında para ödülü de almaktadırlar.

“Competitive Programming sadece yarışmalardan mı ibaret?”

Bu sorunun cevabı, kesinlikle hayır. Competitive Programming, aslında kendisine ait bir topluluğa sahiptir. Bu topluluk, Codeforces ve AtCoder gibi Competitive Programming odaklı sitelerde bulunmaktadır.

Codeforces, çoğunlukla haftalık olarak, site bazında yarışmalara girebileceğiniz, pratik için soru çözebileceğiniz bir sitedir. Aynı zamanda daha tecrübeli insanların açtığı bloglara da ev sahipliği yapmaktadır.
Codeforces’taki bazı yarışmalar sponsorludur ve belirli bir dereceye girerseniz ödül alabilirsiniz fakat bu yarışmalarda rekabet fazla olduğundan dereceye girmenin bayağı zor olduğu da bir gerçek.

AtCoder ise Codeforces’ın aksine, daha yarışma odaklı bir sitedir ve Codeforces gibi kendi sitesinde soru havuzu barındırmaz.
Eğer bu sitedeki soruları yarışma dışında çözmek istiyorsanız şu yolları izleyebilirsiniz:

  • Her bir conteste kaydolup çözmek. (tavsiye edilmez)
  • kenkoooo.com’daki AtCoder Problems sayfasını kullanmak.
kenkoooo.com’daki AtCoder Problems Sayfası

Competitive Programming’in bu zamana kadar sadece yarışmalara ve bir topluluğa sahip olduğundan bahsettim. Kendi kendinize şu soruyu soruyor olabilirsiniz: “Bu yarışmalara hazırlanmak ve katılmak sektörde ne işimize yarayacak?”

Şunu söylemeliyim ki yarışmalarda başarılı olmanız değil; onlarda başarılı olmak için katettiğiniz yol sizin için sektörde daha kullanışlı. Yarışmalardaki başarınız CV’niz için bir satır daha olacak fakat bu yarışmalara hazırlanmanın faydalarından bahsedeyim:

  • Competitive Programming, problem çözme ve algoritmik düşünme odaklı bir alan olduğundan dolayı, bu alanda pratiğinizin olması sorunlara bakış açınızı daha güçlü kılar.
  • Yarışmalarda kısıtlı bir sürede en çok soruyu çözmeye çalıştığınızdan dolayı süre yönetiminiz gelişir.
  • Soruları çözerken kullandığınız algoritmalar ve veri yapıları, o algoritma ve veri yapılarının işleyişine daha hâkim olmanızı sağlar. Bu da ilgili derslerde ve mülakatlarda daha etkili olmanızın önünü açar.
  • Eğer belirli bir seviyeye gelirseniz; platformlar ve yarışmalar için soru hazırlayabilir, bu alandaki kamplarda rehber olarak rol alabilirsiniz. Bu da sizin için kendinizi daha iyi anlatmanız, sözlü ve yazılı iletişiminizi geliştirmeniz için bir fırsattır.

Toparlamak gerekirse, Competitive Programming algoritma ve veri yapıları sorularının sadece mülakat gibi belirli bir amaçtan ibaret olmadığının, aksine bir problem çözme sanatı, rekabetçi bir spor olduğunu gösterir. Eğer siz de Competitive Programming’e başlamak istiyorsanız sonraki yazıları takipte kalın!

--

--

Melike Vurucu
TechSheet

Computer Engineering Student at Ankara University