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?