Monday, September 30, 2013

Penyisihan BNPCHS 2013

Halo semuanya. Sudah lama tidak ngeblog, banyak kontest yang saya ikuti tapi belum masuk blog ini. eg Compfest 2012, Compfest 2013, Gemastik 2012, ICPC 2012/INC2012. Semoga masih ingat di pikiran saya dan bisa saya torehkan curhatannya di blog ini :)

Kali ini, saya akan menceritakan tentang BNPCHS (Bina Nusantara Programming Contest for High School) 2013 yang baru saja dilewati :29-September-2013:. Kebetulan saya adalah juri untuk bagian pemrograman (PG di judge otomatis).

Judge kali ini dipersembahkan oleh : Saya, Jennifer Santoso, Alvin Setiadi, Teddy Budiono, Daniel Agusta, Jessica Handojo, Jacky Wijaya, Sandi Karunia.

29-9-2013 13.00
Saya baru sampai di Binus Kampus Anggrek, dan ternyata di group thomas (Sekolah yang saya bina untuk programming) ternyata protes tidak bisa masuk ke server, kata mereka mungkin server mati lampu. Karena saya belum sampai ruang judging, segera menuju TKP pakai lift (FYI judging ada di lantai 7 :|). Pada saat sampai sana, saya laporkan bahwa beberapa anak tidak bisa mengerjakan soal karena masalah koneksi.

Beberapa setelah saya bisa memegang computer, ternyata ketika saya buka sitenya, lama juga. Ternyata memang servernya down.

29-9-2013 14.00
Setelah masih down, group Olimpiade Informatika ternyata pada protes. (Maaf yah semua, di Binus pada saat itu juga sedang mencari penyelesaian). Lalu tidak lama berselang, datang ko Risan langsung saja diikuti dengan bahasan soal yang saya tidak mengerti =)). Setelah selesai bahasan soal (Yang diketahui ternyata soal Codeforces), dia mengajarkan tentang beberapa teori dalam matematika. Karena memang sedang tidak menjuri, kami memperhatikan :)

Selang sekian lama, ternyata Alvin bermain dengan sebuah web untuk latihan mengetik yang saya tidak tahu =)), lalu kami menantang ko Risan untuk memainkannya karena WPM dia cepat sekali. Setelah dilihat ternyata memang cepat dan kita request untuk menggantinya dalam bahasa yang aneh aneh ie. Jepang =)).

29-9-2013 15.30
Setelah server yang berdarah darah, akhirnya babak penyisihan dimulai. Pertama kali adalah sesi PG, dimana peserta akan mendapat 50 soal pilihan ganda yang berbeda beda satu peserta dengan peserta lainnya, namun soalnya sama. Meskipun agak lama, tetapi PG akhirnya selesai dan diakhiri posisi 1 adalah : raditya1710 dengan point 96. :o

29-9-2013 16.35
Babak pemrograman dimulai. Di babak ini, peserta akan diberikan 3 buah soal pemrograman dengan tingkat kesulitan mudah, untuk menguji sejauh mana siswa dapat menalarkan logikanya kedalam suatu program.

A. Segitiga
Deskripsi : Diberikan N buah angka, cek ada berapa kemungkinan bilangan yang bisa membentuk segitiga.
Solusi : Di soal sudah diberitahu bahwa, 3 buah bilangan bisa membentuk segitiga apabila 2 angka terkecil, jika dijumlahkan, hasilnya harus lebih besar dari bilangan terbesar. Dari sini kita bisa membuat loop 3 tingkat dimana untuk setiap 3 buah bilangan, cek apakah jumlah 2 bilangan terkecilnya lebih besar dari bilangan terbesarnya atau tidak. Kita dimudahkan dengan fakta bahwa "Bilangan yang diberikan, terurut menaik dan unik". Jadi siswa tidak perlu mengurutkan angkanya.

