109 高中資訊學科能力複賽的參加心得

又墊底了。 但不一樣的是,這次比賽我收穫上不少。 早先的選手培訓課程 這是我覺得整個競賽當中,我最印象深刻而且最有收穫的課程。 在參加這門課程之前,其實我很厭惡演算法。因為數學跟邏輯不太好,所以我當時會覺得演算法很恐怖,看不懂,不敢學。但在上完這幾門課程後,我才發現到,很多演算法其實自己平時就在用,只是從未察覺。 就例如動態規劃 (Dynamic Programming) 好了,概念這就像是我平常在搞得快取 (Cache),把先前擷取 / 計算過的結果儲存下來,下次要用的時候,就直接把之前擷取 / 計算的結果拿出來。 hashmap cache_db; get_something(id) { declare data; if id not in cache_db data = _get_something(id) cache_db[id] = data else data = cache_db[id] return data } 還有圖論,這對我來講是個很新穎的演算法概念,而在聽邏輯之後覺得比想像中還要好懂。「廣度優先」和「深入優先」這兩個抽象的名詞,用老師的 GIF 講解之後就變得很好懂。但就是還不知道能用在哪些地方 😅 最後是逐個擊破(分而治,D&C)和貪婪演算法 (Greedy Method),雖然一開始沒聽懂,但後來自己回家找了 Wikipedia 之後就看懂了。也是個自己寫程式偶爾會想到,但沒發覺是個演算法的東西。 培訓課程的筆記 比賽的過程與收穫 雖然跟上次一樣,看不懂題目,或是看懂卻不會做,但其實我還是有一些額外的收穫。 先說為何我「看懂卻不會做」,就例如「給三個點,求圍起來的三角形面積」。我知道三個點圍起是直角三角形的作法,但我不知道不規則三角形的解法。 後來聽了講解之後,才知道要用的是海龍公式。真是遺憾,競賽時不能用網路,所以我沒辦法上網查「三個點求三角形面積」的公式,而且我也忘了海龍公式。只能說是數學基礎不夠好。 還有下面這種「數字包數字」的題目,這題我至今還不會做,希望未來能看到能看懂的解法: 7 4444444 6 4333334 5 4322234 4 4321234 3 4322234 2 4333334 1 4444444 0 1234567 這一題中,N=4,而我們會給四個數字,分別為 x1 y1 和 x2 y2。求 (x1, y1) 和 (x2, y2) 的值 ...

November 2, 2020 · pan93412

VBA 筆記:選取事件

有天我突然想寫一個 Excel 按鈕,但是又不想要做一個 Form,而想到最好的辦法,就是按 Excel 中的格子。那該怎麼做,才可以做出這種偽按鈕呢? 原理思考 Excel 中,按一下儲存格代表? 就是選取「單一」儲存格。就跟你拖曳選取一堆儲存格、選取整整一行或一列所代表的含意是相同的。 那怎麼知道使用者選取了什麼? 用 VBA 的事件 (Event)。只要使用者做了什麼動作(觸發),Excel 都會通知你發生新事件,告訴你使用者做了什麼。 首先,Excel 遇到新事件時,會先看看你有沒有在指定的地方放下動作(Sub,子程式),如果沒放就等同忽略,而有放就會觸發(Trigger)這個動作。所以我們只要知道「選取儲存格後該在哪裡接收事件」,就完成了。 正文 建立接收事件的子程式 VBA 中有一個跟儲存格變更有關的事件,叫做 Worksheet_SelectionChange,長得像這樣: Private Sub Worksheet_SelectionChange(ByVal Target As Range) 別急著複製。VBA 其實有提供一個非常簡單的事件選取工具。首先開啟 VBA 編輯器,找到你想要監聽的工作表,然後按一下上方的 [(一般)],之後選擇 [Worksheet]。 選擇 Worksheet 然後選擇 [SelectionChange],搞定! 選擇 SelectionChange 了解子程式的結構 首先,我們來看看產生的程式碼。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) End Sub 你會發現到裡面出現了非常多奇怪的東西。什麼是 Private 和 ByVal?Target 是什麼?As Range 又是什麼東西? 首先,每個工作表都有自己獨立的事件,也就是你在 A 工作表選取東西,不干 B 工作表的事。如果用 Public,就代表 A 工作表的事件也會影響其他工作表。這不應該發生。而 Private 就可以限定這個事件是 A 工作表 only 的。 而 ByVal 則需要一點資料結構的知識。VBA 傳遞參數有兩種形式,一個是 ByVal,建立物件的副本,另一個則是 ByRef,傳遞指向原物件的參考。有興趣可以看看〈VBA 中 ByVal 和 ByRef 的基础用法和区别〉。 ...

October 18, 2020 · pan93412

淺談翻譯弊病 (1)

「Install this software to your computer.」 這句話你會怎麼翻?一些保守翻譯者會翻成「安裝此軟體至您的電腦。」,但我覺得這樣翻不好,為什麼? 翻譯是給人看的 拘泥於逐字翻譯,會使翻譯不近人情。就以我上面提的翻譯來說,你平常說話並不會說成這樣,即便是書寫,也不會這樣寫。 這就算是典型的翻譯腔 - 你沒翻錯,但很怪。一個優秀的翻譯,不會讓人覺得突兀,就像是母語使用者說的。 就我自己的翻譯習慣,我會先念一遍翻譯,並尋找奇怪的地方。就以開頭那句,我會翻成「將軟體安裝進您的電腦」,更好讀但又不會太口語化。 如果有興趣可以看看這篇翻譯腔相關的文章。 翻譯一點都不簡單 也因此,要翻出一個好的翻譯其實不是個簡單的事情。如果翻譯只會逐字翻,那我大可可以直接用 Google 翻譯或 DeepL 之類的服務。翻譯更需要的是理解後,在不破壞原意的情況下的重新表達。這需要的不僅僅是翻譯員的語文能力,以及翻譯的經驗。

October 16, 2020 · pan93412