2017華爲編程大賽總結

      華爲研發部門,每一年都會在部門內部舉辦一屆編程大賽。旨在讓開發人員在工做之餘,經過遊戲編程的切磋,提升技術和協做能力在入職華爲的第四個年頭,我終於如願拿到了部門編程大賽的冠軍。以前的每年也都會參加,其中兩次抱大腿拿到了亞軍,一次由於太忙棄權了。這一屆終於帶隊拿到了冠軍,了卻了一樁心事。在此,對以前的參賽經驗和感悟總結一下,作一個記念。至於下一屆?應該不會再參加了。算法

一、比賽報名階段編程

      首先說說本身的感覺,因爲報名時是要確認隊友的。而這裏的隊友不要求技術多精湛,可是必定要有責任心,也就是把這個比賽當回事。你忙的時候,他能幫你分擔事情。你不忙的時候,你們能夠一塊兒討論比賽算法和思路,互相勉勵。有時候即便忙到很晚,可是做爲一個團隊,你們都沒什麼怨言。因此我的認爲挑選隊友是最最重要的事情。根據這幾年的比賽經驗來看,一個隊伍要想拿到好成績,真的不是一個高手帶着一堆醬油就能夠完成的。框架

二、參賽事宜jvm

    通常組織者會把比賽隊伍的隊長拉到一個羣裏。羣裏每每會第一時間發出框架bug,賽程變動,比賽規則安排等等事宜。因此在羣裏的隊長必定要第一時間把羣裏獲取到的消息,通知給組內的成員。先不說隊友能作什麼,至少作起事情來能夠胸中有成竹。不少人只管問下本身想要知道的事情,對於其餘人交流的話題每每不太關心,這是個很大的失誤。。(防盜鏈接:本文首發自http://www.cnblogs.com/jilodream/ )好比比賽開發進度有人快,有人慢,每每能夠經過羣裏的交流信息獲得一些思路或者是提早知道比賽bug信息等。因此就算是在羣裏打醬油的人,也請把醬油打滿。這或許就是所謂的情報工做吧。測試

三、代碼編程優化

    其實代碼的算法並非須要使用多麼高效多麼複雜的算法。可是必定要對整個的算法過程,在心中有一個思路。知道第一步作什麼,第二步算什麼,第三步解決什麼,後續還須要作什麼。比賽給的信息有什麼,什麼東西咱們不能直接拿到,須要本身進行數據的生成。(如比賽地圖的信息)。不少人每每在這一步就畏難而止步,其實大可沒必要。只要你寫下第一行代碼,後續的代碼就能夠漸漸的隱現出來,你須要作的就是一層層的拂去塵埃,看到潛意識中的算法思路。spa

四、算法思路的補齊blog

    這個階段主要是核心算法已經大概完成。可是細節處理起來每每不盡如人意。大部分時間,參賽選手的基本算法其實都差很少,真正分出排名高低的緣由就是這一步。而這一步又是最考驗人耐心的階段。須要隊員主要是反覆的測試model,也就是比賽官方提供的默認AI,不斷的進行比賽,翻出查看錄像解決問題。如:遊戲

(1)爲何會死,死以前有沒有出現重大失誤。若是有的話迅速找出問題緣由而且修復。若是沒有重大失誤是否是最初的基本算法思路就是有問題的。該怎麼避免這種問題。重寫仍是優化。內存

(2)爲何會死的這麼早,雖說已經進入死衚衕了,能不能用貪心思路多堅持一下,或許再堅持一下,往前邊走就是柳暗花明了呢?千萬不要這麼早就放棄。

(3)爲何沒有死,可是卻輸了比賽。是否是對分數的獲取不夠敏感。如何調整權重,如何能使優點最大化,甚至動態的調整策略權重。這些都對實戰有重大的影響。當時咱們在小組賽的時候輸了一場。賽後反思緣由,其中的一個重要緣由是在下半場分數領先的狀況下(並且是必勝的狀況下)沒有考慮上半場的分數落後了多少,從而出現了,明明能夠贏,卻輸了的結果。

     其它的思路還有不少,好比如何使代碼跑的更快一點,虛擬機可否再優化下,內存會不會溢出,jvm會不會掛,若是拋出異常怎麼辦,若是處理異常時又有異常怎麼辦。若是本身的「棋子」兩敗俱傷,如何止損,達到傷害最小化,利益最大化。若是必死,如何同歸於盡,使對手的傷害最大化。(oh my god 越想越多,想一想本身當初的思路也是夠瘋狂的)總之這一步是整個比賽階段拉開排名的重要環節。也就是查漏補缺階段。

五、關於參賽事宜

       本身的感受是隊伍內部最好有屢次參加比賽經驗的隊友。每每某些忽略的比賽細節,以及賽前須要注意的事情,均可能最終會影響到比賽的走勢。還有編程大賽中可能會有一些灰度的事情,這些該如何應對。因此不要徹底忽略掉代碼之外的事情。

六、比賽狀況安排

      在這屆比賽中,我被項目組安排爲其餘小組的比賽裁判。因此一邊在主持比賽,一邊還要觀察本身隊伍的比賽狀況(時間、地點、賽況等)。這裏其實也是有重大失誤的。雖然我賽前已經安排了隊友去跟着觀看比賽,以避免有任何環境腳本等意外事故,可是比賽當時事情太多,徹底無暇顧及。而我又是隊長,隊友徹底不知道比賽的實際狀況,致使很晚了,隊友纔給我打電話諮詢比賽狀況。幸虧當時咱們隊伍所在組的裁判由於工做上的事情,開始比賽較晚,影響並不大,可是不管怎麼樣,這個錯誤很嚴重。關於這件事請看下文。

七、比賽臨場工做

      咱們隊伍所在的小組是H組,可是H組的環境有問題,應該是使用jre較老,致使虛擬機始終拉不起咱們編的jar包。當時我已經主持完其餘小組的比賽,急匆匆的趕來。我一方面讓隊友排查腳本問題,一方面跟H組的裁判解釋,由於根據比賽規程,若是比賽時初選相似問題,只能夠修改啓動腳本,不能夠再修復代碼包括編包。最終在咱們的要求下換了一臺電腦,咱們提交的jar包終於能夠正常運行了。當時真的是十萬火急,若是不是對賽制的瞭解,再加上以前的比賽經驗,極可能直接就棄權了。由於當時的比賽已經只剩下和咱們隊伍相關的比賽了。其餘隊伍都在等比賽結果,而H組的裁判又在死命的催,這種時候來自外界的聲音每每比日常會更大。

八、注意心態

    在小組循環賽中,咱們隊伍的程序是最後運行起來的。而H組是公認的死亡之組,觀看其餘隊伍的比賽,感受他們的算法很完善,而咱們的程序卻死活不能啓動。在和隊友陸續嘗試各類方法未果,猜想多是環境問題,要求換電腦,最終看到程序正常啓動時,真的是欲哭無淚。在和裁判的解釋過程當中,雙發也發生了矛盾,我反覆解釋咱們的要求是知足賽制規則的。這一點賽後我以爲很是重要,正是由於站在知足比賽規則的基礎上,你的所做所爲才能被稱之爲合理。。(防盜鏈接:本文首發自http://www.cnblogs.com/jilodream/ )棄權和冠軍真的是一念之差,若是當時就放棄比賽了,以爲是生成的jar的問題,以爲是代碼的問題,若是當時沒派人跟隊冷靜的分析緣由,可能結果徹底不同。

     另一個讓人哭笑不得的事情是,程序正常啓動後,咱們第一場比賽就輸了。就是我在前文算法思路補齊階段所說的問題。當時沒有想到是分數計算的緣由,只以爲本身的程序指令出現了「死循環」了。操做的「棋子」在繞一個很大的圈,一圈圈的走。當時心想這還比個毛線啊。還好後續的比賽地圖不會再出現一些「特殊」的地形,致使咱們的算法在臨界點的判斷上可能互相影響,綜合起來形成一些很奇怪的現象。最終在16強中,咱們隊伍與H組的第一再次相遇,憑藉對手算法一次重大失誤(也有人說是算法超時)最終贏得了比賽,劍指總冠軍。

比賽所能想到的事情就是這些了,謝謝你,2017;

謝謝你,個人隊友們;

也謝謝你,個人對手們。

相關文章
相關標籤/搜索