千呼萬喚始出來--黑暗盃程式魔人賽考題
5 |
話說上回有人先是放話說要送VSTS2008,接著煞有其事地丟出考題RFC,蒐集了各方高手的意見,接著就悶不吭聲了半個多月,這... 是在莊孝維嗎?
真是對不起大家,這陣子不知在瞎忙什麼,八月份Blog的PO文數量甚至創下歷史新低,但"良心告訴我,我不能再繼續拖延自己,拖延別人,決定選擇面對" XD,題目終於來囉!
參賽者可下載比賽專用程式包回家試跑。
【比賽專用包說明】
ZIP檔內含CFFGenScript.exe、CFFQuestion.txt、DummyPlayer.txt及MiniCSharpLab14.exe。使用時請仿照DummyPlayer.txt將參賽類別存成PlayerClassName.txt(PlayerClassName需與你宣告的類別名稱完全相同),執行
CFFGenScript PlayerClassName
程式會產生一個名為PlayerClassName的子目錄,裡面有PlayerClasName-Test1.cs, PlayerClasName-Test2.cs, … , PlayerClasName-Test6.cs等六個回合的測試程式以及RunTest-PlayerClassName.bat,執行RunTest-PlayerClassName.bat就會依序跑完六回合的比賽並將結果寫成Log檔。
【比賽規則】
- 參賽者請撰寫一個繼承Player的C# Class(說明請參考先前的PO文),以提供Source Code的方式寄到指定Email(iwantvsts2008 @ darkthread.net)信箱參賽。
- 本著砌磋武藝的宗旨,所有參賽者的程式碼最後會公開給大家互相交流,如果你不同意分享程式碼或程式碼另有他用,請不要參加比賽。
- 參賽者提供的Source Code只需包含自己寫的Class(不含GameHost及Player抽象類別,請參程式包中的DummyPlayer.txt),存成PlayerName.txt,比賽時透過CFFGenScript.exe,將參賽者程式與遊戲主持人程式結合成一個CS,並由Mini C# Lab 1.4版(尚未正式Release的新版,支援批次執行功能)以Batch方式在Q6600+8G RAM實體機上執行(原WinXP 1G VM惡魔島賽程取消)。
- 參賽者程式將針對(maxNum/digits): 10/4, 32/12, 64/24, 256/64, 1024/256, 4096/1024六種難易程度不同的猜數字挑戰,每種題目跑六次為一回合(第一次為暖身,時間會偏長,故不計入成績),計算後五次完成解題的猜測次數及耗用時間取平均值。
- 為確保公平性,比賽題目產生的亂數種子固定,故每個參賽者要解的題目都是相同的,至於亂數種子在比賽前會參考樂透開獎等數字隨機決定。
(即CFFQuesion.txt裡的static int[] randomSeeds = new int[] { 1, 2, 3 … },正式比賽時會更換數字) - 每回合猜數字挑戰總耗用時間(含主持人判斷幾A幾B的時間)不得超過180分鐘(Mini C# Lab 1.4支援執行時限功能),超過即算挑戰失敗不計入成績。若程式出錯導致程式中止,該回合亦不計入成績。 (注意: 每回合要連解六個題目,六個題目必須都解出來,且時間不超過180分鐘,該回合才會有成績)
- 可使用Multithreading解題加快速度,但禁止使用資料庫或檔案作為輔助儲存空間。
- 成績計算方式如下: (次數少積分為速度快的兩倍,困難的題目積分較高,每回合解出題目即有分數,第一名及第二名可獲得額外積分)
次數、速度及解題三個分數累計計算,例如: DarkPlayer在10/4回合中次數排第2,速度排第1,則在第一回合可獲得5 + 5 + 1 = 11分。題目 10/4 32/12 64/24 256/64 1024/256 4096/1024 次數No.1 10 10 16 16 24 32 次數No.2 5 5 8 8 12 16 速度No.1 5 5 8 8 12 16 速度No.2 3 3 4 4 6 8 完成解題 1 1 2 2 3 3 逾時或出錯 0 0 0 0 0 0 - 比賽名次由各參賽者六回合總積分決定最後名次,第一名就可以將VSTS2008+MSDN抱回家。
- 主辦單位也會派出一位DarkPlayer
攪局參賽,其積分會列入排名,但無領獎資格。
歡迎各方武林高手前來挑戰,請在9/20 00:00前將程式(其實只要PlayerClassName.txt一個檔即可)寄到iwantvsts2008 @ darkthread.net。
PS: 大會保留小幅調整比賽規則的權利,但如無重大意外將會依以上方式進行
[2008-09-02 18:00更新]
經一些參賽者反應,原先的GameHost效率奇差無比,在高難度題目時耗用掉絕大部分寶貴的解題時間。我特地好好地修理了一下主持人,現在他乖多了,會比之前快上N倍,請大家重新下載比賽程式包改用新版練習。
Comments
# by player
1.沒有事先報名, 還可以參加嗎? 2.覺得您的 class Player的 public static Hint Compare(int[] answer, int[] guess) 或許可以把迴圈的 answer.Length 與 guess.Length 放到迴圈外, 再多寫2個int 變數來放, 這樣或許會再快一點點 3.你說可使用Multithreading解題加快速度 可是你又說 參賽者提供的Source Code只需包含自己寫的Class(不含GameHost及Player抽象類別) 那在不動class GameHost 與 class Player的前提下, Multithreading還加得下去嗎? 4.還看不太懂您的題目的架構, 再看看囉
# by Jeffrey
to player, 1.歡迎參加,比賽截止前將Source Code寄過來即可 2.現代的Compiler都挺聰明,會自己看著辦,之前看過文章,就.NET來說,將Array.Length提出來存變數反而會變慢,很奧妙吧! 這裡有些參考: http://tinyurl.com/5hep2v http://tinyurl.com/585cs4 3.就傳統猜數字來說,的確是猜完一組再猜下一組,本質上流程是循序的不能多工。但如果有些內部運算,例如: 將3000組可能的答案中挑去不符合者,就有機會用Multithreading加速。
# by Someonepoor
交卷了, 不過總覺得可以更快...-_- 那個8G RAM 好像沒啥意思啊...根本吃不到那麼多...
# by someonepoor
剛剛想到一個可以加快一點的方法, 不過剩下十分鐘...XD 罷了罷了...(遠目 還是很感謝站長提供這個比賽的機會啊.:-)
# by Gung
" or 1=1 //