---
name: drill
description: 応用情報技術者試験の計算・手続き系トピックに特化した訓練ドリル。論理演算の即答、稼働率計算、アルゴリズムトレースなど、MCQでは鍛えられない「自分で導出・実行する力」を3つのモード（reflex/calculation/trace）で鍛える。計算問題を練習したい時、アルゴリズムをトレースしたい時、論理演算を反射で解けるようになりたい時、公式の使い方を身につけたい時に使うこと。
---

# drill

応用情報技術者試験の計算・手続き系 leaf に特化した訓練スキル。pre-training（MCQ エピソード）が「概念の recall と識別」を鍛えるのに対し、このドリルは「**自分で導出・実行する力**」を鍛える。Layer 1 の別モダリティ。

## なぜ必要か

319 leaves のうち約100 leaves は計算・手続き的知識を要する。これらは MCQ で正解を選べても「自分で計算を回す」「アルゴリズムをトレースする」能力が育たない。4択で答えを選ぶのと、白紙から導出するのは別の能力。

LLM が記号の意味を獲得したのは特別な grounding メカニズムではなく、膨大な文脈での反復（数の暴力）だった。このドリルも同じ原理: 同じ種類の問題を大量に、角度を変えて繰り返すことで、手順が反射的に回る状態を作る。

## 3つのモード

### `reflex` — 即答ドリル

**対象**: 論理演算、集合演算、基数変換、ビット演算、正規表現マッチ、論理回路ゲート出力

**やること**: 問題を提示 → learner が1語で即答 → 正誤 → 即次の問題。テンポが命。考えている時間は無駄 — 反射で出る状態を作る。

**問題提示の形式**:
```
━━━━━━━━━━━━━━━━━━━
 reflex drill  Q7   正答: 5/6
━━━━━━━━━━━━━━━━━━━

 A = 真, B = 偽

 A ∧ ¬B = ?

 →
```

最小限の装飾。問題文を極限まで短く、答えも1語（真/偽、数値、マッチ/不マッチ）。

**視覚表現を活用する**:
- 集合演算: ASCII ベン図で網掛け部分を示して式を答えさせる、または式を示してベン図を選ばせる
- 論理回路: ASCII でゲート図を示して出力を答えさせる
- 基数変換: `0xAF = ?₂` `11010₂ = ?₁₀` のような即答形式

```
 下の網掛けを表す式は？

   ╭───╮ ╭───╮
   │░░░╳─╳░░░│
   │░░░│ │░░░│
   ╰───╯ ╰───╯

 →
```

**フィードバック**: 正誤のみ。1行で済ます。テンポを壊さない。間違えた場合だけ正答を1行で示す。

**問題数**: 1セッション 20〜50問。多いほど効く。

**進行**: leaf 単位。1 leaf のドリルが終わったら次の leaf を提案（consent-gated）。

### `calculation` — 計算トレーニング

**対象**: 稼働率、待ち行列、確率、情報量、キャッシュヒット率、パイプライン、EVM、損益分岐点、財務比率、工数見積、サブネット計算 など

**やること**: 数値付きの問題を提示 → learner に計算過程と答えを書かせる → 過程を含めて検証フィードバック。

**問題提示の形式**:
```
━━━━━━━━━━━━━━━━━━━
 calculation  Q3   正答: 2/2
━━━━━━━━━━━━━━━━━━━

 稼働率 0.9 の装置を2台並列に接続し、
 その出力を稼働率 0.8 の装置に直列接続したシステムの稼働率を求めよ。

 計算過程も示すこと。
```

**重要**: 答えだけでなく**計算過程を書かせる**。「0.792」と答えだけ書いても、次に数値が変わったときに再現できるか不明。

**フィードバック**:
1. 答えの正誤
2. **過程の検証**: learner の計算過程を step-by-step で確認。間違ったステップがあれば「ステップ2で並列の公式を間違えている」のように特定して指摘
3. 模範解答の提示（learner の過程と並べて比較できるように）

```
✓ 正解: 0.792

あなたの計算過程:
  並列部: 1-(1-0.9)² = 1-0.01 = 0.99  ✓
  直列合成: 0.99 × 0.8 = 0.792        ✓

模範解答と一致。並列→直列の順序も正しい。
```

**問題の変形**: 同じ構成で数値だけ変えた問題を連続で出す。数値が変わっても同じ手順で解けることを体で覚えさせる。その後、構成を変えて応用力を試す。

**問題数**: 1 leaf あたり 10〜20問。calculation は1問に時間がかかるので reflex より少なめ。

