$cover

前言

工科賽,全名全國高級中等學校學生工業類技藝競賽,每年大約有將近一千名選手來參與這場比賽,不過跟高中生的 TOI、全國資訊能力競賽當然比不了,在高職界則是僅次於全國技能競賽的比賽,這次工科賽辦在台中高工,而我則是高雄高工電腦軟體設計職種的代表選手。這篇文章主要是講我比賽時的一些經過和心得等等,其他東西的話可以去看 工科賽彙整

day 1 報到+測機

上午

早上 7:30 就到雄工集合,集合完畢後就發車了,接著就是一路的補眠,途中有在休息站下車一下但馬上就上車了,我朋友還趁機買了一盒麻糬,我跟老師們都覺得超莫名其妙www。大概 11:30 到台中高工,不過因為我這個職種基本不用帶任何東西,所以就先去幫我朋友搬他的工具(足足五大盒,手快廢了),接著就去報到然後準備測機(從報到等到測機大概有足足 2 個小時...)。

測機

碰到電腦的第一件事是先看了一下工作管理員,沒想到 CPU 是 i7-13700k orz..(比我自己在用的還要好),然後就開 Visual Studio 簡單測試了一下環境跟 OJ,這時候腦袋突然蹦出一個排列組合的題目,然後我在考場想了很久沒有想出來解法 @@(只有想到大概是 3 維 dp),眼見未果就只好抓緊時間繼續測其他東西(Panel、Graphics、ComboBox...),全部都測完後的感想是好舒服啊,螢幕環境什麼的都比我自己在用的還要好,中工真的好棒

晚上

測完機回來的時候剛好遇到南宮柳信,簡單的打個招呼以後就去看一下我另一個職種的朋友。我朋友在收拾東西的時候不知道為什麼拿了一個雷射筆出來亂照一下又放了回去,我跟老師們都超傻眼www(題外話,我同學右前方坐一位挺正的妹子,但有女生來參加這類比賽也令我相當佩服),差不多簡單收拾一下過後就回飯店了,因為想說隔天要比賽所以晚餐也是隨便買 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

此時我並沒有注意到 p1 已經通過了,因為我想不到怎麼把 json 轉為 Dictionary,後來我就先寫一個可以把 json 轉為 Dictionary 建構的程式,然後直接暴力複製貼上 XD,把剩下的功能補齊後就上傳了,接著繼續寫 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 學科 + 慰勞餐會

學科

學科我其實練的時間不多,甚至只有寫過兩屆歷屆,所以我並沒有太大的把握,不過整體寫下來感覺大部分都是我擅長的題目,但總覺得還是不太穩。

餐會

學科比完後我就回飯店睡覺,這期間也沒有做什麼事就一直等到晚上的餐會,到了晚上,我跟老師們一起走路去餐廳,吃飯的過程中跟老師還有其他選手們聊了很多,從整個技職體系的升學到競賽那些的...,感覺高職生要升學真的太不容易了,期間校長也有過來湊熱鬧一下 XD,感覺明天真的第二名的話,我就要捲統測去台科了...。

飯後

本來打算走路回飯店,結果走到一半我的錢包就消失了??回去問工作人員聽說已經有同校的老師領走了,於是老師就在群組上詢問是否有人拿到,正當某一位老師說他拿到的時候,我們正好看到了正前方有一位老師在打字,於是我們就果斷上前,果然錢包真的在他那裡!還真是奇妙的緣分,後來老師放我自由的時候我就順便去附近拍了好幾張照片(放在文章的最後面)。

day 4 頒獎典禮 + 回校

早餐

由於頒獎典禮 8:00 才開始所以我打算先去吃個飯店的早餐再看要怎麼去會場,畢竟前幾天都因為比賽沒有吃到飯店的早餐 QQ,結果我同學賴床害我只好自己下去吃,在餐廳也剛好遇到老師們就跟他們一起坐下來了,至於早餐的部分感覺就跟一般飯店差不多,沒什麼特別的(?,吃完的時候想說我同學怎麼還沒下來,於是就上去找他,一進房間看到他居然在縫襪子??,直接關門走人,下樓的時候剛好遇到校長,結果校長跑來跟我們坐一桌了ww(聽說校長以前在雄工教書的時候也是資訊科),聊了一下後我們就搭 uber 去中工了。

頒獎典禮

到了會場就先去跟其他選手聊一下天,其實就是除了我以外的金手獎前三名啦ww,其中有聊到 rk.3 羅東高工的選手居然也打競程(APCS 4/4)但他跟我說他打競程只是因為興趣而已??除此之外就大概聊了一下各個學校的情況,初選的時候發生的事之類的,不過我們幾乎都一致認為今年的題目太簡單了(雖然也只有兩個人破台)。

大概過了半小時就有工作人員來請有入圍的選手跟他走,大概就是要準備頒獎了,由於 rk.3 以後的名次都確定了,只有我跟大安的選手還不確定誰是 rk.1,所以我們兩個都很緊張ww。

------------------------------------------------- 以下是防雷線 -------------------------------------------------

到了台上,司儀會從後面一個一個叫名次和學校,聽說今年是第一次這樣玩,好阿台中高工你要這樣玩我是吧,「金手獎第三名,國立羅東高工,XXX...(頒獎和拍照)下一位,金手獎第二名,市立高雄...」聽到這裡時我的頭腦已經來不及思考,身體自己動了起來,絲毫沒有半點猶豫,就這樣上台了...。

金手獎第二名有一座獎盃還有 49000 的獎金,但這些跟台科大比起來真的很微不足道。

由於還有摸彩跟其他活動,領完獎狀跟其他東西後就回到位置上了,然後就是繼續聊天ww,只不過後來的摸彩環節不知道為什麼連一個高雄高工的人都沒有抽到??等到所有活動結束就吃飯回學校了。

心得

這段時間內我做了很多的改變,禁止使用社交軟體、禁止熬夜、禁止訓練期間睡覺、禁止做和訓練無關的事情,這不但幫助我改善了熬夜的習慣,還讓我能夠充分的運用時間,由於我我本來就有在做專案跟打競程,以致於能在短期間大幅提升我的術科能力。

其實到了上臺前一刻都是焦慮的心情,在頒獎完後第一件事是先恭喜另外一位選手拿到了 rk.1,同時心裡想著或許 rk.2 對我來說已經算好的成果了,至於學科輸了就是輸了,我也很慶幸我沒有以鬆懈的態度去看待這場比賽,即使和 TOI、全國技能競賽相比是個不起眼的比賽,我也仍然享受其中,比起技術和實力,我學到更多的是做事的方法和態度。

我想感謝那些幫助過我的人,即使沒有指導我但仍然關心我的老師們、不知道我在幹嘛但仍然支持我的家人們、不時給予我鼓勵的同學和朋友們。最後,我也跟那位 rk.1 的選手約好了,我們台科見!

一些照片