B. Substring Berkarakter Unik
Deskripsi : Diberikan sebuah string, cek berapa panjang substring maksimal yang didalamnya tidak ada karakter yang duplikat.
Solusi : Kita juga bisa menggunakan 3 tingkat loop, dimana loop pertama untuk start, loop kedua untuk end, dan loop ketiga untuk menghitung karakter dari start sampai end. Disini kita harus menyimpan karakter pada sebuah array frekuensi yang digunakan untuk mengecek kevalitan substring tersebut. Jika substring tersebut valid, maka kita tinggal mencari mana yang maksimal.

C. Rotasi
Deskripsi : Diberikan sebuah angka 9 digit. Cari rotasi minimum dari angka tersebut.
Solusi : Pertama kalian bisa menggabungkan angka tersebut dengan angka itu sendiri. Contoh N = 123456789. Maka kita gabungkan N = 123456789123456789. Lalu kita ambil 9 substring pertama dengan panjang 9 menjadi A = {123456789, 234567891, 345678912, 456789123, 567891234, 678912345, 789123456, 891234567, 912345678}. Setelah itu, kalian tinggal mencari minimumnya dengan loop atau diurutkan. Namun hati hati jika angka tersebut mengandung digit 0, jika dicari minimumnya / diurutkan, maka yang paling kecil pasti yang digit pertamanya adalah digit 0. Oleh karena itu, kalian harus menyortir substring yang digit pertamanya 0.

Tidak seperti babak pemanasan yang jawabannya tertera dibawah soal, kali ini jawaban harus dipikirkan oleh peserta (YA IYA LAH ! ! !) =)). Setelah melalui babak pemrograman yang panas, maka evanlimanto menjadi pemimpin dalam babak ini (Unggul last submited dengan rank dibawahnya).

Kami mohon maaf atas gagalnya server pada saat babak pemanasan, tapi semoga soal soalnya dapat menghibur kalian :) Untuk yang lolos ke babak final akan diupdate di blog ini setelah ada pengumumannya.

UPDATE
Several Fun Fact :
  1. Soal pemrograman bocor, karena pada saat jam 14.00 (Waktu babak pemrograman normal), ada yang belum logout terus muncul soalnya.
  2. Ada 2 submission java dan semuanya diambil oleh Jessica Handojo =))
  3. Saya menjudge terbanyak :)) *Kayaknya
  4. Waktu ko Risan lagi ngetik (Di web yang buat latihan ngetik), kita teriak 3. 2. 1, karena dikira waktunya beneran habis, dia lepas. Gak taunya masih ada 5 detik lagi =))
  5. Daniel main Candy Crush lvl 256 (Kalau tidak salah) [Tepat pada saat penyisihan. Lvlnya sekarang mungkin lebih tinggi]
  6. Tiba tiba ada submission isinya "Tolong Compile Aku Dong :)"
  7. Komputer saya awalnya tidak bisa menjudge, karena setiap judge hasilnya no output Runtime. Untung minta Jessica untuk rejudge
  8. Server down dari awal contest sampai sekitar 2 jam.
  9. JUDGE THIS ! ! !

Wednesday, April 10, 2013

Sisfotime 2012

Hai mumpung masih segar dalam memori, saya ingin membagikan pengalaman saya waktu kontes programming di IT Telkom Bandung. Kalau tidak salah waktunya, babak final diadakan waktu oktober tapi tidak tau tanggalnya (Kalau ingat akan diedit).

Oke yang masuk final dari team binus ada 4. Pandawa (Reinhart, Daniel, Teddy), Arjuna(Saya, Welly, Alvin), Nakula Sadewa(Jenifer, Calvin, Adit), dan Lupa Lagi(Eric, Lupa, Lagi lagi lupa).

Kami berangkat setelah H+1 selesai UAS / UTS tapi tidak semua kami berangkat bareng, beberapa menyusul, beberapa ikut bareng bus SI. O iyah dalam sisfotime ini, perlombaan tidak hanya dalam programing tapi dalam bermacam macam.

