Pemrograman kompetitif: Perbedaan antara revisi

Konten dihapus Konten ditambahkan
Skylens (bicara | kontrib)
k Perbaikan ejaan, kata, dan tautan
k Membatalkan 1 suntingan oleh Nuri123aja (bicara) ke revisi terakhir oleh AABot(Tw)
Tag: Pembatalan
 
(11 revisi perantara oleh 6 pengguna tidak ditampilkan)
Baris 1:
{{Orphan|date=Januari 2023}}
 
[[Berkas:ЯндексАлгоритм.jpg|jmpl| [[Petr Mitrichev]] (kiri) dan [[Gennady Korotkevich]] (kanan), dua programmerpemrogram kompetitif terkemuka dalam sebuah kontes.]]
'''Pemrograman kompetitif''' adalah [[olahraga pikiran]] yang diadakan menggunakan [[internet]] atau [[Jaringan area lokal|jaringan lokal]], di mana para peserta mencoba untuk [[Pemrograman|memprogram]] sesuai dengan spesifikasi yang diminta, dalam waktu yang terbatas. Kontestan dari pemrograman kompetitif biasa disebut juga ''sport programmers''. Pemrograman kompetitif diakui dan didukung oleh beberapa perusahaan perangkat lunak dan internet multinasional, seperti [[Google]]<ref>{{cite web|title=Google Code Jam|url=http://code.google.com/codejam|work=google.com|accessdate=2016-02-20|archive-date=2016-02-19|archive-url=https://web.archive.org/web/20160219222541/https://code.google.com/codejam/|dead-url=yes}}</ref><ref>{{cite web|title=TCO12 Sponsor: Google - TCO 12|url=http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/|work=topcoder.com|archiveurl=https://web.archive.org/web/20120216103218/http://community.topcoder.com/tco12/overview-sponsor/tco12-sponsor-google/|archivedate=February 16, 2012|url-status=dead}}</ref> dan [[Facebook]].<ref>{{cite web|title=Facebook Hacker Cup|url=http://www.facebook.com/hackercup|work=Facebook|accessdate=2016-02-20}}</ref>. Ada beberapa organisasi yang mengadakan kompetisi pemrograman secara teratur.
 
Sebuah kompetisi pemrograman biasanya melibatkan tuan rumah yang memberikan sejumlah [[masalah matematika]] dan [[logika]], yang disebut juga sebagai [[Tebakan|teka-teki]], kepada para kontestan (yang jumlahnya beragam mulai dari puluhan hingga ribuan orang), dan para kontestan ini diminta untuk menuliskan [[Program komputer|program-program komputer]] yang memiliki kemampuan untuk menyelesaikan setiap masalah yang diberikan. Penilaian seringkalisering kali berdasarkan jumlah masalah yang diselesaikan dan waktu yang dihabiskan untuk memprogram solusi yang benar, namun dapat juga dipengaruhi oleh faktor-faktor lainnya (kualitas dari keluaran yang dihasilkan, waktu untuk mengeksekusi program, ukuran dari program, dan lain-lain).
 
== Sejarah ==
Salah satu dari kontes tertua yang pernah ada adalah ''[[International Collegiate Programming Contest]]'' (ICPC) yang pertama kali diadakan pada tahun 1970-an, dan telah berkembang hingga menyertakan 88 negara pada ICPC tahun 2011.
 
Dari tahun 1990 ke tahun 1994, [[Owen Astrachan]], Vivek Khera, dan David Kotz menyelenggarakan salah satu dari kontes pemrograman pertama yang terdistribusi dan berbasis internet, terinspirasi dari ICPC.<ref>{{Cite journal|last=Khera|first=Vivek|last2=Astrachan|first2=Owen|last3=Kotz|first3=David|year=1993|title=The internet programming contest|url=https://www.cs.dartmouth.edu/~dfk/papers/astrachan-contest.pdf|journal=ACM SIGCSE Bulletin|volume=25|issue=1|pages=48–52|doi=10.1145/169073.169105|issn=0097-8418|access-date=2021-03-25|archive-date=2017-08-08|archive-url=https://web.archive.org/web/20170808235401/http://cs.dartmouth.edu/~dfk/papers/astrachan-contest.pdf|dead-url=yes}}</ref>
 
Minat pada pemrograman kompetitif telah bertumbuh pesat sejak tahun 2000 seiring dengan perkembangan internet karena internet merupakan fasilitas yang digunakan untuk mengadakan kontes internasional secara online, mengatasi masalah geografis.
Baris 15 ⟶ 16:
Tujuan dari pemrograman kompetitif adalah menulis [[kode sumber]] dari program komputer yang dapat menyelesaikan masalah-masalah yang diberikan. Sebagian besar masalah yang diberikan pada kompetisi pemrograman bertemakan matematika dan logika. Masalah-masalah tersebut termasuk salah satu dari kategori berikut: [[Kombinatorika|kombinatorik]], [[teori bilangan]], [[teori graf]], [[teori permainan algoritme]], [[geometri komputasi]], [[String|analisis ''string'']]'','' dan [[struktur data]]. Masalah-masalah terkait ''[[constraint programming]]'' dan [[kecerdasan buatan]] juga populer di beberapa kompetisi.
 
Terlepas dari kategori masalah di atas, proses menyelesaikan masalah dapat dibagi menjadi 2 langkah utama: membangun [[algoritme]] yang efisien dan mengimplementasikannya menggunakan [[bahasa pemrograman]] yang sesuai (bahasa pemrograman yang diizinkan pada setiap kompetisi dapat berbeda-beda). Ini adalah kemampuan yang paling sering diuji pada kompetisi pemrograman.
 
Pada sebagian besar kontes, penilaian dilakukan otomatis oleh komputer, biasanya dikenal sebagai ''judge.'' Setiap solusi yang dikirimkan oleh kontestan akan diuji oleh ''judge'' melewati serangkaian kasus uji (biasanya rahasia). Secara normal, soal-soal dari kontes memiliki sistem penilaian ''all-or-none'', yang berarti kontestan akan mendapat skor jika dan hanya jika solusi yang mereka berikan berhasil melewati seluruh kasus uji yang diberikan oleh ''judge'', dan tidak akan mendapat apa-apa jika ada paling tidak satu kasus uji yang gagal dilewati. Namun, ada beberapa soal yang memiliki sistem penilaian parsial, yang berarti kontestan akan mendapat skor tergantung dari jumlah kasus uji yang berhasil dilewati, kualitas dari hasil, atau kriteria lainnya. Pada beberapa kontes, kontestan hanya perlu mengirimkan output dari input yang diberikan, lalu ''judge'' cukup menganalisa output yang dikirimkan.
 
''Online judge'' adalah tempat penilaian yang dilakukan secara daring. ''Online judge'' memiliki fitur ranklist yang menampilkan peserta yang memiliki jumlah solusi yang berhasil, dan/atau waktu tercepat untuk menyelesaikan masalah.<ref>[https://www.amazon.com/Programming-Challenges-Steven-S-Skiena/dp/0387001638 Programming Challenges (Skiena & Revilla)] {{ISBN|0387001638}}, {{ISBN|978-0387001630}}</ref>
Baris 26 ⟶ 27:
=== Jangka pendek ===
 
* [[International Collegiate Programming Contest]] (ICPC) - salah satu kompetisi yang paling tua,  untuk mahasiswa universitas dalam bentuk kelompok masing-masing 3 orang
* [[Olimpiade Internasional dalam Informatika]] (IOI) - salah satu kompetisi tertua, untuk siswa sekolah menengah
* [[American Computer Science League]] (ACSL) - kompetisi ilmu komputer dengan porsi tulisan dan pemrograman, untuk siswa SMP / SMA
Baris 50 ⟶ 51:
 
* [[Kaggle]] – kompetisi pemelajaran mesin.
 
* CodeCup – kompetisi kecerdasan buatan permainan papan yang diadakan secara tahunan sejak tahun 2003. Aturan permainan diumumkan pada bulan September dan turnamen finalnya diadakan pada bulan Januari.<ref>{{cite web|title=CodeCup|url=https://www.codecup.nl/intro.php|work=www.codecup.nl}}</ref><ref name="hak11">Lasse Hakulinen. [https://www.academia.edu/1606336/Survey_on_Informatics_Competitions_Developing_Tasks Survey on Informatics Competitions: Developing Tasks] – Olympiads in Informatics, 2011, Vol. 5, 12–25.</ref><ref name="les14">{{cite web|last=Wevers|first=Lesley|year=2014|title=Monte-Carlo Tree Search for Poly-Y|url=http://lesley.ws/files/polyy14.pdf|location=[[University of Twente]]|archive-url=https://web.archive.org/web/20170413210719/http://lesley.ws/files/polyy14.pdf|archive-date=13 April 2017|accessdate=16 September 2018}}</ref>
 
* Google [[AI Challenge]] – kompetisi yang diadakan dua kali setiap tahun untuk mahasiswa yang berlangsung dari tahun 2009 hingga 2011
* [[Halite]]<ref>{{cite web|title=Halite Artificial Intelligence Programming Challenge|url=https://www.halite.io|work=www.halite.io}}</ref> – Sebuah tantangan pemrograman kecerdasan buatan yang disponsori oleh Two Sigma, Cornell Tech,<ref>{{cite web|title=Two Sigma Announces Public Launch of Halite|url=https://tech.cornell.edu/news/two-sigma-announces-public-launch-of-halite-ai-coding-game|work=tech.cornell.edu}}</ref> and Google<ref>{{cite web|title=Halite helps students and developers compete to build better AI on Google Cloud Platform|url=https://cloud.google.com/blog/big-data/2017/10/halite-helps-students-and-developers-compete-to-build-better-ai-on-google-cloud-platform}}{{Pranala mati|date=November 2022 |bot=InternetArchiveBot |fix-attempted=yes }}</ref>
 
* [[Halite]]<ref>{{cite web|title=Halite Artificial Intelligence Programming Challenge|url=https://www.halite.io|work=www.halite.io}}</ref> – Sebuah tantangan pemrograman kecerdasan buatan yang disponsori oleh Two Sigma, Cornell Tech,<ref>{{cite web|title=Two Sigma Announces Public Launch of Halite|url=https://tech.cornell.edu/news/two-sigma-announces-public-launch-of-halite-ai-coding-game|work=tech.cornell.edu}}</ref> and Google<ref>{{cite web|title=Halite helps students and developers compete to build better AI on Google Cloud Platform|url=https://cloud.google.com/blog/big-data/2017/10/halite-helps-students-and-developers-compete-to-build-better-ai-on-google-cloud-platform}}</ref>
 
* [[Russian AI Cup]] kontes pemrograman kecerdasan buatan terbuka
 
Baris 72 ⟶ 69:
! Status
|-
|[[:en:Multi-Agent_Programming_ContestAgent Programming Contest|Multi-Agent Programming Contest]]
|[[Universitas Teknologi Clausthal]] bersama agent-oriented workshops
|
Baris 81 ⟶ 78:
| Aktif
|-
|[[:en:Google_Summer_of_CodeGoogle Summer of Code|Google Summer of Code]]
| [[Google|Google Inc.]]
|
Baris 90 ⟶ 87:
| Aktif
|-
|[[:en:Google_Highly_Open_Participation_ContestGoogle Highly Open Participation Contest|Google Highly Open Participation Contest]]
| Google Inc.
|Sebuah kontes yang diadakan oleh Google dari tahun 2007 hingga 2008 yang ditujukan untuk siswa SMA. Kontes tersebut didesain untuk mendorong para siswa SMA untuk berpartisipasi dalam proyek sumber terbuka.
Baris 106 ⟶ 103:
! style="min-width:15%" |[[Situs web|Situs Web]]
|-
|[[CodeChef]]<ref name="oi_vol8"/><ref name="Luigi16">{{cite journal|last1=Luigi|first1=William Di|last2=Farina|first2=Gabriele|last3=Laura|first3=Luigi|last4=Nanni|first4=Umberto|last5=Temperini|first5=Marco|last6=Versari|first6=Luca|year=2016|title=oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System|url=https://ioinformatics.org/journal/v10_2016_207_222.pdf|journal=Olympiads in Informatics|volume=10|pages=207–222}}</ref><ref name="oi_vol8"/>
|
Dipelihara oleh [[Unacademy]], yang mengadakan sebuah kontes berdurasi 10 hari dan dua buah kontes kecil setiap bulan (satu bergaya IOI bernama Lunchtime dan yang lainnya bergaya ICPC bernama Cook-Off), juga menyediakan tempat pengadaan kontes untuk institusi edukasi secara gratis. Dua pemenang teratas dari kontes panjang mendapatkan hadiah tunai dan 10 teratas mendapatkan sebuah kaus.
Baris 116 ⟶ 113:
|[https://codecup.nl codecup.nl]
|-
|[[Codeforces]]<ref name="Luigi16" /><ref name="sigcse16">{{cite journal|last1=Bloomfield|first1=Aaron|last2=Sotomayor|first2=Borja|title=A Programming Contest Strategy Guide|url=https://people.cs.uchicago.edu/~borja/pubs/sigcse2016-programming-contests.pdf|journal=SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education}}</ref><ref name="Luigi16" />
|
Sumber daya Russia, dipelihara oleh [[Universitas ITMO]], yang biasanya menyediakan kontes-kontes pendek secara cukup sering (hingga dua per minggu). Fitur khusus: semua solusi bersifat [[sumber terbuka]], kemampuan untuk mengecek kebenaran dari solusi para kontestan lainnya selama “fase peretasan”, kontes virtual, pelatihan, dll.
Baris 139 ⟶ 136:
|-
|[[Project Euler]]<ref name="oi_vol8" />
|Koleksi besar masalah komputasi matematika (yang tidak berhubungan langsung dengan pemrograman namun seringkalisering kali membutuhkan kemampuan memprogram untuk memecahkannya).
|[https://projecteuler.net projecteuler.net]
|-
|[[Topcoder]]<ref name="sigcse16Luigi16" /><ref name="Luigi16sigcse16" />
|Perusahaan AS, yang mengatur kontes dan juga menyediakan masalah industri sebagai semacam pekerjaan sambilan; sumber ini memberikan puluhan  kontes pendek dan beberapa “maraton” panjang setiap tahunnya. Fitur spesifik - partisipan memiliki sebuah kesempatan untuk mengecek kebenaran solusi kontestan-kontestan lainnya setelah fase pemrograman dan sebelum pengetesan otomatis final (disebut “fase tantangan”).
|[https://www.topcoder.com www.topcoder.com]
|-
|[[UVa Online Judge]]<ref name="sigcse16Luigi16" /><ref name="Luigi16sigcse16" />
|Mengandung lebih dari 4.500 buah masalah untuk latihan. Mengadakan kompetisi daring reguler. Dibuka pada tahun 1995, merupakan salah satu situs web semacam ini yang tertua.
|[https://onlinejudge.org onlinejudge.org]
Baris 167 ⟶ 164:
|-
|[[Caribbean Online Judge]]
|Sumber daya Spanyol, dipelihara oleh [[Universidad de las Ciencias Informáticas|Universidad de las Ciencias Informáticas (UCI)]].<ref>{{Cite web|title=About {{!}} Caribbean Online Judge|url=https://coj.uci.cu/general/about.xhtml|website=coj.uci.cu|language=en|access-date=2020-06-18|archive-date=2020-06-20|archive-url=https://web.archive.org/web/20200620100749/https://coj.uci.cu/general/about.xhtml|dead-url=yes}}</ref> Mengandung lebih dari 3.000 masalah untuk berlatih. Juga mengadakan kompetisi daring reguler.
|[https://coj.uci.cu coj.uci.cu] {{Webarchive|url=https://web.archive.org/web/20180824134704/http://coj.uci.cu/ |date=2018-08-24 }}
|}
 
== Manfaat dan kritik ==
Partisipasi dalam kontes pemrograman dapat meningkatkan antusiasme siswa terhadap bidang studi [[ilmu komputer]]. Kemampuan yang didapatkan dari kontes pemrograman seperti ICPC juga meningkatkan prospek karir kedepannya, karena kemampuan tersebut dapat berguna untuk mengerjakan soal-soal interview kerja, yang seringkalisering kali kandidat diminta untuk menyelesaikan masalah pemrograman kompleks dan algoritme secara langsung.<ref name="sigcse16"/>
 
Namun ada juga kritik terhadap pemrograman kompetitif yang secara spesifik disampaikan oleh pengembang perangkat lunak profesional.<ref name="rg15">{{cite web|last=Smith|first=Duncan|date=December 2, 2015|title=The Competitive Programming Debate|url=https://www.redgreencode.com/the-competitive-programming-debate/}}</ref> Salah satu poin penting yang disampaikan adalah banyak kompetisi pemrograman serba cepat yang mengajarkan kompetitornya kebiasaan pemrograman dan gaya kode yang buruk. Contohnya seperti penggunaan [[makro]] yang tidak perlu, kurangnya abstraksi [[pemrograman berorientasi objek]], kode komentar yang menjelaskan isi dari kode tersebut, penamaan variable yang pendek, dan lain-lain.<ref name="rg15"/><ref>{{cite web|last=Halim|first=Steven|title=CS3233 - Competitive Programming|url=https://www.comp.nus.edu.sg/~stevenha/cs3233.html|website=NUS School of Computing}}</ref><ref name="rg15"/> Selain itu, dengan hanya menawarkan permasalahan algoritmik yang kecil dengan solusi yang relatif singkat, kompetisi pemrograman seperti ICPC dan IOI tidak serta merta mengajarkan keterampilan dan praktik rekayasa perangkat lunak yang baik, sedangkan proyek perangkat lunak pada dunia kerja biasanya memiliki ribuan [[baris kode]] dan dikembangkan oleh tim besar dalam jangka waktu yang lama.<ref name="rg15"/> [[Peter Norvig]] menyatakan bahwa berdasarkan data yang tersedia, menjadi pemenang dari kontes pemrograman berkorelasi negatif dengan kinerja ''programmer''pemrogram pada pekerjaannya di Google. Meski demikian, pemenang kontes memiliki peluang lebih tinggi untuk mendapatkan pekerjaan.<ref>{{cite web|date=April 5, 2015|title=Winning at programming competitions is a negative factor for being good on the job|url=https://www.youtube.com/watch?v=DdmyUZCl75s}}</ref>
 
Ada juga sentimen lain yang berkata bahwa daripada membuang-buang waktu dengan berkompetisi secara berlebihan menyelesaikan masalah yang solusinya sudah ada, ''programmer''pemrogram lebih baik menginvestasikan waktu mereka dengan menyelesaikan dunia nyata.<ref name="rg15"/>
 
== Literatur ==
Baris 194 ⟶ 191:
; Proyek sumber terbuka untuk menjalankan kontes
 
* [https://github.com/cms-dev/cms SistemContest PengelolaanManagement KontesSystem] Alat sumber terbuka yang dibuat dengan [[Python (bahasa pemrograman)|Python]] untuk menjalankan dan mengelola kontes pemrograman di sebuah server [[Olimpiade Internasional dalam Informatika|IOI 2012 dan IOI 2013]] .
 
[[Kategori:Kontes pemrograman]]
[[Kategori:Kompetisi ilmu komputer]]