1. 程式人生 > 其它 >用程式碼玩劇本殺?第3屆83行程式碼大賽劇情官方解析

用程式碼玩劇本殺?第3屆83行程式碼大賽劇情官方解析

簡介:由阿里云云效主辦的2021年第3屆83行程式碼挑戰賽已經收官。超2萬人圍觀,近4000人蔘賽,85個團隊組團來戰。大賽採用遊戲闖關玩兒法,融合元宇宙科幻和劇本殺元素,讓一眾開發者玩得不亦樂乎。

前言

程式碼挑戰賽、劇本殺、元宇宙,這些詞可能單獨列出來你都認識,但是放到一起可能就會有點疑惑:這三有啥關係?為了使83行程式碼挑戰賽更加有趣,我們史無前例地將劇本殺元素、元宇宙科幻元素與程式碼挑戰賽結合,打造了一場別開生面的程式碼劇本殺。 既然是劇本殺,那麼自然就要有線索。玩家每次通關,都能夠獲取code83的定製線索,其中不僅包含了關鍵的劇情資訊,還有決賽出題人擔心題目太難,特意留下的提示,最重要的是,參與的玩家還可以通過獲取的線索換取雲效83行程式碼xCHERRY定製機械鍵盤等豪華大禮。
下面,我們來揭祕一下這場程式碼劇本殺,看看你是否破獲了真相。

線索設計

這次線索的設計的時候,每一條線索都包含了決賽題目相關的提示和劇情相關的提示,先給大家解釋一下決賽題目相關的線索是怎麼設計的,看大家有沒有錯過一些提示。 "<(?<tag>.*)> 可以表示什麼呢?":第一條線索是提示決賽有正則型別的bug,由於?<tag>這種用法不是特別常用,所以線上索裡提前給出提示。 "NPE:No People Emo":這個就是很直接地提示決賽裡有NPE型別的問題,當決賽答題的時候,需要多關注一下有沒有什麼地方可能會是null,觸發NPE。
"不是什麼都會等你,很多事情都是一次性的":這個是提示可能是有一些“一次性”型別的bug,如果經驗比較豐富的話,可能就能意識到這個是指流型別一次性讀取的問題。 "我們通常以為admin就是admin":這其實是在提示決賽中admin可能不是admin,那可能是什麼呢?可能是ADMIN,或者admin123這種,具體的大家在決賽題目中就會了解到。 "大家都喜歡全域性視角,但全域性視角也有它的問題":其實是在提醒你全域性型別的變數可能有問題,你可能需要把全域性變數換成區域性型別的變數。 "好的單元測試 => 你看懂了單元測試 = 你看懂了程式碼":決賽題目中大部分的bug都是在單元測試呼叫的函式中,如果能聚焦地分析單元測試呼叫到的函式,就能把大部分的bug解決掉。
"有的bug之所以難找,就是因為它只在執行時出現":這個是在提示有一些bug可能是無法直接看程式碼就能分析到的,需要結合執行時的除錯和診斷,才能發現這些bug。 "別得意忘形了,快收好你的尾巴!":這個是在提示正則匹配讀取尾巴的問題。 "貪多嚼不爛":這個是在提示正則匹配的貪婪模式的問題。 "斷點除錯是萬能的嗎?不影響應用本身的觀測或許才是更優選擇":這個是在提示本次決賽的場景是無法正常使用斷點除錯的,所以可能需要使用應用觀測的能力。

劇情設計

