2020年3月12日

[程式] codeforces 1321C: Remove Adjacent

[題意]
給一個由小寫字母組的字串 s (長度介於 1 ~ 100),每次你可以從 s 中刪掉一個滿足特定條件的字母,問最多能刪掉幾個?
刪除字母的條件:令 s[idx] 為 s 的第 idx 的字母。若 s[idx - 1] 或 s[idx + 1] 的字母其字母順序 (令字母順序為 a -> b -> c -> ... -> x -> y -> z) 在 s[idx] 的字母順序的前一個,則我們可以刪掉 s[idx]

2020年2月13日

[C] XOR linked list

一言以蔽之,這是個用 single linked list 的架構去做到 double linked list 的效果的東西,主要目的就是為了節省記憶體使用量

2020年1月2日

[筆記] Automatic Log Parser

這其實是個很大的題目,作法百百種,但是核心概念就是要將原本需要人工設計、維護的 log parser 轉變為用程式自動地去找出隱藏在 log 中訊息架構。這樣說可能不太好理解,我們直接看圖:
圖中最上面是 hadoop 印 log 訊息的程式片段,在執行過程中會在 log 檔產生中間的訊息,而最下面則是一般使用 log parser 通常會想得到的結果。通常 log parser 要產生出最下方的結果依賴於使用者知道 log 訊息的架構,比方說每個 log 訊息最一開始是時間資訊、然後是嚴重程度、從哪個元件印出來的、訊息內會有那些地方是固定或可變的...等等。然而這種方法最大的困擾點是目標程式改版、訊息架構有些許變化,log parser 也一定要跟著修改才能運作。所以近年來就有人開始研究是否有辦法讓程式自己找出那海量的 log 訊息中的架構,這樣就不用花大量的時間去維護 log parser 了。

"Tools and Benchmarks for Automated Log Parsing." 這篇發表在 2019 ICSE (International Conference on Software Engineering) 的論文簡單來說就是整理了至今發表的各種方法並且加以評比各自的精準度與效能。另外他們也把程式放上 github 了,有興趣的可以下載來使用看看,對於有這類需求的人我想是個滿適合拿來入門的。

2019年9月26日

[筆記] port list can be ( , , ... , ) in SystemVerilog

最近在讀 SystemVerlog 的 LRM,發現裡面的語法允許某個很神奇的寫法:
module MM ( , , ,); ...
沒錯,port list 可以是一堆 , 沒有任何名稱! 雖然 LRM 的 syntax 確實允許這樣寫,但會允許是空的真的很奇怪

2019年9月6日

[筆記] Codeforces 1208D. Restore Permutation

[題意] 給一串 n 個數字的序列 $s_1, s_2, s_3, ... , s_n$,要找出 1 ~ n 這 n 個正整數的排列 $p_1, p_2, ... , p_n$ 使得 $s_i = \sum_{j=1}^{i} p_j$,其中 $p_j < p_i$

2019年8月31日

[筆記] Codeforces 1208A: XORinacci

[題意] 其實就是算 Fibonacci number,只是原本是 $F(n) = F(n-1) + F(n-2)$ 變成了 $F(n) = F(n-1) ⊕ F(n-2)$,其中 ⊕ 是 bitwise xor 運算,並且 F(0)及 F(1) 是題目給定而不是定值。

[筆記] Codeforces 1208B: List Of Integers

[題意] 給一個正整數 n ($1 \leq n \leq 2000$) ,後面接著 n 正整數 $a_1, a_2, ... , a_i, ..., a_n$ ($1 \leq a_i \leq 10^9$),請找出一個這數列的一段連續區間使得這 n 個數字拿掉這段區間後的數字皆不重複。答案要找的是這段區間最小的長度是多少

2019年6月4日

[C++] std::stringstream cannot output integral type

這次遇到的問題簡單來說就是不知道為什麼程式的 log 有部分訊息被吃掉,然後整份 log 就此大亂。細追分析後發現我們的 log 會先用 std::stringstream 把使用者傳進來的所有參數 (任意數量 & 型態) 轉成 std::string,隨後才把他輸出到 log file 去,而在 std::stringstream 試圖要處裡一個數值型態的參數時會丟出 exception,雖然會被他自己吃掉不會往上丟,但也導致要處理後面的參數時運作情形就不如預期。

進一步往下追原因的時候發現這其實是所有繼承 std::ios_base 的類別都會有的狀況,原因的話簡單來說就是 std::ios_base 內部會主動去處理 locale 相關問題,在這過程中的檢查出狀況時就會丟出一個 exception,而這個 exception 雖然馬上會被吃掉,但會拉起內部的 badbit,下一次要 output 時因為 badbit 被拉起來了,所以會吃掉丟進來的參數但不會真的印出去。

2019年4月28日

[C++] Deep into Hash Map in STL: std::unordered_map

std::unordered_map 是 C++11 後 STL 新增的 container,本質上可以想成是一個 hash map。相較於原先的 std::map 基本上是個 red-black tree , std::unordered_map 的重點在於許多操作的 amortize complexity 基本上是 constant time。只是使用上有些許的重點要注意,不然效能可能會不如預期

2019年3月28日

[筆記] High CPU Usage on Windows 10 Event Log (svhost.exe)

公司筆電自從某次 windows 10 更新後 CPU 使用率一直高居不下,然後風扇就一直轉吵死人,每次一開會拔掉電源就撐不了多久實在很惱人。本來開工作管理員一直看到 windows event log 想說可能是 windows 本身不知道幹了啥事就先不理他,結果過了一周完全沒改善只好去查原因,花了一個多小時才終於查到問題點 = =