千呼萬喚始出來--黑暗盃程式魔人賽考題

話說上回有人先是放話說要送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檔。

【比賽規則】

  1. 參賽者請撰寫一個繼承Player的C# Class(說明請參考先前的PO文),以提供Source Code的方式寄到指定Email(iwantvsts2008 @ darkthread.net)信箱參賽。
  2. 本著砌磋武藝的宗旨,所有參賽者的程式碼最後會公開給大家互相交流,如果你不同意分享程式碼或程式碼另有他用,請不要參加比賽。
  3. 參賽者提供的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惡魔島賽程取消)。
  4. 參賽者程式將針對(maxNum/digits): 10/4, 32/12, 64/24, 256/64, 1024/256, 4096/1024六種難易程度不同的猜數字挑戰,每種題目跑六次為一回合(第一次為暖身,時間會偏長,故不計入成績),計算後五次完成解題的猜測次數及耗用時間取平均值。
  5. 為確保公平性,比賽題目產生的亂數種子固定,故每個參賽者要解的題目都是相同的,至於亂數種子在比賽前會參考樂透開獎等數字隨機決定。
    (即CFFQuesion.txt裡的static int[] randomSeeds = new int[] { 1, 2, 3 … },正式比賽時會更換數字)
  6. 每回合猜數字挑戰總耗用時間(含主持人判斷幾A幾B的時間)不得超過180分鐘(Mini C# Lab 1.4支援執行時限功能),超過即算挑戰失敗不計入成績。若程式出錯導致程式中止,該回合亦不計入成績。 (注意: 每回合要連解六個題目,六個題目必須都解出來,且時間不超過180分鐘,該回合才會有成績)
  7. 可使用Multithreading解題加快速度,但禁止使用資料庫或檔案作為輔助儲存空間。
  8. 成績計算方式如下: (次數少積分為速度快的兩倍,困難的題目積分較高,每回合解出題目即有分數,第一名及第二名可獲得額外積分)
    題目 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
    次數、速度及解題三個分數累計計算,例如: DarkPlayer在10/4回合中次數排第2,速度排第1,則在第一回合可獲得5 + 5 + 1 = 11分。
  9. 比賽名次由各參賽者六回合總積分決定最後名次,第一名就可以將VSTS2008+MSDN抱回家。
  10. 主辦單位也會派出一位DarkPlayer攪局參賽,其積分會列入排名,但無領獎資格。

歡迎各方武林高手前來挑戰,請在9/20 00:00前將程式(其實只要PlayerClassName.txt一個檔即可)寄到iwantvsts2008 @ darkthread.net。

PS: 大會保留小幅調整比賽規則的權利,但如無重大意外將會依以上方式進行

[2008-09-02 18:00更新]

經一些參賽者反應,原先的GameHost效率奇差無比,在高難度題目時耗用掉絕大部分寶貴的解題時間。我特地好好地修理了一下主持人,現在他乖多了,會比之前快上N倍,請大家重新下載比賽程式包改用新版練習。

歡迎推文分享:
Published 02 September 2008 07:24 AM 由 Jeffrey
Filed under:
Views: 13,895



意見

# player said on 05 September, 2008 12:50 AM

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.還看不太懂您的題目的架構, 再看看囉

# Jeffrey said on 05 September, 2008 06:14 AM

to player,

1.歡迎參加,比賽截止前將Source Code寄過來即可

2.現代的Compiler都挺聰明,會自己看著辦,之前看過文章,就.NET來說,將Array.Length提出來存變數反而會變慢,很奧妙吧! 這裡有些參考: http://tinyurl.com/5hep2v http://tinyurl.com/585cs4

3.就傳統猜數字來說,的確是猜完一組再猜下一組,本質上流程是循序的不能多工。但如果有些內部運算,例如: 將3000組可能的答案中挑去不符合者,就有機會用Multithreading加速。

# Someonepoor said on 19 September, 2008 08:23 AM

交卷了, 不過總覺得可以更快...-_-

那個8G RAM 好像沒啥意思啊...根本吃不到那麼多...

# someonepoor said on 19 September, 2008 09:52 AM

剛剛想到一個可以加快一點的方法, 不過剩下十分鐘...XD

罷了罷了...(遠目

還是很感謝站長提供這個比賽的機會啊.:-)

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<September 2008>
SunMonTueWedThuFriSat
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011
 
RSS
創用 CC 授權條款
【廣告】
twMVC
最新回應

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication