iT邦幫忙

2021 iThome 鐵人賽

DAY 8
0
自我挑戰組

從真「新」鎮出發!30天的刷題修行篇,讓寫程式成為新必殺技系列 第 8

資料型別轉轉轉,Ruby 30 天刷題修行篇第八話

大家好,我是 A Fei,又到了今日的解題時間,讓我們直接進入今天的題目:
(題目來源為 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.

Note: The function accepts an integer and returns an integer


題目要我們將帶入的 Number,每個位數的數字平方之後,回傳一個新 Number。其實這題不難,主要考你資料型別轉換的概念,我們只要將帶入的引數 用 to_s 方法轉成 String,然後用 split('') 打散成 Array,就可以用 map 對每個元素平方,最後用 join('') 重新組合成 String,再轉成 Number。

以下為我的解答:

def square_digits num
  arr = num.to_s.split('')
  arr.map{|n| n.to_i ** 2}.join('').to_i
end

比較評分最高的答案:

def square_digits num
  num.to_s.chars.map{|x| x.to_i**2}.join.to_i
end

可以看出解題邏輯非常相似,只是對方用 chars 方法,該方法可以將一個 String 的每個字母打散組合成陣列,是個更「炫泡」的作法。

好啦,今天解題時間就到這,大家掰掰~


上一篇
奇數金字塔,你想得出來最佳解答嗎?Ruby 30 天刷題修行篇第七話
下一篇
Two Sum 演算法初階題,Ruby 30 天刷題修行篇第九話
系列文
從真「新」鎮出發!30天的刷題修行篇,讓寫程式成為新必殺技16

尚未有邦友留言

立即登入留言