# -*- coding: utf-8 -*-
# 台本「ロボットの頭脳は、脳のように分かれるのか」— 考察回「壁打ちの型」の1本目（もとは LOG424）
#   2026-11-02 1版。型と絵の決まり: 動画/_ネタ帳/考察回_壁打ちの型/（台本たたき・絵コンテ・動きの試し）
#   2026-11-02 3版: エイイチの指摘「話題が唐突に始まる所がある」「引退にツッコミを」で、つなぎの5文を足し2文を言い換えた（引退のツッコミ・マスクの前・工夫の前・小脳の4倍・失敗の前・記録といえば・まとめの前）
#   2026-11-02 2版: 別のエージェントの照合（直す5・整える12）で直した（マスクは Freda への返事ではない・18.6秒・見立ての言い方・反射・海馬・概要欄の出どころ）
#   書き写した元: 動画/ハコブくんの声と絵/narration.py（形・読みの直し・自己紹介とアウトロの定型・EI_LINES）
#   エイイチのセリフ: LOG424 の本人の言葉を話し言葉に整えたもの。相づち（短い反応）は Claude の案で、エイイチが「これで先に進めて」と了承（2026-11-02）
#     本人: hook_ei・retire_ei・ei_more・faster_ei・brain_ei・fail_ei（2つ）・web_ei・log_ei（2つ）・hippo_ei
#     相づち: musk_ei（話がでかい）・think_ei（遅っ）・detail_ei（細かいのは記事に）・reflex_ei・cerebellum_ei・end_ei
#   出典（台本の中の事実）:
#     - 0.05秒・18秒・11〜19秒・使い方が3つ: NVIDIA「Astranomy」（2026-10-14）の π0.5 46.96ミリ秒・Direct 18.56秒／Agentic 13.37秒／Orchestrated 11.50秒
#     - 370回ほど: 18.6秒 ÷ 0.05秒＝372（画面の数え上げは 18.6 で止める。待ちの実時間は短いので「大きなAIなら、ここで」と言う）
#     - ブロックを器に入れた: Robonomics「Robotics' New Era After Astra」（RoboCurve の実験・20回中19回）
#     - 深宇宙: Elon Musk の X の投稿（2026-10-27 日本時間）の "~100% of SI will be deep space compute. Obviously." を訳した
#     - 画面写真7枚: この会話の最初に届いた画面写真の枚数（時刻は言わない・エイイチの指示 2026-11-02）
#     - 小脳の神経細胞が大脳の表面（大脳皮質）の約4倍: Herculano-Houzel（MIRI のインタビュー「about 4 neurons in the cerebellum to every neuron in the cerebral cortex」）
#     - 424番: LOG424（この考察回のもとの記事）
# 話すのはハコブくん。エイイチの文は EI_LINES（槙原の声）
#
# 各要素: (場面の名前, 表情, 字幕の文, 後ろの間[秒])  間を省略すると 0.35 秒
FACES = ("base", "smile", "surprise", "doubt", "think", "trouble", "joy", "wink")

