Belajar Fokus

Belakangan aku mulai menyadari kalau masih sulit buat fokus. Di tengah koding atau belajar, ada aja godaan buat sekedar ngecek facebook, twitter, atau g+. Padahal ya nggak ada notif apa-apa, nggak ada yg posting atau mention. Agaknya ini juga yg bikin quarter pertamaku di kampus rada berantakan. Aku nggak bisa efisien ngatur waktu. Yang biasanya dulu bisa santai2 aja tiap mau kuliah, sekarang harus lebih banyak sadar diri, nyicil ngerjain banyak tugas kuliah dan riset dari Professor. Masih sulit rasanya fokus mendisiplinkan diri, mengalokasikan waktu sepenuhnya buat belajar.
Quarter kedua ini aku nggak boleh mengulang kesalahan yang sama. Hari ini aku membuktikan bahwa kamarku yang kukira tempat paling enak buat belajar, ternyata merupakan tempat yang paling tidak ideal buat belajar. Kamar ini terlalu nyaman sampai bikin males belajar. Kasur selalu membayang2 ~~” Pasang internet ternyata jadi bumerang; kebanyakan nonton youtube & film! Akhirnya siang tadi kuputuskan bakal nyelesaikan paper readingku di kampus. Yup, ngampus di hari minggu2. Surprisingly, I’m not alone. Banyak juga students yang menghabiskan weekendnya di kampus. Entah belajar di perpustakaan atau di ruang kelas yang kosong. Aku sendiri ngendon di officeku dari jam 2 siang sampai 8 malam, nyelesaikan rangkuman 2 paper sisa semalam. Walau reading speedku masih lelet, masih sering ngulang2 dan banyak istirahat, tapi lumayan lebih fokus lah di kampus. Malam sebelumnya aja, baca 1 paper di kamar, nggak cukup 4 jam, kebanyakan “nyambi”nya😦
Oke, mulai sekarang harus lebih fokus. Cari terobosan2 baru biar lebih produktif. Masih banyak to-do list yang harus dikerjakan. SEMANGAT!!!

Kenapa mulai nulis lagi?

Kebutuhan. Ya, bersosialisasi itu salah satu kebutuhan manusia kan? Dan itulah yang masih sulit kutemukan di sini.
Hari ini mungkin sudah genap satu setangah bulan aku tinggal di Chicago. Hidup merantau ke negri orang itu berat. Kita harus memulai lagi semuanya dari awal. Beradaptasi dengan dunia yang baru, tempat yang baru, budaya dan cara hidup yang serba baru, dan teman-teman yang baru. Yang terakhir ini mungkin yang paling susah. Bahasa dan budaya jadi kendala paling utama.
Bayangkan bagaimana rasanya ketika kamu jadi satu-satunya orang Indonesia di tengah-tengah mahasiswa China yang ketika mereka ngumpul, secara reflek ngobrolnya jadi bahasa mandarin semua. Jengkel banget karena jadi nggak bisa ikut ngobrol. Aku yang awalnya pengan beramah-tamah, guyon, gojeg, seketika itu juga cuma bisa diem ngeliatin mereka ngobrol dari pojokan tanpa tahu apa arti dibalik tawa dan gurauan mereka. Bukan salah mereka pastinya, jelas bukan. Mungkin kalau dibalik posisinya, yang mayoritas itu orang Indonesia, aku juga pasti akan reflek ngomongnya pakai bahasa Indonesia. Tapi tetap saja, yang kaya gini bikin aku jadi sulit bersosialisasi. Untungnya ada teman seruangan dari NY yang cukup cerewet dan bisa kutimpali obrolannya kalau dia lagi ngoceh.
Kadang-kadang aku suka terjaga sampai malam cuma buat nengokin timeline teman-teman di Indonesia. Berharap ada yang bisa kuajakin ngobrol, saling lempar comment. Makin dewasa kita, ternyata semakin banyak komitmen dan prioritas yang harus didahulukan. Makin sulit menemukan teman-teman yang dahulu sering jadi tempat kita curhat, ngobrol. Aku sendiri sebenarnya bukan orang yang mudah terbuka dengan orang lain. Hanya 1-2 teman yang mungkin ngerti seperti apa aku sebenarnya.
Mencari teman sejati itu sulit. Tidak semua teman bisa menjadi tempat kita bebas berbagi atau bertukar cerita. Tapi, kebutuhan untuk bercerita itu tidak bisa untuk tidak disalurkan. Memendamnya terus cuma bikin makin penat. Maka itulah aku nulis. Setidaknya ini bisa bikin aku tetap waras.

