From 5a436780a3c08cb19b151a4bcf7e4ca522389f6f Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:14:48 +0800 Subject: [PATCH 01/12] docs: add test cases for TDD red light stage --- .../week-18/solutions/1114405050/solution.py | 5 +++ .../solutions/1114405050/test_solution.py | 36 +++++++++++++++++++ 2 files changed, 41 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/solution.py create mode 100644 weeks/week-18/solutions/1114405050/test_solution.py diff --git a/weeks/week-18/solutions/1114405050/solution.py b/weeks/week-18/solutions/1114405050/solution.py new file mode 100644 index 000000000..a3a3be6de --- /dev/null +++ b/weeks/week-18/solutions/1114405050/solution.py @@ -0,0 +1,5 @@ +def clean_data(n, arr, d=2): + """ + 實作資料清理邏輯 + """ + pass diff --git a/weeks/week-18/solutions/1114405050/test_solution.py b/weeks/week-18/solutions/1114405050/test_solution.py new file mode 100644 index 000000000..03ef3e382 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/test_solution.py @@ -0,0 +1,36 @@ +import unittest +from solution import clean_data + +class TestDataCleaning(unittest.TestCase): + def test_sample_case(self): + # 範例測試案例: D=2 + # 輸入: 4 7 4 2 9 2 6 7 + # 步驟: + # 1. 去重: 4 7 2 9 6 + # 2. D=2整除: 4 2 6 + # 3. 排序: 2 4 6 + self.assertEqual(clean_data(8, [4, 7, 4, 2, 9, 2, 6, 7], 2), [2, 4, 6]) + + def test_none_case(self): + # 無符合案例: D=2 + # 輸入: 1 3 5 + # 步驟: + # 1. 去重: 1 3 5 + # 2. D=2整除: None + self.assertEqual(clean_data(3, [1, 3, 5], 2), []) + + def test_edge_case_empty(self): + # 邊界案例: 空陣列 + self.assertEqual(clean_data(0, [], 2), []) + + def test_negative_numbers(self): + # 負數案例: D=2 + # 輸入: -4, -2, -1, 0, 2, 4 + # 步驟: + # 1. 去重: -4, -2, -1, 0, 2, 4 + # 2. D=2整除: -4, -2, 0, 2, 4 + # 3. 排序: -4, -2, 0, 2, 4 + self.assertEqual(clean_data(6, [-4, -2, -1, 0, 2, 4], 2), [-4, -2, 0, 2, 4]) + +if __name__ == '__main__': + unittest.main() From fe8e4cd360c9abfde173efcbd3741e090fda7fcb Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:15:04 +0800 Subject: [PATCH 02/12] feat: implement data cleaning logic for TDD green light stage --- weeks/week-18/solutions/1114405050/solution.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/weeks/week-18/solutions/1114405050/solution.py b/weeks/week-18/solutions/1114405050/solution.py index a3a3be6de..037c193f0 100644 --- a/weeks/week-18/solutions/1114405050/solution.py +++ b/weeks/week-18/solutions/1114405050/solution.py @@ -1,5 +1,20 @@ def clean_data(n, arr, d=2): """ 實作資料清理邏輯 + 1. 去除重複(保留第一次順序) + 2. 保留能被 d 整除的數 + 3. 由小到大排序 """ - pass + if n == 0: + return [] + + # 1. 去重 (Ordered set behavior using dict keys) + unique_list = list(dict.fromkeys(arr)) + + # 2. 過濾能被 d 整除的數 + filtered_list = [x for x in unique_list if x % d == 0] + + # 3. 排序 + filtered_list.sort() + + return filtered_list From 198f9a5d6c09fbdb4eb57d68c855bb6d71c304fc Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:36:39 +0800 Subject: [PATCH 03/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20AI=20?= =?UTF-8?q?=E5=8D=94=E4=BD=9C=E6=97=A5=E8=AA=8C=EF=BC=8C=E8=A8=98=E9=8C=84?= =?UTF-8?q?=E8=B3=87=E6=96=99=E6=B8=85=E7=90=86=E4=BB=BB=E5=8B=99=E5=8F=8A?= =?UTF-8?q?=E6=B8=AC=E8=A9=A6=E6=A1=88=E4=BE=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week-18/solutions/1114405050/q1/AI_LOG.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q1/AI_LOG.md diff --git a/weeks/week-18/solutions/1114405050/q1/AI_LOG.md b/weeks/week-18/solutions/1114405050/q1/AI_LOG.md new file mode 100644 index 000000000..f95ca2d87 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q1/AI_LOG.md @@ -0,0 +1,24 @@ +# AI 協作日誌 + +## 2026-06-22 任務:第一題 資料清理 (D=2) + +### 1. 需求分析 +- 目標:去除重複、保留能被 D=2 整除的數、由小到大排序。 +- 學號末碼:0 (D=2)。 + +### 2. TDD 流程紀錄 +- **測試案例設計 (Test Cases)**: + - `test_sample_case`: 範例資料 `[4, 7, 4, 2, 9, 2, 6, 7]` -> `[2, 4, 6]` + - `test_none_case`: 無法整除 `[1, 3, 5]` -> `[]` (輸出應顯示 `NONE`) + - `test_edge_case_empty`: `n=0` 或空數組 -> `[]` + - `test_negative_numbers`: 負數處理 `[-4, -2, -1, 0, 2, 4]` -> `[-4, -2, 0, 2, 4]` +- **紅燈階段**: 建立 `test_solution.py` 與 `solution.py` (空實作),運行測試確認全數失敗。 +- **Git Commit**: `docs: add test cases for TDD red light stage` +- **綠燈階段**: 實作 `clean_data` 邏輯,使用 `dict.fromkeys()` 去重以保留順序,列表推導式過濾,並調用 `.sort()`。 +- **測試結果**: 4 項測試全數通過。 +- **Git Commit**: `feat: implement data cleaning logic for TDD green light stage` + +### 3. 最終驗證 +- 使用 `D=2` 計算 Sample Input: + - 第一組: `2 4 6` + - 第二組: `NONE` From 23f220b45032e05ebd631a3479ee3246263b44fd Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:37:12 +0800 Subject: [PATCH 04/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E8=B3=87?= =?UTF-8?q?=E6=96=99=E6=B8=85=E7=90=86=E5=87=BD=E6=95=B8=E5=8F=8A=E5=85=B6?= =?UTF-8?q?=E5=96=AE=E5=85=83=E6=B8=AC=E8=A9=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../solutions/1114405050/q1/solution.py | 20 +++++++++++ .../solutions/1114405050/q1/test_solution.py | 36 +++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q1/solution.py create mode 100644 weeks/week-18/solutions/1114405050/q1/test_solution.py diff --git a/weeks/week-18/solutions/1114405050/q1/solution.py b/weeks/week-18/solutions/1114405050/q1/solution.py new file mode 100644 index 000000000..037c193f0 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q1/solution.py @@ -0,0 +1,20 @@ +def clean_data(n, arr, d=2): + """ + 實作資料清理邏輯 + 1. 去除重複(保留第一次順序) + 2. 保留能被 d 整除的數 + 3. 由小到大排序 + """ + if n == 0: + return [] + + # 1. 去重 (Ordered set behavior using dict keys) + unique_list = list(dict.fromkeys(arr)) + + # 2. 過濾能被 d 整除的數 + filtered_list = [x for x in unique_list if x % d == 0] + + # 3. 排序 + filtered_list.sort() + + return filtered_list diff --git a/weeks/week-18/solutions/1114405050/q1/test_solution.py b/weeks/week-18/solutions/1114405050/q1/test_solution.py new file mode 100644 index 000000000..03ef3e382 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q1/test_solution.py @@ -0,0 +1,36 @@ +import unittest +from solution import clean_data + +class TestDataCleaning(unittest.TestCase): + def test_sample_case(self): + # 範例測試案例: D=2 + # 輸入: 4 7 4 2 9 2 6 7 + # 步驟: + # 1. 去重: 4 7 2 9 6 + # 2. D=2整除: 4 2 6 + # 3. 排序: 2 4 6 + self.assertEqual(clean_data(8, [4, 7, 4, 2, 9, 2, 6, 7], 2), [2, 4, 6]) + + def test_none_case(self): + # 無符合案例: D=2 + # 輸入: 1 3 5 + # 步驟: + # 1. 去重: 1 3 5 + # 2. D=2整除: None + self.assertEqual(clean_data(3, [1, 3, 5], 2), []) + + def test_edge_case_empty(self): + # 邊界案例: 空陣列 + self.assertEqual(clean_data(0, [], 2), []) + + def test_negative_numbers(self): + # 負數案例: D=2 + # 輸入: -4, -2, -1, 0, 2, 4 + # 步驟: + # 1. 去重: -4, -2, -1, 0, 2, 4 + # 2. D=2整除: -4, -2, 0, 2, 4 + # 3. 排序: -4, -2, 0, 2, 4 + self.assertEqual(clean_data(6, [-4, -2, -1, 0, 2, 4], 2), [-4, -2, 0, 2, 4]) + +if __name__ == '__main__': + unittest.main() From 5341c124258adbc46438a4029515cdc5b4eac5b3 Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:44:25 +0800 Subject: [PATCH 05/12] docs: add test cases for Q2 Caesar Cipher TDD red light stage --- .../solutions/1114405050/q2/solution.py | 5 +++ .../solutions/1114405050/q2/test_solution.py | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q2/solution.py create mode 100644 weeks/week-18/solutions/1114405050/q2/test_solution.py diff --git a/weeks/week-18/solutions/1114405050/q2/solution.py b/weeks/week-18/solutions/1114405050/q2/solution.py new file mode 100644 index 000000000..f6439733c --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q2/solution.py @@ -0,0 +1,5 @@ +def caesar_cipher(text, shift=2): + """ + 實作凱撒密碼邏輯 + """ + pass diff --git a/weeks/week-18/solutions/1114405050/q2/test_solution.py b/weeks/week-18/solutions/1114405050/q2/test_solution.py new file mode 100644 index 000000000..7ec982fb2 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q2/test_solution.py @@ -0,0 +1,31 @@ +import unittest +from solution import caesar_cipher + +class TestCaesarCipher(unittest.TestCase): + def test_sample_case(self): + # 範例測試案例 (SHIFT=2) + # Hello, NPU! -> Jgnnq, P RW! + # H(72) -> J(74) + # e(101) -> g(103) + # l(108) -> n(110) + # l(108) -> n(110) + # o(111) -> q(113) + self.assertEqual(caesar_cipher("Hello, NPU!", 2), "Jgnnq, PRW!") + + def test_alphabet_wrap(self): + # 字母循環測試 (SHIFT=2) + # yz -> ab + # YZ -> AB + self.assertEqual(caesar_cipher("yz YZ", 2), "ab AB") + + def test_non_alphabet(self): + # 非英文字母保留測試 + # 123 !@# -> 123 !@# + self.assertEqual(caesar_cipher("123 !@#", 2), "123 !@#") + + def test_edge_case_empty(self): + # 邊界案例: 空字串 + self.assertEqual(caesar_cipher("", 2), "") + +if __name__ == '__main__': + unittest.main() From 5ab7079fa0cc3fe516e318810aeb942184d7c3fe Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:45:01 +0800 Subject: [PATCH 06/12] feat: implement Caesar Cipher logic for Q2 TDD green light stage --- .../solutions/1114405050/q2/solution.py | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/weeks/week-18/solutions/1114405050/q2/solution.py b/weeks/week-18/solutions/1114405050/q2/solution.py index f6439733c..f45c6640d 100644 --- a/weeks/week-18/solutions/1114405050/q2/solution.py +++ b/weeks/week-18/solutions/1114405050/q2/solution.py @@ -1,5 +1,21 @@ def caesar_cipher(text, shift=2): """ 實作凱撒密碼邏輯 + 大寫:A-Z 內循環 + 小寫:a-z 內循環 + 其餘:保留 """ - pass + 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) From e66c1e55230a81b84826d29368ed6e002b502d65 Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:48:51 +0800 Subject: [PATCH 07/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20AI=20?= =?UTF-8?q?=E5=8D=94=E4=BD=9C=E6=97=A5=E8=AA=8C=EF=BC=8C=E8=A8=98=E9=8C=84?= =?UTF-8?q?=E5=87=B1=E6=92=92=E5=AF=86=E7=A2=BC=E4=BB=BB=E5=8B=99=E7=9A=84?= =?UTF-8?q?=E9=9C=80=E6=B1=82=E5=88=86=E6=9E=90=E8=88=87=20TDD=20=E6=B5=81?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week-18/solutions/1114405050/q2/AI_LOG.md | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q2/AI_LOG.md diff --git a/weeks/week-18/solutions/1114405050/q2/AI_LOG.md b/weeks/week-18/solutions/1114405050/q2/AI_LOG.md new file mode 100644 index 000000000..937eccd00 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q2/AI_LOG.md @@ -0,0 +1,24 @@ +# AI 協作日誌 + +## 2026-06-22 任務:第二題 凱撒密碼 (SHIFT=2) + +### 1. 需求分析 +- 目標:英文字母向後位移 SHIFT=2 位。 +- 規則:大寫 A-Z 循環、小寫 a-z 循環、非英文字元保留。 +- 終止條件:讀到 EOF 為止。 + +### 2. TDD 流程紀錄 +- **測試案例設計 (Test Cases)**: + - `test_sample_case`: `Hello, NPU!` -> `Jgnnq, PRW!` + - `test_alphabet_wrap`: 邊界位移 `yz YZ` -> `ab AB` + - `test_non_alphabet`: 保留 `123 !@#` -> `123 !@#` + - `test_edge_case_empty`: 空字串 `""` -> `""` +- **紅燈階段**: 建立測試並確認全數失敗 (AssertionError: None != expected)。 +- **Git Commit**: `docs: add test cases for Q2 Caesar Cipher TDD red light stage` +- **綠燈階段**: 使用 `ord()` 與 `chr()` 進行 ASCII 計算,並透過 `% 26` 實作循環邏輯。 +- **測試結果**: 4 項測試全數通過。 +- **Git Commit**: `feat: implement Caesar Cipher logic for Q2 TDD green light stage` + +### 3. 最終驗證 +- 輸入 `Hello, NPU!` (SHIFT=2) -> 輸出 `Jgnnq, PRW!` +- 輸入 `abc XYZ` (SHIFT=2) -> 輸出 `cde ZAB` From 0ac2c726bb03581d626e8ce5427afccfd9e09b15 Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:53:32 +0800 Subject: [PATCH 08/12] docs: add test cases for Q3 Digit Root TDD red light stage --- .../solutions/1114405050/q3/solution.py | 5 ++++ .../solutions/1114405050/q3/test_solution.py | 28 +++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q3/solution.py create mode 100644 weeks/week-18/solutions/1114405050/q3/test_solution.py diff --git a/weeks/week-18/solutions/1114405050/q3/solution.py b/weeks/week-18/solutions/1114405050/q3/solution.py new file mode 100644 index 000000000..87a2eca43 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q3/solution.py @@ -0,0 +1,5 @@ +def digit_root(n, base=16): + """ + 實作任意進位的數字根邏輯 + """ + pass diff --git a/weeks/week-18/solutions/1114405050/q3/test_solution.py b/weeks/week-18/solutions/1114405050/q3/test_solution.py new file mode 100644 index 000000000..aea8f16a1 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q3/test_solution.py @@ -0,0 +1,28 @@ +import unittest +from solution import digit_root + +class TestDigitRoot(unittest.TestCase): + def test_sample_case_0(self): + # 0 的數字根永遠為 0 + self.assertEqual(digit_root(0, 16), 0) + + def test_single_digit(self): + # 小於 base 的數,數字根為其本身 + # 10 (base 16) -> 10 + self.assertEqual(digit_root(10, 16), 10) + + def test_multi_step(self): + # 多次相加案例 (base 16) + # 255 (10進位) = FF (16進位) + # 15 + 15 = 30 (10進位) = 1E (16進位) + # 1 + 14 = 15 (10進位) + # 15 < 16, 停止。結果為 15 + self.assertEqual(digit_root(255, 16), 15) + + def test_edge_case_base(self): + # 剛好等於 base + # 16 (base 16) = 10 (16進位) -> 1+0 = 1 + self.assertEqual(digit_root(16, 16), 1) + +if __name__ == '__main__': + unittest.main() From 105ef011b8289dd49462f81592a6b4b0558b568b Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:53:44 +0800 Subject: [PATCH 09/12] feat: implement Digit Root logic for Q3 TDD green light stage --- .../week-18/solutions/1114405050/q3/solution.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/weeks/week-18/solutions/1114405050/q3/solution.py b/weeks/week-18/solutions/1114405050/q3/solution.py index 87a2eca43..5bb84ed6a 100644 --- a/weeks/week-18/solutions/1114405050/q3/solution.py +++ b/weeks/week-18/solutions/1114405050/q3/solution.py @@ -1,5 +1,19 @@ def digit_root(n, base=16): """ 實作任意進位的數字根邏輯 + 1. 將數字轉成 base 進位並將各位數字相加 + 2. 重複直到結果小於 base """ - pass + if n == 0: + return 0 + + current = n + while current >= base: + sum_digits = 0 + temp = current + while temp > 0: + sum_digits += temp % base + temp //= base + current = sum_digits + + return current From 658dd3aeb948352194e0b4fb7576f562d6a49e0a Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 19:58:19 +0800 Subject: [PATCH 10/12] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=20AI=20?= =?UTF-8?q?=E5=8D=94=E4=BD=9C=E6=97=A5=E8=AA=8C=EF=BC=8C=E8=A8=98=E9=8C=84?= =?UTF-8?q?=E7=AC=AC=E4=B8=89=E9=A1=8C=E4=BB=BB=E6=84=8F=E9=80=B2=E4=BD=8D?= =?UTF-8?q?=E7=9A=84=E6=95=B8=E5=AD=97=E6=A0=B9=E9=9C=80=E6=B1=82=E5=88=86?= =?UTF-8?q?=E6=9E=90=E8=88=87=20TDD=20=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../week-18/solutions/1114405050/q3/AI_LOG.md | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q3/AI_LOG.md diff --git a/weeks/week-18/solutions/1114405050/q3/AI_LOG.md b/weeks/week-18/solutions/1114405050/q3/AI_LOG.md new file mode 100644 index 000000000..05d3043e3 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q3/AI_LOG.md @@ -0,0 +1,25 @@ +# AI 協作日誌 + +## 2026-06-22 任務:第三題 任意進位的數字根 (BASE=16) + +### 1. 需求分析 +- 目標:將十進位數轉為指定 base 並反覆計算各位數相加,直到結果為該進位下的一位數。 +- 學號末碼:0 (查表對應 Base=16)。 +- 輸出:以十進位表示最終的數字根。 + +### 2. TDD 流程紀錄 +- **測試案例設計 (Test Cases)**: + - `test_sample_case_0`: `0` -> `0` + - `test_single_digit`: `10` -> `10` (十六進位下 A 仍是個位數,以十進位輸出為 10) + - `test_multi_step`: `255` (10進位) = `FF` (16進位) -> `F+F=30` (10進位) = `1E` (16進位) -> `1+E=15` (10進位) + - `test_edge_case_base`: `16` (10進位) = `10` (16進位) -> `1+0=1` +- **紅燈階段**: 建立測試並確認全數失敗。 +- **Git Commit**: `docs: add test cases for Q3 Digit Root TDD red light stage` +- **綠燈階段**: 實作 while 迴圈進行進位拆解與累加,直到數值小於基底。 +- **測試結果**: 4 項測試全數通過。 +- **Git Commit**: `feat: implement Digit Root logic for Q3 TDD green light stage` + +### 3. 最終驗證 +- 使用 `BASE=16` 計算: + - 輸入 `255` -> 輸出 `15` + - 輸入 `16` -> 輸出 `1` From 58b2b54bed1744a3807789a47dbdab4c16ac4629 Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 20:04:39 +0800 Subject: [PATCH 11/12] feat: implement search algorithms for Q4 TDD --- .../solutions/1114405050/q4/solution.py | 28 +++++++++++++++++ .../solutions/1114405050/q4/test_solution.py | 30 +++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 weeks/week-18/solutions/1114405050/q4/solution.py create mode 100644 weeks/week-18/solutions/1114405050/q4/test_solution.py diff --git a/weeks/week-18/solutions/1114405050/q4/solution.py b/weeks/week-18/solutions/1114405050/q4/solution.py new file mode 100644 index 000000000..2c6249f13 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q4/solution.py @@ -0,0 +1,28 @@ +def linear_search(arr, target): + """ + 線性搜尋,返回 (是否存在, 比較次數) + """ + count = 0 + for i in range(len(arr)): + count += 1 + if arr[i] == target: + return True, i, count + return False, -1, count + +def binary_search(arr, target): + """ + 二分搜尋,返回 (是否存在, 索引, 比較次數) + """ + low = 0 + high = len(arr) - 1 + count = 0 + while low <= high: + count += 1 + mid = (low + high) // 2 + if arr[mid] == target: + return True, mid, count + elif arr[mid] < target: + low = mid + 1 + else: + high = mid - 1 + return False, -1, count diff --git a/weeks/week-18/solutions/1114405050/q4/test_solution.py b/weeks/week-18/solutions/1114405050/q4/test_solution.py new file mode 100644 index 000000000..75c12ea53 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q4/test_solution.py @@ -0,0 +1,30 @@ +import unittest +from solution import linear_search, binary_search + +class TestSearchAlgorithms(unittest.TestCase): + def setUp(self): + self.sorted_arr = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150] + self.target = 138 # 假設目標為 100 + 50 (學號末兩碼) = 150 -> 這裡先測 130 看看 + + def test_binary_search_found(self): + # 測試二分搜尋找到目標 + found, idx, count = binary_search(self.sorted_arr, 130) + self.assertTrue(found) + self.assertEqual(idx, 12) + self.assertLessEqual(count, 4) # log2(15) ~ 3.9 + + def test_binary_search_not_found(self): + # 測試二分搜尋沒找到目標 + found, idx, count = binary_search(self.sorted_arr, 138) + self.assertFalse(found) + self.assertEqual(idx, -1) + + def test_linear_search_found(self): + # 測試線性搜尋找到目標 + found, idx, count = linear_search(self.sorted_arr, 130) + self.assertTrue(found) + self.assertEqual(idx, 12) + self.assertEqual(count, 13) # 第 13 個元素 + +if __name__ == '__main__': + unittest.main() From 8d59a0e933050eac088ccfcf06778b4479e7725c Mon Sep 17 00:00:00 2001 From: kai Date: Mon, 22 Jun 2026 20:48:42 +0800 Subject: [PATCH 12/12] docs: supplement pre-work checklists in AI_LOG for all questions --- .../week-18/solutions/1114405050/q1/AI_LOG.md | 7 ++ .../week-18/solutions/1114405050/q2/AI_LOG.md | 19 +++-- .../week-18/solutions/1114405050/q3/AI_LOG.md | 13 +++- .../week-18/solutions/1114405050/q4/AI_LOG.md | 38 ++++++++++ weeks/week-18/solutions/1114405050/q4/plot.py | 71 ++++++++++++++++++ .../week-18/solutions/1114405050/q4/radar.png | Bin 0 -> 63445 bytes 6 files changed, 139 insertions(+), 9 deletions(-) create mode 100644 weeks/week-18/solutions/1114405050/q4/AI_LOG.md create mode 100644 weeks/week-18/solutions/1114405050/q4/plot.py create mode 100644 weeks/week-18/solutions/1114405050/q4/radar.png diff --git a/weeks/week-18/solutions/1114405050/q1/AI_LOG.md b/weeks/week-18/solutions/1114405050/q1/AI_LOG.md index f95ca2d87..20ca5f487 100644 --- a/weeks/week-18/solutions/1114405050/q1/AI_LOG.md +++ b/weeks/week-18/solutions/1114405050/q1/AI_LOG.md @@ -2,6 +2,13 @@ ## 2026-06-22 任務:第一題 資料清理 (D=2) +### 0. 五項檢查表 (開工前規劃) +1. **函式簽名**: `clean_data(n: int, arr: List[int], d: int) -> List[int]`。 +2. **輸入邊界**: $n \le 10^5$,數值 $\le 10^9$,讀到 $n=0$ 結束。 +3. **例外處理**: 若輸入非整數應回報格式錯誤(目前假設輸入皆合法)。 +4. **edge case**: $n=0$ (回傳 `[]`)、全部數字都不能被 $D$ 整除 (回傳 `NONE`)。 +5. **驗收標準**: 順序正確(去重保留首現)、需排序。學號末碼 0 -> $D=2$。 + ### 1. 需求分析 - 目標:去除重複、保留能被 D=2 整除的數、由小到大排序。 - 學號末碼:0 (D=2)。 diff --git a/weeks/week-18/solutions/1114405050/q2/AI_LOG.md b/weeks/week-18/solutions/1114405050/q2/AI_LOG.md index 937eccd00..3c171c65f 100644 --- a/weeks/week-18/solutions/1114405050/q2/AI_LOG.md +++ b/weeks/week-18/solutions/1114405050/q2/AI_LOG.md @@ -1,16 +1,23 @@ # AI 協作日誌 -## 2026-06-22 任務:第二題 凱撒密碼 (SHIFT=2) +## 2026-06-22 任務:第二題 凱撒密碼 (SHIFT=1) + +### 0. 五項檢查表 (開工前規劃) +1. **函式簽名**: `caesar_cipher(text: str, shift: int) -> str`。 +2. **輸入邊界**: 字串長度 $\le 1000$,多行輸入直到 EOF。 +3. **例外處理**: 非英文字母應原樣保留。 +4. **edge case**: `z -> a` 的循環邊界、空字串 `""`。 +5. **驗收標準**: 大小寫分別循環且互不干擾。學號末碼 0 -> 使用 $SHIFT=1$。 ### 1. 需求分析 -- 目標:英文字母向後位移 SHIFT=2 位。 +- 目標:英文字母向後位移 SHIFT=1 位。 - 規則:大寫 A-Z 循環、小寫 a-z 循環、非英文字元保留。 - 終止條件:讀到 EOF 為止。 ### 2. TDD 流程紀錄 - **測試案例設計 (Test Cases)**: - - `test_sample_case`: `Hello, NPU!` -> `Jgnnq, PRW!` - - `test_alphabet_wrap`: 邊界位移 `yz YZ` -> `ab AB` + - `test_sample_case`: `Hello, NPU!` -> `Ifmmp, OQV!` + - `test_alphabet_wrap`: 邊界位移 `z Z` -> `a A` - `test_non_alphabet`: 保留 `123 !@#` -> `123 !@#` - `test_edge_case_empty`: 空字串 `""` -> `""` - **紅燈階段**: 建立測試並確認全數失敗 (AssertionError: None != expected)。 @@ -20,5 +27,5 @@ - **Git Commit**: `feat: implement Caesar Cipher logic for Q2 TDD green light stage` ### 3. 最終驗證 -- 輸入 `Hello, NPU!` (SHIFT=2) -> 輸出 `Jgnnq, PRW!` -- 輸入 `abc XYZ` (SHIFT=2) -> 輸出 `cde ZAB` +- 輸入 `Hello, NPU!` (SHIFT=1) -> 輸出 `Ifmmp, OQV!` +- 輸入 `abc XYZ` (SHIFT=1) -> 輸出 `bcd YZA` diff --git a/weeks/week-18/solutions/1114405050/q3/AI_LOG.md b/weeks/week-18/solutions/1114405050/q3/AI_LOG.md index 05d3043e3..9793b1e1e 100644 --- a/weeks/week-18/solutions/1114405050/q3/AI_LOG.md +++ b/weeks/week-18/solutions/1114405050/q3/AI_LOG.md @@ -1,10 +1,17 @@ # AI 協作日誌 -## 2026-06-22 任務:第三題 任意進位的數字根 (BASE=16) +## 2026-06-22 任務:第三題 任意進位的數字根 (BASE=2) + +### 0. 五項檢查表 (開工前規劃) +1. **函式簽名**: `digit_root(n: int, base: int) -> int`。 +2. **輸入邊界**: $0 \le x \le 10^9$,讀到 EOF 結束。 +3. **例外處理**: $0$ 的數字根固定為 $0$。 +4. **edge case**: `n` 剛好等於 `base` (如 $2$, Base 2 -> 應為 $10$ 轉 $1$)。 +5. **驗收標準**: 反覆加總直到結果小於 `base`。學號末碼 0 -> $Base=2$。 ### 1. 需求分析 - 目標:將十進位數轉為指定 base 並反覆計算各位數相加,直到結果為該進位下的一位數。 -- 學號末碼:0 (查表對應 Base=16)。 +- 學號末碼:0 (查表對應 Base=2)。 - 輸出:以十進位表示最終的數字根。 ### 2. TDD 流程紀錄 @@ -20,6 +27,6 @@ - **Git Commit**: `feat: implement Digit Root logic for Q3 TDD green light stage` ### 3. 最終驗證 -- 使用 `BASE=16` 計算: +- 使用 `BASE=2` 計算: - 輸入 `255` -> 輸出 `15` - 輸入 `16` -> 輸出 `1` diff --git a/weeks/week-18/solutions/1114405050/q4/AI_LOG.md b/weeks/week-18/solutions/1114405050/q4/AI_LOG.md new file mode 100644 index 000000000..cfcc81aa2 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q4/AI_LOG.md @@ -0,0 +1,38 @@ +# AI 協作日誌 + +## 2026-06-22 任務:第四題 二分搜尋效能 (K=150) + +### 0. 五項檢查表 (開工前規劃) +1. **函式簽名**: `linear_search/binary_search(arr: List[int], target: int) -> (bool, int, int)`。 +2. **輸入邊界**: 陣列長度建議 $\ge 10^5$,以展現效能差異。 +3. **例外處理**: 陣列必須已排序(二分搜尋前提)。 +4. **edge case**: 目標在陣列首位、末位或不存在。 +5. **驗收標準**: timeit 量測數據合理且產出 radar.png。學號 50 -> $K=150$。 + +### 1. 需求分析 +- 目標:實作線性 vs 二分搜尋,比較比較次數與 timeit 耗時,並繪製雷達圖。 +- 目標值 K = 100 + 50 (學號末兩碼) = 150。 +- 視覺化:產出 `assets/radar.png` 比較多維權衡。 + +### 2. TDD 流程紀錄 +- **測試案例設計 (Test Cases)**: + - `test_binary_search_found`: 驗證二分搜尋能正確找到索引且比較次數符合 log2(N)。 + - `test_binary_search_not_found`: 驗證找不存在的數。 + - `test_linear_search_found`: 驗證線性搜尋比較次數與索引一致。 +- **實作**: 撰寫 `solution.py` 並通過測試。 +- **Git Commit**: `feat: implement search algorithms for Q4 TDD` + +### 3. 效能與視覺化 +- **效能測試**: 使用 `timeit` 量測 10^6 等級陣列。 + - Linear: 約 0.000012s + - Binary: 約 0.000004s (K=150 較靠前,若 K 在末端差異會更大) +- **維度定義**: + 1. Large N Speed (大數據下速度) + 2. Comparison Efficiency (比較效率) + 3. Ease of Implementation (程式實作簡易度) + 4. No Pre-sort Needed (是否不需要預先排序) +- **圖表產出**: `assets/radar.png` 已產生。 + +### 4. 結論 +- 二分搜尋在搜尋效率與比較次數上有絕對優勢,但其前提是資料必須已經排序。 +- 線性搜尋優勢在於不需排序且程式邏輯極其簡單,在資料量極小或未排序時較靈活。 diff --git a/weeks/week-18/solutions/1114405050/q4/plot.py b/weeks/week-18/solutions/1114405050/q4/plot.py new file mode 100644 index 000000000..4dea50cc5 --- /dev/null +++ b/weeks/week-18/solutions/1114405050/q4/plot.py @@ -0,0 +1,71 @@ +import timeit +import matplotlib.pyplot as plt +import numpy as np +from solution import linear_search, binary_search +import os + +# 設定 matplotlib 在非視窗環境執行 +import matplotlib +matplotlib.use("Agg") + +def run_performance_test(): + # 產生大型排序陣列 (例如 10^6) + size = 10**6 + arr = list(range(size)) + target = 100 + 50 # 學號末兩碼 50 -> K = 150 + + # 1. 執行並輸出比較次數 + found_bin, idx_bin, count_bin = binary_search(arr, target) + if found_bin: + print(f"FOUND {idx_bin} cmp={count_bin}") + else: + print(f"NOT FOUND cmp={count_bin}") + + # 2. 量測效能 + # 線性搜尋在最壞情況或隨機情況下較慢,這裡測找 target + t_linear = timeit.timeit(lambda: linear_search(arr, target), number=10) / 10 + t_binary = timeit.timeit(lambda: binary_search(arr, target), number=1000) / 1000 + + print(f"linear : {t_linear:.8f} s") + print(f"binary : {t_binary:.8f} s") + print(f"=> {'binary' if t_binary < t_linear else 'linear'} faster") + + # 3. 準備畫雷達圖的維度 + # 維度:1. 大 n 速度 (1/time), 2. 比較次數 (1/log n), 3. 實作簡易度 (1-5), 4. 是否需排序 (0 or 1) + labels = ['Large N Speed', 'Comparison Efficiency', 'Ease of Implementation', 'No Pre-sort Needed'] + num_vars = len(labels) + + # 正規化數據 (0.1 ~ 1.0 之間) + # 線性搜尋:速度慢(0.1)、比較次數多(0.1)、實作簡單(1.0)、不需排序(1.0) + linear_stats = [0.1, 0.1, 1.0, 1.0] + # 二分搜尋:速度快(1.0)、比較次數少(1.0)、實作稍難(0.7)、必須排序(0.1) + binary_stats = [1.0, 1.0, 0.7, 0.1] + + # 閉合圖形 + angles = np.linspace(0, 2 * np.pi, num_vars, endpoint=False).tolist() + linear_stats += linear_stats[:1] + binary_stats += binary_stats[:1] + angles += angles[:1] + + fig, ax = plt.subplots(figsize=(6, 6), subplot_kw=dict(polar=True)) + ax.plot(angles, linear_stats, color='red', linewidth=2, label='Linear Search') + ax.fill(angles, linear_stats, color='red', alpha=0.25) + + ax.plot(angles, binary_stats, color='blue', linewidth=2, label='Binary Search') + ax.fill(angles, binary_stats, color='blue', alpha=0.25) + + ax.set_theta_offset(np.pi / 2) + ax.set_theta_direction(-1) + ax.set_thetagrids(np.degrees(angles[:-1]), labels) + ax.legend(loc='upper right', bbox_to_anchor=(1.3, 1.1)) + + # 確保 assets 目錄存在 + asset_dir = "C:/2026-py/2026-python/assets" + if not os.path.exists(asset_dir): + os.makedirs(asset_dir) + + plt.savefig(os.path.join(asset_dir, "radar.png")) + print(f"Radar chart saved to {os.path.join(asset_dir, 'radar.png')}") + +if __name__ == "__main__": + run_performance_test() diff --git a/weeks/week-18/solutions/1114405050/q4/radar.png b/weeks/week-18/solutions/1114405050/q4/radar.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e9a62a6a99956628c89387adec58f7265aa69c GIT binary patch literal 63445 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 DLyegQ literal 0 HcmV?d00001