SEGS = [
 # 0 つかみ（問いの縦書き）
 ("hook_num", "base", "0.05秒と、18.6秒。"),
 ("hook_num", "base", "どちらも、ロボットを動かすAIが、1回考えるのにかかる時間です。"),
 ("hook_num", "base", "速いほうは、ロボット専用のAI。遅いほうは、OpenAI の、何にでも使える大きなAIです。", 0.8),
 ("hook_ei", "base", "LLMは反応が遅いんだよ。テキストで返すならいいけど、動くものには、そのままじゃ使えない。", 0.6),
 ("hook_ei", "trouble", "……すみません。僕の頭も、そっち側です。", 1.2),
 ("hook_q", "base", "今日は、答えを伝える回ではありません。エイイチが考えている途中を、そのまま見せます。", 1.8),
 # 1 自己紹介
 ("title", "smile", "Pixels to Motors。案内役のハコブくんです。"),
 ("title", "base", "この番組では、フィジカルAIのニュースや実機の記録から、現場で使える形を考えます。", 1.2),
 ("title_eiichi", "base", "エイイチは、本業のデザイナーをしながら、ロボティクスの研究と開発をしています。｜その中で分かったことと、そこから考えた見立てを、ハコブくんがお伝えします。", 1.2),
 ("title_kabe", "smile", "今回は、エイイチの壁打ちに、ハコブくんが付き合います。", 1.8),
 # 2 持ち込み
 ("bring", "base", "夜、エイイチから、画面写真が7枚届きました。"),
 ("bring", "base", "海外の投資家の書き込みでした。一言でいうと、ロボット専用の大きな頭脳は、いらなくなるかもしれない、という話です。"),
 ("bring", "surprise", "何にでも使える大きなAIが、ロボット用の追加の練習なしで、ブロックを器に入れられたそうです。", 1.0),
 ("retire", "joy", "ということは、エイイチの研究室の π0.5 は……引退ですね。お疲れさまでした。", 1.2),
 ("retire_ei", "surprise", "勝手に引退させないで。", 0.5),
 ("retire_ei", "base", "汎用モデルも、使い所次第。組み合わせになると思う。", 0.8),
 ("musk", "base", "ただ、頭脳の話を、もっと大きくする人もいます。", 0.5),
 ("musk", "base", "この話の少し前に、イーロン・マスクさんも、別の投稿でこう言っていました。"),
 ("musk", "surprise", "超知能の、ほぼ100%は、深宇宙で計算される。明らかに。", 1.0),
 ("musk_ei", "base", "話がでかい。", 0.6),
 ("musk", "smile", "宇宙は、今日は置いておきます。", 1.8),
 # 3 やり取り1：遅い頭（考え中の数え上げ）
 ("think", "think", "では、なぜ組み合わせになるのか。……", 4.0),
 ("think", "smile", "お待たせしました。", 0.5),
 ("think_ei", "base", "遅っ。", 0.6),
 ("think", "trouble", "大きなAIなら、ここで18.6秒かかります。ロボットを動かすとき、1回考えるのに、だいたいこのくらいです。", 0.8),
 ("cup", "base", "その間に π0.5 は、動きを370回ほど直せます。"),
 ("cup", "trouble", "コップが手から滑り始めても、僕が考え終わるころには、床で割れています。", 1.0),
 ("detail", "base", "ちなみにこの時間は、使い方が3つあって、それによって11秒から19秒まで幅があって……"),
 ("detail_ei", "base", "細かいのは、記事に書いといて。", 0.5),
 ("detail", "wink", "もう書いてあります。", 1.2),
 ("more", "base", "つまり、大きなAIだけでは、ロボットは間に合いません。", 0.5),
 ("more_ei", "base", "もっと工夫が必要だよね。", 0.6),
 ("faster", "joy", "大丈夫です。AIは毎年賢くなっているので、そのうち速くなります。"),
 ("faster_ei", "base", "LLMの進化で、反応の速さは上がらないんじゃないかな。", 0.6),
 ("faster", "doubt", "考えてみました。……半分、おっしゃる通りだと思います。", 0.8),
 ("faster", "base", "大きなAIは、賢くなるほど体が大きくなって、答える前に考える時間も、長くなる方向に進んでいる、と僕は見ています。速くなるのは、主に小さくした版のほうです。", 1.8),
 # 4 山場：脳のたとえ（転換点）
 ("split", "base", "だから、分けるしかありません。遅く考える頭と、速く直す手。", 0.8),
 ("brain_ei", "base", "人も、小脳と大脳で役割が分かれてるし、それと同じことなんじゃないかな。", 1.5),
 ("brain", "joy", "……それです。", 1.0),
 ("brain", "base", "大脳は、考えて決める所。小脳は、練習で覚えた動きを合わせる所。"),
 ("brain", "base", "そして脊髄の反射は、脳を通らずに、体を動かします。", 0.8),
 ("reflex", "smile", "ちょっと実演します。", 1.2),
 ("reflex", "surprise", "今のは、考える前に動きました。これが反射です。", 0.6),
 ("reflex_ei", "base", "ロボットにも、反射ってあるの？", 0.5),
 ("reflex", "smile", "あります。ぶつかりそうになったら止まる仕組みです。", 1.0),
 ("cerebellum", "surprise", "もう1つ、人の脳の話です。小脳には、考える大脳の表面の、4倍ほどの神経細胞があるそうです。"),
 ("cerebellum", "base", "動きを合わせる所に、こんなに多くの神経細胞が使われているんです。", 0.6),
 ("cerebellum_ei", "base", "頭より、体のほうが忙しいんだ。", 0.5),
 ("cerebellum", "wink", "はい。僕も、運ぶほうが忙しいです。", 1.8),
 # 5 やり取り2：失敗の手直し
 ("fail_q", "think", "では、その忙しい小脳は、どうやって育つのでしょう。", 0.6),
 ("fail_ei", "base", "失敗を手直しするデータの積み重ねって、思ってる以上に大事なんじゃないか。", 0.8),
 ("fail", "base", "人は自転車で、転びかけて持ち直すのをくり返して、考えずに乗れるようになります。", 0.6),
 ("fail", "joy", "では僕も、小脳を鍛えるために、今夜から毎晩転びます。", 1.2),
 ("fail_ei2", "base", "失敗だけ覚えちゃって、良くないね。", 0.6),
 ("fail", "trouble", "……それは困ります。", 1.0),
 ("three", "base", "なので、記録を3つの時点で切ります。失敗した瞬間、手直しを始めた瞬間、戻った瞬間です。"),
 ("three", "base", "失敗の区間は、学ばせない。手直しの区間を、重く学ばせる。何度も失敗する場所には、きれいなお手本を足す。", 0.8),
 ("web", "think", "インターネットの動画には、持ち直す場面が、ほとんど写っていません。何にでも使える大きなAIに、いちばん足りないのは、ここだと思います。", 0.6),
 ("web_ei", "base", "これ、今おれがやってるね。", 1.8),
 # 6 やり取り3：記憶の整理
 ("log", "doubt", "記録といえば、エイイチは、記事を全部、全文で残しています。番号は、424番まで来ています。……捨てられない人ですか？", 0.6),
 ("log_ei", "base", "LOGは、全部の積み重ね。基幹情報なんだよ。", 0.4),
 ("log_ei", "base", "情報がたくさんあるだけじゃ、言葉や動きは良くならない。", 0.8),
 ("hippo", "surprise", "脳も同じです。その日の出来事は、いったん海馬に残って、眠っている間に、大事なものが、大脳の表面へ移っていきます。"),
 ("hippo", "base", "記事の全文が海馬。整理した記事が、大脳です。", 0.6),
 ("hippo_ei", "base", "残す基準は、まだまだこれからだね。", 0.5),
 ("hippo", "smile", "では僕は、残した理由を、一言ずつ書いておきます。", 1.8),
 # 7 まとめ（ボードが表になる）
 ("sum", "smile", "ここまでを、1枚にまとめます。", 0.5),
 ("sum", "base", "遅く考える頭と、速く直す手。速い手を育てるのは、失敗を手直しした記録です。", 0.8),
 ("sum", "wink", "ちなみに、ボツになった3つは、全部僕が言ったことです。", 1.8),
 # 8 残った問い
 ("rest", "base", "答えは、まだ出ていません。手直しの区間を分けて学ばせたら、戻れる率はどれだけ変わるか。続きは、机の上の実験で確かめます。"),
 ("rest", "base", "このノートの全文は、サイトの記事にあります。数字の出どころは、概要欄に置いてあります。", 0.8),
 ("ask", "base", "あなたの現場では、失敗の記録は、どこに残っていますか。", 1.0),
 ("end_ei", "base", "今の返事、速かったね。", 0.5),
 ("end", "joy", "小脳で答えました。", 1.8),
 # 9 アウトロ
 ("outro", "smile", "この動画が役に立ったら、高評価とチャンネル登録をお願いします。"),
 ("outro", "base", "ロボットの開発や導入の相談は、概要欄の連絡先から、エイイチに直接どうぞ。"),
 ("outro", "wink", "コメントは、エイイチが全部読んでいます。それではまた。", 1.8),
]

