#1 Codewars - Pillars (8 kyu)

閱讀時間約 2 分鐘

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;
}


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

7會員
30內容數
正在一點一滴學習程式,相信知識量總有一天會匯聚成大海,目前專門研究前端中。
留言0
查看全部
發表第一個留言支持創作者!
傑米的沙龍 的其他內容
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這篇主要會透過 CDN 引入 Material Icons,並補足官方文件裡只有提到 Filled 類別的引用方式,但沒有提到其他類別,像是 Outlined、Rounded、Sharp、Two tone,另外還會提到如何透過偽元素加入 Material Icons,現在我們就來看看如何引入吧!
提升(Hoisting) 指的是在創造環境階段時就把變數準備好,這時值還沒被賦予到變數上。此類型的概念可以使用執行環境的「創造階段」與「執行階段」來理解。
圖片可以說是 HTML 元素中以不受控出名的元素了,在預設情況下,完全不受父容器影響,以下就來看看有哪些方法讓圖片依照你的想法變化吧。
本次的挑戰是「CSS Variables」,需要達成的目標是:「使用者操作拉桿或是選色器時,底下圖片的樣式會有對應的變化。」
本次的挑戰是「CSS + JS Clock」,需要達成的目標是:「時鐘的指針會轉動,指針都必須依據現實時鐘的規則前進。」這次需要搭配 CSS 動畫,製作時鐘的指針旋轉效果。
這系列文章會記錄 JS 30 當次挑戰時使用到的語法和相關知識。JS 30 官方有提供所有製作網頁的資源,不需要任何事前準備,就能無痛開始撰寫 JS,寫完之後還有 JS 30 作者提供的解答,不知道怎麼下手時可以參考、寫完之後也能了解更多解法,改善自己的寫法。
這篇主要會透過 CDN 引入 Material Icons,並補足官方文件裡只有提到 Filled 類別的引用方式,但沒有提到其他類別,像是 Outlined、Rounded、Sharp、Two tone,另外還會提到如何透過偽元素加入 Material Icons,現在我們就來看看如何引入吧!
提升(Hoisting) 指的是在創造環境階段時就把變數準備好,這時值還沒被賦予到變數上。此類型的概念可以使用執行環境的「創造階段」與「執行階段」來理解。
圖片可以說是 HTML 元素中以不受控出名的元素了,在預設情況下,完全不受父容器影響,以下就來看看有哪些方法讓圖片依照你的想法變化吧。
你可能也想看
Google News 追蹤
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
粉色花瓣飄蕩於陽光下的季節。 風神將微暖的風吹向街道、植物和走在耀眼陽光下的人們,將粉色花瓣隨風飄到身上,落入一位長髮的學生掌心裡。 歡聲笑語的喊聲來自某間學校的校門口,門口是人來人往的學生們,對於他們而言今天是非常特別的一件事,因為那代表了他們即將成為高中生。
Thumbnail
接續 1.1 verse1 有的時候,簡單的一步,卻走了很久。
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
該回來面對自己了吧? 把自己拉回呼吸上面,妳即是一切。
11/22 今天我把上次報告的使用者流程流程問題作解決並且討論 11/29 今天做使用者素描的因為上禮拜沒用完使用這流程所以老師要我們先用完 12/6 今天做顧客旅程地圖流程 12/13 今天做利害關係人 12/20 報告 12/27 報名表製作 1/3 期中報告
Thumbnail
喬: 知道你要寫信給我,非常高興也非常期待,果然很快就收到信了,我捧著信箋,百讀不厭,內心有著盈盈的喜悅。 可是,你也要有心理準備,因為跟你寫信,壓力、負擔太沉重了,我可能無法承受。我真的不願意獻醜,你能體諒我的心情,原諒我的自私嗎?當然,你若說我懶,我也不會辯白。 有人說,戀愛是用「談」的。這實在
Thumbnail
一起計畫一下現金流  在本篇有附上兩個EXCEL的範例,讓投資小白貓可以好好實際參考運用一下,設計出屬於自己的現金流系統。  前面提到了節省理財時間並且運用自動化的力量建構自己的金流系統,這節來實際做一個規劃。一個剛上班的年輕人,一筆薪水拿到後,可能一開始,每個月不知道怎麼花的就花完了。人性皆是如此
Thumbnail
本專欄將提供給您最新的市場資訊、產業研究、交易心法、精選公司介紹,以上內容並非個股分析,還請各位依據自身狀況作出交易決策。歡迎訂閱支持我,獲得相關內容,也祝您的投資之路順遂! 每年 $990 訂閱方案👉 https://reurl.cc/VNYVxZ 每月 $99 訂閱方案👉https://re
粉色花瓣飄蕩於陽光下的季節。 風神將微暖的風吹向街道、植物和走在耀眼陽光下的人們,將粉色花瓣隨風飄到身上,落入一位長髮的學生掌心裡。 歡聲笑語的喊聲來自某間學校的校門口,門口是人來人往的學生們,對於他們而言今天是非常特別的一件事,因為那代表了他們即將成為高中生。
Thumbnail
接續 1.1 verse1 有的時候,簡單的一步,卻走了很久。
Thumbnail
題目:你將會得到一個單詞,你的任務是返回該單詞的中間字符。如果單詞的長度是奇數,則返回中間字符。如果單詞的長度是偶數,則返回中間的兩個字符。
Thumbnail
題目:你的團隊正在開發一個新的高級文本編輯器,你的任務是實現行號功能。請編寫一個函數,該函數接受一個字符串列表作為輸入,並返回每行字符串前面附帶正確的行號。行號從 1 開始計數。格式為 n: 字符串。請注意冒號和空格之間的間隔。
Thumbnail
該回來面對自己了吧? 把自己拉回呼吸上面,妳即是一切。
11/22 今天我把上次報告的使用者流程流程問題作解決並且討論 11/29 今天做使用者素描的因為上禮拜沒用完使用這流程所以老師要我們先用完 12/6 今天做顧客旅程地圖流程 12/13 今天做利害關係人 12/20 報告 12/27 報名表製作 1/3 期中報告
Thumbnail
喬: 知道你要寫信給我,非常高興也非常期待,果然很快就收到信了,我捧著信箋,百讀不厭,內心有著盈盈的喜悅。 可是,你也要有心理準備,因為跟你寫信,壓力、負擔太沉重了,我可能無法承受。我真的不願意獻醜,你能體諒我的心情,原諒我的自私嗎?當然,你若說我懶,我也不會辯白。 有人說,戀愛是用「談」的。這實在
Thumbnail
一起計畫一下現金流  在本篇有附上兩個EXCEL的範例,讓投資小白貓可以好好實際參考運用一下,設計出屬於自己的現金流系統。  前面提到了節省理財時間並且運用自動化的力量建構自己的金流系統,這節來實際做一個規劃。一個剛上班的年輕人,一筆薪水拿到後,可能一開始,每個月不知道怎麼花的就花完了。人性皆是如此