透過 codewars 修練 Swift 解題技巧

葵花寶典說過,欲練神功,引刀自宮。還好,Swift 神功沒那麼可怕,只要每天在 codewars 網站解題練功,即可練成神功。

接下來就讓我們來認識 codewars 的相關操作吧。

首先,你要有帳號才能開始解題。請放心,這是完全免費的,請勇敢點選網頁上的 Sign Up 按鈕註冊帳號吧。

但是事情沒那麼簡單,

不是人人都可以註冊的 !

為了證明你略懂程式,有資格成為 codewars 的一份子,不是來亂的,你必須先解一道簡單的題目。請選擇一個你擅長的程式語言,在這裡我們當然是選擇世界上最棒的程式語言,Swift !

接著將出現一道簡單的程式題,你必須找出它的錯誤,修正後點選 SUBMIT 按鈕上傳。

成功解題後,令人感動的,我們終於看到註冊頁面。趕緊來填寫相關欄位,開始進行有挑戰的題目吧。(剛剛那題根本是給三歲小孩做的呀!)

接著,我們必須設定自己的程式程度,從初學者的 Learning to Program 到高級開發者的 Senior Developer。完成這一步,即可正式開始解題 !

登入 codewars 網頁後,可從左邊的側邊欄切換頁面。Home 首頁將隨機顯示一道題目考驗我們。想接受考驗,只要點選 TRAIN 即可開始訓練解題。

如果你不想聽天由命,想要自己選題,也可從側邊欄點選 Kata,進入題目選擇頁面。什麼是 Kata 呢 ? Kata 的中文的意思是套路,在這裡指的是經由題目練習提升程式技巧。因此我們可從 Kata 頁面選擇喜歡的 Kata 開始訓練。

如果是程式初學者,建議先調整難度(Difficulty),先從最簡單的 8 kyu 開始。(kyu 是等級的意思) 從難度區塊,我們看到有 8 kyu 到 1 kyu,別被騙了,數字愈小愈難,所以 1 kyu 是最難的 !

題目旁邊有勾勾的,表示已被我們破解的題目。

接著,就讓我們選擇沒有勾勾的 String repeat,試試另一道題吧。如下圖所示,我們可看到 String repeat 的說明,點選右上角的 TRAIN,即可開始訓練解題。

在解題頁面,當你完成程式時,可先點選右下角的 RUN SAMPLE TESTS,它會先幫我們做基本的測試。

一旦出錯,左半邊的 Output 區塊將馬上告訴我們問題。

值得注意的,為了幫助我們寫出更好的程式,它不只檢查結果是否正確,還會檢查程式碼的細節。比方以下例子,我們的 for 迴圈改寫成 _ 會更好,所以原本用 i 的寫法也會造成錯誤。

如以下例子,只有完全無錯時,才會顯示綠色的 You have passed all of the tests! :)。

此時我們終於可以點選右下角的 ATTEMPT,接受最嚴苛的審核。

要記得,通過剛剛 RUN SAMPLE TESTS 的考驗,並不代表一定過關,有時會在 ATTEMPT 階段才出現錯誤。如下圖所示,很不幸地我們失敗了,錯誤訊息告訴我們,Can’t form Range with upperBound < lowerBound。

Swift 的 range 一定要由小到大,剛剛的錯誤訊息表示它遇到了由大到小的 range。仔細想了想,當使用者傳入的 n 為 0 時,將變成 for _ in 1…0,難怪會出錯。因此我們再補上一個 if n > 0 的判斷做檢查。

這一次,當我們按下 ATTEMPT 時,終於順利地過關,此時右下角的按鈕將變成 SUMBIT FINAL,點選後即可提交我們的解法。

順利解題後,更精彩的這時才要登場。此時我們可看到來自世界各地的英雄好漢們五花八門的解法。好好吸收抄襲這些大神們的功力,相信你很快就能成為另一個大神。

如果點選上圖中的 Show Kata Test Cases,還可看到當初測試 function 傳入的參數內容,更了解此題會遇到的一些特別情況。如下圖所示,我們果然看到它傳入數字 0 當參數。

剛剛我們成功解題了,不過出來混總有一天要還的,遲早你會遇到想破頭也解不出的問題。此時你可點選解題頁面下方的 UNLOCKS SOLUTIONS,直接看解答。

當然,作弊是有代價的,此時將跳出一個視窗,提醒我們一旦看了解答,此題將不會得到分數。

什麼 ? 有分數 ? 沒錯,codewars 目標打造一個成就系統,提升我們學習的動力,我們可以將滑鼠游標移到右上角,點選 View Profile,查看自己目前的成就和做過的題目。

點選 Kata 將列出我們曾經挑戰過的題目。

點選 Solutions 將列出我們曾經寫過的解答。

如果說 Xcode 的 playground 是程式學習的遊戲園,codewars 就是提升你程式技術的練功場。梁朝偉唱過一天一點愛戀,一夜一點思念,也歡迎想要學習 Swift 程式的朋友,從今天開始一天一點愛戀,一夜一點 Kata,每天提升一點程式功力 !