# エイイチの声で読む文（槙原の声を流用・video_rules.md 1-4）。場面の名前が _ei で終わるか、_ei2
EI_LINES = [i for i, seg in enumerate(SEGS) if seg[0].endswith(("_ei", "_ei2")) and not seg[2].startswith("……すみません")]

# 「エイイチ」を残す文（自己紹介・アウトロのほかに名前が要る文）。文の頭で探す（video_rules.md 3-1）
NAME_OK = [i + 1 for i, seg in enumerate(SEGS) if seg[2].startswith((
    "今日は、答えを伝える回では", "今回は、エイイチの壁打ちに", "夜、エイイチから",
    "ということは、エイイチの研究室", "記録といえば、エイイチは"))]

READ = [
 ("Pixels to Motors", "ピクセルズ トゥー モーターズ"), ("OpenAI", "オープンエーアイ"), ("LLM", "エルエルエム"), ("LOG", "ログ"),
 ("π0.5", "パイレイテンゴ"), ("フィジカルAI", "フィジカルエーアイ"), ("AI", "エーアイ"), ("100%", "ひゃくパーセント"),
 ("1回", "いっかい"), ("3つ", "みっつ"), ("4倍", "よんばい"),
 ("栄一", "えいいち"), ("「", ""), ("」", ""), ("｜", ""), ("…", ""),
]

ELEVEN_READ = [
    ('エイイチ', '栄一'),   # video_rules.md 3-1
    ('OpenAI', 'オープンエーアイ'),
    ('π0.5', 'パイレイテンゴ'),   # KDDIの300億円 と同じ
    ('LLM', 'エルエルエム'),
    ('LOG', 'ログ'),
    ('物差し', 'ものさし'), ('人型', 'ひとがた'),
    # この回で先回りして足す読み（全文を聞いて確かめる）
    ('0.05秒', 'れいてんれいごびょう'),
    ('18.6秒', 'じゅうはちてんろくびょう'),
    ('424番', 'よんひゃくにじゅうよんばん'),
    ('脊髄', 'せきずい'),
    ('小脳', 'しょうのう'), ('大脳', 'だいのう'),
    ('基幹情報', 'きかんじょうほう'),
    ('使い所', 'つかいどころ'),
    ('遅っ', 'おそっ'),
]

OVERRIDE = {}

def reading(t):
    t = OVERRIDE.get(t, t)
    for a, b in READ:
        t = t.replace(a, b)
    return t


def parse(seg):
    """1行を (場面, 表情, 字幕, 間) にそろえる"""
    if len(seg) >= 3 and seg[1] in FACES:
        scene, face, text = seg[0], seg[1], seg[2]
        pause = seg[3] if len(seg) > 3 else 0.35
    else:
        scene, face, text = seg[0], "base", seg[1]
        pause = seg[2] if len(seg) > 2 else 0.35
    return scene, face, text, pause
