Membuat pola angka persegi dengan PHP


Malam ini, teman saya memberikan saya suatu pola angka yang harus dihasilkan dengan menggunakan php dalam waktu kurang dari 30 menit. Teman saya tersebut mendapatkan kasus tersebut ketika sedang melamar pekerjaan dan penasaran karena menurutnya akan lama untuk menyelesaikan kasus tersebut. Berikut adalah pola yang diberikan:

1 2 3 4 5
16 * * * 6
15 * * * 7
14 * * * 8
13 12 11 10 9
Karena ini adalah soal yang diberikan untuk diselesaikan seketika dalam waktu singkat, saya langsung mengasumsikan bahwa solusi yang terbaik adalah solusi yang menggunakan prinsip KISS (Keep it simple, stupid) sehingga dengan segera saya menjawab itu adalah persoalan mudah dan mungkin diselesaikan dalam waktu yang disediakan. Teman saya meminta untuk membuktikannya dan setelah waktu tak lebih dari 20 menit solusi telah berhasil didapatkan.
Berikut adalah code yang digunakan:
[sourcecode language='php'  padlinenumbers='true']
public function actionTest($n)
	{
		$total = $n*4 - 4;
		for($j=0; $j<$n;$j++)
		{
			if($j==0)
				for($i=1;$i<$n+1;$i++)
					echo $i . " ";
			else if($j==$n-1)
				for($j=$total;$j>$i-1;$j--)
					echo $j . " ";
			else
				for($k=0;$k<$n;$k++)
				{
					if($k==0)
						echo $total--;
					else if($k==$n-1)
						echo $i++;
					else
						echo "*";
					echo " ";
				}
			echo "
";
		}
	}
[/sourcecode]
Penjelasan singkat dari kode di atas adalah sebagai berikut:
  1. $n digunakan untuk menyimpan jumlah baris/kolom yang akan digunakan. Dalam contoh diatas nilai n adalah 5.
  2. Sebelum memproses kotak tersebut, kita tentukan angka terakhir yang digunakan. Ini kita dapatkan dengan menghitung secara kasar menggunakan rumus: total = 4n-4. Angka 4 ini kita dapatkan dari jumlah sisi yang digunakan.
  3. Selanjutnya, kita lakukan pemrosesan dengan melakukan penulisan secara berbeda untuk 3 bagian, yaitu baris pertama, baris terakhir dan baris diantaranya.

Cukup mudah khan? Winking smile

2 thoughts on “Membuat pola angka persegi dengan PHP

  1. mantap, man… tapi terlalu lieur.
    this is the real KISS (keep it stupid, simple) :p

    echo ‘1 2 3 4 5′;
    echo ’16 * * * 6′;
    echo ’15 * * * 7′;
    echo ’14 * * * 8′;
    echo ’13 12 11 10 9’;

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 )

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