codewars 新手解題心得

半夏
6 min readMay 10, 2020
  • 這是第一篇Medium心得,還不習慣排版不好請見諒

從自己 HackMD 的筆記謄過來的, 這裡 程式碼比較好閱讀。

寫在前面:
3 月的時候好像是看到 Huli 老師 ptt 上的分享,就想要來寫 codewars ,但是不知道是自己手殘還是眼殘,在註冊要輸入的程式問題我竟然寫不出來,後來問人原來只要加上 return 就好。突然覺得之前在 FreeCodeCamp 寫 JavaScript 讓現在的自己充滿黑人問號,這其實是不同的世界吧?

拆開來變數、迴圈我都明白,放在一起要解題目就覺得有障礙。而且 FreeCodeCamp 有講解,有範例,照著做很快就寫出來了。
但是 Codewars 不一樣,你全都得自己想。

雖然在解題的時候感覺到腦袋在燃燒,還有懷疑自己的智商,但是最後解出來很有成就感,有一種:哇!原來解題是這麼有趣的一件事啊!

小結論:
FreeCodeCamp 適合全新手上手,解題後有顯示進度條,全部完成後可以得到一張證書。
Codewars 適合有一點程式概念的人,比較像玩遊戲打怪破關,破關後還可以看到別人是怎麼解題滿不錯的。

以下開始正式解題:
使用龜速刷提法,因為還有軟體乙級要練習,所以預計1~2天寫一題

Isograms 等距圖

https://www.codewars.com/kata/54ba84be607a92aa900000f1/javascript
解題時間:5 月 6 號 星期三

在一開始英文就卡關了,看到介面研究很久,雖然讀一些文章的英文程度還是有的,但是都是不常見到的的單字,這裡眼冒星星,就依靠 Google 翻譯還有舉例程式碼的結果,大概了解題目的意思。

isIsogram(“Dermatoglyphics”) == true
isIsogram(“aba”) == false
isIsogram(“moOse”) == false // — ignore letter case

如果有相同的英文字母就回傳 false ,反之沒有回傳 true。第一次寫忘記判斷英文的大小寫了,補上 toUpperCase 就過了。

  
var str = str.toUpperCase();
str.toString();

Binary Addition 二進制加法

https://www.codewars.com/kata/551f37452ff852b7bd000139/javascript
解題時間: 5 月 6 號 星期三

這題要求的是二進制,經詢問友人說明 toString(2) 就可以變成2進制, 以下同理

toString() 預設是10進制
toString(8) 轉成8進制
toString(16) 轉成16進制

這大概就是這題的大魔王,要是不知道怎麼轉換進制就會卡半天(就是我)
解題卡關,解鎖查看 Solution 闖關不成功

function addBinary(a,b) {
return (a+b).toString(2);
}

String repeat 字串重複

String repeat

https://www.codewars.com/kata/57a0e5c372292dd76d000d7e/javascript 解題時間: 5 月 8 號 星期五 (大約用一個多小時解題,超龜速)

這題的題目看得懂,第一個值數字是多少,第二個值就要顯示多少次。

如果第一個數字是6,I就顯示6次

repeatStr(6, "I") // "IIIIII"
repeatStr(5, "Hello") // "HelloHelloHelloHelloHello"

一開始以為是相乘,後來覺得應該是用迴圈 但是結果一直有錯,不知道是什麼問題。

第一次寫出來的結果是這樣:

function repeatStr (n, s) {
for(var i = 0; i<n; i++){
return s[i];
}
}

得到結果: Expected: ‘\’ha ha \’’, instead got: ‘\’h\’’

好吧我也知道寫出來怪怪的,不知道怎樣取得 n 的值,第二次寫: 結果是’NaN’,好像錯的更離譜哈哈。

function repeatStr (n, s) {
var n = n.Number;
var s = s.String;
return n*s;
}

最後想破頭還是不知道,就解鎖看了,原來是有函數可以用…好吧破關不成功但學了一個函數 repeat(n)

Solution:

function repeatStr (n, s) {
return s.repeat(n);
}

這個 Solition 跟我第一次寫得好像!

function repeatStr (n, s) {
var str=""; //這裡我個人覺得用 '' 會比較好
for(var i=0; i < n; i++)
str+=s; //str = str + s
return str;
}

不懂為什麼 str+=s 回傳的值就會正確
詢問友人是因為''會把回傳的內容變成字串,就不會相乘。
var str=""; 代表設定是一個空的字串,所以不管打什麼進去都變成文字類型,懂了!

這個寫法我也覺得滿不錯的:

function repeatStr (n, s) {
var myString = ''; //宣告為字串
while(n > 0) { //當n>0的時候
myString += s;  //執行 myString = myString + s
n--; //每做一次 n 就減 1 ,直到 n 沒有大於 0
}
return myString;
}

--

--

半夏

突然注意到自己以前有在這裡寫過文章Σ(゚д゚lll),目前更新在 https://blog.roroiii.com