Sampainya di hotel, kami langsung beristirahat dulu sebentar. Hotelnya seperti ruko gitu tapi keren :) kuncinya pake kartu (Maklum Kampung). Setelah istirahat, kami mencari makanan, dan untung ada reinhart. Ternyata di belakang hotel kami ada tempat jajan jajanan gitu, banyak enak tapi "sedikit" mahal. Setelah keliling keliling dan sudah selesai makan, kami kembali ke hotel dan selang sedikit pasukan yang datangnya menyusul akhirnya tiba.

Akhirnya hari final tiba.
Kami naik 2 mobil (Baca : Mobil bukan bis) yang menampung 4 team (Baca 4 team, 1 team 3 orang berarti 12 orang + supir + hutomo + muhsin). Empet empetan lah kita. Dan akhirnya kena juga. 1 mobil yaitu mobil saya kena tilang =)). Alesannya gara gara kita keramean tiba tiba palanya masuk lewat kaca supir terus nanya "Nyaman gak ini ?" serentak kita jawab "Nyaman kok pak nyaman. ! !" yah namanya emang mau duit kali makanya gak mau kalah hahaha, akhirnya kena Rp 50.000.

Sesampainya di ITT, kita lakukan registrasi ulang makan dan foto foto dikit. Akhirnya kita disuruh masuk ke dalam ruang lomba. Yang hadir sekitar 9 team, harusnya 10 tapi Vidina tidak hadir (Atau ada yg lain yah :-? ). Soalnya ada 5 buah, saya tidak simpan soalnya tapi mudah mudahan ada. Kira kira begini saya jelaskan menurut yang saya ingat, bukan dari solve, bukan dari urutan soal :

  1. Diberikan sebuah puzzle model pieces kayak yang biasa waktu kita kecil yang bergambar, tapi isinya huruf. Kita disuruh susun itu puzzle. Kita sempat iseng kirim sample output, tapi gak lolos. Wah testnya beneran =)), kata reinhart dia udah coba bruteforcenya tapi masih gak lolos, gak tau ngebug apa.
  2. Diberikan 2 titik dalam grid, kita harus gerak dari titik 1 ke titik 2 tapi geraknya harus L (Langkah kuda), kalau tidak salah print langkahnya. (AC)
  3. Diberikan kota kota, terus kita dari kota A mau ke kota B tapi lewat mana mana. (AC)
  4. kata alvin sih MST (AC) *Yang ini gak baca soalnya
  5. SOAL WORLD FINAL Wogh =)) Bruteforce (AC) [LINK]
Nah kira kira begitulah, kita solve 4 dan akhirnya juaranya adalah ITB, juara 2 Pandawa dan juara 3 kami :). Selesainya pembagian hadiah, kami langsung pulang ke Jakarta.

Beberapa fakta menarik yang penting atau gak penting sama sekali :) :
  1. Waktu di hotel saya baru pertama kali main Sarbuteur (Maaf kalau salah nama)
  2. Team eric, pagi penyisihan, sorenya berangkat untuk ikut final esoknya
  3. Kita dikasih 3 komputer untuk 3 orang (Biasanya dalam programming contest, 1 komputer 3 orang)
  4. Saya tanya boleh buka buku tidak, karena saya mau nunjukin alvin kalau soal 5 itu soal world final dan ada di buku Competitive Programming II
  5. Clarifikasi pake email
  6. Kita 9gagkan waktu contest
  7. Internetnya cepat waktu kontes, tadinya niat mau download
  8. Pandawa bener bener bruteforce, soal MST dipakein kompleksitas 2^N AC
  9. Ada soal yang kita yakin bener tapi salah terus, udah klarifikasi ternyata yang dikasih tau di klar sama yang diminta di soal beda. Tiba tiba team jensan AC dan langsung rank 1, mereka teriak akhirnya kita semua resubmit dan team jensan kepental ke rank 4 karena hasil resubmit AC semua
  10. penalti gak penting, cuman buat pemanis di scoreboard
  11. Ada masalah waktu pembagian hadiah =))
  12. Ci Yen Lina comment di milis supaya jangan curang *Kita gak curang kok ci :)
  13. Ada yang "Ambeien" dari bis sampe pulang ahahaha
Semoga Sisfotime 2013 kalau ada bisa jadi lebih baik lagi :)

