BAB 1
PENDAHULUAN
1.1. Latar Belakang
Competitive programming merupakan terminologi untuk berbagai jenis kompetisi di bidang pemrograman. Kompetisi pemrograman ini bertujuan untuk menyelesaikan
masalah-masalah dunia nyata yang solusinya dapat dimodelkan secara matematika dan algoritmik dan memrogramnya dalam bahasa pemrograman yang ditentukan
berdasarkan aturan masing-masing kompetisi.
Soal-soal kompetisi pemrograman ini biasanya terdiri dari bagian-bagian seperti deskripsi masalah yang harus diselesaikan, format masukan program, dan hasil keluaran
yang diharapkan deskripsi soal, batas inputoutput sudah ditentukan. Kontestan harus menyelesaikannya dengan membuat program sebagai solusi dan melakukan submission
ke dalam sistem kompetisi. Solusi ini kemudian melalui tahap system grading dengan pengujian berbagai test data dari panitia sebagai syarat apakah solusi program kontestan
benar menurut aturan lomba yang telah didefinisikan. Adapun hasil keluaran yang ditampilkan dari proses ini adalah accepted sebagai tanda program yang dikumpulkan
benar, wrong answer jawaban tidak sesuai dengan aturan inputoutput yang diharapkan, time limit exceeded program melebihi waktu eksekusi komputer server
yang sudah ditetapkan sebelumnya, dan berbagai peringatan lain.
Kompetisi pemrograman ini ACM ICPC-based merupakan kompetisi yang cukup bergengsi di bidang ilmu komputer dan di disiplin ilmu sejenis. Setiap tahunnya
pelajar-pelajar di universitas terbaik di belahan dunia berlomba-lomba mempersiapkan
Universitas Sumatera Utara
diri untuk bisa lolos sampai ke tahap final. Tentunya karena disiplin ilmu ini sangat ketat dan kompetitif, diperlukan investasi waktu yang tidak sedikit untuk masa persiapannya.
Sering kali pelajar-pelajar mengalami kesulitan untuk memulai dari mana agar bisa menguasai topik-topik yang akan diujikan. Salah satu tempat berlatih untuk
mengasah kemampuan menyelesaikan soal adalah dengan menyelesaikan arsip soal- soal kompetisi terdahulu yang ada di sistem online judges seperti UVa Online Judges,
Sphere Online Judges, Live Archive, Top Coder, dan lain-lain. Bagi pemula, sering kali ketika mencoba berlatih dan menyelesaikan soal di platform ini merasa sangat frustasi
dan membosankan karena tidak tahu soal mana yang terlebih dahulu diselesaikan, mana yang lebih mudah, atau mana yang sesuai dengan kemampuannya saat itu Lin, et al.
2013. Oleh karena itu, penulis melakukan penelitian untuk membuat satu complementary tool yang bisa merekomendasikan soal-soal yang akan dipakai berlatih.
Penelitian tentang rekomendasi soal-soal yang akan diselesaikan untuk berlatih dalam kompetisi pemrograman ini sudah pernah dilakukan sebelumnya. Di antaranya
adalah uHunt Halim, 2010. Tools ini menggunakan pendekatan rekomendasi berdasarkan preferensi soal-soal apa saja yang sudah diselesaikan seseorang dan
merekomendasikan soal-soal apa yang akan diselesaikan. Kemudian soal-soal dikategorikan dalam berbagai topik, level soal, dan lain-lain.
Dalam penelitian ini, soal-soal pemrograman yang direkomendasikan berasal dari platform UVa online judge. Soal-soal yang tersedia berasal dari arsip-arsip
kompetisi tahun-tahun sebelumnya di berbagai level kompetisi. Prinsip kerja mesin rekomendasi ini adalah dengan merekomendasikan soal-soal apa yang paling dekat
secara topik, tingkat kesulitan untuk diselesaikan kemudian. Rekomendasi ini didapat dengan dua cara. Pertama, dengan mempelajari preferensi soal-soal yang sudah
dikerjakan sebelumnya dengan menggunakan akun terdaftar di UVa online judge. Kedua, untuk pengguna yang sama sekali tidak memiliki akun terdaftar atau belum
pernah menyelesaikan satu soalpun di sistem kompetisi, rekomendasi bisa didapat dengan menampilkan halaman kepada pengguna yang berisi topik-topik soal apa yang
ingin dikerjakan terlebih dahulu. Kemudian sistem merekomendasikan mulai dari level paling mudah bertahap hingga level sulit berdasarkan tingkat preferensi pengguna.
Universitas Sumatera Utara
1.2. Rumusan Masalah