Pemrograman kompetitif
Pemrograman kompetitif adalah olahraga pikiran yang diadakan menggunakan internet atau jaringan lokal, di mana para perserta mencoba untuk membuat program komputer 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[1][2] dan Facebook[3]. Ada beberapa organisasi yang mengadakan kompetisi pemrograman secara teratur.
Sebuah kompetisi pemrograman biasanya melibatkan tuan rumah yang memberikan sejumlah masalah logika dan matematika, yang disebut juga sebagai teka-teki, kepada para kontestan (yang jumlahnya beragam mulai dari puluhan hingga ribuan orang), dan para kontestan ini diminta untuk menuliskan program-program komputer yang memiliki kemampuan untuk menyelesaikan setiap masalah yang diberikan. Penilaian seringkali 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.[4]
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.
Gambaran umum
Tujuan dari pemrograman kompetitif adalah menulis kode 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: kombinatorik, teori bilangan, teori graf, teori permainan, geometri komputasi, 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 algoritma 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.
Kompetisi terkenal
Ada dua jenis format kompetisi: jangka pendek dan jangka panjang. Setiap babak kompetisi jangka pendek berlangsung dari 1 hingga 5 jam, sedangkan kompetisi jangka panjang ada yang berlangsung selama beberapa hari ataupun hingga beberapa bulan.
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
- CodeChef - kompetisi yang diadakan dari tahun 2009, ada tiga kontes yang diadakan setiap bulan [5] dan kompetisi tahunan yang disebut CodeChef SnackDown [6]
- Codeforces - biasanya kontes dua jam, diadakan setiap minggu [7]
- Facebook Hacker Cup - kompetisi yang diadakan mulai tahun 2011, disediakan dan disponsori oleh Facebook
- HackerRank - berbagai kompetisi [8]
- Gridwars - empat kompetisi yang diadakan antara tahun 2003 dan 2004.
- Google Code Jam - kompetisi yang diadakan dari tahun 2003, disediakan dan disponsori oleh Google
- IEEEXtreme Programming Competition [9] - kompetisi tahunan untuk Anggota Mahasiswa IEEE yang diadakan sejak tahun 2006 oleh IEEE .
- Topcoder Open (TCO) - Kompetisi algoritma yang diadakan sejak tahun 2001 oleh Topcoder
Untuk sebagian besar kompetisi-kompetisi di atas, karena jumlah kontestan yang mengikutinya cukup banyak, maka biasanya kompetisi-kompetisi tersebut dibagi menjadi beberapa babak. Babak tersebut biasa diadakan secara online terkecuali babak terakhir, yang diadakan di tempat. Sebuah pengecualian khusus untuk ini adalah IEEEXtreme yang merupakan kompetisi pemrograman virtual tahunan yang berdurasi selama 24 jam. Para kontestan terbaik IOI dan ICPC mendapatkan medali emas, perak, dan perunggu, sedangkan di kontes-kontes lainnya para pemenang diberi hadiah uang tunai. Selain itu, mendapatkan peringkat atas pada papan skor dalam kompetisi-kompetisi semacam ini juga dapat menarik minat para perekrut dari perusahaan perangkat lunak dan Internet.
Jangka panjang
- HackerRank Week of Code[10]
- ICFP Programming Contest - kompetisi tahunan berdurasi 3 hari yang diadakan sejak tahun 1998 oleh International Conference on Functional Programming
- Topcoder Marathon Matches
- Codechef Long Challenges - diadakan setiap bulan - berlangsung paling lama 10 hari
Kecerdasan buatan dan pemelajaran mesin
- 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.[11][12][13]
- Google AI Challenge – kompetisi yang diadakan dua kali setiap tahun untuk mahasiswa yang berlangsung dari tahun 2009 hingga 2011
- Halite[14] – Sebuah tantangan pemrograman kecerdasan buatan yang disponsori oleh Two Sigma, Cornell Tech,[15] and Google[16]
- Russian AI Cup kontes pemrograman kecerdasan buatan terbuka
Kontes yang berfokus pada teknologi open source
- Daftar mungkin tidak lengkap
Nama Kontes | Sponsor utama | Deskripsi | Berjalan Sejak | Waktu Biasa | Siklus Aplikasi Berikutnya | Status |
---|---|---|---|---|---|---|
Multi-Agent Programming Contest | Universitas Teknologi Clausthal bersama agent-oriented workshops |
|
2005 | September | September 2011 | Aktif |
Google Summer of Code | Google Inc. |
|
2005 | Maret-Agustus | 23 Maret - 3 April | Aktif |
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. | 2007 | November-Februari | Tidak diketahui | Tidak diketahui |
Kontes online dan sumber latihan
Komunitas pemrograman di seluruh dunia telah membuat dan memelihara beberapa sumber daya di Internet yang didedikasikan untuk pemrograman kompetitif. Sumber daya tersebut mengadakan kontes-kontes mandiri dengan atau tanpa adanya hadiah kecil. Arsip yang berisi masalah-masalah dari kompetisi di masa lampau juga merupakan sumber daya yang populer untuk berlatih dalam pemrograman kompetitif. Sumber daya tersebut termasuk:
Nama | Deskripsi | Situs Web |
---|---|---|
CodeChef[17][18] |
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. |
www.codechef.com |
CodeCup |
Kompetisi pemrograman kecerdasan buatan permainan papan internasional tahunan yang diatur oleh Dutch Olympiad in Informatics sejak tahun 2003.[19][20] |
codecup.nl |
Codeforces[21][17] |
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. |
codeforces.com |
CodinGame | Teka-teki (kesulitan meningkat), code golf. Mengadakan kompetisi daring reguler (tantangan kecerdasan buatan, masalah optimisasi). | www.codingame.com |
CodeWizardsHQ | Menyelenggarakan tantangan gratis tahunan untuk usia 8-18 tahun. Tantangannya dibagi menjadi dua bagian: 21 pertanyaan berbasis python dan level bos yang membutuhkan kode python atau javascript untuk mengalahkannya. | www.codewizardshq.com/challenge |
HackerEarth[17] |
Perusahaan yang berbasis di Bangalore, India. HackerEarth menyediakan lingkungan seperti kontes daring yang bertujuan untuk menyediakan solusi penilaian rekrutmen. |
www.hackerearth.com |
HackerRank | HackerRank memberikan masalah pemrograman di domain-domain berbeda dari ilmu komputer. Sumber ini juga mengadakan Codesprints tahunan yang membantu menghubungkan para pemrogram dan Silicon Valley startups. | hackerrank.com |
Project Euler[18] | Koleksi besar masalah komputasi matematika (yang tidak berhubungan langsung dengan pemrograman namun seringkali membutuhkan kemampuan memprogram untuk memecahkannya). | projecteuler.net |
Topcoder[21][17] | 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”). | www.topcoder.com |
UVa Online Judge[21][17] | 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. | onlinejudge.org |
SPOJ[17] | Sistem online judge Polandia yang menyediakan banyak masalah untuk latihan, juga menyediakan tempat untuk penyelenggara-penyelenggara lain untuk mengadakan kontes pemrograman mereka. | www.spoj.com |
Open Kattis | Versi publik dari sistem manajemen kontes Kattis, dengan arsip yang berisi lebih dari 2.600 buah masalah.[22]
Kattis dikembangkan untuk membantu kursus ilmu komputer, juga digunakan untuk mengadakan kompetisi yang bergengsi, seperti ICPC World Finals.[23] |
open.kattis.com |
AtCoder | Berbasis di Jepang, AtCoder memberikan kontes pemrograman daring secara mingguan. Kontes-kontes yang diadakan berbahasa Jepang dan Inggris.
Mulai tahun 2020, sumber ini adalah menjadi salah satu yang paling populer untuk jenisnya.[24] |
atcoder.jp |
Caribbean Online Judge | Sumber daya Spanyol, dipelihara oleh Universidad de las Ciencias Informáticas (UCI).[25] Mengandung lebih dari 3.000 masalah untuk berlatih. Juga mengadakan kompetisi daring reguler. | coj.uci.cu |
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 seringkali kandidat diminta untuk menyelesaikan masalah pemrograman kompleks dan algoritma secara langsung.[26]
Namun ada juga kritik terhadap pemrograman kompetitif yang secara spesifik disampaikan oleh pengembang perangkat lunak profesional.[27] 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.[28][29] 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.[30] Peter Norvig menyatakan bahwa berdasarkan data yang tersedia, menjadi pemenang dari kontes pemrograman berkorelasi negatif dengan kinerja programmer pada pekerjaannya di Google. Meski demikian, pemenang kontes memiliki peluang lebih tinggi untuk mendapatkan pekerjaan.[31]
Ada juga sentimen lain yang berkata bahwa daripada membuang-buang waktu dengan berkompetisi secara berlebihan menyelesaikan masalah yang solusinya sudah ada, programmer lebih baik menginvestasikan waktu mereka dengan menyelesaikan dunia nyata.[32]
Literatur
- Halim, S., Halim, F. (2013). Competitive Programming 3: The New Lower Bound of Programming Contests. Lulu.
- Laaksonen, A. (2017). Guide to Competitive Programming (Undergraduate Topics in Computer Science). Cham: Springer International Publishing.
Lihat juga
Referensi
- ^ "Google Code Jam". google.com. Diakses tanggal 2016-02-20.
- ^ "TCO12 Sponsor: Google - TCO 12". topcoder.com. Diarsipkan dari versi asli tanggal February 16, 2012.
- ^ "Facebook Hacker Cup". Facebook. Diakses tanggal 2016-02-20.
- ^ Khera, Vivek; Astrachan, Owen; Kotz, David (1993). "The internet programming contest" (PDF). ACM SIGCSE Bulletin. 25 (1): 48–52. doi:10.1145/169073.169105. ISSN 0097-8418.
- ^ "CodeChef Monthly Contests".
- ^ "Programmers from all over the world compete at CodeChef SnackDown - ExchangeMedia".
- ^ "Codeforces contests". Diakses tanggal 2018-10-12.
- ^ "Programming problems and Competitions :: HackerRank". HackerRank. Diakses tanggal 2016-02-20.
- ^ Combéfis, Sébastien; Wautelet, Jérémy (2014). "Programming Trainings and Informatics Teaching Through Online Contests" (PDF). Olympiads in Informatics. 8: 21–34.
- ^ "Programming problems and Competitions :: HackerRank". HackerRank. Diakses tanggal 2016-02-20.
- ^ "CodeCup". www.codecup.nl.
- ^ Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25.
- ^ Wevers, Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). University of Twente. Diarsipkan dari versi asli (PDF) tanggal 13 April 2017. Diakses tanggal 16 September 2018.
- ^ "Halite Artificial Intelligence Programming Challenge". www.halite.io.
- ^ "Two Sigma Announces Public Launch of Halite". tech.cornell.edu.
- ^ "Halite helps students and developers compete to build better AI on Google Cloud Platform".
- ^ a b c d e f Luigi, William Di; Farina, Gabriele; Laura, Luigi; Nanni, Umberto; Temperini, Marco; Versari, Luca (2016). "oii-web: an Interactive Online Programming oii-web: an Interactive Online Programming Contest Training System" (PDF). Olympiads in Informatics. 10: 207–222.
- ^ a b Combéfis, Sébastien; Wautelet, Jérémy (2014). "Programming Trainings and Informatics Teaching Through Online Contests" (PDF). Olympiads in Informatics. 8: 21–34.
- ^ Lasse Hakulinen. Survey on Informatics Competitions: Developing Tasks – Olympiads in Informatics, 2011, Vol. 5, 12–25.
- ^ Wevers, Lesley (2014). "Monte-Carlo Tree Search for Poly-Y" (PDF). University of Twente. Diarsipkan dari versi asli (PDF) tanggal 13 April 2017. Diakses tanggal 16 September 2018.
- ^ a b c Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education.
- ^ Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education.
- ^ Enström, E.; Kreitz, G.; Niemelä, F.; Söderman, P.; Kann, V. (2011). "Five years with Kattis – using an automated assessment system in teaching" (PDF). IEEE Frontiers in Education Conference.
- ^ Mirzayanov, Mike; Pavlova, Oksana; Mavrin, Pavel; Melnikov, Roman; Plotnikov, Andrew; Parfenov, Vladimir; Stankevich, Andrew (2020). "Codeforces as an Educational Platform for Learning Programming in Digitalization" (PDF). Olympiads in Informatics. 14. ISSN 1822-7732.
- ^ "About | Caribbean Online Judge". coj.uci.cu (dalam bahasa Inggris). Diakses tanggal 2020-06-18.
- ^ Bloomfield, Aaron; Sotomayor, Borja. "A Programming Contest Strategy Guide" (PDF). SIGCSE '16: Proceedings of the 47th ACM Technical Symposium on Computing Science Education.
- ^ Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".
- ^ Halim, Steven. "CS3233 - Competitive Programming". NUS School of Computing.
- ^ Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".
- ^ Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".
- ^ "Winning at programming competitions is a negative factor for being good on the job". April 5, 2015.
- ^ Smith, Duncan (December 2, 2015). "The Competitive Programming Debate".
Pranala luar
- Proyek open-source untuk menjalankan kontes
- Contest Management System Proyek open-source dengan Python untuk menjalankan dan mengelola kontes pemrograman di server IOI 2012 dan IOI 2013 .