Tuesday, March 5, 2013

ITB Senior Programming Contest 2012

Yap, lomba ini adalah lomba kami (Team Binus) yang terakhir di semester 3 ini. Dengan berakhirnya ITBPC tahun ini, maka berakhir juga musim lomba di Indonesia (Hadehhhhh). Oke perkenalan dulu. Univ Binus mengirimkan beberapa team untuk bertanding di ITBPC tahun ini. Namun dari hasil babak pernyisihan, maka hanya ada 3 yang lolos ke babak Onsite Final #1 Sangkakala (Saya, Jenifer, Alvin), #2 Pandawa (Reinhart, Daniel, Teddy), dan #3 Hore (Adit, Calvin, Ron).

Babak penyisihan cuman saya sama alvin yang mengerjakan karena jensan ada kuliah di jakarta. Tapi dia ikut  gabung beberapa menit sebelum selesai. Babak penyisihan bisa dibilang sedikit berantakan, dari soal yang kurang jelas, adanya kesalahan test case sampai pending submission yang gak berenti berenti. Ada 5 soal namun team kami AC 3 yang membuat kita lolos ke babak final.

  1. Diberikan A sama B, cetak A / B sama A % B. Saya langsung ngoding yang ini, tapi karena A sama B bisa < 0 tapi hasil A % B harus positif, kita sempat salah sekali. Tapi akhirnya AC.
  2. diberikan matriks N * M dinomori dari 1 - (N * M) dari kiri atas sampai kanan bawah, kita dimulai dari baris nomor 1 ke baris nomor N dan harus gerak ke (i + 1, j + 1), (i + 1, j), (i + 1, j - 1). Score kita didapatkan dari total penjumlahan lantai. Lalu ditanya apakah bisa mendapat nilai X jika dimulai dari (1, X). Cara kita cari sum minim dan sum maks kalau mulai dari (1, X). Kalau yang dicari ada diantara itu, berarti bisa. Selain itu tidak bisa . Kayaknya cari minimumnya deh, tapi yah sama aja :P.
  3. GanCar, Soal paling bermasalah di babak penyisihan. Normalnya GLBB biasa tapi ada trickynya sebenarnya yang kurang jelas dari deskripsi soal. Tapi yah akhirnya AC.
Akhirnya kita lolos ke final beserta 2 team dari Binus. Singkatnya kita sampai di ITB pake mobil (Bukan Bus) Binus >.< . Setelah sampai kita langsung istirahat di puri tomat kalau gak salah. Malam sebelum hari Final, kita makan di tempat makan Kambing Soen. Kita awalnya pesan nasgor biasa, namun reinhart pesan Nasgor gila. Pas dateng ternyata porsinya gak pake otak. Banyak parah gila, yah kayak porsi buat 5 orang O_O. Setelah selesai makan kita menghabiskan malam menonton Lion King 1 :) (Best Momment before fighting ^_^).

