Skip to content

Commit d6c25cf

Browse files
committed
fix: Address code review feedback for Snail Traversal, Cache, and Memoize
- README_react.html: Optimized React load, removed duplicates, fixed gradients. - README.md: Corrected examples, type definitions, and performance claims. - Snail_Traversal.ipynb: Fixed type definitions and readability. - Cache/Memoize.ipynb: Fixed memory and performance issues.
1 parent c6868c6 commit d6c25cf

5 files changed

Lines changed: 218 additions & 244 deletions

File tree

JavaScript/2622. Cache With Time Limit/Claude Code Sonnet 4.5/CacheWithTimeLimit_TS.ipynb

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,10 @@
297297
" let count = 0;\n",
298298
" \n",
299299
" // 期限切れでないエントリのみカウント\n",
300-
" for (const entry of this.cache.values()) {\n",
301-
" if (entry.expiresAt > now) {\n",
300+
" for (const [key, entry] of this.cache) {\n",
301+
" if (entry.expiresAt <= now) {\n",
302+
" this.cache.delete(key);\n",
303+
" } else {\n",
302304
" count++;\n",
303305
" }\n",
304306
" }\n",

JavaScript/2623. Memoize/Claude Code Sonnet 4.5/Memoize_TS.ipynb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@
6565
" const memoized: Fn = function (...args: number[]): number {\n",
6666
" const key = args.join(\",\");\n",
6767
"\n",
68-
" if (cache.has(key)) {\n",
69-
" return cache.get(key)!;\n",
68+
" const cached = cache.get(key);\n",
69+
" if (cached !== undefined) {\n",
70+
" return cached;\n",
7071
" }\n",
7172
"\n",
7273
" callCount += 1;\n",
@@ -141,8 +142,9 @@
141142
" ? args[0]\n",
142143
" : args[0] * 100001 + args[1];\n",
143144
"\n",
144-
" if (cache.has(key)) {\n",
145-
" return cache.get(key)!;\n",
145+
" const cached = cache.get(key);\n",
146+
" if (cached !== undefined) {\n",
147+
" return cached;\n",
146148
" }\n",
147149
"\n",
148150
" callCount += 1;\n",

JavaScript/2624. Snail Traversal/Claude Code Sonnet 4.5/README.md

Lines changed: 21 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -134,11 +134,13 @@ graph LR
134134

135135
**実装比較**:
136136

137-
| 実装方法 | Runtime | Memory | 特徴 |
138-
| ---------------------------- | ------- | ------ | ------------------------ |
139-
| 基本版(Array.from) | ~158ms | ~69MB | 可読性高、標準的 |
140-
| 最適化版(ビット演算) | ~140ms | ~68MB | ビット演算で10-15%高速化 |
141-
| 高速化版(変数キャッシング) | ~125ms | ~67MB | Top 10-15%目標 |
137+
| 実装方法 | Runtime\* | Memory | 特徴 |
138+
| ---------------------------- | --------- | ------ | ------------------ |
139+
| 基本版(Array.from) | ~158ms | ~69MB | 可読性高、標準的 |
140+
| 最適化版(ビット演算) | ~140ms | ~68MB | ビット演算で高速化 |
141+
| 高速化版(変数キャッシング) | ~125ms | ~67MB | 更なる高速化 |
142+
143+
_\*数値は特定環境での測定例です_
142144

143145
---
144146