Revival of my blog (?)

Nulis itu bukan satu hal yang aku kuasai. Terbukti dengan mangkraknya blog ini selama hampir 4 tahun. Banyak hal sebenernya yg pengen aku ceritain. Banyak cerita2 menarik yang terjadi dalam hidupku yang akhirnya jadi koleksi memoriku sendiri.
Nulis hal-hal pribadi seperti terasa tabu dilakukan di jejaring sosial atau blog. Paling banter twitter yang jadi sarana kalau mau ngoceh gak jelas. Singkat, tidak terlalu menarik perhatian, dan cepat dilupakan.
Sampai akhirnya blog lamaku di multiply.com tiba-tiba hilang. Cuma telat sehari buat ngebackup tulisan2 itu, dan sekarang udah gak ada lagi jejaknya. Hilang. Saat itu aku merasa kalau memori-memori itu penting banget. Di situ aku nulis puisi-puisi favoritku. Disitulah tersimpan interaksiku sama temen-temen lewat komentar-komentar. Memorable banget. Dan semua hilang. Moga-moga aja yang terjadi sama multiply nggak terjadi sama worpressku ini.
Aku akan coba mulai nulis lagi. Mungkin tulisannya nggak akan seserius dulu, yang isinya tentang programming, kompetisi, kampus. Kali ini aku akan coba nulis lebih santai.
Aku pengen nulis tentang aku. Yah, mungkin semacam jurnal pribadi.
Tenang kawan tak perlu kau khawatir jikalau timeline Facebook dan Twittermu bakal penuh dengan keluh-kesahku. Cukup disini saja aku akan menumpahkan semuanya.

Kata Spiral

Untuk menyambut semakin dekatnya Olimpiade sains Nasional, saya pengen berbagi sedikit solusi soal OSN Komputer. Semoga bisa membantu adik2 sekalian yang hendak berkompetisi di OSN nanti. Kali ini saya mau membahas soal favorit saya, Kata Spiral, soal OSN 2005.

Deskripsi

Suatu sistem sandi menyandikan kalimat yang diberikan dalam bantuk spiral.

Penyusunan tersebut dilakukan membentuk matriks spiral yang dimulai pusat matriks

1 karakter pertama, lalu 1 karakter berikutnya ke kanan, lalu 1 karakter berikutnya ke

bawah, lalu 2 karakter berikutnya ke kiri, lalu 2 karakter berikutnya ke atas, 3 karakter

berikutnya ke kanan, 3 karakter berikutnya ke bawah, dan seterusnya hingga semua

karakter dalam kalimat termasuk dalam spiral. Khususnya, karakter spasi di ganti

dengan “_” (underscore), dan jika ada baris/kolom tersisa setelah karakter terakhir

maka elemen-elemen matriks diisi juga dengan “_” (underscore) tsb. Misalnya

kalimat “Seluruh peserta OSN bidang komputer harus mengerjakan soal-soal sebaikbaiknya

untuk mendapatkan peringkat terbaik.” Dikodekan kedalam matriks sebagai

berikut.

Baca lebih lanjut

Program Penerjemah Bilangan

Ok, next program, pengeja bilangan.
Kebetulan, dulu temen saya pernah minta tolong dibuatkan program ini untuk tugas kuiahnya, jadi saya tinggal copy-paste😛

