CodeFest – Perplexed!


Jadi pagi ini Irvan ngasi tautan ke sebuah kompetisi yang unik. Sebenarnya kompetisi yang ini salah satu dari berbagai kompetisi yang lain. Kita ngomongin Perplexed! aja ya, unik soalnya. Jadi lomba ini make bahasa C. Bisalah ya kalo cuma ngoding A*B pake bahasa C. Nah, uniknya disini. Kita disuruh menyelesaikan soal yang mungkin gampang dan sederhana, tapi penilaiannya berdasarkan source code yang anda buat.

Contoh, untuk soal trial 4 tugas kita cuma membuat kode C untuk menulis hasil A*B, diberikan input A dan B. Gampang kan? Tapi tunggu dulu, score penilaiannya seperti ini:

  • T=30000/(C + 3000*M + L^10 + 1000*I), dengan
  • C: Jumlah Karakter bukan whitespace
  • M: Jumlah karakter * dan karakter /
  • L: Jumlah kata kunci perulangan, seperti while atau for
  • I: Jumlah if-else, ternary(?:) dan goto

Nah lo bingung gak tuh?? Mau ngaliin bilangan tapi ga boleh pake kali. Pake perulangan aja? Nah, jadi soalnya ada input sebuah bilangan N, trus ada N baris A ama B, jadi bakal ada N baris output. Hahaha. Lucu ya soalnya😀 Kalo pembahasan solusinya sih baca ajalah di situsnya ya.

Gw cuma mau ngasi liat solusi terbaik yang dikirim oleh salah seorang peserta (bukan gw tentunya, yang buat itu dewa haha). Nih,

k;b;
main(a)
{
        a&&gets(&a);
        switch(scanf("%d%d",&a,&b))case -1:exit(0);
        while(b--)k+=a;
        printf("%d\n",k);
        main(k=0);
}

Nah loh itu code IMBA BANGET. Terutama di line 4 dan 8! IMBALANCE!!!! Ngerekursifin main! dan ngerti ga kode line 4 itu buat apa? Gini, kalo di C jika ngedeclare sebuah variable akan terinisialisasi dengan bukan 0 kan? jadi saat pertama kali programnya jalan variable a akan terisi sesuatu yang bukan 0, sehingga di line 4 maka code gets akan dilakukan kan? Nah, saat mainnya rekursif, ada parameter k=0, dengan kata lain, a akan terisi dengan 0 di rekursif kedua, dan gets ga dijalanin karena a udah false!!! IMBALANCE!!!!

 

Tinggalkan Balasan

Isikan data di bawah atau klik salah satu ikon untuk log in:

Logo WordPress.com

You are commenting using your WordPress.com account. Logout / Ubah )

Gambar Twitter

You are commenting using your Twitter account. Logout / Ubah )

Foto Facebook

You are commenting using your Facebook account. Logout / Ubah )

Foto Google+

You are commenting using your Google+ account. Logout / Ubah )

Connecting to %s