Pemrograman untuk santai

Baru saja lihat blog Pak Budi, rupanya ada coding for fun menggunakan bahasa Perl. Puyeng juga membacanya, karena saya tidak mengerti bahasa pemrograman Perl. Akhirnya saya coba jalankan code tersebut di komputer saya. Pertama install dulu Active Perl, kemudian bereskan apostroph di code tersebut, kemudian baru saya bisa menjalankan software tersebut. Hasilnya seperti ini:

0: 1 4
1: 2 5 0
2: 3 6 1
3: 7 2
4: 0 5 8
5: 1 6 9 4
6: 2 7 10 5
7: 3 11 6
8: 4 9 12
9: 5 10 13 8
10: 6 11 14 9
11: 7 15 10
12: 8 13
13: 9 14 12
14: 10 15 13
15: 11 14

Hmm, rupanya software ini membuat daftar vertex dari suatu graph dengan 16 node. Saya telusuri lagi, ada orang lain yang membuat code dengan fungsi serupa, namun menggunakan C++. Saya lihat lebih detail lagi, nampaknya software yang C++ lebih kompleks, tidak sekedar membuat daftar vertex. Output software C++ tersebut menghasilkan graph yang dapat dibuat menggunakan GraphViz. Jadi kalau dibandingkan tidak fair lah , kan fungsinya berbeda.

Supaya tambah rame, saya coba membuat software dengan fungsi serupa dengan software Pak Budi, namun menggunakan bahasa PHP dan C. Ini yang PHP:


<?
$m=4; //x size
$n=4; //y size
for($x=0;$x<$m;$x++) // iterate thru all x
for($y=0;$y<$n;$y++) // iterate thru all y
{
printf("(%d,%d)%d: ",$x,$y,$x*$n+$y);
// tetangga di kanan (x+1,y)
if($x!=$m-1)
{
$xt=$x+1;$yt=$y; // neighbour coordinate
printf("(%d,%d)%d ",$xt,$yt,$xt*$n+$yt );
}
// tetangga di kiri (x-1,y)
if($x!=0) {
$xt=$x-1;$yt=$y; // neighbour coordinate
printf("(%d,%d)%d ",$xt,$yt,$xt*$n+$yt );

}
// tetangga di atas (x,y+1)
if($y!=$n-1)
{
$xt=$x;$yt=$y+1; // neighbour coordinate
printf("(%d,%d)%d ",$xt,$yt,$xt*$n+$yt );
}
// tetangga di bawah (x,y-1)
if($y!=0) {
$xt=$x;$yt=$y-1; // neighbour coordinate
printf("(%d,%d)%d ",$xt,$yt,$xt*$n+$yt );
}
printf("\n");
}
?>

Kemudian software ini saya port ke C, hasilnya seperti ini:


/*
* File: main.c
* Author: waskita
*
* Created on August 1, 2008, 7:03 PM
*/

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
int m = 4; //x size
int n = 4; //y size
int x,y,xt,yt;

for (x = 0; x < m; x++) // iterate thru all x
for (y = 0; y < n; y++) // iterate thru all y
{
printf("(%d,%d)%d: ", x, y, x * n + y);
// check right neighbour (x+1,y)
if (x != m - 1) {
xt = x + 1; // neighbour coordinate
yt = y;
// x ,
printf("(%d,%d)%d: ", xt, yt, xt * n + yt);
}
// check left neighbour (x-1,y)
if (x != 0) {
xt = x - 1; // neighbour coordinate
yt = y; // neighbour coordinate
printf("(%d,%d)%d: ", xt, yt, xt * n + yt);

}
// check upper neighbour (x,y+1)
if (y != n - 1) {
xt = x; // neighbour coordinate
yt = y + 1; // neighbour coordinate
printf("(%d,%d)%d: ", xt, yt, xt * n + yt);
}
// check lower neighbour (x,y-1)
if (y != 0) {
xt = x; // neighbour coordinate
yt = y - 1; // neighbour coordinate
printf("(%d,%d)%d: ", xt, yt, xt * n + yt);
}
printf("\n");
}
return (EXIT_SUCCESS);
}

Output software C dan PHP adalah seperti ini:

(0,0)0: (1,0)4 (0,1)1
(0,1)1: (1,1)5 (0,2)2 (0,0)0
(0,2)2: (1,2)6 (0,3)3 (0,1)1
(0,3)3: (1,3)7 (0,2)2
(1,0)4: (2,0)8 (0,0)0 (1,1)5
(1,1)5: (2,1)9 (0,1)1 (1,2)6 (1,0)4
(1,2)6: (2,2)10 (0,2)2 (1,3)7 (1,1)5
(1,3)7: (2,3)11 (0,3)3 (1,2)6
(2,0)8: (3,0)12 (1,0)4 (2,1)9
(2,1)9: (3,1)13 (1,1)5 (2,2)10 (2,0)8
(2,2)10: (3,2)14 (1,2)6 (2,3)11 (2,1)9
(2,3)11: (3,3)15 (1,3)7 (2,2)10
(3,0)12: (2,0)8 (3,1)13
(3,1)13: (2,1)9 (3,2)14 (3,0)12
(3,2)14: (2,2)10 (3,3)15 (3,1)13
(3,3)15: (2,3)11 (3,2)14

Jadi mending mana, Perl, C++, PHP, C , dan mungkin juga Java, Ruby , C# ?

4 thoughts on “Pemrograman untuk santai

  1. Ping balik: Programming lebih santai lagi « Waskita Adijarto

  2. Ping balik: Pemrograman santai dengan assembler 8051 « Waskita Adijarto

Tinggalkan Balasan

Please log in using one of these methods to post your comment:

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