Bagaimana caranya membuat program untuk membaca digit angka ini?
Sebeumnya, mari kita analisis masalahnya dulu.
Disediakan bilangan yang tersusun dari m digit angka.
Kita lihat angka ini mulai dari yang paling kanan.
Untuk n>=0 berlaku lemma sebagai berikut :

  1. Digit ke 3n+1 (dari kanan) pasti diikuti kata “ribu”, “juta”, “milyar”, dst
    KECUALI JIKA digit 3n+1 hingga digit 3n+3 bernilai ‘0’.
  2. Digit ke 3n+2 pasti diikuti kata “puluh”, KECUALI :
    • digit tersebut ‘0’
    • digit ke 3n+2=’1′ dan digit ke 3n+1<>’0′ (karena menghasilkan angkabelasan)
  3. Digit ke 3n+3 pasti dikuti kata “ratus” KECUALI digit tersebut = ‘0’
  4. Karakter ‘1’ ditulis sebagai “satu” jika berada pada posisi 3n+1. KECUALI pada posisi ke 4 (ribuan), bisa ditulis sebagai “se” (‘seribu’) jika dua digit didepannya (digit 5 dan 6) adalah ‘0’. Selain pada posisi itu dan posisi 3n+2, ‘1’ ditulis sebagai “se”.
  5. Jika karakter ‘1’ menempati posisi 3n+2, maka
    • jika karakter dibelakangnya (3n+1) adalah ‘0’ maka kedua digit ditulis sebagai “se”+”puluh”
    • jika karakter dibelakangnya (3n+1) bukan ‘0’ maka kedua digit ditulis sebagai “”+”belas”, kemudian ind dan i masing2 dikurangi 1
      yang berarti kedua digit sudah diterjemahkan.
  6. Karakter ‘0’ tidak diterjemahkan.

Dari lemma-lemma diatas, terlihat bahwa blok seleksi/ logika akan sangat dominan dalam program ini. Pertama-tama kata-kata untuk menerjemahkan digit angka ini kita simpan dahulu dalam array. Dan untuk memudahan penerjemahan dan indexingnya (yup! kita akan bermain-main dengan index di sini🙂 ), angka ini kita baca dari yang paling kanan (atau lebih mudahnya, angkanya kita balik!). Oh, iya! Jangan lupa dengan special casenya yah! Hati-hati dengan angka 0 dan 1!

So, here it is listing yang saya buat

var pangkat3:array[0..4] of string=('','ribu ','juta ','milyar ','trilyun ');

    //pangkat3 => kata untuk orde 10^3n

    atrib:array[0..3] of string=('belas ','','puluh ','ratus ');

    //atrib => untuk ratusan, puluhan dan belasan

    angka:array[0..9] of string=('se','satu','dua','tiga',

                                 'empat','lima','enam',

                                 'tujuh','delapan','sembilan');

    //angka => menerjemahkan tiap digit angka

    inp:string;

    //inp => angka yang akan diterjemahkan

    ind:integer;

    //ind => bernilai 1-3 untuk menyatakan digit ke 3n+ind

    //berfungsi menentukan atrib yang akan digunakan

    i,j:integer;

    c:char;

begin

  readln(inp);

  i:=length(inp);

  inp:='0'+inp;            //mengatasi input '0'

  while (inp<>'') and (inp[1]='0') do

    begin

      delete(inp,1,1);

    end;

  if inp='' then

    begin

      writeln('nol');

      halt;

    end;

  i:=length(inp);

  while i mod 3<>0 do      //ditambah '0' sampai panjangnya kelipatan 3

    begin                  //untuk mempermudah penulisan nantinya

      inp:='0'+inp;

      inc(i);

    end;

  ind:=3;

  for j:=1 to i div 2 do   //angka dibalik, biar gampang diproses

    begin

      c:=inp[j];

      inp[j]:=inp[i+1-j];

      inp[i+1-j]:=c;

    end;

  while i<>0 do

    begin

      {angka 1 biasa atau menimbulkan angka belasan?}

      if inp[i]='1' then

        if ind<>2 then

          {pilih "se" atau "satu"?}

          if ((ind=1) and (i<>4)) or

             ((i=4) and ((inp[5]<>'0') or (inp[6]<>'0'))) then

             write(angka[1],' ')

          else

            write(angka[0])

        else

          begin

            {angka belasan dan "sepuluh"}

            if (inp[i-1]='0') then write(angka[0])

            else

              begin

                if inp[i-1]='1' then write(angka[0],atrib[0])

                else

                  begin

                    val(inp[i-1],j);

                    write(angka[j],atrib[0]);

                  end;

                dec(i);

                dec(ind);

              end;

          end

      else

        if inp[i]<>'0' then

          begin

            {angka-angka lainnya}

            val(inp[i],j);

            write(angka[j],' ');

          end;

      {ratus dan puluh}

      if inp[i]<>'0' then write(atrib[ind]);

      {ribu, juta, milyar}

      if (ind=1) and ((inp[i]<>'0') or (inp[i+1]<>'0') or (inp[i+2]<>'0')) then

        write(pangkat3[(i-1) div 3]);

      dec(ind);

      dec(i);

      if ind=0 then ind:=3;

    end;

  writeln;

  readln;

