Revision history and IPFS entry, back to latest
Benjamin
IPFS What is this

Content Hash

線上程式解題系統介紹

Benjamin
·
·
最近有家人在自學python程式,除了他找的coursera線上課程之外,我也推薦了一些以前曾經用過的線上程式解題網站,對程式學習有幫助。

線上解題系統(Online Judge),可用作練習或是競賽使用,答題者將程式碼貼上到網站送出進行驗證,網站再以題目對應的測試資料驗證答題結果是否正確,以及程式花費時間判斷程式邏輯的優劣。

關於學習程式,我的經驗談是學習者可以找個基本的教學課程或書,搞懂最基本的遊戲規則之後就從最簡單的題目開始寫起,試著在過程中理解程式語言的特性或需注意的事項,剩下的在解題過程碰壁再回頭查學習資源即可。

藉著這次機會,我把曾經用過的,包含沒推薦給家人的解題系統也整理一下,以下會逐一把用過的系統做個簡單的介紹。


高中生程式解題系統(Zero Judge),支援C, C++, Java, python等四種語言,國內有許多高中的電腦課會使用,網站的題目跨度很大,從hello world到國內及國際程式競賽的題目都有收集,其中國際競賽的題目有翻譯成中文,對於英文不好或純粹想練習解題本身的人是不錯入門網站。


UVa線上解題系統(UVa Online Judge),支援C, C++, Java, python, Pascal等五種語言,在高中生解題系統的UVa題庫現在收錄有519題,但本網站完整的題庫超過四千題,題目都有一定程度的難度,一般建議熟練基本邏輯之外,最好也具備資料結構與演算法的知識再挑戰。而國內部分資工系採用的大學程式能力檢定考(CPE)就從其中選題。


Paiza,是日本的IT求職及轉職網站,題目分成D~S五種難度共500題左右,數量不多但是支援程式語言超過十種,聽說解題表現好的話有可能收到IT公司的面試邀請。

該說不愧是日本嗎,除了純粹的題目和課程以外,還有推陳出新的程式學習遊戲,像是換裝遊戲透過解題獲得新服裝之類的方式刺激學習動力,貨真價實的寓教於樂,尤其推薦給宅男宅女。


Leetcode,IT面試準備最常推薦的網站,「要準備面試當場問的白板題就去刷leetcode」。支援超過十種程式語言,難度分成三種,但是最簡單的Easy也有一定難度,在業界工作幾年甚至有可能寫不出曾經作答過的題目,或許是因為業界的首要目標不是這些稀奇古怪的案例,而是交期和足夠好的程式吧。

另外與前述幾個網站不同的是,Leetcode不需要寫個包含解析輸入文字在內的完整程式,題目已經建立了指定輸入和輸出格式的函式,只要完成中間的處理資料部分即可,因此透過這些題目理解函式化程式也是不錯的選擇。


codewars,題目數量多,難度跨度大,與Leetcode同樣以函式化限制了作答範圍,支援語言不固定,使用者可以自己新增題目,或者是在現有的題目新增作答程式語言種類,因此有意的話也可以學習不同程式語言如何寫測試功能。

codewars不只是記錄通過的題目,還有每題使用了哪些程式語言通過,並利用這些資料顯示為使用者各語言的熟練等級,可以透過使用不同程式語言重現相同的邏輯作答相同的題目進行學習。

與其他網站還有一個差別,codewars的社交比例相當高,在作答通過測試正式送出之後就可以看到其他人的答案,參考其他人如何使用同樣的語言面對同樣的問題,除了可以比較效率與程式碼整潔之外,有時也會學到不熟悉的程式語言所特有的寫法,特別容易發生在前一段說的透過重現相同邏輯學習新語言的情況。


我推薦給他的網站是codewars,畢竟目標是為了能看懂現有的程式與微調,不需要也來不及學會太高深的題目,所以UVa和Leetcode排除;他不會日文也不夠宅所以Paiza也跳過;高中生程式解題則是題目落差太大,不是超簡單題目就是競賽題目,與他現在的需求並不合適。


最近因為工作需要,需使用大學時期寫過的shell腳本程式語言用來管理伺服器的套件安裝與設定,因此閒暇時也會回到codewars練習題目,並從他人提交的程式吸收更好的寫法,時不時看到意想不到的做法會有茅塞頓開的感覺,這種擴展眼界與學習新知的實感相當棒,推薦一試。

CC BY-NC-ND 2.0