小弟在大學時期唸的是資訊工程,也就是寫程式的,在學校常會看到一些很強的同學,經常代表學校出去參加程式設計比賽,然後拿個金牌銀牌回來閃大家…當時的我總覺得這樣的人,跟我應該是永遠沒有交集、2個世界的人吧?直到最近參加了一場比賽,我才真正地了解,這些比賽是在比什麼東東~
我目前服務於軟體業,所以崇拜Google這家國際級的軟體公司,也是很正常的事;今年8月,輾轉得知Google即將舉辦一年一度的程式設計大賽「Google Code Jam」,我想想自從大學以來我好說也寫了9年的code,自我感覺相當良好,就參加看看吧!反正報名不用錢,搞不好還能得個金牌回來貼補家用(想太多!)…於是立刻上網報名了有趣的「Google Code Jam」。
Google Code Jam的比賽規則很簡單,資格賽只要有1題全對(小case+大case)就能進入Round 1,Round 1取Top 3000進入Round 2,Round 2取Top 500進入Round 3,Round 3取Top 25進入World Final,Google就會把這25人送到矽谷的Google總部,包吃包住,進行最後的大混戰,選出世界冠軍。我對自己訂的目標,是至少要通過資格賽,然後拼看看能不能進入Round 2。
資格賽 2009/9/2
資格賽比賽時間有24小時,所以我是以相當輕鬆的心情來參加這一輪的;當天早上睡到自然醒,打開電腦看看題目,嗯,第1題超簡單,題目立刻就看懂,先來建立自信吧!馬上開始寫code…寫完之後上傳答案,嘿嘿,小case對啦!看來Google的比賽也沒什麼~所以我在過度自信的情況下,馬上去抓大case下來跑,把結果上傳…咦?錯了!!!怎麼會這樣…於是我回頭去檢查code,發現犯了一個很小的錯!不過大case只有一次上傳機會;錯了不能retry,所以只好繼續看其他題目。
第2題很難,跳過。
第3題也很難,靠,那我不就被淘汰了,連資格賽都沒通過???
於是我決定起來走走,到陽台去散步一下轉換心情…果然有用,走著走著突然福至心靈,想到第3題的解法了!(有時候寫code就是這樣,突然會天外飛來一個idea)趕緊回到電腦前把它寫出來,上傳,Correct!而且是小case和大case都正確!我就靠著這一題,通過了資格賽。
簡單來說,資格賽是讓人綀功用的,24小時的時間解3題,真的完全無壓力;你可以解題解到一半,肚子餓了跑去吃飯,或肚子痛想去棒賽都隨便你…其實一點都沒有比賽的感覺;說穿了就是讓人綀習,了解這個比賽大概會出什麼樣的題目用的。
資格賽結束後,我發現有人很閒,每一題都用不同的語言來寫,而且還全對…看來這世上真是無奇不有,有人來參加真的是for fun;就如同Google在比賽網頁上說的,希望每個參賽者都能Enjoy this game~
資格賽結果:4769名
http://code.google.com/codejam/contest/scoreboard?c=90101#vt=1&sp=4761
Round 1A 2009/9/12 9:00~11:30
Round 1總共有3次機會,1A、1B、1C,不管那一次,只要你能到達Top 1000就可以進入Round 2。我比較謹慎,所以打算通通參加。
Round 1開始,限時2.5小時,一樣3題,所以我很準時地守在電腦前等待。
比賽開始,打開第1題…這三小???題目看是看懂了,但我完全不知該怎麼解啊!很快10分鐘過去,看到計分板上有人開始得分了,我開始緊張了…怎麼辦?我該繼續想這一題呢?還是跳過想其他題目?在慌亂中,我作了錯誤的決定:把後面2題的題目先看完。(為何是錯誤的決定容後再述)於是我又花了20分鐘的時間把後面2題搞懂,但是越看心越涼;第2題的題目非常長,花老半天把它看完之後,寫code的直覺告訴我,這題要寫很久;第3題題目很短,但是看完之後我完全沒有頭緒要怎麼解!
此時我想起資格賽的經驗,去陽台走走吧!
走啊走的,因為緊張的關係,還是沒有任何頭緒;此時已經過了將近1小時,我竟然完全還沒開始動手!於是我決定改變戰略,還是來衝刺分數最少,也最簡單的第1題!
在1小時10分時,很幸運地我答對了第1題的小case,但這也是這一輪唯一解決的題目了。接下來的時間,我就這樣眼睜睜盯著倒數計時表,完全沒有動手寫其他的題目;因為真的太難了!
比賽結束,我排在1342名,但其實如果我再快25分鐘把第1題的小case解出來,就能排進Top 1000了!誰叫當時要在慌亂中,花了很多時間去看後面2題!Round 1A真的是棋差一著,雖然題目超難,但如果能鎮靜,我是很有機會的!
Round 1A結果:1342名
http://code.google.com/codejam/contest/scoreboard?c=188266#vt=1&sp=1341
Round 1B 2009/9/13 0:00~2:30
Round 1B的時間很爛,訂在台灣時間半夜12點,對於亞洲區的人而言,實在是很不友善的時間;我也是抱持著姑且試試的態度看待這一輪比賽。
比賽開始,我還在閱讀最簡單的第2題題目時,突然發現計分板上已經有人把第2題完全答對了!(才過了6分鐘)這個人不是別人,正是去年Google Code Jam的總冠軍…我一整個被嚇到,拜託,我題目都還沒看完耶!你這大陸仔竟然已經解完了,太過份了!在充滿驚嚇的情況下,開始了這一輪…
這一輪我的狀況很差,過了大約1小時才把第2題的小case解出來,但也是這一輪唯一解的題目,因為真的太累了,我平常都是10點就睡了耶~
看著計分板上,那個大陸仔在44分鐘內就拿到滿分,我深自覺得,這世上有人不只是站在我的肩膀上而已,而是站在比我高好幾光年遠的地方!當初自信滿滿地來參加比賽,可能真的是很自不量力的一件事…
比賽結束,我的成績非常慘,狀況不佳+整個被去年冠軍震攝住,只得了9分…躺到床上,我心理已經有個底了,我知道這種比賽,不是讓我這種等級的人來參加的;要來參加,就一定會被刷掉,而且是被刷爽的…
Round 1B結果:2493名
http://code.google.com/codejam/contest/scoreboard?c=186264#vt=1&sp=2481
Round 1C 2009/9/13 17:00~19:30
這一輪是最後一次晉級Round 2的機會,經過連續2次失敗,加上昨晚的沉思之後,我已經看很開了;因此最後,我是以「不期不待,沒有傷害」的心態來參戰。
比賽開始,我照例先看最簡單的第1題,是基本題,想了10分鐘左右就知道解法;於是在1小時左右,第1題的小case跟大case都答對了。
然後我發現第2題是物理題,連題目都看不懂,跳過。第3題題目很簡單,可以用暴力法硬幹,但只有小case跑得出結果,大case一定跑不出來;經過前幾輪的試煉,我很快地作決定:就用暴力法硬幹吧!反正也不會晉級了,能多得一些分數也好!
時間過得很快,2小時左右,我把暴力法寫完了,一試小case,錯了!不過我的心態已經不像前幾次,我現在很鎮靜;反正時間還有半小時,慢慢找bug吧!終於皇天不負苦心人,在2小時28分的時候,我答對了!當網頁秀出「Correct」的時候,我就像白痴一樣,在電腦前握拳大吼!此時我的心情就像是揹著重裝爬了很久的山,突然海闊天空,看到山頂一樣地興奮…
比賽結果,出人意料的,我得到1064名,而且只要第3題的小case快半小時解出來的話,就能擠進Top 1000;但是我完全不會懊悔,相反地,我鬆了一大口氣;因為比賽終於結束了!我可以恢復正常生活,不用每天下班後還要窩在電腦前做考古題,我可以像以前一樣下班就回家陪老婆小孩;而且這次比賽,我已經盡全力了,雖然還是被刷掉,但我深知就算勉強進入Round 2(其實是有機會的),我大概也是得0分吧!(事後我去看Round 2的題目,真的非常難,一題都不會)
Round 1C結果:1064名
http://code.google.com/codejam/contest/scoreboard?c=189252#vt=1&sp=1061
這次參加Google Code Jam,讓我實現了大學時代的夢想,我終於參加了國際級的程式設計比賽,而且是以不帶遺憾的方式結束;這次比賽也同時讓我了解到這世上有太多功力深不可測的程式高手,我能夠和他們同台切搓,實在是一次難得的機會。當然還是要感謝老婆大人,在這段期間內對我的忍讓,讓我能夠完整參加比賽;(因為我是那種一心不能二用的人,一但開始寫code,就對外界完全不聞不問)希望明年此時,我還能夠有閒情逸致,再度挑戰Google Code Jam 2010,並且拿到更好的成績!
留言列表