更新於 2024/09/19閱讀時間約 2 分鐘

#1 Codewars - Pillars (8 kyu)

Codewars 是個程式練習網站,筆者主要練習的是 JavaScript,會記錄自己的解法,並參考其他人的寫法來改善自己的程式碼,那麼我們就開始吧!

題目

原始題目

路邊有柱子。 柱子之間的距離相同,柱子的寬度也相同。
您的函數接受三個參數:

1. 柱子數量 (≥ 1);
2. 柱子之間的距離(10 - 30公尺);
3. 柱子的寬度(10 - 50 公分)。

計算第一個和最後一個柱子之間的距離(以公分為單位)(不包括第一個和最後一個柱子的寬度)。

拆解流程

依據題意可整理出以下重點:

  1. 柱子之間的所有距離 = 所有空隙 + 所有柱子的寬度(需排除第一個和最後一個柱子)
  2. 空隙計算方式:空隙數量 * 單一空隙距離。需要留意空隙數量的計算是兩根柱子之間只有一個空隙,三根柱子之間就會有兩個空隙...... 以此類推,可知所有柱子若有 x 根,空隙數量應為 x-1
  3. 單位需要換算成公分,一公尺為 100 公分

程式撰寫

function pillars(numPill, dist, width) {
if (numPill > 1) {
return (numPill - 1) * dist * 100 + (numPill - 2) * width;
} else {
return 0;
}
}

改善寫法

後來參考其他人寫法,主要發現有以下可以改善的地方:

  • 三元運算子可以寫得更精簡
  • 將各個項目分開計算,程式碼會更好閱讀
  • 函式儘早回傳,此處可將 false 結果置前

並改寫如下:

  • 第一種:分開計算 + 函式儘早回傳

雖然程式碼較長,但閱讀上較為直覺

function pillars(numPill, dist, width) {
if (numPill === 1) {
return 0;
} else {
let pillsDist = dist * 100 * (numPill - 1);
let pillsWidth = width * (numPill - 2);
return pillsDist + pillsWidth;
}
}
  • 第二種:使用三元運算子
function pillars(numPill, dist, width) {
return numPill === 1 ? 0 : (numPill - 1) * dist * 100 + (numPill - 2) * width;
}


今天就介紹到這裡,如果大家有更好的寫法歡迎一起來討論哦~

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.