diff --git a/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/ArrayReduceTransformation_TS.ipynb b/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/ArrayReduceTransformation_TS.ipynb index 84f08d3e..c37bdf95 100644 --- a/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/ArrayReduceTransformation_TS.ipynb +++ b/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/ArrayReduceTransformation_TS.ipynb @@ -205,7 +205,7 @@ "\n", "**改善ポイント**:\n", "- ✅ 空配列チェックを削除(オーバーヘッド削減)\n", - "- ✅ 変数名を短縮(`accumulator` → `val`)でメモリアクセス最適化\n", + "- ✅ 変数名を短縮(`accumulator` → `val`)については、可読性と記述の簡潔さを優先しました(ランタイム性能への影響はありません)\n", "- ✅ 極限までシンプルに\n", "\n", "**予想パフォーマンス**: Runtime ~42-45ms, Memory ~55-56MB\n", @@ -275,8 +275,8 @@ "```\n", "\n", "**改善ポイント**:\n", - "- ✅ ループアンローリングでブランチ予測とパイプライン効率を向上\n", - "- ✅ 4要素ずつ処理することで、ループオーバーヘッドを75%削減\n", + "- ⚠️ ループアンローリングは理論上オーバーヘッドを削減しますが、現代のJITでは自動最適化されるため、手動で行うとむしろ遅くなる場合があります(実測: 47ms vs 40ms)\n", + "- ⚠️ ワークロードやランタイム環境に依存するため、常に有効とは限りません\n", "\n", "**予想パフォーマンス**: Runtime ~38-42ms(大きな配列で効果大)\n", "\n", @@ -346,7 +346,7 @@ " \"target\": \"ES2022\",\n", " \"module\": \"ES2022\",\n", " \"strict\": true,\n", - " \"noUncheckedIndexedAccess\": false,\n", + " \"noUncheckedIndexedAccess\": true,\n", " \"skipLibCheck\": true\n", " }\n", "}\n", @@ -375,6 +375,55 @@ "- ✅ 可読性: 維持\n", "- ✅ 保守性: 維持" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "d2b4f3e0", + "metadata": {}, + "outputs": [], + "source": [ + "/**\n", + " * Demonstration of the reduce function\n", + " */\n", + "type Fn = (accum: number, curr: number) => number;\n", + "\n", + "function arrayReduce(nums: number[], fn: Fn, init: number): number {\n", + " let val = init;\n", + " for (let i = 0; i < nums.length; i++) {\n", + " val = fn(val, nums[i]);\n", + " }\n", + " return val;\n", + "}\n", + "\n", + "// Test cases\n", + "const nums1 = [1, 2, 3, 4];\n", + "const fn1 = (acc: number, curr: number) => acc + curr;\n", + "const init1 = 0;\n", + "\n", + "const nums2 = [1, 2, 3, 4];\n", + "const fn2 = (acc: number, curr: number) => acc * curr;\n", + "const init2 = 1;\n", + "\n", + "const nums3: number[] = [];\n", + "const fn3 = (acc: number, curr: number) => 0;\n", + "const init3 = 25;\n", + "\n", + "console.log(\"Test Case 1: Sum\");\n", + "console.log(`Input: nums = [${nums1}], init = ${init1}`);\n", + "console.log(`Output: ${arrayReduce(nums1, fn1, init1)}`);\n", + "console.log(\"Expected: 10\");\n", + "\n", + "console.log(\"\\nTest Case 2: Product\");\n", + "console.log(`Input: nums = [${nums2}], init = ${init2}`);\n", + "console.log(`Output: ${arrayReduce(nums2, fn2, init2)}`);\n", + "console.log(\"Expected: 24\");\n", + "\n", + "console.log(\"\\nTest Case 3: Empty Array\");\n", + "console.log(`Input: nums = [], init = ${init3}`);\n", + "console.log(`Output: ${arrayReduce(nums3, fn3, init3)}`);\n", + "console.log(\"Expected: 25\");" + ] } ], "metadata": { @@ -392,4 +441,4 @@ }, "nbformat": 4, "nbformat_minor": 5 -} +} \ No newline at end of file diff --git a/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/README.md b/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/README.md index 8aabc621..d72ac13b 100644 --- a/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/README.md +++ b/JavaScript/2626. Array Reduce Transformation/Claude Code Sonnet 4.5 extended/README.md @@ -165,12 +165,9 @@ class Solution: # 累積値を初期値で初期化 accumulator: int = init - # 配列長をキャッシュ(毎回の len() 呼び出しを回避) - length: int = len(nums) - # 各要素に対してreducer関数を順次適用 - for i in range(length): - accumulator = fn(accumulator, nums[i]) + for num in nums: + accumulator = fn(accumulator, num) # 最終累積値を返す(空配列の場合は init がそのまま返る) return accumulator @@ -197,19 +194,20 @@ class Solution: