選課大作戰
難怪人家都說,資工系沒有搶不到的課
目錄
事件發生的當天,有著一個美麗的清晨。
我和一群臭魯蛇在花蓮海岸線第一排的帳篷中醒來,享受假掰露營的快活。俗話說:黑暗之後必是光明,那日出之後,想必就是補眠了吧。但我卻萬萬沒想到,再過不到3小時,就是下學期的選課開放的時間。
愜意的我就這麼給他睡死,該搶的通識一個都沒搶到。
選課策略 v1 #
時間快轉到上星期一,課表還是沒敲定。雖然必選修是差不多了,但通識還是缺了一大塊。但這要是再不選,啊鐵定是要出大事,所以還是動手寫了搶課的程式。按照學校的選課系統規則,在星期三早上 10 點之前,所有退選的名額會優先被分配給那些在「美麗早晨」按順序填入候補的同學,而選課程式的策略,就是在星期三候補名單清空之後,密切注意選課人數,等到有人退了課,再馬上選起來。
雖然很多課還沒選,但至少星期一早上的選修和下午 3 學分的社會學通識都是我確定會修的。所以當天的工作很簡單,在上課的時間去露個臉,下課回實驗室把程式趕出來,等著星期三掛起來跑,晚上再花點時間上低卡物色一些其他也許不那麼差但還有空缺的通識當保底,最後在睡前選了一個隔天下午的社區營造通識。
星期二的課除了前一晚加選的通識,還有早上的另一門選修,我還成功拉到下線 @___yu.xuan 陪我一起去下午的通識 XDDD。下午實際去了社區營造那門通識,是一個中年偏老 (?) 的女老師開的課,雖然他講了一大段上課守則,但反正我接收到的大概是:1. 不要滑手機、2. 不要睡覺、3. 不要吃東西。說實在也不是什麼挺過分的要求,但也許可以總結為什麼這堂課會選不滿。反正我們沒什麼選擇,應該也不至於扛不住,就將就一下吧。
星期三開始我就進入 228 連假模式了 xDDD,每天睡到自然醒,晃進實驗室打個雜,等看看我的程式能不能撈到什麼好料。啊結果還真的沒辜負我的期待,當天早上的力學與數學的歷史發展,下午 1 點就有人退掉,於是馬上就被我 v1 的程式撈起來了 👍🏻
到了這個時間點,我已經正式選滿了 4 趟通識,分別是:
- 社會學 (預選抽到的)
- 社區營造
- 力學與數學的歷史發展
- 古典音樂賞析 (也是抽到的)
進階功能 v2 #
雖然大致上已經可以接受了,但還是想再微調一下,主要是看能不能把禮拜五的古典音樂換到禮拜三早 8,這樣就可以把課集中到只有星期一到三。選課系統有限制一個人一學期最多只能修 4 堂通識,就算選的第 5 堂有空,也會被系統擋下來。雖然我 v1 的程式才放下去跑沒多久,但我馬上著手開始進行構造改革👨🏻💻,v2 新增的功能,就是檢查如果星期三的古典音樂有空位,就馬上把星期五的退掉,然後搶星期三的課。
當時就挺突然的,晚上 11 點多我正準備要去洗澡,手機通知突然炸起來,我馬上意識到,起風了🌪
雖然衣服都脫了,我還是衝回電腦前面就備戰狀態。真的是還好我還沒開始洗, v2 的程式偵測到星期二下午的「愛情與政治」有空位,居然就把古典音樂給退掉去選了。雖然這是合理的操作,但我下午在寫的時候其實沒有想到這個 case ,如果有的話,也應該是放掉社區營造來選這門課才合理。所以剛才發生的事真的完完全全是一場意外 XDDDDDDDD 。接著趁古典音樂還在趕快先撿回來,把社區營造退掉,最後檢查完程式沒有 bug 之後,才安心進浴室洗澡。(乾為了這鬼東西我他媽光著身子跪在電腦前面折騰了30分鐘(´///☁///`)
隔天星期四晚上 9 點多,v2 的程式按照原先設定的目標,幫我撈到了星期三的古典音樂。至此,我整整一個禮拜的選課旅程終於告一段落,選滿 4 堂我原本想選的通識 (其中 v1 選了 1 堂,v2 選了兩堂),而且都排在星期一到三,完美整合了名副其實的四天連假。
結論 #
下面開始選課大作戰的技術總結 (x
撇掉程式不說,我私心覺得重點還是在那個星期三的候補機制。如果仔細想一下,大部分退課的狀況會發生在兩種情況,一種是第一次上完課之後,覺得 hold 不住的同學退出來的 (比方說上面的力數歷史),另一種是可能選到了別的更想上的課,所以退掉原本選的其他課。以相依性來說,第二個 case 會由第一個 case 觸發,而第一個 case 只會發生在上完第一次之後。就是因為候補機制只運作到星期三,所以星期三下午之後的課,都是想要狙擊的人可以操作的空間,想靠候補排上根本就是排心酸的。另外,選開課人數高的課也是另一個關鍵,以這次的經驗來說,「愛情與政治」和「古典音樂賞析」的選課人數都超過 100 人,要等到有人退課根本只是時間的問題。
雖然來中興的時候本來是決定不再幹這檔事了,一方面是寫這東西對當時的我還是挺折騰的,另一方面就是對於這玩法到底公不公平,我還沒有想好一個結論。雖然話是這麼說,但畢竟能選到想上的課,用最後的幾個學分刷點 GPA ,然後畢業才是真的,而且外加這幾年寫了太多程式,這題目對我來說根本已經不難了。如果我不寫,反而才奇怪吧。