Utak Atik Gathuk – The Art of Coding – Sastra Pemrograman


Tadinya lagi baca milis Delphindo. Terus baca postingannya Kang Jaim, salah satu pendekar dalam dunia pemrograman. Iseng-iseng baca postingan dia, dan nemu yang ini.

 
Berikut tulisan beliau:
Tertarik dengan cuplikan kode yang ditulis pak budi, saya mencoba membuat implementasi serupa dengan menggunakan python, sebelumnya sebenarnya Waskita Adijarto telah mencoba memportingnya ke dalam bahasa C, dan sepertinya masih cukup panjang, kendati kode yang ditulisnya relatif lebih mudah dibaca.
 
Nah giliran daku juga penasaran, mencoba membuatnya dengan Java.
(Aku sendiri gak tahu ini kode untuk memecahkan masalah apa, yang menarik adalah bagaimana menuliskannya dalam berbagai bahasa pemrograman).
 
Berikut versi Perl (udah saya coba jalan dengan baik):
$m=4; $n=4;
for ($y=0; $y < $n ; $y++) { for ($x=0 ; $x < $m ; $x++) {
print $y*$m + $x . “:”;
if ($y!=0) { $neighbor = ($y-1) * $m + $x; print ” $neighbor “; } #N
if (!($x==($m-1))) { $neighbor = $y * $m + ($x + 1); print ” $neighbor “; } #E
if (!($y==($n-1))) { $neighbor = ($y+1) * $m + $x; print ” $neighbor “; } #S
if ($x!=0) { $neighbor = $y * $m + ($x – 1); print ” $neighbor “; } #W
print “n”; } }
 
Berikut versi C (belum dicoba karena saya gak punya compiler C, tapi saya yakin benar algoritmanya):
int main(int argc, char** argv) {     
int m = 4;     
int n = 4;     
int x, y;     
int neighbor;     
for (y = 0; y < n; y++) {         
for (x = 0; x < m; x++) {             
printf(“%d: “, y * m + x);             
if (y != 0) {                 
neighbor = (y – 1) * m + x;                 
printf(“%d “, neighbor);             
}// #N             
if (!(x == (m – 1))) {                 
neighbor = y * m + (x + 1);                 
printf(“%d “, neighbor);             
}; // } #E             
if (!(y == (n – 1))) {                 
neighbor = (y + 1) * m + x;                 
printf(“%d “, neighbor);             
}//#S            
if (x != 0) {                 
neighbor = y * m + (x – 1);                 
printf(“%d “, neighbor);             
}//#W            
printf(“n”);         
}     
}     
return (EXIT_SUCCESS); 
Berikut versi Python (saya coba kok error di kompie saya): 

#! /usr/bin/python
m, n = 5, 7
process = lambda x, y, z: z.append(y) if x else None

for i in range(m*n):
y, x = i / m, i % n
lst = []
process(y != 0, (y-1) * m + x, lst)
process((x!=(m-1)), y * m + (x + 1), lst)
process((y!=(n-1)),(y+1) * m + x, lst)
process((x != 0),y * m + (x – 1), lst)
print “%d: %s” % (i, ‘ ‘.join(str(key) for key in lst))

Nah yang terakhir saya buat versi Javanya:

public class HackingCode {
    public static void main(String[] args) {
        for (int m = 4, n = 4, y = 0; y < n; y++) {
            for (int x = 0; x < m; x++) {
                System.out.print((y * m + x) + ":");
                System.out.print((y != 0 ? " " + ((y - 1) * m + x)  : ""));
                System.out.print((x != m - 1 ? " " + (y * m + (x + 1)) : ""));
                System.out.print((y != n - 1 ? " " + ((y + 1) * m + x) : ""));
                System.out.print((x != 0 ? " " + (y * m + (x - 1)) : "") + "n");
            }         
        }            
    } 
}

Menurut Anda mana yang paling Anda sukai?

Mana yang paling mudah dimengerti?

Mana yang Anda pilih : lebih ringkas atau lebih readable?

Ada yang mau coba dalam bahasa lain?

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 )

Foto Google+

You are commenting using your Google+ 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 )

Connecting to %s