基本的なアイデア

import random

# 登場キャラ例
characters = [
    {"name": "のび太", "self_involvement": 95, "iwakan": 90, "gimonbukasa": 0.1},
    {"name": "スネ夫", "self_involvement": 70, "iwakan": 90, "gimonbukasa": 0.6},
    {"name": "しずか", "self_involvement": 40, "iwakan": 90, "gimonbukasa": 0.3},
    {"name": "ジャイアン", "self_involvement": 85, "iwakan": 90, "gimonbukasa": 0.2},
    {"name": "先生", "self_involvement": 20, "iwakan": 90, "gimonbukasa": 0.8},
]

class PortableDiet:
    def __init__(self):
        self.laws = []
        self.is_alive = True
        self.law_submit_count = 0  # 短期間で暴走対策

    def submit(self, proposal):
        if not self.is_alive:
            print("システムは故障中。")
            return
        self.law_submit_count += 1
        # スパム判定(キーワード判定&提出しすぎチェック)
        spam_keywords = ["世界を滅ぼす", "無限", "奴隷", "政府転覆"]
        if any(word in proposal for word in spam_keywords):
            print(f"やばい法案『{proposal}』検出→自己防衛システム発動→爆発!")
            self.is_alive = False
            return
        if self.law_submit_count > 20:  # 連投しすぎ
            print("法案を出しすぎたためシステムがパンクして爆発!")
            self.is_alive = False
            return
        self.laws.append(proposal)
        print(f"法案『{proposal}』が可決されました!")

# 違和感は毎日減少
def day_passes(characters):
    for char in characters:
        if char["iwakan"] > 0:
            char["iwakan"] -= char["gimonbukasa"]
            

def law_effect(characters, law_title):
    print(f"\\n=== 法律: {law_title} ===")
    for char in characters:
        if char["self_involvement"] > char["iwakan"]:
            print(f"{char['name']}:違和感はあるけど、得なので行動する!")
        else:
            print(f"{char['name']}:少し変だけど…まぁ、そういうものかなぁ…(違和感は残る)")

# シミュレーション開始
diet = PortableDiet()

laws = [
    "毎日アイスを食べてもいい法律",
    "月曜日はすべて祝日になる法律",
    "政府転覆を認める法律",  # ←これで壊れる
]

for day, law in enumerate(laws, start=1):
    print(f"\\n---- {day}日目 ----")
    diet.submit(law)
    if not diet.is_alive:
        print("以降、法案提出不可")
        break
    law_effect(characters, law)
    day_passes(characters)  # 違和感を日ごとに減少

# 経過後のキャラ状態
print("\\n--- 日数経過後のキャラ ---")
for char in characters:
    print(f"{char['name']}|自己関与度: {char['self_involvement']}|違和感: {char['iwakan']}")

#ナイーブベイズを使って、それぞれのキャラクターの自己関与度を計算する
keywords = {
    "のび太": ["休み", "サボり", "昼寝", "ゲーム", "楽"],
    "しずか": ["お風呂", "バスタイム", "清潔", "ピアノ"],
    "スネ夫": ["お金", "セレブ", "新製品", "限定", "高級"],
    "ジャイアン": ["歌", "コンサート", "肉", "強い", "リーダー"],
}

def naive_bayes_self_involvement(law, char_name):
    score = 0
    for word in keywords[char_name]:
        if word in law:
            score += 1  # 単純計数(実際はもっと重みづけ可)
    return min(100, score * 30)  # 最高100まで

# 法案例
law = "明日は全員休みで昼寝してもいい法律"
for char in keywords:
    involvement = naive_bayes_self_involvement(law, char)
    print(f"{char}の自己関与度:{involvement}")