Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions JavaScript/2621. Sleep/Claude Code Sonnet 4.5/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,7 @@ async def sleep(millis: int) -> None:
raise ValueError("millis must be an integer between 1 and 1000")

# イベントループ取得
loop = asyncio.get_event_loop()
loop = asyncio.get_running_loop() # 実行中のイベントループ取得(Python 3.7+で推奨)

# Future 作成(コルーチンが待機するオブジェクト)
future: asyncio.Future[None] = loop.create_future()
Expand Down Expand Up @@ -256,7 +256,7 @@ async def sleep(millis: int) -> None:
MILLIS_TO_SECONDS = 0.001

async def sleep(millis: int) -> None:
await asyncio.sleep(millis * MILLIS_TO_SECONDS) # 除算より乗算が高速
await asyncio.sleep(millis * MILLIS_TO_SECONDS) # 可読性とメンテナンス性の向上
```

### パフォーマンスノート
Expand Down Expand Up @@ -354,7 +354,7 @@ async function sleep(millis: number): Promise<void> {

// Python 等価実装
async def sleep(millis: int) -> None:
loop = asyncio.get_event_loop()
loop = asyncio.get_running_loop() # 実行中のイベントループ取得
future = loop.create_future()
loop.call_later(millis / 1000, future.set_result, None)
await future
Expand Down
308 changes: 154 additions & 154 deletions JavaScript/2621. Sleep/Claude Code Sonnet 4.5/Sleep_TS.ipynb
Original file line number Diff line number Diff line change
@@ -1,155 +1,155 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "2aa72022",
"metadata": {},
"source": [
"# TypeScript Sleep関数実装\n",
"\n",
"## 1. 問題の分析\n",
"\n",
"### 競技プログラミング視点での分析\n",
"- **実行速度**: 非同期処理の仕組み上、実行速度は`setTimeout`のブラウザ/Node.jsエンジンの実装に依存\n",
"- **メモリ使用量**: Promise1つとタイマーIDのみで、O(1)の極小メモリ\n",
"- **最適化ポイント**: シンプルな実装が最速(余計な処理を追加しない)\n",
"\n",
"### 業務開発視点での分析\n",
"- **型安全性**: `millis`が正の整数であることの保証、Promise型の明示\n",
"- **エラーハンドリング**: 不正な入力値(負の数、0、非数値)への対応\n",
"- **保守性**: 明確な関数シグネチャとドキュメント\n",
"- **可読性**: 非同期処理の意図が明確\n",
"\n",
"### TypeScript特有の考慮点\n",
"- **型推論**: `Promise<void>`の明示的な型定義\n",
"- **strict mode**: nullチェック、型安全性の確保\n",
"- **async/await**: Promiseラッパーの簡潔な記述\n",
"- **型ガード**: 実行時の入力検証\n",
"\n",
"## 2. アルゴリズムアプローチ比較\n",
"\n",
"| アプローチ | 時間計算量 | 空間計算量 | TS実装コスト | 型安全性 | 可読性 | 備考 |\n",
"|---------|---------|--------|----------|--------|-------|------|\n",
"| setTimeout + Promise | O(1) | O(1) | 低 | 高 | 高 | 標準的で最適 |\n",
"| setInterval + clearInterval | O(1) | O(1) | 中 | 中 | 低 | 不要な複雑性 |\n",
"| busy wait (while loop) | O(n) | O(1) | 低 | 高 | 低 | CPU使用率100%で非推奨 |\n",
"| Promise.race + setTimeout | O(1) | O(1) | 中 | 中 | 中 | 過剰設計 |\n",
"\n",
"## 3. 選択したアルゴリズムと理由\n",
"\n",
"### 選択したアプローチ\n",
"**setTimeout + Promise wrapper**\n",
"\n",
"### 理由\n",
"- **計算量的な優位性**: O(1)の時間・空間計算量で最適\n",
"- **TypeScript環境での型安全性**: Promise型の明確な定義が可能\n",
"- **保守性・可読性**: 非同期処理の標準パターンで理解しやすい\n",
"- **実装の単純性**: コード行数が最小で、バグの混入リスクが低い\n",
"\n",
"### TypeScript特有の最適化ポイント\n",
"- **型推論の活用**: `Promise<void>`で戻り値の型を明示\n",
"- **readonly修飾子**: 入力値の不変性を保証(必要に応じて)\n",
"- **strict nullチェック**: 実行時エラーの防止\n",
"- **エラー型の明示**: TypeErrorによる型レベルでのエラー情報\n",
"\n",
"## 4. 実装コード\n",
"\n",
"```typescript\n",
"// Analyze Complexity\n",
"// Runtime 45 ms\n",
"// Beats 55.94%\n",
"// Memory 53.75 MB\n",
"// Beats 88.64%\n",
"/**\n",
" * 指定されたミリ秒数だけ非同期に待機する関数\n",
" * \n",
" * @param millis - 待機するミリ秒数(正の整数)\n",
" * @returns void を解決するPromise\n",
" * @throws {TypeError} millis が数値でない場合\n",
" * @throws {RangeError} millis が範囲外(1-1000)の場合\n",
" * @complexity Time: O(1), Space: O(1)\n",
" * \n",
" * @example\n",
" * const start = Date.now();\n",
" * await sleep(100);\n",
" * console.log(Date.now() - start); // ~100\n",
" */\n",
"async function sleep(millis: number): Promise<void> {\n",
" // 型ガード: 数値チェック\n",
" if (typeof millis !== 'number' || Number.isNaN(millis)) {\n",
" throw new TypeError('millis must be a valid number');\n",
" }\n",
" \n",
" // 範囲チェック(制約条件: 1 <= millis <= 1000)\n",
" if (millis < 1 || millis > 1000) {\n",
" throw new RangeError('millis must be between 1 and 1000');\n",
" }\n",
" \n",
" // 整数チェック(正の整数要件)\n",
" if (!Number.isInteger(millis)) {\n",
" throw new RangeError('millis must be an integer');\n",
" }\n",
" \n",
" // Promise でラップした setTimeout による非同期待機\n",
" return new Promise<void>((resolve) => {\n",
" setTimeout(resolve, millis);\n",
" });\n",
"}\n",
"```\n",
"\n",
"### LeetCode提出用の最小実装\n",
"\n",
"問題の制約条件が保証されている場合、エラーハンドリングを省略した最小実装:\n",
"\n",
"```typescript\n",
"// Analyze Complexity\n",
"// Runtime 47 ms\n",
"// Beats 42.89%\n",
"// Memory 55.27 MB\n",
"// Beats 37.58%\n",
"async function sleep(millis: number): Promise<void> {\n",
" return new Promise<void>((resolve) => {\n",
" setTimeout(resolve, millis);\n",
" });\n",
"}\n",
"```\n",
"\n",
"## TypeScript固有の最適化観点\n",
"\n",
"### 型安全性の活用\n",
"\n",
"1. **コンパイル時エラー防止**\n",
" - `Promise<void>`の明示的な型定義により、戻り値の誤用を防止\n",
" - `millis: number`により、文字列などの不正な型の渡し込みを防止\n",
"\n",
"2. **実行時型チェック**\n",
" - `typeof`および`Number.isNaN`による実行時検証\n",
" - `Number.isInteger`による整数チェック\n",
"\n",
"3. **エラー型の明示**\n",
" - `TypeError`: 型の不一致\n",
" - `RangeError`: 値の範囲外\n",
"\n",
"### パフォーマンス特性\n",
"\n",
"- **時間計算量**: O(1) - 定数時間での処理完了\n",
"- **空間計算量**: O(1) - Promise1つとタイマーIDのみ\n",
"- **実行時オーバーヘッド**: 最小限(Promiseラッパーのみ)\n",
"\n",
"### 開発効率と保守性\n",
"\n",
"- **IntelliSense**: 型定義により引数と戻り値が自動補完\n",
"- **リファクタリング安全性**: 型チェックにより変更時のエラーを検出\n",
"- **ドキュメント**: JSDocコメントによる使用方法の明示\n",
"- **テスタビリティ**: async/awaitにより同期的なテストコードが記述可能"
]
}
],
"metadata": {
"language_info": {
"name": "python"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
"cells": [
{
"cell_type": "markdown",
"id": "2aa72022",
"metadata": {},
"source": [
"# TypeScript Sleep関数実装\n",
"\n",
"## 1. 問題の分析\n",
"\n",
"### 競技プログラミング視点での分析\n",
"- **実行速度**: 非同期処理の仕組み上、実行速度は`setTimeout`のブラウザ/Node.jsエンジンの実装に依存\n",
"- **メモリ使用量**: Promise1つとタイマーIDのみで、O(1)の極小メモリ\n",
"- **最適化ポイント**: シンプルな実装が最速(余計な処理を追加しない)\n",
"\n",
"### 業務開発視点での分析\n",
"- **型安全性**: `millis`が正の整数であることの保証、Promise型の明示\n",
"- **エラーハンドリング**: 不正な入力値(負の数、0、非数値)への対応\n",
"- **保守性**: 明確な関数シグネチャとドキュメント\n",
"- **可読性**: 非同期処理の意図が明確\n",
"\n",
"### TypeScript特有の考慮点\n",
"- **型推論**: `Promise<void>`の明示的な型定義\n",
"- **strict mode**: nullチェック、型安全性の確保\n",
"- **async/await**: Promiseラッパーの簡潔な記述\n",
"- **型ガード**: 実行時の入力検証\n",
"\n",
"## 2. アルゴリズムアプローチ比較\n",
"\n",
"| アプローチ | 時間計算量 | 空間計算量 | TS実装コスト | 型安全性 | 可読性 | 備考 |\n",
"|---------|---------|--------|----------|--------|-------|------|\n",
"| setTimeout + Promise | O(1) | O(1) | 低 | 高 | 高 | 標準的で最適 |\n",
"| setInterval + clearInterval | O(1) | O(1) | 中 | 中 | 低 | 不要な複雑性 |\n",
"| busy wait (while loop) | O(n) | O(1) | 低 | 高 | 低 | CPU使用率100%で非推奨 |\n",
"| Promise.race + setTimeout | O(1) | O(1) | 中 | 中 | 中 | 過剰設計 |\n",
"\n",
"## 3. 選択したアルゴリズムと理由\n",
"\n",
"### 選択したアプローチ\n",
"**setTimeout + Promise wrapper**\n",
"\n",
"### 理由\n",
"- **計算量的な優位性**: O(1)の時間・空間計算量で最適\n",
"- **TypeScript環境での型安全性**: Promise型の明確な定義が可能\n",
"- **保守性・可読性**: 非同期処理の標準パターンで理解しやすい\n",
"- **実装の単純性**: コード行数が最小で、バグの混入リスクが低い\n",
"\n",
"### TypeScript特有の最適化ポイント\n",
"- **型推論の活用**: `Promise<void>`で戻り値の型を明示\n",
"- **readonly修飾子**: 入力値の不変性を保証(必要に応じて)\n",
"- **strict nullチェック**: 実行時エラーの防止\n",
"- **エラー型の明示**: TypeErrorによる型レベルでのエラー情報\n",
"\n",
"## 4. 実装コード\n",
"\n",
"```typescript\n",
"// Analyze Complexity\n",
"// Runtime 45 ms\n",
"// Beats 55.94%\n",
"// Memory 53.75 MB\n",
"// Beats 88.64%\n",
"/**\n",
" * 指定されたミリ秒数だけ非同期に待機する関数\n",
" * \n",
" * @param millis - 待機するミリ秒数(正の整数)\n",
" * @returns void を解決するPromise\n",
" * @throws {TypeError} millis が数値でない場合\n",
" * @throws {RangeError} millis が範囲外(1-1000)の場合\n",
" * @complexity Time: O(1), Space: O(1)\n",
" * \n",
" * @example\n",
" * const start = Date.now();\n",
" * await sleep(100);\n",
" * console.log(Date.now() - start); // ~100\n",
" */\n",
"async function sleep(millis: number): Promise<void> {\n",
" // 型ガード: 数値チェック\n",
" if (typeof millis !== 'number' || Number.isNaN(millis)) {\n",
" throw new TypeError('millis must be a valid number');\n",
" }\n",
" \n",
" // 整数チェック(正の整数要件)\n",
" if (!Number.isInteger(millis)) {\n",
" throw new RangeError('millis must be an integer');\n",
" }\n",
" \n",
" // 範囲チェック(制約条件: 1 <= millis <= 1000)\n",
" if (millis < 1 || millis > 1000) {\n",
" throw new RangeError('millis must be between 1 and 1000');\n",
" }\n",
" \n",
" // Promise でラップした setTimeout による非同期待機\n",
" return new Promise<void>((resolve) => {\n",
" setTimeout(resolve, millis);\n",
" });\n",
"}\n",
"```\n",
"\n",
"### LeetCode提出用の最小実装\n",
"\n",
"問題の制約条件が保証されている場合、エラーハンドリングを省略した最小実装:\n",
"\n",
"```typescript\n",
"// Analyze Complexity\n",
"// Runtime 47 ms\n",
"// Beats 42.89%\n",
"// Memory 55.27 MB\n",
"// Beats 37.58%\n",
"async function sleep(millis: number): Promise<void> {\n",
" return new Promise<void>((resolve) => {\n",
" setTimeout(resolve, millis);\n",
" });\n",
"}\n",
"```\n",
"\n",
"## TypeScript固有の最適化観点\n",
"\n",
"### 型安全性の活用\n",
"\n",
"1. **コンパイル時エラー防止**\n",
" - `Promise<void>`の明示的な型定義により、戻り値の誤用を防止\n",
" - `millis: number`により、文字列などの不正な型の渡し込みを防止\n",
"\n",
"2. **実行時型チェック**\n",
" - `typeof`および`Number.isNaN`による実行時検証\n",
" - `Number.isInteger`による整数チェック\n",
"\n",
"3. **エラー型の明示**\n",
" - `TypeError`: 型の不一致\n",
" - `RangeError`: 値の範囲外\n",
"\n",
"### パフォーマンス特性\n",
"\n",
"- **時間計算量**: O(1) - 定数時間での処理完了\n",
"- **空間計算量**: O(1) - Promise1つとタイマーIDのみ\n",
"- **実行時オーバーヘッド**: 最小限(Promiseラッパーのみ)\n",
"\n",
"### 開発効率と保守性\n",
"\n",
"- **IntelliSense**: 型定義により引数と戻り値が自動補完\n",
"- **リファクタリング安全性**: 型チェックにより変更時のエラーを検出\n",
"- **ドキュメント**: JSDocコメントによる使用方法の明示\n",
"- **テスタビリティ**: async/awaitにより同期的なテストコードが記述可能"
]
}
],
"metadata": {
"language_info": {
"name": "typescript"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading