Yazıda bazı ek notları en altta belirttim, ¹²³ gibi sayılar ek not numarasına işaret ediyor. Bunlar genelde kaynak önerisi.
Bilgisayar olimpiyatı veya rekabetçi programlama, bir veya daha fazla problemin belirli bir süre içerisinde bazı algoritmalar kullanılarak bir kod ile çözülmesiyle gerçekleştirilen zeka sporudur. Daha halk diliyle açıklamak gerekirse, size birkaç problem veriliyor, ve siz bu problemi doğru algoritmaları kullanan kodunuzla çözmeye çalışıyorsunuz ve kodunuz verilen süre ve bellek limiti içerisinde doğru sonuçları verecek şekilde çalışırsa problemi çözmüş sayılıyorsunuz ve bundan puan alıyorsunuz. Merak eden için tatlı bir örnek soru.
Bilgisayar olimpiyatına ortaokul/lise öğrencisiyseniz TÜBİTAK'ın düzenlediği Ulusal Bilim Olimpiyatları'na katılarak başlayabilirsiniz. Süreçle ilgili detaylı bilgi bu adresten edinilebilir.
Peki, bilgisayar olimpiyatına nasıl çalışmalıyım? 1. aşama için genellikle kombinatorik konusuna¹ ve C diline² (ince detayları çok önemli) çalışmanız ve eski 1. aşama sorularını deneme formatında çözmeniz yeterli olur. 1. aşamada 35 matematik, 15 de C sorusu sorulur (ortaokullar için 20 matematik 10 C sorusu). 1. aşamada iyi bir net yapıp ülkede yaklaşık ilk 60'a girebildiyseniz (bu sayı senelere göre değişebiliyor, kısaca yapabildiğinizin en iyisini yapın) yaz okuluna ve 2. aşamaya katılmaya hak kazanıyorsunuz. İşte asıl rekabetçi programlama bu noktada başlıyor.
Yaz okulu, okullar başlamadan önce 1 hafta yüz yüze ve başladıktan sonra 1 hafta çevrimiçi olarak toplam 2 hafta yapılır. Burada sınıflar ikiye ayrılır, deneyimsizler ve deneyimliler şeklinde. İlk sınıfta programlamanın temelleri ve genel 2. aşama konuları anlatılırken ikinci sınıfta öğrenciler tamamen gelişmeye odaklı bir şekilde çalışırlar. Kampın yüz yüze olan kısmı Afyon'da (değişebilir) 5 yıldızlı bir otelde yapılır. Otel ve yol masrafları tamamen TÜBİTAK tarafından karşılanır. Bu kamplarda nasıl çalışmanız gerektiğini genel olarak öğrenirsiniz.
İkinci aşamaya hazırlanırken³ deneyimli olimpiyatçılardan destek almanızı kesinlikle öneririm, çünkü bundan asla rahatsızlık duymazlar ve bir şeyleri öğrenmenizin en iyi yolu da budur. Ayrıca önceden söylemem gerek ki 2. aşamaya yani Competitive Programming'e çalışırken İngilizcenizin yeterli seviyede olması çok önemli. Bunun dışında kesinlikle Codeforces, AtCoder ve benzeri sitelerde "contest"lere katılmanızı öneririm. CSES Problem Setinden problemler çözmeniz de kesinlikle faydalı olacaktır. Ayrıca bu çözdüğünüz sitelerde hesaplarınızın grafiklerini ara sıra kontrol etmek kesinlikle bir motivasyon getirecektir, ancak sakın çözdüğünüz problem sayısını basit bir istatistikten öte amaç haline getirmeyin ve bunun için basit problemleri çözmeye takılı kalmayın. Şunu unutmayın, CP'de haftada bir birkaç problem çözerek gelişemezsiniz, aktif bir çalışmaya ihtiyacınız var. Aklınızda sürekli problemler, çözümler dolaşmalı ve en önemlisi bu işten zevk almalısınız. Terminolojiyi öğrenin, submission'unuzun WA alması ile TLE alması arasındaki farkı bilmeniz ve bu durumlarda ne yapmanız gerektiğini anlamanız gerek. Notlarınızın bulunduğu bir arşiviniz olsun. Benim genelde önemli hatalarımı veya bazı algoritma/veri yapılarının implementasyonlarını attığım bir arşivim var mesela, içinde unuttuğum detaylar olursa hızlıca göz atabileceğim bir Dijsktra'nın algoritması implementasyonu ve "INF macrosunu limitlere uygun şekilde ayarlamayı unutma" (bir keresinde bu hatayı yaptığım için WA almıştım) gibi notlar var.
2. aşamayı geçtikten sonra yapmanız gereken ise takım seçme sınavına hazırlanmak. Bu aşamada kış kampı da yapılır ve gerekli konuları öğreniyorsunuz. Artık muhtemelen nasıl çalışmanız gerektiğini bildiğiniz için buna da çalışabilirsiniz. Fakat yine de vurgulamak istiyorum, bol bol problem çözüp contestlere katılın ve yardım istemekten çekinmeyin. Çevrimiçi topluluklara da katılabilirsiniz. Türk bir bilgisayar olimpiyatı Discord sunucusu var fakat buraya atmamın reklam sayılıp sayılmayacağı konusunda kararsız olduğum için atmamayı tercih ediyorum, belki bilgisayar olimpiyatıyla alakalı bazı Türkçe kaynaklarda linkini bulabilirsiniz.
Aklınızda soru işareti kaldıysa bu konu altında sorabilirsiniz.
Ek notlar:
Bilgisayar olimpiyatı veya rekabetçi programlama, bir veya daha fazla problemin belirli bir süre içerisinde bazı algoritmalar kullanılarak bir kod ile çözülmesiyle gerçekleştirilen zeka sporudur. Daha halk diliyle açıklamak gerekirse, size birkaç problem veriliyor, ve siz bu problemi doğru algoritmaları kullanan kodunuzla çözmeye çalışıyorsunuz ve kodunuz verilen süre ve bellek limiti içerisinde doğru sonuçları verecek şekilde çalışırsa problemi çözmüş sayılıyorsunuz ve bundan puan alıyorsunuz. Merak eden için tatlı bir örnek soru.
Bilgisayar olimpiyatına ortaokul/lise öğrencisiyseniz TÜBİTAK'ın düzenlediği Ulusal Bilim Olimpiyatları'na katılarak başlayabilirsiniz. Süreçle ilgili detaylı bilgi bu adresten edinilebilir.
Peki, bilgisayar olimpiyatına nasıl çalışmalıyım? 1. aşama için genellikle kombinatorik konusuna¹ ve C diline² (ince detayları çok önemli) çalışmanız ve eski 1. aşama sorularını deneme formatında çözmeniz yeterli olur. 1. aşamada 35 matematik, 15 de C sorusu sorulur (ortaokullar için 20 matematik 10 C sorusu). 1. aşamada iyi bir net yapıp ülkede yaklaşık ilk 60'a girebildiyseniz (bu sayı senelere göre değişebiliyor, kısaca yapabildiğinizin en iyisini yapın) yaz okuluna ve 2. aşamaya katılmaya hak kazanıyorsunuz. İşte asıl rekabetçi programlama bu noktada başlıyor.
Yaz okulu, okullar başlamadan önce 1 hafta yüz yüze ve başladıktan sonra 1 hafta çevrimiçi olarak toplam 2 hafta yapılır. Burada sınıflar ikiye ayrılır, deneyimsizler ve deneyimliler şeklinde. İlk sınıfta programlamanın temelleri ve genel 2. aşama konuları anlatılırken ikinci sınıfta öğrenciler tamamen gelişmeye odaklı bir şekilde çalışırlar. Kampın yüz yüze olan kısmı Afyon'da (değişebilir) 5 yıldızlı bir otelde yapılır. Otel ve yol masrafları tamamen TÜBİTAK tarafından karşılanır. Bu kamplarda nasıl çalışmanız gerektiğini genel olarak öğrenirsiniz.
İkinci aşamaya hazırlanırken³ deneyimli olimpiyatçılardan destek almanızı kesinlikle öneririm, çünkü bundan asla rahatsızlık duymazlar ve bir şeyleri öğrenmenizin en iyi yolu da budur. Ayrıca önceden söylemem gerek ki 2. aşamaya yani Competitive Programming'e çalışırken İngilizcenizin yeterli seviyede olması çok önemli. Bunun dışında kesinlikle Codeforces, AtCoder ve benzeri sitelerde "contest"lere katılmanızı öneririm. CSES Problem Setinden problemler çözmeniz de kesinlikle faydalı olacaktır. Ayrıca bu çözdüğünüz sitelerde hesaplarınızın grafiklerini ara sıra kontrol etmek kesinlikle bir motivasyon getirecektir, ancak sakın çözdüğünüz problem sayısını basit bir istatistikten öte amaç haline getirmeyin ve bunun için basit problemleri çözmeye takılı kalmayın. Şunu unutmayın, CP'de haftada bir birkaç problem çözerek gelişemezsiniz, aktif bir çalışmaya ihtiyacınız var. Aklınızda sürekli problemler, çözümler dolaşmalı ve en önemlisi bu işten zevk almalısınız. Terminolojiyi öğrenin, submission'unuzun WA alması ile TLE alması arasındaki farkı bilmeniz ve bu durumlarda ne yapmanız gerektiğini anlamanız gerek. Notlarınızın bulunduğu bir arşiviniz olsun. Benim genelde önemli hatalarımı veya bazı algoritma/veri yapılarının implementasyonlarını attığım bir arşivim var mesela, içinde unuttuğum detaylar olursa hızlıca göz atabileceğim bir Dijsktra'nın algoritması implementasyonu ve "INF macrosunu limitlere uygun şekilde ayarlamayı unutma" (bir keresinde bu hatayı yaptığım için WA almıştım) gibi notlar var.
2. aşamayı geçtikten sonra yapmanız gereken ise takım seçme sınavına hazırlanmak. Bu aşamada kış kampı da yapılır ve gerekli konuları öğreniyorsunuz. Artık muhtemelen nasıl çalışmanız gerektiğini bildiğiniz için buna da çalışabilirsiniz. Fakat yine de vurgulamak istiyorum, bol bol problem çözüp contestlere katılın ve yardım istemekten çekinmeyin. Çevrimiçi topluluklara da katılabilirsiniz. Türk bir bilgisayar olimpiyatı Discord sunucusu var fakat buraya atmamın reklam sayılıp sayılmayacağı konusunda kararsız olduğum için atmamayı tercih ediyorum, belki bilgisayar olimpiyatıyla alakalı bazı Türkçe kaynaklarda linkini bulabilirsiniz.
Aklınızda soru işareti kaldıysa bu konu altında sorabilirsiniz.
Ek notlar:
- "Sonlu Matematik Olimpiyat Soruları ve Çözümleri" adlı kitap işinize yarayacaktır (bilgisayar olimpiyatçıları arasında kısaca mor kitap denir).
- Ram Kumar'ın Programming in ANSI C adlı kitabı işinize yarayacaktır. 1. aşamada en sıkıntılı konulardan bazıları işlem önceliği ve kodun çalıştırılma sırası, bunun için şu tabloyu bırakıyorum.
- Radewoosh'un şu yazısını okumanızı öneririm. Ayrıca TheScrasse adlı CF kullanıcısının hazırladığı şöyle bir yol haritası var, buna da göz atabilirsiniz.