Bir başka mülakat sorusu ile karşınızdayım. Açıkçası sıkça sorulup sorulmadığından emin değilim ama her problemi çözmeye çalışmanın yazılım geliştiriciye mutlaka bir şeyler kattığını düşünüyorum. Üstelik eğlenceli bile bulabilirsiniz kim bilir! :)
Bu konu ile ilgili yazdığım önceki yazıya buradan ulaşabilirsiniz.
Sorumuz şöyle:
Parametre olarak pozitif bir sayı (N) kabul eden bir fonksiyon yazın. Bu fonksiyon console.log ile '#' karakterlerini kullanarak N seviyeden oluşan bir piramit şekli oluşturmalı. Piramit şeklinin hem sağ hem sol tarafında boşluklar olmasına dikkat edin. Örnek: N=3 için;
function pyramid(n) { const mid = Math.floor((2 * n - 1) / 2); for (let row = 0; row < n; row++) { let level = ''; for (let column = 0; column < n * 2 - 1; column++) { if (column >= mid - row && column <= mid + row) { level += '#'; } else { level += ' '; } } console.log(level); } }
Peki neler oluyor burada?
Öncelikle NxN büyüklüğündeki karenin, satırının ortasını bulmak için bir hesaplama yapıp; mid değişkenine bu değeri atıyoruz. Sonra N kere for döngüsü içinde dönerek her satırı ekrana console.log ile yazdırıyoruz. Bu işlemi yaparken satırdaki hangi karakterlerin '#' ve ' ' olduğunu, yazacağımız sütunun bulduğumuz orta (mid) değerine olan uzaklığına bakarak belirliyoruz. Çok basit bir çözüm.
Bu probleme recursive bir çözüm getirmeniz istenirse de aşağıdaki gibi uygulanabilir:
function pyramid(n, row = 0, level = '') { const mid = Math.floor((2 * n - 1) / 2); let add; if (n === row) { return; } if (level.length === n * 2 - 1) { console.log(level); return pyramid(n, row + 1); } if (level.length >= mid - row && level.length <= mid + row) { add = '#'; } else { add = ' '; } pyramid(n, row, level + add); }
Bu fonksiyonda ilk çözümdeki gibi bir döngü içerisinde satırları belirleyip yazdırmak yerine fonksiyonu yeniden çağırarak aynı sonucu elde ediyoruz.
Çözümlerle ilgili sorunuz olursa yorumlara yazmaktan çekinmeyin: )
Sonraki yazımda görüşmek üzere.
Esen Kalın.