下面我們進行一下劇情向的解析。最開始我們收到的是這樣的邀請函: 你收到了這封邀請函,但只有一個 YES 選擇鍵,沒辦法拒絕,只能接受。接受了之後,你就進入了我們的故事線。在我們的故事線中,當前的時間線是這樣的: 你是一個程式猿 -> 收到邀請函,進入宇宙基地 -> 進入第一扇門,存在縫隙,暗手會偷走寶貴的東西 -> 進入第二扇門,百萬人名湧動,根據關鍵詞找到對應人名 -> 進入第三扇門,重塑人生 -> 進入第四扇門,發現了自己的人生被程式碼定義。 這部分的劇情內容是通過 WebIDE 的劇情對話給出的,而劇情線索中,會給出過往的時間線: 高考過後,走上程式猿道路 -> 電腦中存在後門,導致公司機密洩漏,被開除 -> 接觸到雲曉(阿里云云效),瞭解雲端開發 -> 開除後成為數學老師,懷念柯西(Cosy)帶來的高效和充滿技術感的生活 -> 疫情來臨,釘釘助力線上教育 -> 意識覺醒,想用技術創造價值。 在瞭解了所有劇情之後,就需要回答三個問題,分別是:你來自什麼宇宙、你的真實身份是什麼、怎麼創造生命的意義。 你來自什麼宇宙,其實是在問你從哪裡來;你的真實身份是什麼,其實在問你是誰;怎麼創造生命的意義,其實是問你要做什麼,你要到哪裡去。這是三個經典的人生問題。 那麼具體怎麼回答這三個問題呢?想要解決這三個問題,需要先將決賽關卡的bug解決完之後,會發現client的會返回一些字串,這些字串有三個開頭(三個通道),如果根據這三個通道進行篩選,就會發現其實是這三段程式碼: 通過閱讀這三段程式碼,會發現其實這三段程式碼正好就是過往時間線裡面的三個階段。 所以從劇情上的話,可以理解到“你”的人生其實早就被程式碼定義了。 第一個問題:你來自什麼宇宙?當然毫無疑問就是在程式碼宇宙中。另外,從程式碼的包名也可以看出:com.code.universe。 第二個問題:你的真實身份是什麼呢?從程式碼中也很明確了,就是programmer(程式猿)。當然,瞭解完全部劇情之後,更準確的答案應該是一段程式碼(code)或者說一段程式(program)。 最後一個問題:怎麼創造生命的意義?這個其實是稍微有一點難的,不像前兩題這麼直觀,需要看完整個劇情,就會發現劇情裡主要強調一點是技術的力量,第三段程式碼中也明確提到了在經歷了人生的大轉折之後,嚮往Technology的力量,學習了DevStudio的知識,Yunxiao的知識,Devops的知識,Cosy的知識,思考生命的價值。所以這一題的答案是技術(Technology),或者DevStudio、Yunxiao、Devops、Cosy都是可以的。 上述就是本次比賽的完整劇情了,最後還有一個附加題: 之前提到了故事線中的時間線,我們再來對比一下現實的時間線: 故事的時間線: 你是一個程式猿 -> 收到邀請函,進入宇宙基地 -> 進入第一扇門,存在縫隙,暗手會偷走寶貴的東西 -> 進入第二扇門,百萬人名湧動,根據關鍵詞找到對應人名 -> 進入第三扇門,重塑人生,最終人生(職業)未改變,過程更加豐富 -> 進入第四扇門,發現了自己的人生被程式碼定義 -> 發現真相,阿里云云效邀請你一起用技術創造生命的價值 現實的時間線: 你是一個程式猿 -> 你收到開賽邀請,參與83行程式碼大賽 -> 開啟第一關,解決會造成漏洞的安全問題 -> 開啟第二關,從百萬級別類名中,尋找指定字首的類名 -> 開啟第三關,重構程式碼,最終業務邏輯不變,程式碼質量更好 -> 開啟第四關,解決bug,解鎖真相 -> 揭曉結局,阿里云云效邀請你一起用技術創造生命的價值 當我們看完這時間線之後,最後我們可以再回過來看這三個問題:你來自什麼宇宙?你的真實身份是什麼? 怎麼創造生命的價值?這三個問題就留給大家思考了。 結語 2021年第3屆83行程式碼挑戰賽已經正式收官。你參加的,到底是一場程式碼挑戰賽,還是一場劇本殺,亦或是?你看清真相了嗎? 大賽目前全部關卡開放體驗,域名地址:https://code83.ide.aliyun.com/,歡迎你來。