iT邦幫忙

2023 iThome 鐵人賽

DAY 27
0

CodeWars 題目

Link

難度

6 kyu

題目

傳入一個數字 n 表示金字塔的階層。
金字塔以陣列形式來表示,如果 n = 3 金字塔:

[
  "  *  ",
  " *** ",
  "*****"
]

實作

function towerBuilder(nFloors) {
   let space = "";
   let result = [];
   for (let i = 0, n = nFloors; i < n; i++) {
      let quantity = 1 + (nFloors - 1) * 2;
      let element = space + "*".repeat(quantity) + space;
      space += " ";
      result.unshift(element);
      nFloors--;
   }
   return result;
}

space = ""; 用來紀錄每一層金字塔前方的空格,result = []; 用來儲存建立好的金字塔的每一層。

使用 for 迴圈迭代每一層金字塔。

在每一層中,計算這一層星號的數量;1 + (nFloors - 1) * 2 是根據規律計算需要有多少 * 符號;然後利用 repeat 帶入算好的數量,建立一個表示這一層的元素。

也就是說,金字塔是由最底層開始建立的。按照規律,空格是由最後一層開始增加;星星則是從最後一層開始遞減,並且從頂層開始算起順序是 1、3、5。

在每一層迴圈完成後,更新 space 變數;將元素使用 unshift 方法加入 result,這是因為迴圈從底層計算,為了保持金字塔的形狀;nFloors-- 縮小金字塔的層數,以便在下一輪迴圈計算下一層。

心得

如果要說開始解程式題之後有什麼讓我覺得荒謬的,這類題型絕對是其中之一(›´ω`‹ )
我已經可以想見之後要用程式畫山水風景了。


上一篇
Primes in numbers
下一篇
Most frequently used words in a text
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言