end.

Segitiga Pascal – part II

Karena banyaknya permintaan, saya coba buat coding untuk program Segitiga Pascal dalam  C++. Mohon maaf, untuk

program dalam bahasa JAVA, saya belum bisa buat karena pemahaman OOP saya masih cetek dan lebih-lebih, laptop saya

yang sudah tuwa dan mulai rewel menolak untuk diinstall JDK T_T
Algoritmanya tidak jauh berbeda dengan program sebelumnya dalam bahasa Pascal. Hanya saja, untuk kemudahan, saya

gunakan array 2 dimensi saja. Listingnya sebegai berikut

#include <iostream.h>

int main(){
int n,i,j;
unsigned long long arr[101][101];

cin>>n;
for (i=1;i<=n;i++){
for (j=1;j<i;j++){
arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
cout<<arr[i][j]<<‘ ‘;
}
arr[i][i]=1;
cout<<arr[i][i]<<‘\n’;
}

return 0;
}

Katanya, banyak jalan menuju Roma. Begitu pula dalam pemrograman. banyak algoritma yang bisa diterapkan untuk

menyelesaikan satu masalah. Berikut ini salah satu coding lain untuk membuat Segitiga Pascal. Masih mengunakan

bahasa C++, hanya dengan sedikit sentuhan STL dan trik minimalisasi memori (duuh, kayakya bahasanya ketinggian,

hehehe… :p ). Here they are

#include <iostream.h>
#include <vector.h>

int main(){
int n,i,j,tmp1,tmp2;
vector <unsigned long long> arr;
bool odd;

cin>>n;
arr.push_back(0);
arr.push_back(1);
if (n>=1) cout<<arr[1]<<‘\n’;

for (i=2;i<=n;i++){
odd=i%2;
tmp1=0;
for (j=1;j<=i/2;j++){
tmp2=arr[j];
arr[j]=tmp1+arr[j];
tmp1=tmp2;
}

for (j=1;j<=i/2;j++) cout<<arr[j]<<‘ ‘;
if (odd) {
arr.push_back(2*tmp1);
cout<<arr[i/2+1]<<‘ ‘;
}
for (j=i/2;j>=1;j–) cout<<arr[j]<<‘ ‘;
cout<<‘\n’;
}
return 0;
}

Kira-kira demikianlah🙂
semoga bisa membantu dan semoga tidak ngebug juga :p

IOI 2008: Kabar dari Kairo

Atas doa restu segenap bangsa Indonesia akhirnya Tim Olimpiade Komputer Indonesia berhasil merebut 1 medali emas dan 3 perunggu di International Olympiad on Informatics (IOI) ke 20 di Kairo, Mesir. Penantian yang sangat panjang sejak medali emas pertama sebelumnya yaitu pada IOI ke 9 tahun 1997 di Cape Town, Afrika Selatan, akhirnya berhasil dipersembahkan melalui Irvan Jahja, siswa kelas XII, SMA Aloysius I, Kota Bandung.

Hasil yang manis ini disertai juga oleh 3 medali perunggu yang masing-masing diperoleh ketiga anggota tim lainnya: Aditya Surya Pradhitya, siswa kelas XII SMA Kolese Kanisius, Jakarta Pusat, Risan, siswa kelas XII SMAN I Tanggerang dan Listiarso Wastuargo, ex siswa SMAN III Yogyakarta. Sekedar catatan bahwa untuk IOI setiap negara hanya boleh diwakili paling banyak oleh 4 siswa dan masing-masing maksimum mendapatkan satu medali dari sekian banyak medali yang disediakan.

Ini menjadi kado dari Tim Olimpiade Indonesia untuk hari ulang tahun Kemerdekaan Bangsa dan Negara Kesatuan Republik Indonesia yang peringatannya baru berlalu beberapa hari yang lalu.

