「魔法科高校の劣等生」の「ループ・キャスト・システム」GPT-4oで生成してみました

# タイトルの通り昨日出たGPT-4o 早速試しました
突然魔法科の一部を実現できたら面白いなぁと思ってGPT-4oが発表されて、やってみようと思ってやりました結果が以下です。
plot 図
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3506235/77236fc2-6eca-2f38-0963-a1e087d54c5a.png)

## 以下のmarkdown 全てGPT-4o によって作成しました

キャスト数とは、魔法を発動する回数を指します。ループ・キャスト・システムにおいて、同じ起動式を使って連続で魔法を発動できる回数を管理するために用います。

### キャスト数の詳細

- **最大キャスト数 (max_casts)**: システムが連続して魔法を発動できる最大回数です。この値を超えると、システムはそれ以上魔法を発動できなくなります。
- **現在のキャスト数 (current_casts)**: 現在までに発動した魔法の回数です。この数が最大キャスト数に達するまでは、魔法を発動し続けることができます。

以下に、ループ・キャスト・システムの仕組みとキャスト数の動作を再度整理し、プログラムコードとその解説をまとめます。

---

# ループ・キャスト・システムの解説とシミュレーション

### ループ・キャスト・システムとは？

**ループ・キャスト・システム**は、ライトノベル「魔法科高校の劣等生」に登場する技術で、魔法を連続して使う際の効率を大幅に向上させる革新的な技術です。通常、魔法を発動するたびに新しい「起動式」（魔法のレシピのようなもの）を用意する必要がありますが、このシステムでは一度起動式をセットすると、それを何度も繰り返し使うことができます。

### システムの制約と柔軟性

#### 制約

- **同一の起動式のみを連続発動**: ループ・キャスト・システムは「全く同じ魔法」を繰り返し発動するためのシステムです。つまり、定数項目（変更できない部分）は同じままでなければなりません。異なる定数項目を持つ複数の起動式を連続して展開することはできません。

#### 柔軟性

- **変数項目の変更が可能**: 変数項目（変更できる部分）は、毎回の起動式の読み込み時に変更することができます。これにより、例えば威力や速度といった変数を変えることで、同じ魔法を少しずつ異なる形で発動することが可能です。

### 通常の起動式の動作

- **起動式**: 魔法を発動するための設計図やプログラムで、CADに電子的に記録されています。起動式は魔法の効果を直接持つものではなく、魔法を発動するための手順や構造を定義しています。
- **CADの役割**: 魔法師から送られた想子（魔力の波動）をCADが受け取り、そのデータに従って起動式を構築し、それを魔法師に返します。これにより、魔法が発動します。

### 起動式の課題

通常、起動式は一度使用されると消去され、同じ魔法を再度使うには再度CADから展開し直す必要があります。これには時間とリソースがかかり、効率が悪くなります。

### ループ・キャスト・システムの具体例

以下に、ループ・キャスト・システムの具体的な動作を示します。

```python
import matplotlib.pyplot as plt

class LoopCastSystem:
    def __init__(self, activation_sequence, max_casts):
        self.activation_sequence = activation_sequence  # 起動式を保存
        self.max_casts = max_casts  # 最大キャスト数を設定
        self.current_casts = 0  # 現在のキャスト数を初期化
        self.cast_history = []  # キャスト履歴を保存

    def cast_spell(self, variables=None):
        if self.current_casts < self.max_casts:  # 現在のキャスト数が最大キャスト数未満なら
            self.current_casts += 1  # キャスト数を増加
            if variables:
                # 変数がある場合、起動式に変数を埋め込む
                spell = self.activation_sequence.format(**variables)
            else:
                # 変数がない場合、起動式をそのまま使用
                spell = self.activation_sequence
            print(f"Cast {self.current_casts}: {spell}")
            self.cast_history.append((self.current_casts, variables))
        else:
            # 最大キャスト数に達した場合、メッセージを表示
            print("Cannot cast anymore. Maximum casts reached.")

    def plot_casts(self):
        attempts, values = zip(*self.cast_history)
        plt.plot(attempts, [v['power'] for v in values], marker='o', label='Power')
        plt.plot(attempts, [v['speed'] for v in values], marker='o', label='Speed')
        plt.title('Loop Cast System Usage')
        plt.xlabel('Attempt Number')
        plt.ylabel('Value')
        plt.legend()
        plt.grid(True)
        plt.show()

# 起動式の例
activation_sequence = "Fireball power={power}, speed={speed}"
max_casts = 5

# ループ・キャスト・システムのインスタンスを作成
loop_cast_system = LoopCastSystem(activation_sequence, max_casts)

# 魔法を連続して発動
loop_cast_system.cast_spell(variables={"power": 10, "speed": 5})
loop_cast_system.cast_spell(variables={"power": 12, "speed": 6})
loop_cast_system.cast_spell(variables={"power": 15, "speed": 7})
loop_cast_system.cast_spell(variables={"power": 18, "speed": 8})
loop_cast_system.cast_spell(variables={"power": 20, "speed": 10})

# もう一度キャストしようとすると制限に引っかかる
loop_cast_system.cast_spell(variables={"power": 22, "speed": 12})

# キャスト履歴をプロット
loop_cast_system.plot_casts()
```

### プログラムの解説

- **起動式の設定**: "Fireball power={power}, speed={speed}" という魔法の設計図を設定します。これは起動式で、変数項目（`power`と`speed`）が含まれています。
- **最大キャスト数**: 一度に最大5回まで魔法を発動できるようにします。この制限は`max_casts`で設定します。
- **魔法の発動**: `cast_spell`メソッドを呼び出すことで、同じ魔法を異なる変数（`power`と`speed`）で5回連続して発動します。例えば、1回目は`power=10`、`speed=5`、2回目は`power=12`、`speed=6`といった具合です。
- **可視化**: `plot_casts`メソッドを使って、発動した魔法のパラメータ（`power`と`speed`）をグラフとして表示します。これにより、どのようにして同じ起動式を使いながら異なる魔法を発動できるかを視覚的に理解できます。

このプログラムを通じて、ループ・キャスト・システムの仕組みがいかに効率的に同じ魔法を繰り返し発動できるかをシミュレートできます。また、キャスト数が最大に達した後は、新たな魔法を発動できないことも確認できます。

---

これで、「魔法科高校の劣等生」の用語と説明、およびその動作を模倣したPythonコードのまとめが完了です。ループ・キャスト・システムの仕組みとその利点、制約について詳しく説明し、具体的なPythonコードを使ってシステムの動作をシミュレートしました。

### 以下個人的な感想
元々「魔法科高校の劣等生」の中の世界で魔法を「CAD」で実行したあと魔法式が消される、つまり、RAMのような機能ですよね。それで「トーラス・シルバー（司波達也）」がこのシステムを構築しました。
多分似たようなシステムは現実世界で色んな場所に存在していると思います。
最後まで読んでくれてありがとうございます。多分魔法科系列続くかもしれませんwww