紀錄 CodeWars 的刷題過程、解答、衍伸想法。
不定期更新唷~。
7kyu
String ends with?
日期:20221008
題目:
1 | 提供兩個字串參數,第二的參數要等同於第一個參數的結尾。 |
答案:
1 | let solution = (str, ending) => str.endsWith(ending); |
補充 MDN 對String.prototype.endsWith()
的說明: 連結
String ends with?
日期:20221011
題目:
1 | 讓數字由大到小,做降序排列。 |
答案:
1 | // 我的解法: |
使用sort((a, b) => b - a)
做降序排列,但只支援陣列。
所以先將數字轉字串再轉陣列,再將陣列轉字串再轉數字。
Cats and shelves - 貓咪和架子
日期:20221011
題目說明(配網站的圖):
- 架子為左右左右往上排序。
- 貓咪可以一次跳 3 個架子的高度,例如: 1 → 2 或 1 → 4。
- 但是貓咪不能直接爬頭頂上的架子,例如: 1 → 3 不行,一定要 1 → 2 → 3。
- 請算出不同號碼的架子(開始與結束)之間,貓咪最少要跳幾次才能成功抵達?
答案:
1 | let solution = (start, finish) => { |
本來是想算出數字差除以三後,有餘數就加一(再跳一次),沒有餘數則取除數。
但有個陷阱是貓咪不能直接跳頭頂上的架子,等於要多跳。
所以應該為寫出「取除數+取餘數」的算式。
考解題和計算能力QQ
Printer Errors 影印機錯誤
日期:20221022
題目:
1 | 字符串只要出現不是來自 a to m.,例如aaaxbbbbyyhwawiwjjjwwm字母就會出錯。 |
答案:
1 | let printerError = s => { |
卡有點久。
主要是可以用中文說出流程,卻不知道該使用哪個程式碼表現。
- 計算 s 的長度
- 用正規表達式找出不符合的字母 ← 卡在這裡
- 計算不符合字母的長度
最後找到test()
方法來判斷正規表達式,並用filter()
篩選出來,耶!
解出後看一下大神的答案:
${s.replace(/[a-m]/gi, "").length}/${s.length}
,使用replace()
替換其他符號再計算長度,不用彎彎繞繞那麼多,真的聰明!${(s.match(/[^a-m]/g) || []).length}/${s.length}
,原來可以使用match()
來找出符合正規表達式的條件!也加上||
判斷來計算長度,也是我沒想到的。
寫出自己的程式碼後,再看別人的解答也很有趣呢。
但不一定會照單全收,只是未來也可以用在其他情境上,讚讚。
Testing 1-2-3 - 測試 1-2-3
日期:20221026
題目:
1 | 題目重點翻譯: |
答案:
1 | let number = array => array.map((value, index) => `${index + 1}: ${value}`); |
解題方式
一開始使用:
1 | let number = array => array.map(v => array.indexOf(v)+1 +": "+v); |
出現以下錯誤:
1 | [ '1: ', '1: ', '1: ', '1: ', '1: ' ] |
上網找到這位大神的解法,才知道應該熟悉array.map()
的語法,才能得到最佳解。
map()
方法:
這題可以訓練 array.map()
的語法,參考資料:
1 | array.map(function(currentValue,index,arr), thisValue) |
- 可對陣列內每一個元素加工後回傳,組合成一個新的陣列。
- 參數為:
function
: 函式內的參數分別為:currentValue
,index
,array
。thisValue
: 執行 callback 時,用於 this 的值,被執行的對象會回傳給函數。
補充: thisValue
參考資料:
- 第二行程式碼可判斷所有 currentValue 是否都大於 1,但因為index 0 為 1,沒有大於 1,所以回傳 false。
- 第六行程式碼可判斷所有 currentValue 是否都大於 1,[1, 2, 3] 皆大於 0,回傳 true。
因此利用參數的參數進行加工,便可得到我們要的回傳值,理解過後挺方便的。
Filter the number
日期:20221028
題目:
1 | 回傳字串裡的阿拉伯數字。 |
答案:
1 | let filterString = value => parseInt(value.split('').filter(n => !isNaN(n)).join('')); |
V A P O R C O D E
日期: 20221103
題目:
1 | 寫一個函式將代入的字串轉換為 V A P O R W A V E 句子 |
答案:
1 | let vaporcode = string => string.replace(/ /g, '').toUpperCase().split('').join(' '); |
土法煉鋼的解法。
Love vs friendship - 愛情 vs 友情
日期: 20221103
題目:
1 | 讓每個英文字母都賦予一個數字,寫一個 funtion 來計算字母的加總。 |
1 | let wordsToMarks = string => [...string].reduce((total, currentValue) =>total += currentValue.charCodeAt(0)-96, 0); |
透過這題,第一次知道 ASCII, charCodeAt(),也嘗試 […arr], reduce 的寫法。
Likes Vs Dislikes
日期: 20221108
題目:
1 | 這題在模擬 Youtube 的喜歡不喜歡按鈕,會提供一個操作的陣列,寫一個 function 來回傳最終結果到底是按下喜歡還是不喜歡 |
解題:
1 | let likeOrDislike = buttons => buttons.reduce((acc, cur) => acc == cur ? 'Nothing' : cur, 'Nothing'); |
透過同學的協助解這題。
1 | reduce((a,b)) |
Exes and Ohs-井字棋(OOXX)
日期:20221109
題目:
1 | 在不區分大小寫的前提下,判斷 string 中 'X' 和 'O' 的數量是否相等,返回布林值 |
答案:
1 | let XO = str => { |
這次學到 {x,o}=reduce()
的寫法,輕鬆獲得 x 和 o 得值。