Perolehan ini menjadi prestasi terbaik yang pernah dicapai oleh tim Olimpiade Komputer Indonesia selama 14 kali mengikuti IOI. Sebagai bandingannya, prestasi terbaik sebelumnya adalah 11 tahun yang lalu dimana Indonesia mendapatkan 1 emas dan 1 perunggu, Jika dihitung jumlah medali, tahun ini mengulangi tahun lalu saat keempat peserta masing-masing berhasil memperoleh medali perunggu bahkan melebihi dengan kualitas medali yang diperoleh. Dengan hasil ini, kiprah Indonesia di olimpide Komputer dunia telah mengkoleksi 2 emas, 9 perak dan 15 perunggu.

Absolute Winner diraih oleh siswa dari China. Sementara dari 24 medali emas yang diperebutkan China dan Polandia masing-masing berhasil menyabet 3 medali emas, AS, Rusia, Taiwan dan Thailand masing-masing memperoleh 2 medali emas. Indonesia bersama dengan 8 negara lainnya (Jepang, Kanada, Australia, dan sejumlah nagara Eropa Timur) mendapatkan masing-masing 1 medali emas. Jadi, Indonesia tahun ini masuk sebagai salah satu dari hanya 14 negara pemenang medali emas, berarti pula berada dalam peringkat 14 besar jika ditinjau dari jumlah medali emas dari 77 negara yang ikut olimpiade informatika ini.

Sebagai bandingan dengan negara lainnya, banyak negara yang sebelumnya adalah pelanggan medali emas, kali ini terpaksa hanya mendapatkan beberapa medali perak atau bahkan perunggu saja atau malahan tidak mendapatkan satu medali pun. Inggris, Bulgaria, Hongaria, Ceko, Belanda, Swedia dan Singapura mendapatkan beberapa medali perak. Negara seperti Jerman, Finlandia, Perancis, Spanyol, Denmark, dan Austria hanya mendapatkan beberapa perunggu saja. Bahkan negara maju seperti Portugal dan Irlandia tidak mendapatkan satu medali pun.

Perjuangan tim Indonesia tidaklah mudah. Soal-soal yang diberikan memiliki tingkat kesulitan yang sangat tinggi. Beberapa soal bahkan memerlukan kemampuan analitis seorang mahasiswa S2 dalam memecahkan persoalan yang diberikan. Sebagaimana yang sering dijelaskan, pertandingan tingkat IOI sudah tidak lagi mempersoalkan ketrampilan pemrograman, melainkan ketajaman analitikal dalam memecahkan persoalan. Setelah persoalan dipecahkan, berikutnya mencari metoda dan pendekatan yang paling tepat dan paling efisien agar ketika solusinya diterjemahkan menjadi program maka program yang dihasilkan memiliki ketepatan dan kecepatan yang setinggi-tingginya. Kesalahan kecil berakibat fatal. Ketidak efisienan menghasilkan berkurangnya nilai yang diperoleh. Program yang benar saja untuk menjawab persoalan yang diberikan paling hanya memperoleh nilai 15 angka. Semua itu harus dikerjakan dalam rentang waktu yang sangat singkat (3 soal dalam 5 jam per harinya).

Irvan yang juga adalah pemenang medali emasi APIO (Olimpiade Komputer tingkat Asia Pasific) 2008, di hari pertama melakukan kesalahan kecil saja tetapi berakibat fatal sehingga hasilnya yang paling kecil di antara peserta kita, yaitu 126 dari nilai maksimal 300. Sempat juga ia terpukul mentalnya akibat kesalahan tersebut, tetapi syukurlah pada hari yang kedua ia bangkit dan memperoleh nilai 235 dari nilai maksimal 300, yaitu saat peserta lainnya yang giliran nilainya jatuh, menjadi total 365. Dengan demikian, ia berhasil mengejar ketinggalan dari sejumlah peserta untuk masuk kategori emas. Sementara para pemenang emas lainnya adalah mereka yang memperoleh nilai cukup baik di dua hari pertandingan tersebut..

Reinardus Surya Pradithya, Risan dan Listiaso masing-masing memperoleh perunggu kerena tidak berhasil mencapai batas nilai perak yaitu 230 sementara mereka masing-masing adalah 213, 184 dan 153. Sekedar catatan, nilai yang diperoleh Reinardus Surya Pradhitya berselisih 17 angka dari batas nilai perak.

