---
# System prepended metadata

title: Annoying Codes 01
tags: [annoying-code, quest]

---

###### tags: `annoying-code` `quest`

Annoying Codes 01
===


---
##### [2022-08-22] annoying "if"(poor)
⠿ 一個不好的例子，重構題目中指定的程式碼。
* c#
    * https://code.sololearn.com/cwtjO7J4dvtP `2022-11-09 新增`
    * https://www.jdoodle.com/ia/DoZ `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cs3A6odRM08W
    * https://www.jdoodle.com/ia/u5V
* javascript
    * https://code.sololearn.com/ci2m7sl6psYk
* lua
    * https://www.jdoodle.com/ia/zsY

---
##### [2022-08-29] resolve key codes(poor)
⠿ 解析輸入的鍵盤按鍵，並回傳對應的指令。<br/>
輸入的按鍵參考 ( https://css-tricks.com/snippets/javascript/javascript-keycodes/#aa-keycode-values )。<br/>
作答要求調整題目中 resolveKeyEvent() 方法。
* c#
    * https://code.sololearn.com/cFXdi9UmBOLD `2022-11-11 新增`
    * https://www.jdoodle.com/ia/Dp2 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cl7z37ih8DwJ
    * https://jdoodle.com/ia/uor
* javascript
    * https://code.sololearn.com/cVHU56uf8Q3N `2022-11-14 新增`
* lua
    * https://www.jdoodle.com/ia/zt0

---
##### [2022-09-05] detect web spider(poor)
⠿ 分析 user agent，判斷是否為機器人。<br/>
robot user agent參考 ( https://developers.whatismybrowser.com/useragents/explore/software_type_specific/crawler/1 )。<br/>
作答要求調整題目中 isWebSpider() 方法。
* c#
    * https://code.sololearn.com/cleg0ly59IKV `2022-11-11 新增`
    * https://www.jdoodle.com/ia/Dp4 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cfKx7y1I6226
    * https://jdoodle.com/ia/uKy
* javascript
    * https://code.sololearn.com/c50wjcQux7vM `2022-11-14 新增`
* lua
    * https://www.jdoodle.com/ia/zt1

---
##### [2022-09-13] resolve file signatures(poor)
⠿ 解析檔案簽章，判斷檔案格式。<br/>
參考 ( https://en.wikipedia.org/wiki/List_of_file_signatures )。<br/>
作答要求調整題目中 resolveFileSignature() 方法。
* c#
    * https://code.sololearn.com/c9Z7L4DT3C1e `2022-11-11 新增`
    * https://www.jdoodle.com/ia/Dp5 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/ckFb1Hmk6Hg3
    * https://jdoodle.com/ia/v8S
* javascript
    * https://code.sololearn.com/cEBg35LRltb6 `2022-11-14 新增`
* lua
    * https://www.jdoodle.com/ia/zt3

---
##### [2022-09-19] sort the sequence(fair)
⠿ 實作比較器 (comparer)。作答要求調整題目中 sortSequence() 方法。
* c#
    * https://code.sololearn.com/cw6nag5k7FXO `2022-11-14 新增`
    * https://www.jdoodle.com/ia/Dp6 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cGYiX4g3PSBM
    * https://www.jdoodle.com/ia/vuc
* javascript
    * https://code.sololearn.com/cJUDD5YZGf3Q `2022-11-16 新增`
* lua
    * https://www.jdoodle.com/ia/zt4

---
##### [2022-10-11] fix the sort function(bad)
⠿ 實作 clone()。
* c#
    * https://code.sololearn.com/c2GQYgLl3nl2 `2022-11-14 新增`
    * https://www.jdoodle.com/ia/Dp7 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cPkziLDQqGwb
    * https://www.jdoodle.com/ia/x8l
* javascript
    * https://code.sololearn.com/c5IvM1bWxu9H `2022-11-16 新增`
* lua
    * https://www.jdoodle.com/ia/zt6

---
##### [2022-10-17] check object equal(poor)
⠿ 調整 isEqual()。
* c#
    * https://code.sololearn.com/ctLsUfiMDnec `2022-11-14 新增`
    * https://www.jdoodle.com/ia/Dp8 `2023-02-06 新增`
* golang
    * https://code.sololearn.com/cvl9od513lP6
    * https://www.jdoodle.com/ia/zgB
* javascript
    * https://code.sololearn.com/cdj0Xcq1ebtj `2022-11-16 新增`
* lua
    * https://www.jdoodle.com/ia/zt9 `2022-11-14 新增`

---
##### [2022-10-24] endless bonus pool(scenario)
⠿ 重構 BonusPool 讓帳戶可以在每隔一段時間後領取獎金。
>**情境**:
> 1. 帳戶每隔5秒，可以隨時領取金額3的獎金。
> 2. 若與前一次領取間隔不足5秒，則無法領取任何獎金。
* c#
    * https://www.jdoodle.com/ia/zzb `2022-11-14 新增`
* golang
    * https://www.jdoodle.com/ia/zz8
* javascript
    * https://www.jdoodle.com/ia/zza `2022-11-18 新增`
* lua
    * https://www.jdoodle.com/ia/zzc

---
##### [2022-11-03] multiple log collectors(poor)
⠿ 用 Observer pattern 重構或實作標註的項目
>**情境**:
>
>   main() 方法模擬一個帳戶註冊、登入、登出的情境。
> 在不同的操作下會有多個 log 紀錄需求。利用 Observer
> pattern 實作並組織不同行為的 log 紀錄需求。
>
>**參考**: 
> 1. Desigin Pattern: https://refactoring.guru/design-patterns/go
* c#
    * https://code.sololearn.com/cNDmi9CeJsX1 `2022-11-16 新增`
* golang
    * https://code.sololearn.com/c01wJBwHJFEA
    * https://www.jdoodle.com/ia/zyW
* javascript
    * https://code.sololearn.com/cx495O617bhx `2022-11-18 新增`
* lua
    * https://www.jdoodle.com/ia/ztd

---
##### [2022-11-14] optional arguments for query(scenario)
⠿ 編寫 sql 語法，滿足動態參數作為條件查詢。
* sql
    * https://www.jdoodle.com/ia/A3W `2022-11-25 更新`

---
##### [2022-11-28] update setting(scenario)
⠿ 編寫 sql 語法，依 json 輸入更新或新增紀錄。
> 輸入的資料已編寫到 new_setting 物件，其內如下：
> ```json
> {
>   "max_pool_size"   : 300,
>   "refresh_interval": 900,
>   "locale"          : ["en", "zh", "fr"]
> }
> ```
> 參考: https://www.sqlite.org/json1.html
* sql
    * https://www.jdoodle.com/ia/zdz

---
##### [2022-12-05] latest transaction by currency(scenario)
⠿ 編寫 sql 語法，區分幣口、交易類型查詢最新的交易紀錄。
> 參考: https://www.sqlite.org/windowfunctions.html
* sql
    * https://www.jdoodle.com/ia/zdA

---
##### [2022-12-12] formatting output data(poor)
⠿ 使用 IFormatter 重構 Render() 方法
> 參考: https://zh.wikipedia.org/zh-tw/%E5%A4%9A%E6%80%81_(%E8%AE%A1%E7%AE%97%E6%9C%BA%E7%A7%91%E5%AD%A6)
* c#
    * https://code.sololearn.com/cW45BSb45rDp
* golang
    * https://code.sololearn.com/c3XASWLE273O
    * https://www.jdoodle.com/ia/Bkp
* javascript
    * https://code.sololearn.com/cFkJxT3fvK77
* lua
    * 缺

---
##### [2022-12-19] process various payments(poor)
⠿ 使用 Template Pattern 重構現有的邏輯
> **情境**:
> 原始碼實作買家(Buyer 型別)使用不同的付款方式實行付帳的處理，付款流程如下：
> 1. 輸入密碼或安全碼來取得驗證碼。
> 2. 付款時驗證碼與支付金額同時送出驗證。(部份付款方式需支付手續費)
> 3. 完成。
>
> **參考**: https://refactoring.guru/design-patterns/template-method
* c#
    * https://code.sololearn.com/cAoPUTms83o4
* golang
    * https://code.sololearn.com/cp4U8pYsmZ63
    * https://www.jdoodle.com/ia/Blx
* javascript
    * https://code.sololearn.com/c3Cl1S99O6rK
* lua
    * 缺

---
##### [2023-01-09] reveal account type(poor)
⠿ 在查詢語句中輸出帳戶類型到結果。
>**情境**:
> 目前的 account 資料表依照欄位id的值分配到三種指定的類型 `robot`, `vip`, `guest`。這三種類型的範圍如下：
> | type | range           |
> |:-----|:----------------|
> |robot | 0x0000 ~ 0x00FF |
> |vip   | 0x0100 ~ 0x7FFF |
> |guest | 0x8000 ~ 0xFFFF |
* sql
    * https://www.jdoodle.com/ia/D5y

---
##### [??] rescue legacy query(scenario)
⠿ 解決既有資料表擴充欄位與變更資料內容後，不會影響到既有的查詢語法。
>**情境**:
> 因應需求擴充，資料表 account 須進行下面調整：
> 1. 新增 "name" 欄位。若此欄位沒有指派值，則使用 "username" 欄位的值。
> 2. 重新指派所有 "level" 欄位內的等級。原先的值將使用如下的表格內新等級的值表示。
>    | 原等級  | 新等級 |
>    |:-------|:------|
>    | copper | L1    |
>    | silver | L3    |
>    | golden | L5    |
>    | diamon | L7    |
> 3. 上面所有的調整將不會影響到既有的查詢語句。確保既有的語句能正常運作，而且不用修改。
* sql
    * https://www.jdoodle.com/ia/AfO
