113 學年度工科賽心得
前言
工科賽,全名全國高級中等學校學生工業類技藝競賽,每年大約有將近一千名選手來參與這場比賽,不過跟高中生的 TOI、全國資訊能力競賽當然比不了,在高職界則是僅次於全國技能競賽的比賽,這次工科賽辦在台中高工,而我則是高雄高工電腦軟體設計職種的代表選手,跟一般演算法競賽不同的是重點在於應用程式設計,因此比賽語言大部分是 C#。這篇文章主要是講我比賽時的一些經過和心得等等。
day 1 報到+測機
上午
早上 7:30 就到雄工集合,集合完畢後就發車了,接著就是一路的補眠。大概 11:30 到台中高工,先去幫我朋友搬他的工具(足足五大盒,手快廢了),接著就去報到然後準備測機。
測機
碰到電腦的第一件事是先看了一下工作管理員,沒想到 CPU 是 i7-13700k orz..(比我自己在用的還要好),然後就開 Visual Studio 簡單測試了一下環境跟 OJ,這時候腦袋突然蹦出一個排列組合的題目,然後我在考場想了很久沒有想出來解法 @@(只有想到大概是 3 維 dp),眼見未果就只好抓緊時間繼續測其他東西,全部都測完後的感想是真舒服,螢幕環境什麼的都比我自己在用的還要好,中工真的好棒。
晚上
因為想說隔天要比賽所以晚餐也是隨便買 7-11 吃一吃,我也只把前一屆的題目刷過一遍而已,計時是 5 題 1:29:14,覺得自己應該可以拿個金手,但有沒有前三名就不一定了。
day 2 正式比賽(術科)
賽前
我跟我朋友早上 6:10 就起床了,出門的時候也剛好遇到老師要下去吃早餐,我跟他本來就打算不吃早餐直接去考場,所以跟老師簡單報備一下後就直接搭 uber 去中工了,到了中工以後就是在休息區慢慢等,那個時候我就已經在打 day 1 的心得文了ww。
術科比賽
大概開始前 20 分鐘,評委會發題目下來,意思就是你可以先看題目,於是我就從第一題開始看。
題目
- p1 連分數計算
設計一個 GUI,可以輸入連分數,求最簡分數。
感覺就是一個單純的實作題。
- p2 Knapsack Problem
背包問題(標題還真的給我打 Knapsack Problem)。
就…背包問題,而且還給你遞迴式…。
- p3 3×3 魔方格
給定一套演算法,該算法會產生一個 3×3 的方格,求其全排列。
一開始有點看不懂演算法那邊在幹嘛,看了一下全排列應該就是矩陣旋捲還有翻轉的操作而已。
- p4 字串壓縮
給一個
huffman.json
檔案,內部含有各個字元對應的二進制字串,要使用者輸入一個檔案並使用剛剛給的 json 檔對該檔案的內容編碼,同時計算其壓縮率,並將結果存在特定名稱的二進制檔案(.bin)。
好險考前有特別複習檔案讀取的功能,這邊算是用上了,感覺比較難處理的是要怎麼把 json 轉成 Dictionary
。
- p5 模擬今彩 539
要撰寫一個程式可以產生 5 個隨機數字,然後要有存放和讀取檔案的功能,最後求其算術平均數、調和平均數、幾何平均數,同時用選擇排序法排序這 5 個數字並列印出排序的過程。
呃…這什麼爛題目,也是實作題。
- p6 圖片詼諧和邊緣探測
設計一個 GUI,同時具備以下功能
- 讀取圖片
- 儲存圖片
- 影像詼諧
- 邊緣探測
看到這題我想說完蛋了,我雖然知道怎麼讀圖片,但我沒練過存圖片阿 XD。
這樣看下來感覺從第二題開始做會比較好(結果後來比賽到後面的時候 p2 好像出了點狀況…)。
比賽開始
比賽是從 8:00 ~ 12:00 共 4 小時。
比賽開始後就照一開始的想法先寫 p2,大概過了 8 分鐘後確認測資都對就上傳了,這時候再看了一下題目就決定先寫 p1,也是順順的寫完就上傳了,沒想到剛剛的 p2 居然還在 judge XD(這就是工人智慧嗎),看了一下時間才過半小時左右,感覺目前還算順利。
8:37:48 p2 AC (First kill)
這時候又看了一下題目,感覺 p3、p5、p6 都是需要實作題目,所以我打算留到後面再寫,於是就先寫 p4。
8:50:14 p1 AC
此時我想不到怎麼把 json 轉為 Dictionary
,後來我就先寫一個可以把 json 轉為 Dictionary
建構的程式,然後直接暴力複製貼上,把剩下的功能補齊後就上傳了,接著繼續寫 p5。
9:28:00 p4 AC (First kill)
在我寫 p5 的同時 p4 也通過了,但是 p5 實作量有點大,所以在這邊卡了稍微久一點,不過也是順利寫完,上傳後此時要決定先寫 p3 還 p6,p3 雖然實作量大但是我可以完成,p6 實作量沒有 p3 那麼多但是我沒有把握圖片儲存的功能,所以我就先從 p3 下手。
9:49:01 p5 WA
寫 p3 寫到一半時 p5 WA 了,原來是我生隨機數時忘記去重複,改了一下就上傳了。
9:56:54 p5 AC
看了一下 ranking ,目前我跟大安高工的選手並列第一,感覺有機會拼個 rk.1,但也在這時候出了一點小問題。
p3 的實作量老實說沒有那麼多,但我賽中不知道在想什麼,居然不把矩陣旋轉跟翻轉寫成函式??,可能我那時候想說直接複製貼上比較快,結果不但速度沒有快到,還瘋狂 debug 了將近一個小時,就在我忙著 debug p3 的時候,另一名選手已經超越我了。
10:55:38 p3 AC
此時覺得有點不妙,花了太多時間在 p3 上面,看了一下 ranking 發現仍然並列第一,得趕快寫最後一題才行。
最後一題其實歷屆也有許多相似的題目,尤其詼諧的功能以前就練過了,這次多了新的邊緣探測,邊緣探測就是對一個詼諧過後的圖檔做卷積的運算,其實就是對圖檔做滑動窗口(Sliding Window),以當前座標 (x, y)
對應一個卷積核的大小並將兩者相乘後加總,透過 x 座標的卷積核以及 y 座標的卷積核得出結果後,再將兩者平方相加開根號就會得出我們要的值,這是我反覆看了好幾次題目後才看懂的結論 XD,現在會邊緣探測了,但我還是不知道圖片要怎麼儲存,這時我看著開啟檔案的 class OpenFileDialog
,欸?該不會也有個 SaveFileDialog
!?結果一打提示字就出來了!!但問題是,這也只是開啟儲存檔案的介面而已啊,我還是不知道怎麼存檔 QQ,然後我就開始亂打,看能不能跳出我想要的 method 或 property,結果我就在 class Image
裡面找到了 Save()
這個方法,還真的是儲存圖片的功能!!!於是我就趕快寫一寫並上傳。
11:31:45 p6 AC
賽後
比賽快結束的時候看了一下計分板,看起來只有我跟大安高工的選手破台,另外 5 題的也只有 1 人,不意外的話就是穩金手前二名了。
還記得我剛剛提到 p2 最後好像出了點狀況,主要是它的計分板可以看到所有人的 submit,然後快接近結束的時候你就會看到所有人的 p2 好像都卡住了,說起來我傳 p2 到我 p2 AC 也花了一段時間,不過由於我運氣好先寫 p2 所以沒遇到這個問題(這麼說起來我最後一題會 AC 感覺也是運氣好猜到存圖的功能 ),然後我的成績跟大安高工的選手並列第一,所以能不能 rk.1 還得看明天學科。
day 3 學科 + 慰勞餐會
學科
學科我其實練的時間不多,甚至只有寫過兩屆歷屆,所以我並沒有太大的把握,不過整體寫下來感覺大部分都是我擅長的題目,但總覺得還是不太穩。
餐會
學科比完後我就回飯店睡覺,這期間也沒有做什麼事就一直等到晚上的餐會,到了晚上,我跟老師們一起走路去餐廳,吃飯的過程中跟老師還有其他選手們聊了很多,從整個技職體系的升學到競賽那些的…,期間校長也有過來湊熱鬧一下,感覺明天真的第二名的話,我就要捲統測去台科了…(但其實第一名也是要捲 QQ)。
飯後
本來打算走路回飯店,結果走到一半我的錢包就消失了??回去問工作人員聽說已經有同校的老師領走了,於是老師就在群組上詢問是否有人拿到,正當某一位老師說他拿到的時候,我們正好看到了正前方有一位老師在打字,於是我們就果斷上前,果然錢包真的在他那裡!還真是奇妙的緣分,後來老師放我自由的時候我就順便去附近拍了好幾張照片(放在文章的最後面)。
day 4 頒獎典禮
早餐
由於頒獎典禮 8:00 才開始所以我打算先去吃個飯店的早餐再看要怎麼去會場,畢竟前幾天都因為比賽沒有吃到飯店的早餐 QQ,結果我同學賴床害我只好自己下去吃,在餐廳也剛好遇到老師們就跟他們一起坐下來了,至於早餐的部分感覺就跟一般飯店差不多,沒什麼特別的(?,吃完的時候想說我同學怎麼還沒下來,於是就上去找他,一進房間看到他居然在縫襪子??,直接關門走人,下樓的時候剛好遇到校長,結果校長跑來跟我們坐一桌了ww(聽說校長以前在雄工教書的時候也是資訊科),聊了一下後我們就搭 uber 去中工了。
頒獎典禮
到了會場就先去跟其他選手聊一下天,其中有聊到某個選手居然也打競程(我還以為高職沒人在打),但他跟我說他打競程只是因為興趣而已(?)除此之外就大概聊了一下各個學校的情況,初選的時候發生的事之類的,不過我們幾乎都一致認為今年的題目太簡單了(雖然也只有兩個人破台)。
大概過了半小時就有工作人員來請有入圍的選手跟他走,大概就是要準備頒獎了,由於 rk.3 以後的名次都確定了,只有我跟大安的選手還不確定誰是 rk.1,所以我們兩個都很緊張ww。
到了台上,司儀會從後面一個一個叫名次和學校,聽說今年是第一次這樣,好阿台中高工你要這樣搞我是吧,眼見倒數的名次越來越接近前三名,我的心跳也跟著加速起來,「金手獎第三名,國立羅東高工,XXX…(頒獎和拍照)下一位,金手獎第二名,市立高雄…」。
由於還有摸彩跟其他活動,領完獎狀跟其他東西後就回到位置上了,然後就是繼續聊天ww,只不過後來的摸彩環節不知道為什麼連一個雄工的人都沒有抽到??等到所有活動結束就吃飯回學校了。
心得
老實說一開始是沒有打算要認真準備工科賽的,但後來因為某些原因讓我開始有了想奪冠的念頭,這段時間內我做了很多的改變,禁止使用社交軟體、禁止熬夜、禁止訓練期間睡覺、禁止做和訓練無關的事情,這不但幫助我改善了熬夜的習慣,還讓我能夠充分的運用時間。
其實到了上臺前一刻都是焦慮的心情,在頒獎完後第一件事是先恭喜另外一位選手拿到了 rk.1,同時心裡想著或許 rk.2 對我來說已經算好的成果了,至於學科輸了就是輸了,我也很慶幸我沒有以鬆懈的態度去看待這場比賽,即使和 TOI、全國技能競賽相比是個不起眼的比賽,我也仍然享受其中,比起技術和實力,我學到更多的是做事的方法和態度。
最後,我也跟那位 rk.1 的選手約好了,我們台科見!