Saatnya final :). Setelah kita sampai di ITB dan pendaftaran ulang, Kita lalu masuk ke aula untuk briefing lomba. Total kalau tidak salah ada 34 Team se-Indonesia. Team saya ternyata satu ruangan bersama team Hore, sedangkan Pandawa berpisah. Waktu sampai ruangan, babak pemanasan pun dimulai. Disini sepertinnya team kami yang paling nakal. Kami mengganti password account kami, tapi kami lupa passwordnya yang harus lapor =)), lalu coba print print gak penting ampe dibilang "Boros banget sih" =)) (Yah maaf panitia ITBPC, kami hanya iseng :D ). Setelah babak pemanasan, Final pun dimulai. Total ada 9 soal *Soal berdasarkan urutan problem, bukan dari yang kami solve duluan :
  1. Berhitung 2 : Cara kami, seperti penjumlahan bit biasa, jika bit ke N berubah dari 0 ke 1, maka overfow. Alvin dapet caranya dan saya yang ngoding.
  2. Encryption : Cara kami, set string yang isinya kelipatan "bcdefghijklmnopqrstuvwxyz" sampai tidak lebih dari 100.000. Lalu untuk mengisi chipertext, gunakan huruf 'a' sesuai plaintext. Soal ini gagal saya AC-kan di 4 jam pertama untuk balon. Setelah jensan bilang cara yang lebih "Greedy", gw coding secepat kilat. AC di freeze time.
  3. Pokemon : Saya tadinya mikir DP, tapi ternyata memorinya gak cukup. Alhasil coba mikir Bottom Up biar memorinya jadi O(1). Tapi gak dapet, jensan yang ACin soal ini. Saya sama alvin gak tau caranya gimana :)).
  4. Scheduling Trams : Soal yang berhasil membuat kita juara harapan. Soal ini baru kita sentuh, 30 menit sebelum akhir kontes. Kita gak tau caranya gimana, dari yang mikir caranya yang aneh aneh, harus dibuat tree lah, ilangin cycle, bla bla bla. saya sama jensan sampai 'tungkerep' di lantai, alvin sampai bingung di depan komputer. Akhirnya sya mikir greedy yang gak tau proofnya apa. Saya coding secepat kilat, alhasil 10 menitan sebelum selesai, kita berhasil AC.
  5. Bangjo : Saya yang coding, pertama kali AC juga buat team kita. 6 Menit :). Gak susah, cuma simulasiin aja. Cari tiap segment cocok dengan berapa digit. Kaliin aja terus di mod.
  6. Pizza : Ini alvin sama jensan yang solve. Saya gak tau apa apa :)), iseng denger si jensan udah kepikiran terus si alvin yang coding pake Binary Indexed Tree.
  7. *Paper Fold* : Ini soal favorite saya sama alvin =)). Gimana gak, kami ribut sendiri, ketawa ketawa sendiri, sampe bener bener lipet kertas robek kertas, nyampah di komputer kami (Maaf lagi yah kakak panitia :P ). Alvin yang nemu patternnya, pas saya coding ternyata ad-hoc males banget copas copas code :)).
Yak kami berhasil solve 7. Pada saat babak final berlangsung, ada beberapa fakta yang gak penting tapi worth to know (Or maybe not :P ). :
  1. Sebelum freeze, kita sempat rank 2 :P
  2. Waktu ngerjain soal, kita sempat pose untuk di foto sama kakak panitia
  3. Ada alarm handphone yang deringnya sama kayak punya saya. Alhasil saya yang panik dan ternyata bukan punya saya :))
  4. Kita dikatain boros waktu print code. Lembar 1 full code, lembar 2 cuman keisi satu karakter '}'
  5. Saya gak keluar untuk makan selama kontest ataupun untuk ke WC =)).
  6. Jensan yang paling sering keluar di team kami =)).
  7. Awalnya soal ada 11, ternyata kecampur sama soal babak pemanasan. Pas kita submit ternyata masuk ke soal final, setelah protes, penaltinya ilang.
  8. Soal pizza diminta untuk tidak dikerjakan dulu karena ada yang akan berubah. Tapi Pandawa AC duluan. Pas ditanya, dia gak tau ada kllarifikasi itu =))
  9. Ada perubahan soal pada Scheduling Trams, tapi pas kita kerjain di menit menit akhir, kita gak tau apa yang berubah.
  10. Di score board banyak team yang solvenya 6 - 7, yang artinya banyak balon. Tapi di room kami balonnya sepi :)).
Setelah selesai babak final dan makan siang, kita dibawa ke aula untuk acara penutupan. Pertama ada pembicara dari Teelu, Teddy ketawa, Daniel ketawa, I know what they mean hahaha =)). Pas pengumuman ternyata team kami juara harapan 2 :). Senang karena ternyata 5 team juga yang solve 7, jadi agak tipis juga. Pandawa mendapat juara 2, dan team Hore kurang beruntung :(.

Demikian akhir dari musim lomba tahun 2012 - 2013 :)). Semoga di musim lomba mendatang, hasilnya bisa lebih baik lagi dari yang lalu ^_^ Semangat semangat. . .

NB: Untuk foto, soal dan ranklist / scoreboard akan diupdate segera.