Atas apa yang telah diperoleh ini, perlu kami menyampaikan penghargaan kami ke berbagai pihak. Selama di Kairo pihak KBRI sangat memperhatikan keberadaan rombongan dan standby apabila sewaktu-waktu rombongan memerlukan bantuan. Bapak Duta Besar sempat memberikan wejangan yang membangkitkan motivasi terutama keempat siswa kita. Dengan semua dukungan ini cukup melegakan bagi rombongan selama mengikuti pertandingan karena cuaca panas (sekitar 380 C di siang hari) dan makanan yang tentu tidak sama dengan di tanah air.

Tak kalah dukungannya adalah dari rekan-rekan Direktorat SMA di tanah air yang hampir setiap hari menghubungi rombongan untuk mengetahui perkembangan yang terjadi. Begitu juga halnya para rekan-rekan pembina lainnya tidak ikut ke Kairo. Usaha, tenaga, perhatian dan dukungan termasuk doa yang telah diberikan selama ini baik mulai dari tingkat seleksi paling awal hingga rankaian pelatnas yang dilalui, hingga keberadaan di Kairo ternyata telah berbuahkan hasil yang cukup membanggakan. Di antaranya juga, para alumni TOKI yang sangat penting partisipasinya baik langsung maupun tidak langsung dalam mengasah ketajaman analsis para adik-adiknya ini. Para peserta seleksi 2007-2008 yang tidak lolos secara tidak langsung juga berperanan bagi keberhasilan ini. Persaingan yang ketat saat di OSN, dan serangkaian pelatnas terutama pelatnas III yang “jauh lebih sengit” lagi persaingannya telah membentuk mental bertanding keempat anggota TOKI 2008 ini.

Dilain pihak, berkaca dari negara-negara yang lebih baik prestasinya, rasanya kita masih perlu meningkatkan keseriusan dalam hal ini. Pembinaan yang dilakukan lebih untuk memoles dan mempersiapkan siswa tetapi hasil yang diperoleh tetap lah sangat bergantung potensi siswa yang bersangkutan. Jika keberhasilan kali ini karena berhasil menjaring siswa berpotensi seperti Irvan cs., maka di masa depan harusnya lebih banyak lagi siswa potensial demikian bisa direkrut untuk dibina. Mereka pastinya cukup banyak tersebar di seantero tanah air, namun banyak kendala baik dari sekolah, birokrat dinas pendidikan setempat, maupun keterbatasan pusat sehingga mereka tidak muncul kepermukaan. Seandainya semua pihak melihat hal ini sebagai kepentingan nasional, bukannya sebagai kepentingan yang sempit, rasanya kita tidak akan kalah dari Thailand bahkan dari China, AS dan Rusia sekalipun.

Semoga ini menjadi motivasi bagi para siswa kita di tanah air untuk berdiri tegak menghadapi tantangan masa depan mereka sendiri. Prestasi ini telah membuktikan bahwa kita memiliki kemampuan yang tidak kalah dari bangsa lain selama kita mau belajar tekun dengan tekad yang kuat. Tidak bisa dipungkiri lagi bahwa masa depan penuh tantangan dan keberhasilan kita sangatlah ditentukan oleh keuletan untuk menguasai ilmu dan teknologi khususnya teknologi informasi dan ilmu komputer.

Salam dari Kairo.
22 Agustus 2008

  • Suryana Setiawan (Delegation Leader)
  • Adi Mulyanto (Deputy Leader)
  • Julio Adisantoso (Pembina)
  • Ilham W Kurnia (Pembina)
  • Irvan Jahja
  • Reinardus S Pradhitya
  • Risan
  • Listiarso Wastuargo

(diutip dari toki.or.id)

Wow!!

Great Achievement!

Akhirnya pecah telur nih, 10 tahun tanpa emas. Plus, semua pulang bawa medali ^o^

Nice job Bro! You did good!

Selamat..selamat..selamat..

Selamat dan terima kasih juga kepada semua pembina dan alumni TOKI yang telah guyub rukun menggojlok TOKI 2008 ini.

Semoga prestasi ini dapat terus dipertahankan, atau bahkan ditingkatkan ditahun-tahun yang akan datang.

Amiiin!!!

Standing Applause for TOKI!!🙂