基本的なアイデア
- 法案が提出されたら、law_submit_countを1足す
- 社会に危険を与えかねないものや、社会秩序を乱すものが提出されたら、自己防衛システムが発動し、爆発する。
- 法案を出し過ぎたら、自己防衛システムが発動し、爆発する。
- それぞれのキャラの自己関与度(の値)と違和感(の値)を定義しておく。
- 自己関与度が、違和感を上回れば、「違和感があっても行動する」。その逆は、「少し変だけど…まぁ、そういうものかなぁ…(違和感は残る)」
- ナイーブベイズを使って、各キャラにとっての自己関与度を計算する。
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}")