May 2, 2009

TopCoder 的演算法比賽

前陣子註冊了 TopCoder,這個網站提供了許多類型的程式設計競賽,其中有一個競賽項目是 Algorithm ,跟 ACM ICPC 很類似,要求參賽者在 75 分鐘之內解出三道題目。

這三題的難度是漸進的,第一題會讓你覺得寫 code 比看題目還簡單,第二題稍微想一下可以知道解法,不過要想到精簡的解法卻沒那麼容易,第三題會讓你覺得這不可能在時間之內寫完吧!?
一般說來最簡單的題目值 250 分,中等的值 500 分,最難的值 1000 分。參賽者的得分會隨著解題時間增加而遞減,所以每題的實際得分會比上述的還低。這種給分數的設定相當"老少咸宜,適合初學者到高手共聚一堂。

網路上的程式競賽很多,但是
TopCoder 和我看過其他的競賽有三個主要的不同之處:

  1. 採用積分排名系統 (ranking)。每隔一至兩週會舉辦一次即時競賽,讓每位參加者同時解題,以每個人的得分來加減排名。
  2. 挑戰模式 (challenge)。參賽者每20人分到一個房間,當解題時間結束以後,每個人有一小段時間可以看到別人的解答,如果你認為她的解法有錯,可以提出測試資料來挑戰,成功"反證"別人的程式是錯誤的話,就可以賺得一定分數,當然答錯了也會扣分。
  3. 程式觀摩。比賽過後,所有人的程式碼都會公開,可以學習到別人的解題技巧。
難度

參加了幾輪線上比賽之後,發現自己生疏了許多。最簡單的題目也花了約20分鐘才完成,主要是因為自己寫的 code 和心裡想的都不一樣XD,所以寫個 20~50 行的程式也要 debug 一下。另外一個原因是看題目花太久時間,花5分鐘看完題目的時候,就有強者已經寫完了。

看起來這是高中生和大學生準備程式競賽的好地方,不過年紀在這之上的人也是有的,不曉得他們參加的理由是啥。台灣參加演算法競賽的人只有 13 個,還真意外的少,這可能是因為比賽的時間不是在早上,就是在深夜,不過就另一方面來說,大學生應該很能適應這些時段:p

No comments: