competitive programming
-
bir spor türü olarak görülebilir, problem çözme becerisinin önemli olduğu bir daldır.
genelde lisede bilgisayar olimyatlarıyla başlar ve google codejam yandex.algorithm acm-icpc facebook hacker cup'a kadar gider.
ülkemizdeki önemli yarışmaları sıralamak gerekirse:
itü yazılım maratonu
odtü bilgisayar topluluğu programlama yarışması
son 2 senedir huprog
dünyadaki bazı önemli yarışmalar
ioi
acm-icpc
ayrıca bu tür yarışmalarda sorulan soruların benzerleriyle bir çok silikon vadisi şirketinin mülakatında karşılaşabilirsiniz. -
(bkz: kattis)
-
ben de twitch üzerinde bu kitabı okumaya başladım yayına katılanlar ile.
ilk 2 kısmı olan introduction ve time complexity kavramlarını konuştuğumuz kısmı render edip youtube içerisine de yükledim. izlemek isterseniz: https://youtu.be/jdajbgwl9ac
- ıntroduction ve time complexity kısımlarını konuştuğumuz bölüm: https://youtu.be/jdajbgwl9ac
- sorting kısmına giriş yaptık: https://youtu.be/gptaa0xy_oi
(bkz: competitive programming handbook) -
yaklaşan ve devam eden contestleri derli toplu görmek icin click
-
edit: direkt olarak bu konuyla ilgili bir sürü şey içeren ingilizce post link: https://codeforces.com/blog/entry/23054
--
genel olarak programlamayı seven ve hobi olarak yapan kişiler de bu çalışmaları yaparsa ciddi yararı olacağını düşünüyorum. yoksa ciddi manada ilerlemek istiyorsanız hız birinci seviyede olduğu için seçtiğiniz programlama dili bile önem kazanıyor. aynı zamanda kullandığınız ide bile önemli. snippet lar kullanmak, kısayollar kullanmak ya da #define gibi hazır şeyler tanımlamak sizi hızlandırıyor.
ama bunun dışında da efektif one-linerları öğrenmek ve cs alanında çok kullanılan tree vb. şeyleri ile ilgili kod yazmak için müthiş tecrübe olabilir.
google code jam'i sürekli kazanan eleman: (bkz: gennady korotkevich) --edit: bu alanın allahı kendisi. (bkz: goat)
kendisinin youtube kanalı (acıklamalı live cozumler yapıyor):
https://www.youtube.com/…d00cmdwyhxa31hqryrw/videos
youtube'da aktif bir cp'ci;
(bkz: william lin)
ek:
örneğin kullandıkları cpp templateleri ile ilgili güzel bir video:
https://www.youtube.com/watch?v=-b3gg3hcdag
başlangıc onerileri, ingilizce:
https://www.youtube.com/watch?v=xaeixy8-9y8
edit:
kral cp cilerden bir diğeri: (bkz: petr mitrichev)
bu da güncel bir websitesi:
https://petr-mitrichev.blogspot.com/
codeforces blogları cok ise yarayabilir; ornegin:
https://codeforces.com/blog/entry/98806
https://codeforces.com/blog/entry/95106
https://train.usaco.org/ -
not: bu entryi kenarda dursunda unutmuşum, sanırım 1.5 yıldır beklemiş. üniversitedeki arkadaşlara sesleniyorum, kesinlikle algoritmalar konusunda kendinizi geliştirin ve kod yazma pratiği yapın. kısaca competitive programming yapın yani. çok fazla insanın kod yazışını gördüm ve açık ara fark var, faamg şirketleri niye algoritma soruyor leetcode ezberleyenleri alıyor diye serzenişte bulunmayın çünkü hiç kod yazma pratiği olmayanlar açıkcası bok gibi kod yazıyor. (ek proje, part time tecrübesi olmayanlardan bahsediyorum).
öyle leetcode'da olan ve sordukları sorular da atla deve değil yani. bugün onu yapamayan alakasız gibi gözükse de düzgün class hiyerarşi uygun kod da yazamaz.
kutsal kitabımız
codeforces : ibadethane-1
atcoder: ibadethane-2
tr merkezli ibadethanemiz: (bkz: algoleague)
1 - competitive programming nedir?
algoritma bazlı, hızlı ve geniş düşünmeniz gereken programlama sorularından oluşan yarışmalar, problemler competitive programmingdir.
yarışmalarında iki şey önemlidir: algoritma designı ve bu algoritmanın hızlı ve efektif bir biçimde kodlanması. (complexity olarak efektif diyelim çünkü ortada fixed sizelı arrayler, gereksiz temporary değişkenler doludur)
dizayn kısmı ise yeri geldiğinde güçlü bir matematik alt yapısı ve data structure bilgisi gerektiriyor.
2- competitive programmingin normal programlamadan farkı nedir?
cp'de kısıtlamalar kesindir ve buna uyman beklenir. normal iş hayatında tradeofflar vardır dizayn seçeneği size kalmıştır veya yöneticiye başvurmanız gerekir.
competitive programming zor ancak iyi tanımlanmış problemlere efficient çözümler bulma yeteneğinize odaklanır, ve yalnız yarışırsınız. çoğu real life programlama işi bundan oldukça farklıdır.
gerçek dünya programlamada karşılaştığınız sorunlar çoğu iyi tanımlanmamıştır. çoğu durumda, hangi sorunun çözüleceğine karar vermek, sorunu çözmekten çok daha fazla zamanınızı alacaktır. ürününüzün son halininnasıl olacağını belirlemek için ürün yöneticileri veya analistlerle bir kuruluşta çalışsanız bile, competitive programmingde sahip olmayacağınız kodunuzun inputlarını outpularını ve davranışlarını seçme konusunda çok fazla farklı seçenek bulunacak olacak. ."with freedom comes responsibility" .
3- competitive programing in faydaları nelerdir?
tabi ki de sadece hobi olarak bakmamak lazım, sıralamada yükseklere çıkmanın verdiği haz ve bazı para ödülleri dışında sektöre yönelik faydaları da bulunmaktadır. hatta bu faydalar için öyle üst sıralarda yer almanıza bile gerek yok. sadece çabalayıp kendinizi geliştirmeniz bile bir sürü avantajını hemen hissettirir:
- üniversite sırasında özellikle ilk yıllarında oluşan basit kodlama pratiği eksiğini kapatıyor.
-kodlama konusunda rahat düşünebiliyor ve pratiğinizin olmasından dolayı ortaya daha kaliteli çalışmalar koyabiliyorsunuz
-sonuçları baskı altında sunma yeteneği.
- kendini daha iyi değerlendirme ve başkalarının çalışmalarını derecelendirme yeteneği.
-sorunları çözmenin yeni yolları ve daha karmaşık sorunları çözme yeteneği.
son madde aslında anahtar noktamız; genellikle, bu yarışmalar gittikçe karmaşıklaşan soruları ve aşırı zaman kısıtlamalarını içerir. açıkca söyleyebilirim ki her hangi bir alanda kod yazarken ihtiyacınız olan bu 3 temel özellik gelişecek :
- algoritmik olarak hızlı çözümler bulma.
- hatasız kod yazma.
- kodu daha efektif test etmek ve edge case düşünüp/bulmak
4- competitive programming e nasıl çalışılır?
algoritma öğrenerek ve pratik yaparak. tek doğru bir yolu yok bu işin, hangi şeyleri öğrenmek istiyorsan onlarla uğraş. yeterki elin klavyeye değsin ve mümkün olduğunca fazla satır kod yazasın.
5- peki competitive programmingde önemli olan uzun kodları en hızlı bir biçimde yazmak mı?
alakası yok, ortalama bir competitive programming sınavında seviyemdeki sorular için kağıtta daha fazla vakit harcıyorum(25-30 dakika mesela, bazen 1 saat?) ve çözümü bulunca kodlayıp(5-15 dakika) soruyu çözüyorum. 10 parmak yazmanıza klavyeye fazla basmanıza for döngüsünü define'lamınıza. gereksiz kullanırken hata yapacağınız snippetlara hiç gerek yok. (hatta genç arkadaşlar için snippet asla tavsiye etmiyorum.) kendim de hiç kullanmadım diyebilirim. -
genelde matematik dahilerinin kendini gösterdiği bir programlama alanı. meraklısına iki link bıraktım.
petr
errichto -
ne kadar kızsak da google olmasa microsoft olmasa matematik dahileri olduğu yerde saymaya devam edecek. 20 yıldır cp var, bakıyorsun hala aynı ide'ler piyasada. dil bile aynı, algoritmalar aynı bir şey değişmiyor, ilerlemiyor.
lakin vs code ile chrome ile görsellik kod tamamlama kolaylaşıyor. son favorim, kendime öğretmen olarak github copilot seçtim.
işin yoksa git codewarriors'dan güzel bir problem seç. daha önce çözenlerin rust veya c++96 dilini okumaya çalış. sonra kodda anlamadığın kısmı al, düzgün çalışan bir debugger bul da orada f8'leyerek anlamaya çalış. yani ölme eşeğim ölme, pedagojik açıdan ömür törpüsü. onun yerine anlamadığın kodu alıp copilot'a veriyorsun komentleyip, adam sana tık veriyor aha bunu mu yazmak istiyorsun diye. copilot'un çalışma mantığını anlamaya çalışırken bir bakıyorsun her kodu okuyup anlar hâle gelmişsin yavaş yavaş.
eksisi nedir, bedava olması. muhtemelen copilot bilgisayarınızda ne var ne yoksa bilgi namına vs code'dan emcükleyip karşı tarafa yolluyor. güvenilir değil. ama ona kalsa vs code da değil, google chrome da değil. dedim ya başta, bu firmalar olmasa cp, hızlı satranç fisher'dan sonra online satranç olmasa ne kadar gelişirseydi o kadar gelişirdi. hadi bu yazdığım son cümleyi ingilizceye çevir yabrum a.i. -
codeforces'da iyi derecede olan (çoğu red) birkaç kişinin youtube kanalları listesi;
(bkz: gennady korotkevich) (tourist)
https://www.youtube.com/…d00cmdwyhxa31hqryrw/videos
(bkz: petr mitrichev)
https://www.youtube.com/user/petrmitrichev
(bkz: second thread)
https://www.youtube.com/…l/ucxbcohpe9iovqud2ifg1d1g
(bkz: geothermal)
https://www.youtube.com/…nkwxw9p4novekiirwow/videos
(bkz: ecnerwala)
https://www.youtube.com/c/ecnerwala/videos
(bkz: nskybytskyi)
https://www.youtube.com/c/nikanikanika/videos
(bkz: errichto)
https://www.youtube.com/c/errichto/videos
https://www.youtube.com/…l/uc2d_eki79trchaxgrq5mwpq
(bkz: william lin)
https://www.youtube.com/c/williamlin168/videos
https://www.youtube.com/…5-igta4awxfxmmqheow/videos
(bkz: peltorator)
https://www.youtube.com/c/peltorator
(bkz: um_nik)
https://www.youtube.com/…z8-d4aw8qfaexumjw/featured
(bkz: cuiaoxiang)
https://www.youtube.com/…ms-syijxhiu2t0e7gzw/videos
(bkz: neal wu)
https://www.youtube.com/c/nealwuprogramming
(bkz: endagorion)
https://www.youtube.com/user/endagorion/videos
(bkz: yuhao du)
https://www.youtube.com/…0z_pn3lipwnh01w6bog/videos (japonca)
(bkz: colin galen)
https://www.youtube.com/c/colingalen/videos
ekşi sözlük kullanıcılarıyla mesajlaşmak ve yazdıkları entry'leri
takip etmek için giriş yapmalısın.
hesabın var mı? giriş yap