### `trace` — マルチステップトレース

**対象**: ソート、探索、スタック/キュー操作、再帰呼び出し、ページ置換（LRU/FIFO）、タスクスケジューリング、オートマトン状態遷移、正規化分解、SQL実行結果推論、グラフ走査、PERT/CPMクリティカルパス

**やること**: 初期状態とアルゴリズム/手順を提示 → learner に各ステップの状態変化を書かせる → ステップごとに検証。

**問題提示の形式**:
```
━━━━━━━━━━━━━━━━━━━
 trace  Q2   正答: 1/1
━━━━━━━━━━━━━━━━━━━

 配列 [5, 3, 8, 1, 4] にバブルソートを適用する。
 1パス目終了後の配列の状態を答えよ。

 →
```

**段階的に深くする**:
- まず1ステップだけ答えさせる
- 次に全パスの最終状態を答えさせる
- 最後に全ステップの中間状態を書かせる

SQL の場合:
```
 以下のSQLの実行結果を答えよ。

 テーブル 社員:
 | 社員ID | 名前   | 部署ID |
 |--------|--------|--------|
 | 1      | 田中   | 10     |
 | 2      | 鈴木   | 20     |
 | 3      | 佐藤   | 10     |

 SELECT 部署ID, COUNT(*) FROM 社員 GROUP BY 部署ID

 →
```

**フィードバック**:
1. ステップごとの正誤チェック
2. 最初に間違えたステップを特定して指摘
3. そのステップで何が起きるべきだったかを説明
4. 模範トレース全体を提示

**問題数**: 1 leaf あたり 5〜15問。trace は1問が重いので少なめだが、同じアルゴリズムで入力データを変えた問題を複数出すことで反復する。

## フロー

### Step 1: leaf の確定

textbook-dispenser を使って learner の入力を解決する:

```bash
python3 /Users/tskymmt/git/aitee_training/.claude/skills/textbook-dispenser/scripts/dispense.py resolve "<learner input>"
```

### Step 2: モードの判定

`data/leaf_mode_mapping.json` を読み、確定した leaf_id のモードを引く:

```python
# leaf_mode_mapping.json の該当エントリを確認
# "ch04_09_02": {"mode": "calculation", "menu": "システム性能・信頼性"}
```

leaf_id が mapping に存在しない場合: 「この leaf は計算・手続き系ではないため、通常の pre-training（MCQ エピソード）をお勧めします」と伝える。

### Step 3: モードに応じたドリルループ

上記3モードのうち該当するモードの形式で問題を出題する。

**問題の生成**: AI がその leaf のトピックについて、自身の知識から問題をリアルタイム生成する。同じ構造で数値・データ・条件を変えたバリエーションを次々に出す。

### Step 4: セッション終了

learner が「終わり」「次」「休憩」と言ったら:
1. セッションの正答率を報告
2. 弱点の傾向（あれば）を指摘
3. 次の leaf を提案（textbook-dispenser の neighbors を使用）

## 守るべきこと

- **1問ずつ提示**: 複数同時に出さない
- **reflex ではテンポ重視**: フィードバックは最小限。考えさせる前に次を出す空気を作る
- **calculation / trace では過程を書かせる**: 答えだけでは訓練にならない
- **同じ構造・違う数値の反復**: 手順の自動化に反復が必要。1問だけでは定着しない
- **textbook-dispenser を必ず経由**: textbook_structure.json を直接読まない
- **mapping にない leaf は断る**: 全 leaf がドリル対象ではない

## してはいけないこと

- **MCQ を出す**: NG。それは pre-training スキルの仕事。このドリルは「自分で書く」が本体
- **reflex で長いフィードバックを書く**: NG。テンポが死ぬ。正誤1行で次へ
- **calculation で答えだけ受け取る**: NG。過程がないと検証できない
- **概念の説明を始める**: NG。それは pre-training の仕事。ドリルは「既に知っている前提で鍛える」場

## leaf_mode_mapping.json について

`data/leaf_mode_mapping.json` に全対象 leaf のモード定義がある。過去問分析（2009-2025年 全2640問）に基づき、計算・手続き系の出題が確認されたセクションの leaf を収録。319 leaves 中 約100 leaves が対象。

mapping の構造:
```json
{
  "ch04_09_02": {
    "mode": "calculation",
    "menu": "システム性能・信頼性"
  }
}
```

`mode` はドリルの実行モード、`menu` はどのテーマ群に属するかの参考情報（ドリルの実行には直接使わないが、learner に「このドリルはシステム性能・信頼性の計算です」と伝えるのに使える）。
