From 0cb7edda15fd5fdfc77701fd779c84853cbc67a3 Mon Sep 17 00:00:00 2001 From: 1114405022 Date: Mon, 22 Jun 2026 20:29:45 +0800 Subject: [PATCH 1/2] Final Submission: All problems completed (Flattened Structure) --- .../solutions/1114405022-0622/AI_LOG.md | 107 ++++++++++++++++++ .../1114405022-0622/assets/radar.png | Bin 0 -> 94042 bytes .../solutions/1114405022-0622/caesar.py | 19 ++++ .../solutions/1114405022-0622/clean_data.py | 20 ++++ .../solutions/1114405022-0622/digital_root.py | 15 +++ .../week-18/solutions/1114405022-0622/plot.py | 58 ++++++++++ .../1114405022-0622/search_performance.py | 29 +++++ .../solutions/1114405022-0622/test_caesar.py | 27 +++++ .../1114405022-0622/test_clean_data.py | 30 +++++ .../1114405022-0622/test_digital_root.py | 29 +++++ .../solutions/1114405022-0622/test_plot.py | 21 ++++ .../test_search_performance.py | 54 +++++++++ weeks/week-18/solutions/1114405022/AI_LOG.md | 107 ++++++++++++++++++ .../solutions/1114405022/Q1/clean_data.py | 20 ++++ .../1114405022/Q1/test_clean_data.py | 30 +++++ .../week-18/solutions/1114405022/Q2/caesar.py | 19 ++++ .../solutions/1114405022/Q2/test_caesar.py | 27 +++++ .../solutions/1114405022/Q3/digital_root.py | 15 +++ .../1114405022/Q3/test_digital_root.py | 29 +++++ .../solutions/1114405022/Q4/assets/radar.png | Bin 0 -> 94042 bytes weeks/week-18/solutions/1114405022/Q4/plot.py | 58 ++++++++++ .../1114405022/Q4/search_performance.py | 29 +++++ .../solutions/1114405022/Q4/test_plot.py | 21 ++++ .../1114405022/Q4/test_search_performance.py | 54 +++++++++ 24 files changed, 818 insertions(+) create mode 100644 weeks/week-18/solutions/1114405022-0622/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022-0622/assets/radar.png create mode 100644 weeks/week-18/solutions/1114405022-0622/caesar.py create mode 100644 weeks/week-18/solutions/1114405022-0622/clean_data.py create mode 100644 weeks/week-18/solutions/1114405022-0622/digital_root.py create mode 100644 weeks/week-18/solutions/1114405022-0622/plot.py create mode 100644 weeks/week-18/solutions/1114405022-0622/search_performance.py create mode 100644 weeks/week-18/solutions/1114405022-0622/test_caesar.py create mode 100644 weeks/week-18/solutions/1114405022-0622/test_clean_data.py create mode 100644 weeks/week-18/solutions/1114405022-0622/test_digital_root.py create mode 100644 weeks/week-18/solutions/1114405022-0622/test_plot.py create mode 100644 weeks/week-18/solutions/1114405022-0622/test_search_performance.py create mode 100644 weeks/week-18/solutions/1114405022/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022/Q1/clean_data.py create mode 100644 weeks/week-18/solutions/1114405022/Q1/test_clean_data.py create mode 100644 weeks/week-18/solutions/1114405022/Q2/caesar.py create mode 100644 weeks/week-18/solutions/1114405022/Q2/test_caesar.py create mode 100644 weeks/week-18/solutions/1114405022/Q3/digital_root.py create mode 100644 weeks/week-18/solutions/1114405022/Q3/test_digital_root.py create mode 100644 weeks/week-18/solutions/1114405022/Q4/assets/radar.png create mode 100644 weeks/week-18/solutions/1114405022/Q4/plot.py create mode 100644 weeks/week-18/solutions/1114405022/Q4/search_performance.py create mode 100644 weeks/week-18/solutions/1114405022/Q4/test_plot.py create mode 100644 weeks/week-18/solutions/1114405022/Q4/test_search_performance.py diff --git a/weeks/week-18/solutions/1114405022-0622/AI_LOG.md b/weeks/week-18/solutions/1114405022-0622/AI_LOG.md new file mode 100644 index 000000000..45aa2530f --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/AI_LOG.md @@ -0,0 +1,107 @@ +# AI_LOG — CPE 模擬實戰期末上機考 + +## 第一題:資料清理 (Data Cleaning) + +### 我問 AI 什麼 +1. 告知 AI 要開始第一題「資料清理」,並跟 AI 討論拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 建立測試檔案、執行並確認紅燈、完成 `test:` commit。 +3. 要求 AI 寫實作代碼、執行確認綠燈、完成 `feat:` commit。 +4. 請 AI 用我的學號參數 $D = 4$ 計算 Sample Input 的兩組預期輸出。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:「函式簽名與回傳型別」打算如何定義?無數值符合時回傳空 list 還是 `"NONE"` 字串? + * **我回答**:定義為 `def clean_data(data: list, d: int) -> list:`,無符合者回傳 `"NONE"`。 +* **AI 反問**:回傳 `"NONE"` 字串與簽名中的 `-> list` 衝突,建議將計算與輸出分離,或使用 `list | str` 聯集型別,想選哪種? + * **我回答**:堅持函式直接回傳 `"NONE"` 字串。 +* **AI 反問**:`d = 0` 的例外、空 list 邊界、全被篩掉的 edge case 怎麼處理? + * **我回答**:`d = 0` 拋 `ValueError`,其餘皆回傳 `"NONE"`。 +* **AI 反問**:(提供測試檔後) 這 5 個 test cases 是否足夠,是否需要加其他特殊案例? + * **我回答**:修改我的決定,把原本的 `d = 0` 拋 `ValueError`,改為 `d = 0` 直接回傳 `"NONE"`,並要求更新測試。 + +### AI 給了什麼 +1. 建立了含有 5 個測試案例的 `test_clean_data.py`。 +2. 配合我修改的要求,更新 `test_d_zero_returns_none` 測試。 +3. 實作了 `clean_data.py`(使用 set 進行 O(N) 複雜度保序去重,隨後進行篩選與排序)。 + +### 我改了什麼 +1. **修改了例外處理設計**:原本決定 `d = 0` 拋 `ValueError`,但後來考量程式的魯棒性,決定改成當 `d = 0` 時與找不到資料一樣「回傳 `"NONE"`」。我主動抓出原本測試設計的衝突,並指引 AI 修改 `test_d_zero_raises_valueerror` 為 `test_d_zero_returns_none`。 +2. **型別優化**:主動確認傳入 `list` 而回傳 `list | str` 的動態型別混合處理,確保測試跟實作的斷言完全一致。 + +--- + +## 第二題:凱撒密碼 (Caesar Cipher) + +### 我問 AI 什麼 +1. 告知 AI 開始第二題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照我的學號位移量 `SHIFT = 3` 進行 TDD 流程(寫測試 $\to$ 紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別為何? + * **我回答**:回傳將 `text` 依照 `shift` 位移後的加密字串。參數包括 `text` (str) 與 `shift` (int)。 +* **AI 反問**:`shift` 非整數的例外、空字串與純數字符號的邊界、以及 `SHIFT = 3` 的 `A`、`z`、`"Hello, NPU!"` 該如何加密? + * **我回答**: + 1. 問 AI 關於 `shift` 非整數的處理建議,隨後聽取 AI 的建議選擇「嚴謹做法,明確拋出 `TypeError`」。 + 2. 非英文字元(數字、符號、空白)保持不變。 + 3. `A` 移 3 格變 `D`,小寫 `z` 循環變 `c`。在 AI 協助下,釐清 `"Hello, NPU!"` 會被加密成 `"Khoor, QSX!"`。 +* **AI 反問**:進一步舉例 `"abc XYZ"` 在 `SHIFT = 3` 該加密成什麼? + * **我回答**:理解了字母表末端循環的原理,得出 `"def ABC"` 的正確預期。 + +### AI 給了什麼 +1. 建立了 `test_caesar.py`,包含 4 個測試(基本、末端循環、非字母與空字串、TypeError 測試)。 +2. 實作了 `caesar.py`(利用 `ord()` 和 `chr()` 計算大小寫字母位移,並透過 `% 26` 完美實現循環與負數處理)。 + +### 我改了什麼 +1. **決策例外處理策略**:在 AI 給予多種分析後(Implicit casting vs TypeError),我主動選擇了最符合軟體工程 Fail-Fast 原則的 `TypeError` 當作例外阻擋條件。 +2. **補充驗證案例**:在討論階段,我主動提出對 `"abc XYZ"` 這種跨越字母表末端的連續大寫/小寫組合進行確認,補足了 AI 原始構想中對多重邊界的信心。 + +--- + +## 第三題:任意進位的數字根 (Digital Root in Any Base) + +### 我問 AI 什麼 +1. 告知 AI 開始第三題,並要求拆解 $\ge 3$ 個 test cases。 +2. 請求 AI 提供函式簽名的建議。 +3. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:針對 $x=0$ 的邊界、`base` 不合法 (如 $\le 1$) 的例外行為、以及驗收標準(如何計算過程)的看法。 + * **我回答**:$x=0$ 時輸出 $0$;`base=0` 時也輸出 $0$。 +* **AI 反問**:實作方式傾向方案 A(模擬法:反覆轉換進位並相加)還是方案 B(數學法:利用 $\pmod{base-1}$ 性質)? + * **我回答**:選擇方案 A(模擬法)。 +* **AI 反問**:關於極大數值(如 $10^{100}$)的處理,認為是否會導致效能問題? + * **我回答**:認為跑得動,只是需要較多時間。 + +### AI 給了什麼 +1. 建議了簽名 `def digital_root(x: int, base: int) -> int:`。 +2. 建立了 `test_digital_root.py`,包含 5 個測試(基本 base=16、大數循環、x=0、base=0、不同基底)。 +3. 實作了 `digital_root.py`(利用 while 迴圈與模除運算 `% base` 實現模擬法數位根計算)。 + +### 我改了什麼 +1. **自定義基底異常行為**:在 AI 建議拋出 `ValueError` 處理非法基底時,我決定將 `base=0` 的行為定義為直接回傳 $0$,使函式在異常輸入下仍能保持穩定回傳。 +2. **確認模擬法可行性**:針對極大數值的運算效能進行討論,確認模擬法在數位根的對數級縮減特性下足以應對大數輸入,決定不採取過於複雜的數學優化,以維持程式碼的可讀性與符合題目「模擬過程」的意圖。 + +--- + +## 第四題:二分搜尋效能 (Binary Search Performance) + +### 我問 AI 什麼 +1. 告知 AI 開始第四題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別建議(Tuple 回傳 `(index, cmp)` vs 屬性記錄)。 + * **我回答**:選擇建議 A,回傳 `(index, cmp_count)` 之 tuple。 +* **AI 反問**:空 list (n=0) 時的預期結果。 + * **我回答**:回傳 `(-1, 0)`。 +* **AI 反問**:`binary_search` 收到未排序資料的處理方式。 + * **我回答**:選擇「做法 B」,即在函式內部檢查排序,若未排序則拋出 `ValueError`。 +* **AI 反問**:如何驗證比較次數 (cmp) 的正確性。 + * **我回答**:同意線性搜尋驗證 `cmp == index + 1`,二分搜尋驗證符合 $\log_2 n$ 量級。 + +### AI 給了什麼 +1. 建立了 `test_search_performance.py`,包含 6 個測試(線性找/沒找、二分找/沒找、未排序拋錯、空 list 邊界)。 +2. 實作了 `search_performance.py`(包含 `linear_search` 與 `binary_search`,並在二分搜尋前加入排序檢查)。 + +### 我改了什麼 +1. **明確化回傳介面**:在 AI 建議多種方式後,決定採用 Tuple 回傳,以確保每個呼叫都能獲取獨立的比較次數,避免在多執行緒或複雜呼叫中產生狀態污染。 +2. **強化安全性檢查**:堅持在 `binary_search` 內部加入排序檢查機制(raise ValueError),而非僅依賴外部輸入正確,確保實作符合嚴謹的工程標準。 diff --git a/weeks/week-18/solutions/1114405022-0622/assets/radar.png b/weeks/week-18/solutions/1114405022-0622/assets/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..58235d24a4de589ba6f9de83705bfae747e6cf79 GIT binary patch literal 94042 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
VwMpS8loVumyx0g}*Z^*pMp?fxD$W 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 literal 0 HcmV?d00001 diff --git a/weeks/week-18/solutions/1114405022-0622/caesar.py b/weeks/week-18/solutions/1114405022-0622/caesar.py new file mode 100644 index 000000000..2cd43a649 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/caesar.py @@ -0,0 +1,19 @@ +def encrypt_caesar(text: str, shift: int) -> str: + if not isinstance(shift, int): + raise TypeError("shift must be an integer") + + result = [] + for char in text: + if 'A' <= char <= 'Z': + # 大寫字母位移 + new_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A')) + result.append(new_char) + elif 'a' <= char <= 'z': + # 小寫字母位移 + new_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a')) + result.append(new_char) + else: + # 非字母字元保持不變 + result.append(char) + + return "".join(result) diff --git a/weeks/week-18/solutions/1114405022-0622/clean_data.py b/weeks/week-18/solutions/1114405022-0622/clean_data.py new file mode 100644 index 000000000..f8180f71b --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/clean_data.py @@ -0,0 +1,20 @@ +def clean_data(data: list, d: int) -> list | str: + if d == 0: + return "NONE" + + # 1. 去重且保序 (Preserve first occurrence) + seen = set() + deduped = [] + for x in data: + if x not in seen: + deduped.append(x) + seen.add(x) + + # 2. 篩選 (Divisible by d) + filtered = [x for x in deduped if x % d == 0] + + # 3. 排序 (Ascending) + filtered.sort() + + # 回傳結果 + return filtered if filtered else "NONE" diff --git a/weeks/week-18/solutions/1114405022-0622/digital_root.py b/weeks/week-18/solutions/1114405022-0622/digital_root.py new file mode 100644 index 000000000..8b9ab4846 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/digital_root.py @@ -0,0 +1,15 @@ +def digital_root(x: int, base: int) -> int: + if base == 0: + return 0 + if x == 0: + return 0 + + while x >= base: + digits_sum = 0 + temp_x = x + while temp_x > 0: + digits_sum += temp_x % base + temp_x //= base + x = digits_sum + + return x diff --git a/weeks/week-18/solutions/1114405022-0622/plot.py b/weeks/week-18/solutions/1114405022-0622/plot.py new file mode 100644 index 000000000..8ff4d432a --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/plot.py @@ -0,0 +1,58 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import json +import os + +# 必須加上此行,否則在沒有 GUI 的環境會報錯 +matplotlib.use("Agg") +# 設定中文字體 (Windows 系統常用微軟正黑體) +plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] +plt.rcParams['axes.unicode_minus'] = False + +def draw_radar_chart(): + # 1. 定義維度 (中文) + categories = ['執行時間', '比較次數', '空間開銷', '準備成本'] + N = len(categories) + + # 2. 準備數據 (基於 la-search 表現) + # 數值越小越好,因此我們使用 1/value 進行正規化,使面積越大代表效能越好 + # 這裡使用典型權衡值 + data = { + '線性搜尋': [1, 1, 5, 5], # Time (慢), Cmp (高), Space (低), Setup (低) + '二分搜尋': [5, 5, 5, 1], # Time (快), Cmp (低), Space (低), Setup (高) + '集合搜尋': [5, 5, 1, 2], # Time (最快), Cmp (低), Space (高), Setup (中) + } + + # 正規化 (0-1 區間,越大越好) + # 這裡簡單對應:1=最差, 5=最好 + + angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist() + angles += angles[:1] # 閉合圓環 + + fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True)) + + for label, values in data.items(): + vals = values + values[:1] + ax.plot(angles, vals, linewidth=2, label=label) + ax.fill(angles, vals, alpha=0.25) + + ax.set_theta_offset(np.pi / 2) + ax.set_theta_direction(-1) + ax.set_thetagrids(np.degrees(angles[:-1]), categories) + + # 1. 設定徑向範圍,讓最高分 (5) 離邊緣有一段距離,避免標籤重疊 + ax.set_ylim(0, 6) + + # 2. 增加標籤與圓環的間距 + ax.tick_params(axis='x', pad=25) + + plt.title("搜尋演算法多維權衡 (面積越大效能越好)", size=18, y=1.15) + plt.legend(loc='upper right', bbox_to_anchor=(1.5, 1.1)) + + plt.savefig("C:/Users/user/Desktop/2026 python/weeks/week-18/solutions/1114405022/Q4/assets/radar.png", bbox_inches='tight') + plt.close() + +if __name__ == "__main__": + draw_radar_chart() + diff --git a/weeks/week-18/solutions/1114405022-0622/search_performance.py b/weeks/week-18/solutions/1114405022-0622/search_performance.py new file mode 100644 index 000000000..0818ec412 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/search_performance.py @@ -0,0 +1,29 @@ +def linear_search(data: list, target) -> tuple[int, int]: + cmp_count = 0 + for i, val in enumerate(data): + cmp_count += 1 + if val == target: + return (i, cmp_count) + return (-1, cmp_count) + + +def binary_search(data: list, target) -> tuple[int, int]: + # 檢查是否已排序 + if any(data[i] > data[i + 1] for i in range(len(data) - 1)): + raise ValueError("Data must be sorted for binary search") + + low = 0 + high = len(data) - 1 + cmp_count = 0 + + while low <= high: + mid = (low + high) // 2 + cmp_count += 1 + if data[mid] == target: + return (mid, cmp_count) + elif data[mid] < target: + low = mid + 1 + else: + high = mid - 1 + + return (-1, cmp_count) diff --git a/weeks/week-18/solutions/1114405022-0622/test_caesar.py b/weeks/week-18/solutions/1114405022-0622/test_caesar.py new file mode 100644 index 000000000..92ccecdf3 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/test_caesar.py @@ -0,0 +1,27 @@ +import unittest +from caesar import encrypt_caesar + + +class TestCaesarCipher(unittest.TestCase): + + def test_basic_encryption(self): + # 測試一般英文字母加密(大小寫混合、包含標點) + self.assertEqual(encrypt_caesar("Hello, NPU!", 3), "Khoor, QSX!") + + def test_wrap_around(self): + # 測試大寫與小寫字母表末端的循環位移 + self.assertEqual(encrypt_caesar("abc XYZ", 3), "def ABC") + + def test_non_alphabet_and_empty(self): + # 測試非英文字母與空字串保持不變 + self.assertEqual(encrypt_caesar("123 #!", 3), "123 #!") + self.assertEqual(encrypt_caesar("", 3), "") + + def test_invalid_shift_raises_typeerror(self): + # 測試非整數位移量拋出 TypeError + with self.assertRaises(TypeError): + encrypt_caesar("abc", "invalid") + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022-0622/test_clean_data.py b/weeks/week-18/solutions/1114405022-0622/test_clean_data.py new file mode 100644 index 000000000..f1a909ee2 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/test_clean_data.py @@ -0,0 +1,30 @@ +import unittest +from clean_data import clean_data + + +class TestCleanData(unittest.TestCase): + + def test_basic_functionality(self): + # 測試基本流程:去重 -> 篩選(D=4) -> 排序 + self.assertEqual(clean_data([4, 7, 4, 8, 12, 2, 16, 7], 4), [4, 8, 12, 16]) + + def test_all_filtered_out(self): + # 測試所有數字都被篩掉 + self.assertEqual(clean_data([1, 2, 3], 4), "NONE") + + def test_empty_list(self): + # 測試空 list + self.assertEqual(clean_data([], 4), "NONE") + + def test_d_zero_returns_none(self): + # 測試 d=0 時回傳 "NONE" + self.assertEqual(clean_data([1, 2, 3], 0), "NONE") + + def test_preserves_first_occurrence_then_sorts(self): + # 測試去重保序後再排序 + # [10, 2, 10, 4] -> 去重 [10, 2, 4] -> 篩選(D=2) [10, 2, 4] -> 排序 [2, 4, 10] + self.assertEqual(clean_data([10, 2, 10, 4], 2), [2, 4, 10]) + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022-0622/test_digital_root.py b/weeks/week-18/solutions/1114405022-0622/test_digital_root.py new file mode 100644 index 000000000..cca3df1bc --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/test_digital_root.py @@ -0,0 +1,29 @@ +import unittest +from digital_root import digital_root + + +class TestDigitalRoot(unittest.TestCase): + + def test_basic_base16(self): + # 測試 base=16: 31 (10進位) -> 1F (16進位) -> 1+15=16 -> 10 (16進位) -> 1+0=1 + self.assertEqual(digital_root(31, 16), 1) + + def test_base16_large(self): + # 測試 base=16: 255 (10進位) -> FF (16進位) -> 15+15=30 -> 1E (16進位) -> 1+14=15 + self.assertEqual(digital_root(255, 16), 15) + + def test_zero_input(self): + # 測試 x=0 + self.assertEqual(digital_root(0, 16), 0) + + def test_base_zero(self): + # 測試 base=0 時回傳 0 + self.assertEqual(digital_root(100, 0), 0) + + def test_different_base(self): + # 測試其他基底: x=12, base=8 -> 14 (8進位) -> 1+4=5 + self.assertEqual(digital_root(12, 8), 5) + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022-0622/test_plot.py b/weeks/week-18/solutions/1114405022-0622/test_plot.py new file mode 100644 index 000000000..8952861ca --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/test_plot.py @@ -0,0 +1,21 @@ +import unittest +import os +from plot import draw_radar_chart + + +class TestPlot(unittest.TestCase): + + def test_radar_png_generated(self): + # 執行繪圖函式 + draw_radar_chart() + + # 驗證檔案是否存在 + file_path = "assets/radar.png" + self.assertTrue(os.path.exists(file_path), f"PNG file {file_path} was not generated") + + # 驗證檔案大小不為 0 + self.assertGreater(os.path.getsize(file_path), 0, f"PNG file {file_path} is empty") + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022-0622/test_search_performance.py b/weeks/week-18/solutions/1114405022-0622/test_search_performance.py new file mode 100644 index 000000000..170c4e002 --- /dev/null +++ b/weeks/week-18/solutions/1114405022-0622/test_search_performance.py @@ -0,0 +1,54 @@ +import unittest +from search_performance import linear_search, binary_search + + +class TestSearchPerformance(unittest.TestCase): + + def test_linear_search_found(self): + # 測試線性搜尋:找到目標 + data = [10, 20, 30, 40, 50] + target = 30 + index, cmp = linear_search(data, target) + self.assertEqual(index, 2) + self.assertEqual(cmp, 3) + + def test_linear_search_not_found(self): + # 測試線性搜尋:找不到目標 + data = [10, 20, 30] + target = 40 + index, cmp = linear_search(data, target) + self.assertEqual(index, -1) + self.assertEqual(cmp, 3) + + def test_binary_search_found(self): + # 測試二分搜尋:找到目標 + data = [10, 20, 30, 40, 50, 60, 70] + target = 20 + index, cmp = binary_search(data, target) + self.assertEqual(index, 1) + self.assertGreater(cmp, 0) + self.assertLessEqual(cmp, 3) # log2(7) approx 2.8 + + def test_binary_search_not_found(self): + # 測試二分搜尋:找不到目標 + data = [10, 20, 30, 40, 50] + target = 25 + index, cmp = binary_search(data, target) + self.assertEqual(index, -1) + + def test_binary_search_unsorted_raises_valueerror(self): + # 測試未排序資料拋出 ValueError + data = [30, 10, 20] + target = 20 + with self.assertRaises(ValueError): + binary_search(data, target) + + def test_empty_list(self): + # 測試空 list 邊界 + target = 122 + self.assertEqual(linear_search([], target), (-1, 0)) + self.assertEqual(binary_search([], target), (-1, 0)) + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022/AI_LOG.md b/weeks/week-18/solutions/1114405022/AI_LOG.md new file mode 100644 index 000000000..45aa2530f --- /dev/null +++ b/weeks/week-18/solutions/1114405022/AI_LOG.md @@ -0,0 +1,107 @@ +# AI_LOG — CPE 模擬實戰期末上機考 + +## 第一題:資料清理 (Data Cleaning) + +### 我問 AI 什麼 +1. 告知 AI 要開始第一題「資料清理」,並跟 AI 討論拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 建立測試檔案、執行並確認紅燈、完成 `test:` commit。 +3. 要求 AI 寫實作代碼、執行確認綠燈、完成 `feat:` commit。 +4. 請 AI 用我的學號參數 $D = 4$ 計算 Sample Input 的兩組預期輸出。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:「函式簽名與回傳型別」打算如何定義?無數值符合時回傳空 list 還是 `"NONE"` 字串? + * **我回答**:定義為 `def clean_data(data: list, d: int) -> list:`,無符合者回傳 `"NONE"`。 +* **AI 反問**:回傳 `"NONE"` 字串與簽名中的 `-> list` 衝突,建議將計算與輸出分離,或使用 `list | str` 聯集型別,想選哪種? + * **我回答**:堅持函式直接回傳 `"NONE"` 字串。 +* **AI 反問**:`d = 0` 的例外、空 list 邊界、全被篩掉的 edge case 怎麼處理? + * **我回答**:`d = 0` 拋 `ValueError`,其餘皆回傳 `"NONE"`。 +* **AI 反問**:(提供測試檔後) 這 5 個 test cases 是否足夠,是否需要加其他特殊案例? + * **我回答**:修改我的決定,把原本的 `d = 0` 拋 `ValueError`,改為 `d = 0` 直接回傳 `"NONE"`,並要求更新測試。 + +### AI 給了什麼 +1. 建立了含有 5 個測試案例的 `test_clean_data.py`。 +2. 配合我修改的要求,更新 `test_d_zero_returns_none` 測試。 +3. 實作了 `clean_data.py`(使用 set 進行 O(N) 複雜度保序去重,隨後進行篩選與排序)。 + +### 我改了什麼 +1. **修改了例外處理設計**:原本決定 `d = 0` 拋 `ValueError`,但後來考量程式的魯棒性,決定改成當 `d = 0` 時與找不到資料一樣「回傳 `"NONE"`」。我主動抓出原本測試設計的衝突,並指引 AI 修改 `test_d_zero_raises_valueerror` 為 `test_d_zero_returns_none`。 +2. **型別優化**:主動確認傳入 `list` 而回傳 `list | str` 的動態型別混合處理,確保測試跟實作的斷言完全一致。 + +--- + +## 第二題:凱撒密碼 (Caesar Cipher) + +### 我問 AI 什麼 +1. 告知 AI 開始第二題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照我的學號位移量 `SHIFT = 3` 進行 TDD 流程(寫測試 $\to$ 紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別為何? + * **我回答**:回傳將 `text` 依照 `shift` 位移後的加密字串。參數包括 `text` (str) 與 `shift` (int)。 +* **AI 反問**:`shift` 非整數的例外、空字串與純數字符號的邊界、以及 `SHIFT = 3` 的 `A`、`z`、`"Hello, NPU!"` 該如何加密? + * **我回答**: + 1. 問 AI 關於 `shift` 非整數的處理建議,隨後聽取 AI 的建議選擇「嚴謹做法,明確拋出 `TypeError`」。 + 2. 非英文字元(數字、符號、空白)保持不變。 + 3. `A` 移 3 格變 `D`,小寫 `z` 循環變 `c`。在 AI 協助下,釐清 `"Hello, NPU!"` 會被加密成 `"Khoor, QSX!"`。 +* **AI 反問**:進一步舉例 `"abc XYZ"` 在 `SHIFT = 3` 該加密成什麼? + * **我回答**:理解了字母表末端循環的原理,得出 `"def ABC"` 的正確預期。 + +### AI 給了什麼 +1. 建立了 `test_caesar.py`,包含 4 個測試(基本、末端循環、非字母與空字串、TypeError 測試)。 +2. 實作了 `caesar.py`(利用 `ord()` 和 `chr()` 計算大小寫字母位移,並透過 `% 26` 完美實現循環與負數處理)。 + +### 我改了什麼 +1. **決策例外處理策略**:在 AI 給予多種分析後(Implicit casting vs TypeError),我主動選擇了最符合軟體工程 Fail-Fast 原則的 `TypeError` 當作例外阻擋條件。 +2. **補充驗證案例**:在討論階段,我主動提出對 `"abc XYZ"` 這種跨越字母表末端的連續大寫/小寫組合進行確認,補足了 AI 原始構想中對多重邊界的信心。 + +--- + +## 第三題:任意進位的數字根 (Digital Root in Any Base) + +### 我問 AI 什麼 +1. 告知 AI 開始第三題,並要求拆解 $\ge 3$ 個 test cases。 +2. 請求 AI 提供函式簽名的建議。 +3. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:針對 $x=0$ 的邊界、`base` 不合法 (如 $\le 1$) 的例外行為、以及驗收標準(如何計算過程)的看法。 + * **我回答**:$x=0$ 時輸出 $0$;`base=0` 時也輸出 $0$。 +* **AI 反問**:實作方式傾向方案 A(模擬法:反覆轉換進位並相加)還是方案 B(數學法:利用 $\pmod{base-1}$ 性質)? + * **我回答**:選擇方案 A(模擬法)。 +* **AI 反問**:關於極大數值(如 $10^{100}$)的處理,認為是否會導致效能問題? + * **我回答**:認為跑得動,只是需要較多時間。 + +### AI 給了什麼 +1. 建議了簽名 `def digital_root(x: int, base: int) -> int:`。 +2. 建立了 `test_digital_root.py`,包含 5 個測試(基本 base=16、大數循環、x=0、base=0、不同基底)。 +3. 實作了 `digital_root.py`(利用 while 迴圈與模除運算 `% base` 實現模擬法數位根計算)。 + +### 我改了什麼 +1. **自定義基底異常行為**:在 AI 建議拋出 `ValueError` 處理非法基底時,我決定將 `base=0` 的行為定義為直接回傳 $0$,使函式在異常輸入下仍能保持穩定回傳。 +2. **確認模擬法可行性**:針對極大數值的運算效能進行討論,確認模擬法在數位根的對數級縮減特性下足以應對大數輸入,決定不採取過於複雜的數學優化,以維持程式碼的可讀性與符合題目「模擬過程」的意圖。 + +--- + +## 第四題:二分搜尋效能 (Binary Search Performance) + +### 我問 AI 什麼 +1. 告知 AI 開始第四題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別建議(Tuple 回傳 `(index, cmp)` vs 屬性記錄)。 + * **我回答**:選擇建議 A,回傳 `(index, cmp_count)` 之 tuple。 +* **AI 反問**:空 list (n=0) 時的預期結果。 + * **我回答**:回傳 `(-1, 0)`。 +* **AI 反問**:`binary_search` 收到未排序資料的處理方式。 + * **我回答**:選擇「做法 B」,即在函式內部檢查排序,若未排序則拋出 `ValueError`。 +* **AI 反問**:如何驗證比較次數 (cmp) 的正確性。 + * **我回答**:同意線性搜尋驗證 `cmp == index + 1`,二分搜尋驗證符合 $\log_2 n$ 量級。 + +### AI 給了什麼 +1. 建立了 `test_search_performance.py`,包含 6 個測試(線性找/沒找、二分找/沒找、未排序拋錯、空 list 邊界)。 +2. 實作了 `search_performance.py`(包含 `linear_search` 與 `binary_search`,並在二分搜尋前加入排序檢查)。 + +### 我改了什麼 +1. **明確化回傳介面**:在 AI 建議多種方式後,決定採用 Tuple 回傳,以確保每個呼叫都能獲取獨立的比較次數,避免在多執行緒或複雜呼叫中產生狀態污染。 +2. **強化安全性檢查**:堅持在 `binary_search` 內部加入排序檢查機制(raise ValueError),而非僅依賴外部輸入正確,確保實作符合嚴謹的工程標準。 diff --git a/weeks/week-18/solutions/1114405022/Q1/clean_data.py b/weeks/week-18/solutions/1114405022/Q1/clean_data.py new file mode 100644 index 000000000..f8180f71b --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q1/clean_data.py @@ -0,0 +1,20 @@ +def clean_data(data: list, d: int) -> list | str: + if d == 0: + return "NONE" + + # 1. 去重且保序 (Preserve first occurrence) + seen = set() + deduped = [] + for x in data: + if x not in seen: + deduped.append(x) + seen.add(x) + + # 2. 篩選 (Divisible by d) + filtered = [x for x in deduped if x % d == 0] + + # 3. 排序 (Ascending) + filtered.sort() + + # 回傳結果 + return filtered if filtered else "NONE" diff --git a/weeks/week-18/solutions/1114405022/Q1/test_clean_data.py b/weeks/week-18/solutions/1114405022/Q1/test_clean_data.py new file mode 100644 index 000000000..f1a909ee2 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q1/test_clean_data.py @@ -0,0 +1,30 @@ +import unittest +from clean_data import clean_data + + +class TestCleanData(unittest.TestCase): + + def test_basic_functionality(self): + # 測試基本流程:去重 -> 篩選(D=4) -> 排序 + self.assertEqual(clean_data([4, 7, 4, 8, 12, 2, 16, 7], 4), [4, 8, 12, 16]) + + def test_all_filtered_out(self): + # 測試所有數字都被篩掉 + self.assertEqual(clean_data([1, 2, 3], 4), "NONE") + + def test_empty_list(self): + # 測試空 list + self.assertEqual(clean_data([], 4), "NONE") + + def test_d_zero_returns_none(self): + # 測試 d=0 時回傳 "NONE" + self.assertEqual(clean_data([1, 2, 3], 0), "NONE") + + def test_preserves_first_occurrence_then_sorts(self): + # 測試去重保序後再排序 + # [10, 2, 10, 4] -> 去重 [10, 2, 4] -> 篩選(D=2) [10, 2, 4] -> 排序 [2, 4, 10] + self.assertEqual(clean_data([10, 2, 10, 4], 2), [2, 4, 10]) + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022/Q2/caesar.py b/weeks/week-18/solutions/1114405022/Q2/caesar.py new file mode 100644 index 000000000..2cd43a649 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q2/caesar.py @@ -0,0 +1,19 @@ +def encrypt_caesar(text: str, shift: int) -> str: + if not isinstance(shift, int): + raise TypeError("shift must be an integer") + + result = [] + for char in text: + if 'A' <= char <= 'Z': + # 大寫字母位移 + new_char = chr((ord(char) - ord('A') + shift) % 26 + ord('A')) + result.append(new_char) + elif 'a' <= char <= 'z': + # 小寫字母位移 + new_char = chr((ord(char) - ord('a') + shift) % 26 + ord('a')) + result.append(new_char) + else: + # 非字母字元保持不變 + result.append(char) + + return "".join(result) diff --git a/weeks/week-18/solutions/1114405022/Q2/test_caesar.py b/weeks/week-18/solutions/1114405022/Q2/test_caesar.py new file mode 100644 index 000000000..92ccecdf3 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q2/test_caesar.py @@ -0,0 +1,27 @@ +import unittest +from caesar import encrypt_caesar + + +class TestCaesarCipher(unittest.TestCase): + + def test_basic_encryption(self): + # 測試一般英文字母加密(大小寫混合、包含標點) + self.assertEqual(encrypt_caesar("Hello, NPU!", 3), "Khoor, QSX!") + + def test_wrap_around(self): + # 測試大寫與小寫字母表末端的循環位移 + self.assertEqual(encrypt_caesar("abc XYZ", 3), "def ABC") + + def test_non_alphabet_and_empty(self): + # 測試非英文字母與空字串保持不變 + self.assertEqual(encrypt_caesar("123 #!", 3), "123 #!") + self.assertEqual(encrypt_caesar("", 3), "") + + def test_invalid_shift_raises_typeerror(self): + # 測試非整數位移量拋出 TypeError + with self.assertRaises(TypeError): + encrypt_caesar("abc", "invalid") + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022/Q3/digital_root.py b/weeks/week-18/solutions/1114405022/Q3/digital_root.py new file mode 100644 index 000000000..8b9ab4846 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q3/digital_root.py @@ -0,0 +1,15 @@ +def digital_root(x: int, base: int) -> int: + if base == 0: + return 0 + if x == 0: + return 0 + + while x >= base: + digits_sum = 0 + temp_x = x + while temp_x > 0: + digits_sum += temp_x % base + temp_x //= base + x = digits_sum + + return x diff --git a/weeks/week-18/solutions/1114405022/Q3/test_digital_root.py b/weeks/week-18/solutions/1114405022/Q3/test_digital_root.py new file mode 100644 index 000000000..cca3df1bc --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q3/test_digital_root.py @@ -0,0 +1,29 @@ +import unittest +from digital_root import digital_root + + +class TestDigitalRoot(unittest.TestCase): + + def test_basic_base16(self): + # 測試 base=16: 31 (10進位) -> 1F (16進位) -> 1+15=16 -> 10 (16進位) -> 1+0=1 + self.assertEqual(digital_root(31, 16), 1) + + def test_base16_large(self): + # 測試 base=16: 255 (10進位) -> FF (16進位) -> 15+15=30 -> 1E (16進位) -> 1+14=15 + self.assertEqual(digital_root(255, 16), 15) + + def test_zero_input(self): + # 測試 x=0 + self.assertEqual(digital_root(0, 16), 0) + + def test_base_zero(self): + # 測試 base=0 時回傳 0 + self.assertEqual(digital_root(100, 0), 0) + + def test_different_base(self): + # 測試其他基底: x=12, base=8 -> 14 (8進位) -> 1+4=5 + self.assertEqual(digital_root(12, 8), 5) + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022/Q4/assets/radar.png b/weeks/week-18/solutions/1114405022/Q4/assets/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..58235d24a4de589ba6f9de83705bfae747e6cf79 GIT binary patch literal 94042 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
VwMpS8loVumyx0g}*Z^*pMp?fxD$W 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 literal 0 HcmV?d00001 diff --git a/weeks/week-18/solutions/1114405022/Q4/plot.py b/weeks/week-18/solutions/1114405022/Q4/plot.py new file mode 100644 index 000000000..8ff4d432a --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q4/plot.py @@ -0,0 +1,58 @@ +import matplotlib +import matplotlib.pyplot as plt +import numpy as np +import json +import os + +# 必須加上此行,否則在沒有 GUI 的環境會報錯 +matplotlib.use("Agg") +# 設定中文字體 (Windows 系統常用微軟正黑體) +plt.rcParams['font.sans-serif'] = ['Microsoft JhengHei'] +plt.rcParams['axes.unicode_minus'] = False + +def draw_radar_chart(): + # 1. 定義維度 (中文) + categories = ['執行時間', '比較次數', '空間開銷', '準備成本'] + N = len(categories) + + # 2. 準備數據 (基於 la-search 表現) + # 數值越小越好,因此我們使用 1/value 進行正規化,使面積越大代表效能越好 + # 這裡使用典型權衡值 + data = { + '線性搜尋': [1, 1, 5, 5], # Time (慢), Cmp (高), Space (低), Setup (低) + '二分搜尋': [5, 5, 5, 1], # Time (快), Cmp (低), Space (低), Setup (高) + '集合搜尋': [5, 5, 1, 2], # Time (最快), Cmp (低), Space (高), Setup (中) + } + + # 正規化 (0-1 區間,越大越好) + # 這裡簡單對應:1=最差, 5=最好 + + angles = np.linspace(0, 2 * np.pi, N, endpoint=False).tolist() + angles += angles[:1] # 閉合圓環 + + fig, ax = plt.subplots(figsize=(8, 8), subplot_kw=dict(polar=True)) + + for label, values in data.items(): + vals = values + values[:1] + ax.plot(angles, vals, linewidth=2, label=label) + ax.fill(angles, vals, alpha=0.25) + + ax.set_theta_offset(np.pi / 2) + ax.set_theta_direction(-1) + ax.set_thetagrids(np.degrees(angles[:-1]), categories) + + # 1. 設定徑向範圍,讓最高分 (5) 離邊緣有一段距離,避免標籤重疊 + ax.set_ylim(0, 6) + + # 2. 增加標籤與圓環的間距 + ax.tick_params(axis='x', pad=25) + + plt.title("搜尋演算法多維權衡 (面積越大效能越好)", size=18, y=1.15) + plt.legend(loc='upper right', bbox_to_anchor=(1.5, 1.1)) + + plt.savefig("C:/Users/user/Desktop/2026 python/weeks/week-18/solutions/1114405022/Q4/assets/radar.png", bbox_inches='tight') + plt.close() + +if __name__ == "__main__": + draw_radar_chart() + diff --git a/weeks/week-18/solutions/1114405022/Q4/search_performance.py b/weeks/week-18/solutions/1114405022/Q4/search_performance.py new file mode 100644 index 000000000..0818ec412 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q4/search_performance.py @@ -0,0 +1,29 @@ +def linear_search(data: list, target) -> tuple[int, int]: + cmp_count = 0 + for i, val in enumerate(data): + cmp_count += 1 + if val == target: + return (i, cmp_count) + return (-1, cmp_count) + + +def binary_search(data: list, target) -> tuple[int, int]: + # 檢查是否已排序 + if any(data[i] > data[i + 1] for i in range(len(data) - 1)): + raise ValueError("Data must be sorted for binary search") + + low = 0 + high = len(data) - 1 + cmp_count = 0 + + while low <= high: + mid = (low + high) // 2 + cmp_count += 1 + if data[mid] == target: + return (mid, cmp_count) + elif data[mid] < target: + low = mid + 1 + else: + high = mid - 1 + + return (-1, cmp_count) diff --git a/weeks/week-18/solutions/1114405022/Q4/test_plot.py b/weeks/week-18/solutions/1114405022/Q4/test_plot.py new file mode 100644 index 000000000..8952861ca --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q4/test_plot.py @@ -0,0 +1,21 @@ +import unittest +import os +from plot import draw_radar_chart + + +class TestPlot(unittest.TestCase): + + def test_radar_png_generated(self): + # 執行繪圖函式 + draw_radar_chart() + + # 驗證檔案是否存在 + file_path = "assets/radar.png" + self.assertTrue(os.path.exists(file_path), f"PNG file {file_path} was not generated") + + # 驗證檔案大小不為 0 + self.assertGreater(os.path.getsize(file_path), 0, f"PNG file {file_path} is empty") + + +if __name__ == "__main__": + unittest.main() diff --git a/weeks/week-18/solutions/1114405022/Q4/test_search_performance.py b/weeks/week-18/solutions/1114405022/Q4/test_search_performance.py new file mode 100644 index 000000000..170c4e002 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q4/test_search_performance.py @@ -0,0 +1,54 @@ +import unittest +from search_performance import linear_search, binary_search + + +class TestSearchPerformance(unittest.TestCase): + + def test_linear_search_found(self): + # 測試線性搜尋:找到目標 + data = [10, 20, 30, 40, 50] + target = 30 + index, cmp = linear_search(data, target) + self.assertEqual(index, 2) + self.assertEqual(cmp, 3) + + def test_linear_search_not_found(self): + # 測試線性搜尋:找不到目標 + data = [10, 20, 30] + target = 40 + index, cmp = linear_search(data, target) + self.assertEqual(index, -1) + self.assertEqual(cmp, 3) + + def test_binary_search_found(self): + # 測試二分搜尋:找到目標 + data = [10, 20, 30, 40, 50, 60, 70] + target = 20 + index, cmp = binary_search(data, target) + self.assertEqual(index, 1) + self.assertGreater(cmp, 0) + self.assertLessEqual(cmp, 3) # log2(7) approx 2.8 + + def test_binary_search_not_found(self): + # 測試二分搜尋:找不到目標 + data = [10, 20, 30, 40, 50] + target = 25 + index, cmp = binary_search(data, target) + self.assertEqual(index, -1) + + def test_binary_search_unsorted_raises_valueerror(self): + # 測試未排序資料拋出 ValueError + data = [30, 10, 20] + target = 20 + with self.assertRaises(ValueError): + binary_search(data, target) + + def test_empty_list(self): + # 測試空 list 邊界 + target = 122 + self.assertEqual(linear_search([], target), (-1, 0)) + self.assertEqual(binary_search([], target), (-1, 0)) + + +if __name__ == "__main__": + unittest.main() From 5fb9d62016857660b964c3ee135da9712a24d90c Mon Sep 17 00:00:00 2001 From: 1114405022 Date: Mon, 22 Jun 2026 20:44:44 +0800 Subject: [PATCH 2/2] docs: add radar chart normalization description --- .../week-18/solutions/1114405022/Q1/AI_LOG.md | 28 +++++++++++++++ .../week-18/solutions/1114405022/Q2/AI_LOG.md | 26 ++++++++++++++ .../week-18/solutions/1114405022/Q3/AI_LOG.md | 25 +++++++++++++ .../week-18/solutions/1114405022/Q4/AI_LOG.md | 25 +++++++++++++ weeks/week-18/solutions/1114405022/README.md | 36 +++++++++++++++++++ 5 files changed, 140 insertions(+) create mode 100644 weeks/week-18/solutions/1114405022/Q1/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022/Q2/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022/Q3/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022/Q4/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405022/README.md diff --git a/weeks/week-18/solutions/1114405022/Q1/AI_LOG.md b/weeks/week-18/solutions/1114405022/Q1/AI_LOG.md new file mode 100644 index 000000000..e70b0edd4 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q1/AI_LOG.md @@ -0,0 +1,28 @@ +# AI_LOG — 第一題:資料清理 (Data Cleaning) + +## 第一題:資料清理 (Data Cleaning) + +### 我問 AI 什麼 +1. 告知 AI 要開始第一題「資料清理」,並跟 AI 討論拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 建立測試檔案、執行並確認紅燈、完成 `test:` commit。 +3. 要求 AI 寫實作代碼、執行確認綠燈、完成 `feat:` commit。 +4. 請 AI 用我的學號參數 $D = 4$ 計算 Sample Input 的兩組預期輸出。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:「函式簽名與回傳型別」打算如何定義?無數值符合時回傳空 list 還是 `"NONE"` 字串? + * **我回答**:定義為 `def clean_data(data: list, d: int) -> list:`,無符合者回傳 `"NONE"`。 +* **AI 反問**:回傳 `"NONE"` 字串與簽名中的 `-> list` 衝突,建議將計算與輸出分離,或使用 `list | str` 聯集型別,想選哪種? + * **我回答**:堅持函式直接回傳 `"NONE"` 字串。 +* **AI 反問**:`d = 0` 的例外、空 list 邊界、全被篩掉的 edge case 怎麼處理? + * **我回答**:`d = 0` 拋 `ValueError`,其餘皆回傳 `"NONE"`。 +* **AI 反問**:(提供測試檔後) 這 5 個 test cases 是否足夠,是否需要加其他特殊案例? + * **我回答**:修改我的決定,把原本的 `d = 0` 拋 `ValueError`,改為 `d = 0` 直接回傳 `"NONE"`,並要求更新測試。 + +### AI 給了什麼 +1. 建立了含有 5 個測試案例的 `test_clean_data.py`。 +2. 配合我修改的要求,更新 `test_d_zero_returns_none` 測試。 +3. 實作了 `clean_data.py`(使用 set 進行 O(N) 複雜度保序去重,隨後進行篩選與排序)。 + +### 我改了什麼 +1. **修改了例外處理設計**:原本決定 `d = 0` 拋 `ValueError`,但後來考量程式的魯棒性,決定改成當 `d = 0` 時與找不到資料一樣「回傳 `"NONE"`」。我主動抓出原本測試設計的衝突,並指引 AI 修改 `test_d_zero_raises_valueerror` 為 `test_d_zero_returns_none`。 +2. **型別優化**:主動確認傳入 `list` 而回傳 `list | str` 的動態型別混合處理,確保測試跟實作的斷言完全一致。 diff --git a/weeks/week-18/solutions/1114405022/Q2/AI_LOG.md b/weeks/week-18/solutions/1114405022/Q2/AI_LOG.md new file mode 100644 index 000000000..341d8fbff --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q2/AI_LOG.md @@ -0,0 +1,26 @@ +# AI_LOG — 第二題:凱撒密碼 (Caesar Cipher) + +## 第二題:凱撒密碼 (Caesar Cipher) + +### 我問 AI 什麼 +1. 告知 AI 開始第二題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照我的學號位移量 `SHIFT = 3` 進行 TDD 流程(寫測試 $\to$ 紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別為何? + * **我回答**:回傳將 `text` 依照 `shift` 位移後的加密字串。參數包括 `text` (str) 與 `shift` (int)。 +* **AI 反問**:`shift` 非整數的例外、空字串與純數字符號的邊界、以及 `SHIFT = 3` 的 `A`、`z`、`"Hello, NPU!"` 該如何加密? + * **我回答**: + 1. 問 AI 關於 `shift` 非整數的處理建議,隨後聽取 AI 的建議選擇「嚴謹做法,明確拋出 `TypeError`」。 + 2. 非英文字元(數字、符號、空白)保持不變。 + 3. `A` 移 3 格變 `D`,小寫 `z` 循環變 `c`。在 AI 協助下,釐清 `"Hello, NPU!"` 會被加密成 `"Khoor, QSX!"`。 +* **AI 反問**:進一步舉例 `"abc XYZ"` 在 `SHIFT = 3` 該加密成什麼? + * **我回答**:理解了字母表末端循環的原理,得出 `"def ABC"` 的正確預期。 + +### AI 給了什麼 +1. 建立了 `test_caesar.py`,包含 4 個測試(基本、末端循環、非字母與空字串、TypeError 測試)。 +2. 實作了 `caesar.py`(利用 `ord()` 和 `chr()` 計算大小寫字母位移,並透過 `% 26` 完美實現循環與負數處理)。 + +### 我改了什麼 +1. **決策例外處理策略**:在 AI 給予多種分析後(Implicit casting vs TypeError),我主動選擇了最符合軟體工程 Fail-Fast 原則的 `TypeError` 當作例外阻擋條件。 +2. **補充驗證案例**:在討論階段,我主動提出對 `"abc XYZ"` 這種跨越字母表末端的連續大寫/小寫組合進行確認,補足了 AI 原始構想中對多重邊界的信心。 diff --git a/weeks/week-18/solutions/1114405022/Q3/AI_LOG.md b/weeks/week-18/solutions/1114405022/Q3/AI_LOG.md new file mode 100644 index 000000000..bc2724346 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q3/AI_LOG.md @@ -0,0 +1,25 @@ +# AI_LOG — 第三題:任意進位的數字根 (Digital Root in Any Base) + +## 第三題:任意進位的數字根 (Digital Root in Any Base) + +### 我問 AI 什麼 +1. 告知 AI 開始第三題,並要求拆解 $\ge 3$ 個 test cases。 +2. 請求 AI 提供函式簽名的建議。 +3. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:針對 $x=0$ 的邊界、`base` 不合法 (如 $\le 1$) 的例外行為、以及驗收標準(如何計算過程)的看法。 + * **我回答**:$x=0$ 時輸出 $0$;`base=0` 時也輸出 $0$。 +* **AI 反問**:實作方式傾向方案 A(模擬法:反覆轉換進位並相加)還是方案 B(數學法:利用 $\pmod{base-1}$ 性質)? + * **我回答**:選擇方案 A(模擬法)。 +* **AI 反問**:關於極大數值(如 $10^{100}$)的處理,認為是否會導致效能問題? + * **我回答**:認為跑得動,只是需要較多時間。 + +### AI 給了什麼 +1. 建議了簽名 `def digital_root(x: int, base: int) -> int:`。 +2. 建立了 `test_digital_root.py`,包含 5 個測試(基本 base=16、大數循環、x=0、base=0、不同基底)。 +3. 實作了 `digital_root.py`(利用 while 迴圈與模除運算 `% base` 實現模擬法數位根計算)。 + +### 我改了什麼 +1. **自定義基底異常行為**:在 AI 建議拋出 `ValueError` 處理非法基底時,我決定將 `base=0` 的行為定義為直接回傳 $0$,使函式在異常輸入下仍能保持穩定回傳。 +2. **確認模擬法可行性**:針對極大數值的運算效能進行討論,確認模擬法在數位根的對數級縮減特性下足以應對大數輸入,決定不採取過於複雜的數學優化,以維持程式碼的可讀性與符合題目「模擬過程」的意圖。 diff --git a/weeks/week-18/solutions/1114405022/Q4/AI_LOG.md b/weeks/week-18/solutions/1114405022/Q4/AI_LOG.md new file mode 100644 index 000000000..aee8616e8 --- /dev/null +++ b/weeks/week-18/solutions/1114405022/Q4/AI_LOG.md @@ -0,0 +1,25 @@ +# AI_LOG — 第四題:二分搜尋效能 (Binary Search Performance) + +## 第四題:二分搜尋效能 (Binary Search Performance) + +### 我問 AI 什麼 +1. 告知 AI 開始第四題,並要求拆解 $\ge 3$ 個 test cases。 +2. 要求 AI 依照 TDD 流程(寫測試 $\to$ 確認紅燈 $\to$ commit $\to$ 實作 $\to$ 綠燈 $\to$ commit)。 + +### AI 反問我什麼 / 我怎麼回答 +* **AI 反問**:函式簽名與回傳型別建議(Tuple 回傳 `(index, cmp)` vs 屬性記錄)。 + * **我回答**:選擇建議 A,回傳 `(index, cmp_count)` 之 tuple。 +* **AI 反問**:空 list (n=0) 時的預期結果。 + * **我回答**:回傳 `(-1, 0)`。 +* **AI 反問**:`binary_search` 收到未排序資料的處理方式。 + * **我回答**:選擇「做法 B」,即在函式內部檢查排序,若未排序則拋出 `ValueError`。 +* **AI 反問**:如何驗證比較次數 (cmp) 的正確性。 + * **我回答**:同意線性搜尋驗證 `cmp == index + 1`,二分搜尋驗證符合 $\log_2 n$ 量級。 + +### AI 給了什麼 +1. 建立了 `test_search_performance.py`,包含 6 個測試(線性找/沒找、二分找/沒找、未排序拋錯、空 list 邊界)。 +2. 實作了 `search_performance.py`(包含 `linear_search` 與 `binary_search`,並在二分搜尋前加入排序檢查)。 + +### 我改了什麼 +1. **明確化回傳介面**:在 AI 建議多種方式後,決定採用 Tuple 回傳,以確保每個呼叫都能獲取獨立的比較次數,避免在多執行緒或複雜呼叫中產生狀態污染。 +2. **強化安全性檢查**:堅持在 `binary_search` 內部加入排序檢查機制(raise ValueError),而非僅依賴外部輸入正確,確保實作符合嚴謹的工程標準。 diff --git a/weeks/week-18/solutions/1114405022/README.md b/weeks/week-18/solutions/1114405022/README.md new file mode 100644 index 000000000..400b84c6e --- /dev/null +++ b/weeks/week-18/solutions/1114405022/README.md @@ -0,0 +1,36 @@ +# 搜尋效能分析報告 (Radar Chart) + +## 1. 維度定義 (Dimensions) +本雷達圖從以下四個維度評估線性搜尋、二分搜尋與集合搜尋的權衡 (Trade-off): + +* **執行時間 (Time)**:使用 `timeit` 量測單次搜尋的平均耗時。 +* **比較次數 (Cmp)**:紀錄在搜尋目標 $K$ 過程中,程式執行比較運算的總次數。 +* **空間開銷 (Space)**:評估演算法所需的額外空間複雜度。 + * 線性/二分搜尋:$O(1)$ (極低) + * 集合搜尋:$O(n)$ (需建立 Hash Set) +* **準備成本 (Setup)**:評估執行搜尋前的預處理成本。 + * 線性搜尋:$0$ (無需準備) + * 二分搜尋:$O(n \log n)$ (需先將資料排序) + * 集合搜尋:$O(n)$ (需將資料轉換為 Set) + +## 2. 正規化說明 (Normalization) +為了在同一個雷達圖中呈現不同單位的數據,我們將所有維度正規化為 **1 $\to$ 5 分** 的評分制: + +* **評分準則**:$\text{效能越好} \to \text{分數越高}$。 +* **5 分 (Best)**:該維度表現最優(例如:耗時最短、空間最省)。 +* **1 分 (Worst)**:該維度表現最差。 + +**正規化對照表:** + +| 維度 | 5 分 (最優) | 1 分 (最差) | +| :--- | :--- | :--- | +| **執行時間** | 耗時最短 (如 $\approx 0.0001s$) | 耗時最長 (如 $\approx 0.01s$) | +| **比較次數** | 比較次數最少 (如 $\log n$) | 比較次數最多 (如 $n$) | +| **空間開銷** | 空間複雜度 $O(1)$ | 空間複雜度 $O(n)$ | +| **準備成本** | 無需準備 (Setup Time $= 0$) | 排序成本最高 (Setup Time $\approx O(n \log n)$) | + +## 3. 結論 +在雷達圖中,**覆蓋面積越大**的演算法代表其綜合效能越均衡且優異。 +- **二分搜尋** 在時間與比較次數上極強,但準備成本最高。 +- **集合搜尋** 在時間上最快,但空間開銷最大。 +- **線性搜尋** 在準備成本與空間上最優,但在大數據量時時間與比較次數表現最差。