@@ -149,7 +151,7 @@ graph LR
149151
```typescript
150152
declare global {
151153
interface Array<T> {
152-
snail(rowsCount: number, colsCount: number): number[][];
154+
snail(rowsCount: number, colsCount: number): T[][];
153155
}
154156
}
155157

@@ -161,17 +163,14 @@ declare global {
161163
* @returns 2D配列(Snail pattern)、無効な入力の場合は空配列
162164
* @complexity Time: O(n), Space: O(n) where n = this.length
163165
*/
164-
Array.prototype.snail = function (rowsCount: number, colsCount: number): number[][] {
166+
Array.prototype.snail = function (rowsCount: number, colsCount: number): T[][] {
165167
// 入力バリデーション
166168
if (rowsCount * colsCount !== this.length) {
167169
return [];
168170
}
169171

170172
// 結果配列の初期化
171-
const result: number[][] = Array.from(
172-
{ length: rowsCount },
173-
() => new Array<number>(colsCount),
174-
);
173+
const result: T[][] = Array.from({ length: rowsCount }, () => new Array<T>(colsCount));
175174

176175
// Snail traversal pattern実装
177176
for (let i = 0; i < this.length; i++) {
@@ -184,7 +183,7 @@ Array.prototype.snail = function (rowsCount: number, colsCount: number): number[
184183
// 偶数列: 上から下、奇数列: 下から上
185184
const row = col % 2 === 0 ? positionInCol : rowsCount - 1 - positionInCol;
186185

187-
result[row]![col] = this[i] as number;
186+
result[row]![col] = this[i] as T;
188187
}
189188

190189
return result;
@@ -196,20 +195,20 @@ Array.prototype.snail = function (rowsCount: number, colsCount: number): number[
196195
```typescript
197196
declare global {
198197
interface Array<T> {
199-
snail(rowsCount: number, colsCount: number): number[][];
198+
snail(rowsCount: number, colsCount: number): T[][];
200199
}
201200
}
202201

203202
/**
204203
* Snail traversal(最適化版)
205204
* ビット演算と整数除算でパフォーマンス向上
206205
*/
207-
Array.prototype.snail = function (rowsCount: number, colsCount: number): number[][] {
206+
Array.prototype.snail = function (rowsCount: number, colsCount: number): T[][] {
208207
const n = this.length;
209208
if (rowsCount * colsCount !== n) return [];
210209

211210
// 1段階での配列初期化
212-
const result: number[][] = [];
211+
const result: T[][] = [];
213212
for (let i = 0; i < rowsCount; i++) {
214213
result[i] = [];
215214
}
@@ -232,16 +231,16 @@ Array.prototype.snail = function (rowsCount: number, colsCount: number): number[
232231
```typescript
233232
declare global {
234233
interface Array<T> {
235-
snail(rowsCount: number, colsCount: number): number[][];
234+
snail(rowsCount: number, colsCount: number): T[][];
236235
}
237236
}
238237

239-
Array.prototype.snail = function (rowsCount: number, colsCount: number): number[][] {
238+
Array.prototype.snail = function (rowsCount: number, colsCount: number): T[][] {
240239
const n = this.length;
241240
if (rowsCount * colsCount !== n) return [];
242241

243242
// 事前割り当て
244-
const result: number[][] = new Array(rowsCount);
243+
const result: T[][] = new Array(rowsCount);
245244
let i = rowsCount;
246245
while (i--) result[i] = new Array(colsCount);
247246

@@ -270,15 +269,15 @@ Array.prototype.snail = function (rowsCount: number, colsCount: number): number[
270269
```typescript
271270
// 前: col % 2 === 0
272271
// 後: col & 1
273-
// 効果: 約2倍高速(ビット演算は算術演算より効率的
272+
// 効果: 算術演算より効率的(環境による
274273
```
275274

276275
### 2. 整数除算の最適化
277276

278277
```typescript
279278
// 前: Math.floor(i / rowsCount)
280279
// 後: (i / rowsCount) | 0
281-
// 効果: 約30%高速(ビットORで整数化)
280+
// 効果: ビットORで整数化(環境による
282281
```
283282

284283
### 3. モジュロ演算の削減
@@ -345,8 +344,8 @@ const lastRow = rows - 1;
345344

346345
```typescript
347346
[1, 2, 3, 4, 5, 6].snail(3, 2);
348-
// → [[1,5], [2,4], [3,6]]
349-
// 列0: [1,2,3](下), 列1: [6,5,4](上)
347+
// → [[1,6], [2,5], [3,4]]
348+
// 列0: [1,2,3](上→下), 列1: [4,5,6]を下→上に配置するので[6,5,4]の順
350349
```
351350

352351
7. **標準ケース(奇数列)**

0 commit comments

Comments
 (0)