Kata Practice - Square Every Digit (JavaScript)

Kata Practice - Square Every Digit (JavaScript)

這個系列會把自己練習過的 Kata 題目記錄下來,希望除了記錄的性質以外也能夠觀察自己撰寫程式邏輯的進化過程。如果有幸看到這邊的話也可以參考一下,再到 Codewars 的網站註冊一個帳號試著玩看看,自己蠻喜歡整個網站的得分和排行榜設定,會讓人越寫越有成就感喔!

題目

Welcome. In this kata, you are asked to square every digit of a number and concatenate them.

For example, if we run 9119 through the function, 811181 will come out, because 92 is 81 and 12 is 1. (81-1-1-81)

Example #2: An input of 765 will/should return 493625 because 72 is 49, 62 is 36, and 52 is 25. (49-36-25)

Note: The function accepts an integer and returns an integer.

自己的解法

1
2
3
4
5
6
const squareDigits = (num) => {
const digits = num.toString().split('');
const squaredDigits = digits.map(digit => digit ** 2).join('');

return Number(squaredDigits);
}

解題脈絡

  1. 先把 num 改成 string 型別後用 split 切分
  2. 使用 map 將每一個陣列內的數字字串平方
  3. 使用 join 將計算結果合併
  4. 記得把字串轉回 number

其他人的解法

1
2
3
4
5
6
7
8
function squareDigits(num){
var restult = num
.toString()
.split('')
.map(num => Math.pow(Number(num),2))

return Number(restult.join(''));
}

選擇記錄這個解法的原因

會選擇這個答案是因為我最一開始的想法也是有想到 JS 是不是有提供數學的次方 function 的功能?但是我當時沒有去查,所以想說選擇這個答案順便做一下紀錄 Math.pow() 這個方法,讓自己有一個印象。

觀念釐清

好像一樣呼應到我前幾次 kata 練習說的,這種題目寫越多之後越發現,其實大部分的起手式都一樣,看是要先轉成 string 或是 number 後,再進行題目所要求的操作。

那我們就下次見ʘ‿ʘ

評論