iT邦幫忙

2023 iThome 鐵人賽

DAY 4
0
自我挑戰組

解三十天的 CodeWars系列 第 4

RGB To Hex Conversion

  • 分享至 

  • xImage
  •  

CodeWars 題目

Link

難度

5 kyu

題目

給 RGB 三個十進位的數字,轉換成十六進位的 Hex。

思路

根據題目給的 Examples,input 跟 output 可能有:

255, 255, 255 --> "FFFFFF"
255, 255, 300 --> "FFFFFF"
0, 0, 0       --> "000000"
148, 0, 211   --> "9400D3"

傳入的三個參數不一定會在 RGB 的範圍內,也就是說要做的事有:

  • 十進制轉十六進制。
  • 限制超出的範圍。
  • 補足長度。

pseudo code

if(num > 255) num = 255
if(num < 0) "00"
return "0" + num.toString(16)

實作

function rgb(r, g, b) {
   function trans(num) {
      if (num > 255) num = 255;
      if (num <= 0) return "00";
      num = num.toString(16).toUpperCase();
      return num.length < 2 ? "0" + num : num;
   }
   return trans(r) + trans(g) + trans(b);
}

宣告一個函數 trans,在 rgb 函數之中調用,參數 num 帶入的是 rgb。

如果 num > 255num = 255;如果小於等於 0,則直接返回 “00”

調用 toString(16),並且轉換為大寫字母;用三元表達式決定是否拼接字串:

如果轉換之後的字串長度小於 2,拼接一個 ”0” 在前面,否則就直接返回 num。

最後返回拼接 rgb 三個的執行結果。

他人的解法

最佳解答與我的解法類似,因此跳過。

心得

其實一直有嘗試解 4 kyu 的題目,
但⋯⋯4 跟 5 之間絕對有無法跨越之壁吧!!
難度相差懸殊,考慮到還是以練習為目的,就先暫時沒有越級打怪了。

但因為 CodeWars 的自由度高,題目來自四面八方,其實難度的評級沒有很公平。
還蠻常看到解題之後的討論區,覺得評級有問題的。


上一篇
Human Readable Time
下一篇
The Hashtag Generator
系列文
解三十天的 CodeWars30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言