Pages

Thursday, March 1, 2012

Belajar Pemrograman dari Project Euler

Anda punya minat dalam komputasi matematik?  Bisa jadi anda telah bergabung dalam Project Euler.  Bila belum, cobalah kunjungi situs webnya di http://projecteuler.net/.  Pengelola situs ini secara berkala memuat open problem terkait komputasi matematik.  Hingga 28 Februari 2012, lebih dari 210 ribu peserta dari 205 negara (termasuk Indonesia) turut serta dalam projek ini.  Untuk mengikutinya, anda harus mendaftar terlebih dahulu.  Setelah berpartisipasi aktif, anda dapat mengukur level kemampuan anda atau berdiskusi dengan sesama peserta.  Yang tak kalah pentingnya tentu saja peserta bisa belajar melihat pendekatan solusi peserta lain.  Hal ini dapat meningkatkan kemampuan peserta dalam perancangan algoritme dan pemrograman sehingga dapat menghasilkan program yang elegan dan efisien.

Untuk menyelesaikan sebuah soal, selain pemahaman secara matematis, anda disarankan menggunakan alat bantu komputasi.  Hingga akhir Februari 2012, ada 59 bahasa pemrograman/softwares yang dilaporkan peserta sebagai alat bantu komputasi.  Grafik berikut menampilkan urutan 10 besar bahasa pemrograman berdasarkan rataan skor indeks banyaknya pengguna dan persentase banyaknya soal yang dapat diselesaikan.  Urutan dua teratas ditempati sistem aljabar komputer (CAS) Pari/GP dan Mathematica.  Berbeda dengan CAS komersial Mathematica, Pari/GP adalah free CAS yang dikembangkan sebagai alat bantu, khususnya dalam komputasi teori bilangan.
Source: http://projecteuler.net/languages   (as of Feb 27, 2012)

Berikut adalah contoh sebuah soal Project Euler (Problem 2):
Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.
Ada tiga tahapan utama dalam masalah ini: i) membangkitkan barisan Fibonacci dengan bilangan yang tidak melebihi 4 juta, ii) memilih bilangan Fibonacci genap, lalu iii) menjumlahkannya.  Mari kita lihat implementasinya pada beberapa bahasa pemrograman, baik yang bertipe fungsional maupun prosedural.

Mathematica (Fungsional)
Select[Fibonacci/@Range@NestWhile[(#+1)&,1,Fibonacci[#]<=4*10^6&]-1, 
  EvenQ]//Total

Mathematica (Prosedural)
sum = 0;
For[i = 1, Fibonacci[i] <= 4000000, i++, 
 If[EvenQ@Fibonacci[i], sum += Fibonacci[i]]]
sum

Pari/GP (Prosedural)
s=0;
forstep(i=1,100,1,a=fibonacci(i);if(a<=4e6,if(Mod(a,2)==0,s+=a)));
s

C/C++ (Prosedural)
#include <iostream>
using namespace std;

int main(void)
{
  int s = 0;
  for (int i = 1, j = 2; j < 4e6; j += i, i = j-i)
    if (j % 2 == 0)
      s += j;

  cout << s << endl;
  return 0;
}

APL/J/K (Fungsional, perintah hanya dengan karakter :) )
fib=: {."1@(]`(({: , +/)@])@.(> {:)^:(<_))&1 2
   +/ (#~ -.@(2&|)) fib 4e6

Tipe manakah yang menjadi andalan anda, atau yang mungkin memberikan inspirasi untuk memperdalamnya?  Cobalah jalan-jalan sambil 'cuci otak' ke Project Euler...

[Hide comments] - [Show comments]
Click on a single comment to hide/show its text

3 comments:

presbytis said... [reply]

Salam kenal pak, saya lagi cari sesama indonesian yang ngerkan project euler juga, hehe. Kalo saya lebih suka pake python gaya fungsional. Sudah lama daftar project euler tapi belum beranjak dari level 1 nih...

Kutha Ardana said... [reply]

@presbytis
Salam Euler! Terima kasih. Tetap smangat, pasti dapat manfaat menekuni proj. Euler...

fangirlinglifeu said... [reply]

saya sedang belajar tentang ini juga, kalau saya sering mencari referensi belajar disini Ilmu Komputasi Matematika

Post a Comment