初日占い文を作ってみる。 -位置情報の自動生成-
はじめに
12A猫の初日の占い文は、参加者の方の個性があって面白いですよね。
12A猫とは違って、狐入りの村の初日の占い文は、真偽判定に使われることが多いですね。EXCELやプログラミング言語で占い文の自動生成をされている方は結構いらっしゃるみたいです。 最近、面白い自動生成を見せていただきました。
作成された方に聞いた所、JAVAで作成されたようです。 このエントリでは、るる鯖のゲームシステムに適合するように、 初日の占い文の生成をpythonを使ってやってみたいと思います。
目的
初日占い文を python + lxml で作成する。
運用手法
- .html ファイルを保存
- .html ファイルを読み込み、占い文を .txt に保存する
- .txt の中から、Copy & Pasteで対象の人の占い文を貼付ける
道具
機能
- 自分の名前を自動抽出
- 他プレイヤーの名前を自動抽出
- 位置情報自動出力
ソースコード
とりあえず、最低限のものを作ろうとしたら以下のようなソースコードでしょうか。
import os import sys import re import math import codecs from operator import sub, add, mul import lxml.html def get_myname(root): """ Return my name. """ nodes = root.xpath('//td[@class="occupation"]//span[@class="name"][position()=1]') assert len(nodes) == 1 node = nodes[0] return node.text def get_position_map(root): """ Return the position map: position -> name. " position: 2D tuple. " name: participant's name. " " Left upper is (0, 0), and the format is (vertical_index, horizontal_index). """ table_nodes = root.xpath('//table[@class="iconsmall"]') assert len(table_nodes) == 1 table_node = table_nodes[0] name_nodes = table_node.xpath('//td[@class="name"]') position_map = dict() for index, name_node in enumerate(name_nodes): horizontal_index = index // 2 vertical_index = index % 2 position_map[(horizontal_index, vertical_index)] = name_node.text_content() return position_map def create_document(myname, target_name, position_map): """ Create the sentence of foreseener. " @param str myname: your name. " @param str target_name : the target of foreseeing. " @param dict position_map : position -> name. """ def create_header(target_name): return "占いCO {name} ○".format(name=target_name) def create_greeting(myname): return "占い師の{name}です。".format(name=myname) def explain_act(target_name): return "初日なので適当に{name}を占います。".format(name=target_name) def explain_result(target_name): return "結果は○。{name}は人狼ではありませんでした。".format(name=target_name) def explain_closing(my_name, target_name): return "{target_name}...溶けましたね。".format(target_name=target_name) def create_position_information(myname, target_name, name_to_pos): _basis_map = {(1, 0): "下", (-1, 0): "上", (0, 1):"右", (0, -1):"左"} def _calc_dot(vec1, vec2): assert len(vec1) == len(vec2) dot = sum(map(mul, vec1, vec2)) return dot def _dist(vector1, vector2): diff_vec = list(map(sub, vector1, vector2)) norm1 = sum(map(abs, diff_vec)) angle = math.atan2(diff_vec[1], diff_vec[0]) return (norm1, angle) def _convert_to_string(target_name, diff_vector, basis_map): def get_vector_array(vector, ref_vectors): square_norm2 = sum(map(mul, vector, vector)) if square_norm2 < 1: return [] result = list() best_basis = max(ref_vectors, key=lambda ref_vec: _calc_dot(ref_vec, vector)) square_norm_best_basis = sum(map(mul, best_basis, best_basis)) best_coef = _calc_dot(vector, best_basis) / square_norm_best_basis best_pair = (best_basis, best_coef) best_vector = list(map(lambda elem: best_coef * elem, best_basis)) residual = list(map(sub, vector, best_vector)) return [best_pair] + get_vector_array(residual, ref_vectors) def to_position_string(vector_arrays, vector_map): position_str = "" pair_list = sorted(vector_arrays, key=lambda pair: pair[1]) string_list = ["{char}に{number}つ".format(char=vector_map[pair[0]],number=int(pair[1])) for pair in pair_list] position_str = "、".join(string_list) position_str += "移動した位置" return position_str ref_basis = list(basis_map.keys()) pairs = get_vector_array(diff_vector, ref_basis) position_str = to_position_string(pairs, basis_map) return "{name}から、{p_str}。".format(name=target_name , p_str=position_str) text_lines = list() text_lines.append("○結果なので位置情報を書きます。\n") text_lines.append("{target_name}の位置は、".format(target_name=target_name)) name_to_pos = {value:key for key, value in position_map.items()} target_pos = name_to_pos[target_name] position_list = sorted(position_map.keys(), key=lambda pos: _dist(pos, target_pos)) for position in position_list: name = position_map[position] diff_vector = list(map(sub, target_pos, position)) if name != target_name and name != "第一犠牲者": text_lines.append(_convert_to_string(name, diff_vector, _basis_map)) return "\n".join(text_lines) lines = list() name_to_pos = {value:key for key, value in position_map.items()} target_pos = name_to_pos[target_name] lines.append(create_header(target_name)) lines.append(create_greeting(myname)) lines.append(explain_act(target_name)) lines.append(explain_result(target_name)) lines.append(create_position_information(myname, target_name, name_to_pos)) lines.append(explain_closing(myname, target_name)) lines = [line + '\n' for line in lines] return lines def execute(input_file_name, output_file_name): """ Created documents from input_file_name and output. "@param str input_file_name: the path to .html file. "@param str output_file_name: the path to output_file. """ # Acquire the information by interpreting .html file. html = codecs.open(input_file_name, 'r','utf-8').read() root = lxml.html.fromstring(html) myname = get_myname(root) position_map = get_position_map(root) # Create documents for each player other than myself and the first victim. output_lines = list() pos_list = sorted(position_map.keys()) for pos in pos_list: name = position_map[pos] if name == myname or name == "第一犠牲者": continue output_lines += create_document(myname, name, position_map) output_lines += ["\n\n"] with open(output_file_name, "wt") as fp: fp.writelines(output_lines) if __name__ == "__main__": input_file_name = "./test.html" # This is the path for saving html. output_file_name = "./output.txt" execute(input_file_name, output_file_name)
使用例
上記のような.htmlファイルを保存して、 input_file_name に指定して、 プログラムを実行します。
占いCO アイドルアトリ ○
占い師の境界人レヴァティです。
初日なので適当にアイドルアトリを占います。
結果は○。アイドルアトリは人狼ではありませんでした。
○結果なので位置情報を書きます。
アイドルアトリの位置は、
東天青騎士ゲオルグから、上に1つ移動した位置。
人形アケミから、左に1つ移動した位置。
エニサーモンから、上に2つ移動した位置。
ジュリエッタから、左に1つ、上に1つ移動した位置。
新米ワカバから、上に3つ移動した位置。
境界人レヴァティから、左に1つ、上に2つ移動した位置。
留守番シィから、上に4つ移動した位置。
夢遊病フェネから、上に5つ移動した位置。
漫画家ミモザから、左に1つ、上に4つ移動した位置。 魔女マーヤから、左に1つ、上に5つ移動した位置。
アイドルアトリ…溶けましたね。
占いCO 人形アケミ ○
占い師の境界人レヴァティです。
初日なので適当に人形アケミを占います。
結果は○。人形アケミは人狼ではありませんでした。
○結果なので位置情報を書きます。
人形アケミの位置は、
アイドルアトリから、右に1つ移動した位置。
ジュリエッタから、上に1つ移動した位置。
東天青騎士ゲオルグから、右に1つ、上に1つ移動した位置。
境界人レヴァティから、上に2つ移動した位置。
エニサーモンから、右に1つ、上に2つ移動した位置。
新米ワカバから、右に1つ、上に3つ移動した位置。
漫画家ミモザから、上に4つ移動した位置。
留守番シィから、右に1つ、上に4つ移動した位置。
魔女マーヤから、上に5つ移動した位置。
夢遊病フェネから、右に1つ、上に5つ移動した位置。
人形アケミ…溶けましたね。
注意
- ブラウザによって、保存内容 / 形式が異なります。
ブラウザによって、 参加者の情報や自分の情報を.htmlファイルを保存することができるか が異なるみたいです。 自分はGoogle Chromeを使って、保存を行いました。
ソースコードは utf8形式での保存が必要だと思います。
lxml をインストールしないと上記のスクリプトは作動しません。
- 基本的には pip install lxml ただ環境によっては駄目かも…
いいソースコードとは思えないけれど、許してください。
さて、今回の生成文はいかにも「自動生成しました!」という感じが
出ていますね。これを改造すると、それなりに人間が書いたような文章に近づけることができると思っています。
ちょっと考えてみたいなー と思っています。
4人/狂人残り。確定○の数と村陣営の勝率について -単調性が崩れる時-
「Q. 確定○がいない方が村有利になる状況を提示してください。」
この問題の回答は簡単ですね。3人残りの狼村狂の時、村人が確定○であれば、 狼陣営側は確実にPPを決めることができます。
逆に確定○がいなければ、村人陣営側は、狼騙りで勝負をすることができます。
このように吊り数よりも狼陣営の数が多くなると、確定○が少ない方が村人陣営にとって有利になることがあります。 その時、確定○の数と村人の勝率の関係について単調性がない場合があります。
今回は以下の設定で、確定○と村人の勝率との関係についてみます。
問題設定
- 昼: 狐無し4人残り村、確定狂人が1人生存している。狼狂村村。
- 再投票引き分けは無し。票数が同数の場合は、ランダムに同票の人が吊られる。
- 狼が確定した時、狼と狂人は票を合わせることができる。村人は狼に確率1で投票することができる。
- 以上の仮定の下、シンプルな確率論(Xグレーから狼に投票できる(またはしてしまう)確率は1/Xとする)に従って、狼が吊れる確率を算出する。
結果
狼が吊れる確率は、狂人以外の確定○の数によって、以下のようになる。
- 確定○0: 1 / 3
- 確定○1: 1 / 4
- 確定○2: 1 / 2
確定○が0人の時は1/3。 1人増えると1/4。しかし、もう1人確定○が増えると1/2に村の勝率が上がる。
現実の村への示唆
4人狂生存を考慮しなければいけない状況では「最善の行動」が極めて難しいことを示唆しています。
「確定○のように振る舞う村人が1人いるが、その村人にとって、狼を当てる2択が難しい」
状況が村人勝率1/4の状況 (確定○1の状況) に近い状況になります。
村人のプレイヤーにとって、操作できるのは自分自身のみであるため、
「あやしい行動をとり、自分自身の狼目を向上させ、確定○0の状況に近づける」
という行動が村視点の利益になると、上記の結果から正当化できることを示唆します。
様々な仮定の前提の下で「一見利敵行為になる行動が、村の勝率向上に寄与すると正当化できる」一例となっています。
「良い」/「悪い」の行動について、単調性が保持されない状況では、最適解を目指すプレイヤーに求められる情報処理能力/判断能力が高くなるということでしょう。
計算結果の詳細
確定○2 の時
狼は確定。確定○に2票/狼に2票で、ランダムでどちらが吊れるか。村人勝率1/2。
確定○1 の時
狼 / 狂の票が、確定○1に2票。確定○1の票が
1. 狼を当てることができれば、 村人勝率 1/2。
2. 狼を当てることができなければ、狼勝利。
ということで、まとめて 村人勝率 1/4。
確定○0 の時
少しややこしい。 狂人は3グレーの誰かに投票する。狼/村人は自分以外のグレーに投票する。
得票数が 3-1-0-0のパターン 1 / 4
- 狼が吊れる確率 1/12
得票数が 2-2-0-0のパターン 1 / 4
- 村2票 - 狼2票 の確率 2/12。 狼が吊れる確率 1/12。
得票数が 2-1-1-0のパターン 1 / 2
- 狼が2票の確率 1/6
1-3より。 狼が吊れる確率 1/3。
(計算間違っていたらごめんなさい…)
Memoir -Sillteの世界-Chapter2-2 投票して、占って、護衛して。
サマリー
- Sillteさんが最も投票した人は「goburei」さん。(20回)
- Sillteさんに最も投票した人は「ハルク」さん。(23回)
- Sillteさんが最も占った人は「ルール」さん。(3回)
- Sillteさんを最も占った人は「goburei」さん。(4回)
- Sillteさんが最も護衛した人は「ふじた」さん。(4回)
- Sillteさんが護衛した回数は31回 。護衛成功回数は3回。
- Sillteさんを最も護衛した人は「t.n」さん, 「人狼」さん, 「モトラド」さん。(4回)
- Sillteさんが護衛された回数は57回 。成功回数は14回。
投票情報@Sillteの世界
Sillteが投票した人
HN#0 | 投票数#0 | HN#1 | 投票数#1 | HN#2 | 投票数#2 |
---|---|---|---|---|---|
goburei | 20 | ウィキッド | 9 | VAPE | 7 |
モトラド | 16 | ひげ男爵 | 8 | うな | 7 |
るなちー | 16 | ふじた | 8 | ととねをぃ | 6 |
ハルク | 15 | ぷと | 7 | 人狼 | 6 |
役職野郎 | 12 | tonnma | 7 | 無鉄砲君 | 6 |
one shot one kill | 12 | zunko | 7 | こころ | 6 |
誉れ | 11 | マークポーク | 7 | sasakama | 6 |
殺意の波動に目覚めたリュウ | 11 | 通行人A(仮) | 7 | 姉ヶ崎 | 5 |
t.n | 10 | いぬ | 7 | ヴァラ | 5 |
nttw | 10 | アポロ | 7 | いつき葉show | 5 |
gobureiに投票した村一覧
「初心者大歓迎12A猫」村, goburei(エイジ):猫又, Sillte(カンザキ):狂人 6回
「初心者大歓迎12A猫」村, goburei(ニコライ):狂人, Sillte(アナスタシア):猫又
「この先生きのこるための12A猫」村, goburei(おにのこ):猫又, Sillte(そらまめ):人狼
「初心者歓迎12A猫」村, goburei(ふくがん):人狼, Sillte(むくろ):猫又
「深夜12A猫」村, goburei(夜重):人狼, Sillte(シャロン):霊能
「深夜の初心者歓迎12A猫」村, goburei(パーヴェル):占い師, Sillte(グレゴリー):人狼 2回
「初心者歓迎12A猫」村, goburei(スコル):村人, Sillte(ゼノン):村人
「初心者歓迎12A猫」村, goburei(イグナチウス):人狼, Sillte(ニコライ):人狼
「初心者歓迎12A猫」村, goburei(トルニー):人狼, Sillte(迷子アヘル):村人
「初心者歓迎12A猫」村, goburei(学生ニーナ):人狼, Sillte(嘘つきメアリー):村人
「※12A 希望あり」村, goburei(ダンテ):狂人, Sillte(フェイト):霊能 4回
Sillteに投票した人
HN#0 | 投票数#0 | HN#1 | 投票数#1 | HN#2 | 投票数#2 |
---|---|---|---|---|---|
ハルク | 23 | ふじた | 9 | ふろー | 6 |
ととねをぃ | 17 | ヴァラ | 8 | 殺意の波動に目覚めたリュウ | 6 |
nttw | 16 | 黄マリン | 8 | ウィキッド | 5 |
モトラド | 15 | アポロ | 8 | りんこ | 5 |
goburei | 13 | 役職野郎 | 7 | はる | 5 |
one shot one kill | 13 | おっさん | 7 | sasakama | 5 |
t.n | 11 | るなちー | 7 | お人形 | 5 |
AKO | 10 | ひげ男爵 | 6 | フナムシ | 5 |
みたらし | 9 | こころ | 6 | kouichi | 5 |
誉れ | 9 | シャドウ | 6 | 抹茶 | 5 |
ハルクが投票した村一覧
「初心者大歓迎12A猫」村, ハルク(ジャック):村人, Sillte(エイミー):猫又
「初心者大歓迎12A猫」村, ハルク(マキ):占い師, Sillte(グンジ):人狼 2回
「初心者大歓迎12A猫」村, ハルク(天狗):人狼, Sillte(ファラオ):人狼
「初心者大歓迎12A猫」村, ハルク(ようせいさん):村人, Sillte(うろこうま):霊能 2回
「初心者歓迎12A猫」村, ハルク(はやて):人狼, Sillte(えがお):人狼
「初心者歓迎12A猫」村, ハルク(キング):村人, Sillte(イル):占い師
「初心者大歓迎12A猫ラスト」村, ハルク(メロン):霊能, Sillte(ペッパー):人狼
「初心者歓迎12A猫」村, ハルク(響子):村人, Sillte(グレイヴ):占い師
「初心者歓迎12A猫」村, ハルク(朱璃):村人, Sillte(稔):人狼 2回
「初心者歓迎12A猫」村, ハルク(くものあし):狩人, Sillte(うまあし):人狼
「初心者歓迎12A猫」村, ハルク(ダディクール):村人, Sillte(妹者):人狼
「初心者歓迎12A猫」村, ハルク(桃):村人, Sillte(ムスリカ):村人
「12A猫」村, ハルク(園児モエミ):村人, Sillte(道化師レミー):狂人
「初心者歓迎-12A猫」村, ハルク(研究者シルビア):人狼, Sillte(性別不明オペラ):村人
「初心者歓迎-12A猫」村, ハルク(軍人ミーシャ):猫又, Sillte(士官ルスラン):霊能 2回
「親子丼GMの12A猫」村, ハルク(クレマチス):占い師, Sillte(リンドウ):人狼
「11A(`・ω・´)」村, ハルク(エレオノーラ):占い師, Sillte(ミハイル):人狼
「12A猫エクストリーム」村, ハルク(クロッカス):人狼, Sillte(スターチス):村人
「予測転換をして誤字を誤字をする」村, ハルク(星拾いネーロ):人狼, Sillte(星追いビアンカ):村人
占い情報@Sillteの世界
Sillteが占った人
HN#0 | 占い数#0 | HN#1 | 占い数#1 | HN#2 | 占い数#2 |
---|---|---|---|---|---|
ルール | 3 | ゆうる | 1 | クマー | 1 |
霊能はCOが9割 | 2 | 誉れ | 1 | poi | 1 |
m_hr | 2 | ダンバン | 1 | マークポーク | 1 |
とうだいもと | 2 | れいん | 1 | Tokugawa | 1 |
bayashi | 1 | ハルク | 1 | のなめ | 1 |
小ライス | 1 | みたらし | 1 | ウラジーミル | 1 |
揚餅(小) | 1 | ありしあ | 1 | 柳沢 | 1 |
しる | 1 | umus | 1 | 暇人 | 1 |
サイモン | 1 | loco | 1 | 戯 | 1 |
無能 | 1 | もも | 1 | 私が狼だと思ったか!馬鹿め、ただの可愛いわんこだ! | 1 |
ルールを占った村一覧
「今宵も楽しく12A猫」村, ルール(天狗):猫又, Sillte(ガキ):占い師
「建てたいから建てた12A猫」村, ルール(サトリ):村人, Sillte(フミノエ):占い師
「初心者歓迎12A猫希望の」村, ルール(ミリィ):猫又, Sillte(ベッティ):占い師
Sillteを占った人
HN#0 | 占い数#0 | HN#1 | 占い数#1 | HN#2 | 占い数#2 |
---|---|---|---|---|---|
goburei | 4 | もりきゅー | 1 | マカ | 1 |
モトラド | 3 | ren | 1 | ごるびー | 1 |
ハルク | 2 | 隊長 | 1 | モール | 1 |
らるすッス | 2 | みたらし | 1 | mimi | 1 |
ふじた | 2 | majan | 1 | 雀 | 1 |
るなちー | 2 | calia | 1 | ゆぴ | 1 |
こころ | 1 | めのう | 1 | 脱ぐぞ | 1 |
役職野郎 | 1 | 人狼 | 1 | リンベル | 1 |
hacchiii | 1 | 赤鯉 | 1 | nttw | 1 |
C7 | 1 | 黒太郎 | 1 | ふく | 1 |
gobureiに占われた村一覧
「深夜の初心者歓迎12A猫」村, goburei(パーヴェル):占い師, Sillte(グレゴリー):人狼
「【酉3↑】12A猫」村, goburei(ヨハナ):占い師, Sillte(ベアトリーチェ):人狼
「12A猫(=^・^=)」村, goburei(フミノエ):占い師, Sillte(パルル):人狼
「♪12A猫」村, goburei(ドラガノフ):占い師, Sillte(ゼノビア):村人
護衛情報@Sillteの世界
Sillteが護衛した人
HN#0 | 護衛数#0 | HN#1 | 護衛数#1 |
---|---|---|---|
ふじた | 4 | ウィキッド | 1 |
すいっちな | 3 | kiyoken | 1 |
kariko | 3 | てんてん | 1 |
yatuha | 2 | 東京湾の黒い弾丸 | 1 |
Nephrite | 2 | Nul | 1 |
鳴海優菜 | 2 | シオン | 1 |
鳥紳士 | 1 | 花鳥風月 | 1 |
ほのぼの | 1 | ざわ | 1 |
赤鯉 | 1 | George | 1 |
御苦労様 | 1 | 枝豆三昧 | 1 |
ふじたを護衛した村一覧
「今宵も初心者歓迎12A猫」村, ふじた(ぬこ次郎):占い師, Sillte(桔梗):狩人 3回
「12A猫むらムラ」村, ふじた(オクタヴィア):村人, Sillte(ヴィリー):狩人
Sillteが護衛を成功させた村一覧
「12A猫」村, Sillte(傭兵ダレン):狩人, ほのぼの(神父ナーシェス):占い師
「めんたるダメーシ」村, Sillte(少女ユーナ):狩人, 鳴海優菜(代打ちラシン):占い師
「にゃんだふる12猫」村, Sillte(ようせいさん):狩人, Nephrite(たうで):村人
護衛成功回数/護衛回数 :3回/31回
Sillteを護衛した人
HN#0 | 護衛数#0 | HN#1 | 護衛数#1 | HN#2 | 護衛数#2 |
---|---|---|---|---|---|
t.n | 4 | zunko | 2 | ハルク | 1 |
人狼 | 4 | 偽りの神に抗え | 2 | 赤鯉 | 1 |
モトラド | 4 | りあす | 2 | jeanne | 1 |
星 | 3 | ふじた | 2 | アポロ | 1 |
オフィーリア | 3 | るなちー | 2 | 由良 | 1 |
リンク | 3 | hyperbola | 2 | yuu | 1 |
役職野郎 | 2 | しらさぎ | 1 | おっさん | 1 |
honoka | 2 | 暇人 | 1 | はる | 1 |
雀 | 2 | 大根おろし醤油 | 1 | nttw | 1 |
ぱぱ | 2 | メラゾーマ | 1 | ぷと | 1 |
t.nが護衛した村一覧
「初心者GMによる12A猫」村, t.n(まんたん):狩人, Sillte(ファラオ):霊能
「この先生きのこるための12A猫」村, t.n(アノニマス):狩人, Sillte(擬人化モララー):人狼
「初心者大歓迎12A猫ラスト」村, t.n(ショコラ):狩人, Sillte(マーシャ):人狼
「初心者歓迎12A猫」村, t.n(おくされ):狩人, Sillte(うるおい):村人
人狼が護衛した村一覧
「初心者歓迎12A猫」村, 人狼(マクシーム):狩人, Sillte(ニコライ):人狼 2回
「11A(`・ω・´)」村, 人狼(ヴァネッサ):狩人, Sillte(防毒フローレンツ):狂人 2回
モトラドが護衛した村一覧
「この先生きのこるための12A猫」村, モトラド(ジャックランタン):狩人, Sillte(ルタバガ):村人 3回
「初心者歓迎12A描」村, モトラド(アスティン):狩人, Sillte(ヴァレリー):人狼
Sillteへの護衛を成功させた村一覧
「11A(`・ω・´)」村, Sillte(防毒フローレンツ):狂人, 人狼(ヴァネッサ):狩人
「昼下がりの12A猫」村, Sillte(エレア):占い師, kari(リュミエール):人狼
「初心者歓迎系12A猫 」村, Sillte(金魚草):村人, しらさぎ(クレマチス):狩人
「初心者歓迎12A猫」村, Sillte(うるおい):村人, t.n(おくされ):狩人
「初心者大歓迎12A猫ラスト」村, Sillte(キリカ):霊能, 星(フクトミ):狩人
「12A猫」村, Sillte(サムス):霊能, honoka(サイフェス):狩人
「この先生きのこるための12A猫」村, Sillte(ルタバガ):村人, モトラド(ジャックランタン):狩人
「初心者歓迎12A猫始まりの」村, Sillte(刑事アナスタシア):霊能, 雀(殺人鬼コーヴィヤ):狩人
「(σ・∀・)σ12A猫」村, Sillte(眼鏡好きルージュ):村人, 大根おろし醤油(聖女シオン):狩人
「この先生きのこるための12A猫」村, Sillte(むくろ):村人, おっさん(ふくがん):狩人
「お気楽のんびり12A猫」村, Sillte(学生ヒナタ):霊能, リンク(用心棒ニーチェ):狩人
「初心者歓迎ー12A猫」村, Sillte(倉庫番カルドナ):占い師, ぱぱ(生存者スー):狩人
「初心者GMの12A猫初心者歓迎」村, Sillte(えがお):占い師, nttw(おくされ):狩人
「初心者歓迎12A猫」村, Sillte(むくろ):村人, メラゾーマ(からくり):狩人
被護衛成功回数/被護衛回数 :14回/57回
Memoir -Sillteの世界-Chapter2-1 生まれて、噛んで、噛まれて、死んで。
サマリー
- Sillteさんが最も使用したランダムCNの種類は花畑。 (43村)
- Sillteさんが最も使用したCNはスノーフレーク。(5村) (HNは除く)
- Sillteさんが最も噛んだ人は「シャドウ」さん。(3回)
- Sillteさんを最も噛んだ人は「役職野郎」さん, 「ハルク」さん, 「goburei」さん。(3回)
- Sillteさんと狼陣営で仲間になった村が最も多い人は「ハルク」さん。(6村)
Sillteの生まれた世界
# | 村人 | 共有 | 霊能 | 占い師 | 狩人 | 猫又 | 狂人 | 人狼 | 妖狐 |
---|---|---|---|---|---|---|---|---|---|
花畑 | 16 | 1 | 4 | 5 | 3 | 2 | 2 | 9 | 1 |
トロイカ | 16 | 0 | 1 | 1 | 0 | 1 | 1 | 6 | 1 |
壱番街 | 8 | 1 | 3 | 2 | 2 | 2 | 1 | 4 | 0 |
Cathedral | 8 | 1 | 6 | 1 | 1 | 2 | 2 | 1 | 0 |
shirone | 7 | 1 | 3 | 1 | 0 | 0 | 1 | 3 | 0 |
AAイラスト | 3 | 0 | 3 | 0 | 0 | 1 | 1 | 7 | 0 |
ジランドール | 9 | 1 | 1 | 0 | 1 | 0 | 1 | 2 | 0 |
azuma | 4 | 1 | 1 | 2 | 1 | 1 | 0 | 4 | 1 |
あひる小屋 | 2 | 0 | 3 | 1 | 0 | 4 | 0 | 4 | 0 |
ランCN以外 | 4 | 1 | 0 | 0 | 3 | 3 | 1 | 2 | 0 |
あやかし | 7 | 0 | 1 | 1 | 1 | 1 | 0 | 3 | 0 |
mtmt | 7 | 0 | 3 | 1 | 0 | 0 | 0 | 2 | 0 |
シルエット | 4 | 0 | 3 | 2 | 0 | 0 | 0 | 4 | 0 |
KRNN | 3 | 0 | 3 | 0 | 1 | 1 | 0 | 2 | 0 |
わんだフル | 4 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 0 |
ハロリンカ | 5 | 0 | 0 | 1 | 0 | 1 | 1 | 0 | 0 |
メトロポリス | 3 | 0 | 1 | 2 | 0 | 0 | 0 | 0 | 0 |
全て | 3 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 0 |
orange | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 2 | 0 |
Sillteの名前
CN#0 | 使用回数#0 | CN#1 | 使用回数#1 | CN#2 | 使用回数#2 |
---|---|---|---|---|---|
スノーフレーク | 5 | 星追いビアンカ | 2 | 剣客ユウギリ | 2 |
桔梗 | 4 | アマリリス | 2 | リョータ | 2 |
ムスリカ | 3 | 稔 | 2 | リンドウ | 2 |
アザレア | 3 | コン吉 | 2 | サガネ | 2 |
桃 | 3 | 月見草 | 2 | ブラン | 2 |
アネモネ | 3 | 白米 | 2 | 妹者 | 2 |
ハロウィン | 3 | ヘルムート | 2 | 執事ジュード | 2 |
むくろ | 3 | 奏者セリーヌ | 2 | ソルトマソ | 2 |
アナスタシア | 3 | 枢機卿アベル | 2 | 金魚草 | 2 |
ファラオ | 2 | とり山 | 2 | 響子 | 2 |
Sillte=スノーフレーク 村一覧
「初心者歓迎12A猫」村, Sillte(スノーフレーク):人狼
「12A猫」村, Sillte(スノーフレーク):村人
「親子丼GMの6B」村, Sillte(スノーフレーク):占い師
「親子丼GMのAかも6Z」村, Sillte(スノーフレーク):人狼
「続・12A猫をやろう」村, Sillte(スノーフレーク):村人
Sillte=桔梗 村一覧
「今宵も初心者歓迎12A猫」村, Sillte(桔梗):狩人
「親子丼GMのAかも6Z」村, Sillte(桔梗):占い師
「初心者歓迎-12A猫」村, Sillte(桔梗):村人
「猫もふわり14D」村, Sillte(桔梗):村人
Sillte=ムスリカ 村一覧
「初心者歓迎12A猫」村, Sillte(ムスリカ):村人
「初心者歓迎-12A猫」村, Sillte(ムスリカ):猫又
「親子丼GMのAかも6Z」村, Sillte(ムスリカ):狂人
Sillteの死因
理由/day | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|
無惨[噛] | 30 | 22 | 28 | 10 | 1 | 0 |
処刑 | 21 | 25 | 20 | 12 | 5 | 1 |
無惨[他] | 4 | 4 | 2 | 1 | 0 | 0 |
無惨[猫呪] | 3 | 2 | 2 | 0 | 0 | 0 |
猫又道連 | 0 | 0 | 2 | 0 | 1 | 0 |
噛み情報@Sillteの世界
Sillteが噛んだ人
HN#0 | 噛んだ回数#0 | HN#1 | 噛んだ回数#1 | HN#2 | 噛んだ回数#2 |
---|---|---|---|---|---|
シャドウ | 3 | ancil | 1 | akira | 1 |
TBS | 2 | どやりんこ | 1 | りんこ | 1 |
AKO | 2 | にがに | 1 | goburei | 1 |
スプリング | 2 | メラゾーマ | 1 | Lv.1 | 1 |
うみーP | 2 | 焼きそば | 1 | 鬱月 | 1 |
t.n | 1 | ハルク | 1 | 熱い心 | 1 |
役職野郎 | 1 | みたらし | 1 | 戯 | 1 |
アカネ | 1 | 葛饅頭 | 1 | フランツ | 1 |
tyr | 1 | まと | 1 | サイモン | 1 |
巽 | 1 | 妖夢 | 1 | うな | 1 |
シャドウを噛んだ村一覧
「この先生きのこるための12A猫」村, シャドウ(八頭身):村人, Sillte(擬人化モララー):人狼
「この先生きのこるための12A猫」村, シャドウ(モナカ):村人, Sillte(バーガー):人狼
「この先生きのこるための12A猫」村, シャドウ(毒男):村人, Sillte(できない子):人狼
Sillteを噛んだ人
HN#0 | 噛まれた回数#0 | HN#1 | 噛まれた回数#1 | HN#2 | 噛まれた回数#2 |
---|---|---|---|---|---|
役職野郎 | 3 | モトラド | 2 | エリザ | 1 |
ハルク | 3 | 夕霧 | 2 | akt | 1 |
goburei | 3 | アイスホッケー大好き! | 2 | ロミ | 1 |
熱い心 | 3 | るなちー | 2 | ぺちょ | 1 |
one shot one kill | 3 | こころ | 1 | ○活中 | 1 |
みたらし | 2 | ひまわり | 1 | A | 1 |
人狼 | 2 | georgia | 1 | 大根おろし醤油 | 1 |
まぁたん | 2 | マシュマロ | 1 | 人生 | 1 |
戯 | 2 | キラーチューン | 1 | めのう | 1 |
kouichi | 2 | 鼻ペチャワンコは可愛いと思います。 | 1 | らるすッス | 1 |
役職野郎に噛まれた村一覧
「初心者大歓迎12A猫」村, 役職野郎(ロラン):人狼, Sillte(プラーミヤ):村人
「初心者大歓迎12A猫」村, 役職野郎(ゆり):人狼, Sillte(半獣レナ):村人
「この先生きのこるための12A猫」村, 役職野郎(トト):人狼, Sillte(ミツル):村人
狼の絆@Sillteの世界
HN#0 | 狼同陣営数#0 | HN#1 | 狼同陣営数#1 | HN#2 | 狼同陣営数#2 |
---|---|---|---|---|---|
ハルク | 6 | nttw | 3 | 単一電池 | 2 |
殺意の波動に目覚めたリュウ | 5 | one shot one kill | 3 | ふじた | 2 |
ととねをぃ | 5 | はる | 3 | インド人 | 2 |
ひげ男爵 | 5 | るなちー | 3 | いつき葉show | 2 |
こころ | 4 | 役職野郎 | 2 | モール | 2 |
ヴァラ | 4 | 黄金の魔女 | 2 | キタムラ | 2 |
t.n | 3 | アザレア | 2 | お人形 | 2 |
kariko | 3 | マークポーク | 2 | sasakama | 2 |
めのう | 3 | レベル | 2 | ずいずい | 2 |
通行人A(仮) | 3 | モトラド | 2 | パリィ | 1 |
ハルクとSillteが同狼陣営の村一覧
「初心者大歓迎12A猫」村, ハルク(サルビア):人狼, Sillte(フリージア):人狼
「初心者大歓迎12A猫」村, ハルク(天狗):人狼, Sillte(ファラオ):人狼
「初心者大歓迎12A猫」村, ハルク(医師クレール):狂人, Sillte(奏者セリーヌ):人狼
「初心者歓迎12A猫」村, ハルク(はやて):人狼, Sillte(えがお):人狼
「むむっ!初心者歓迎12A猫」村, ハルク(ギュンター):人狼, Sillte(ヨハナ):人狼
「11A(`・ω・´)」村, ハルク(漫画家ミモザ):人狼, Sillte(防毒フローレンツ):狂人
殺意の波動に目覚めたリュウとSillteが同狼陣営の村一覧
「イケメン初心者歓迎12A猫」村, 殺意の波動に目覚めたリュウ(シーザ):狂人, Sillte(リーン):人狼
「初心者GMによる12A猫」村, 殺意の波動に目覚めたリュウ(デニース):人狼, Sillte(キプリング):人狼
「初心者大歓迎12A猫」村, 殺意の波動に目覚めたリュウ(フクトミ):狂人, Sillte(キング):人狼
「この先生きのこるための12A猫」村, 殺意の波動に目覚めたリュウ(さんがつ):人狼, Sillte(そらまめ):人狼
「むむっ!初心者歓迎12A猫」村, 殺意の波動に目覚めたリュウ(ブリジット):人狼, Sillte(ヨハナ):人狼
ととねをぃとSillteが同狼陣営の村一覧
「初心者歓迎12A猫」村, ととねをぃ(フリージア):人狼, Sillte(スノーフレーク):人狼
「初心者歓迎12A猫」村, ととねをぃ(さくらこ):人狼, Sillte(えがお):人狼
「初心者歓迎12A猫」村, ととねをぃ(プティ):狂人, Sillte(シィア):人狼
「初心者歓迎12A猫」村, ととねをぃ(プティ):人狼, Sillte(稔):人狼
「初心者歓迎12A猫」村, ととねをぃ(たうで):狂人, Sillte(うまあし):人狼
Memoir -Sillteの世界-Chapter1 神様と希望と現実と社会
サマリー
- Sillteさんが最も希望した役職は村人。56回。(就職回数56回)
- Sillteさんの最も勝率の高い役職は狂人。(勝率63.64%(100%を除く))
- Sillteさんとの同村数が一番多いのはハルクさん。(同村数63村)
- Sillteさんの参加した村のGMの村数が一番多いのはモトラドさん。(村数111村)
理想と現実@Sillteの世界
# | 村人 | 共有 | 霊能 | 占い師 | 狩人 | 猫又 | 狂人 | 人狼 | 背徳者 | 妖狐 |
---|---|---|---|---|---|---|---|---|---|---|
希望数 | 56 | 2 | 22 | 17 | 13 | 19 | 14 | 0 | 1 | 1 |
希望就職数 | 56 | 2 | 17 | 7 | 3 | 15 | 3 | 0 | 0 | 1 |
希望就職率 | 100.0% | 100.0% | 77.27% | 41.18% | 23.08% | 78.95% | 21.43% | - | 0.0% | 100.0% |
勝敗@Sillteの世界
# | 村人 | 共有 | 霊能 | 占い師 | 狩人 | 猫又 | 狂人 | 人狼 | 妖狐 |
---|---|---|---|---|---|---|---|---|---|
勝利 | 59 | 3 | 18 | 14 | 7 | 9 | 7 | 30 | 2 |
敗北 | 41 | 3 | 12 | 8 | 5 | 11 | 4 | 24 | 0 |
引分 | 7 | 1 | 6 | 0 | 0 | 0 | 1 | 1 | 1 |
廃村 | 7 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 0 |
勝率 | 59.0% | 50.0% | 60.0% | 63.64% | 58.33% | 45.0% | 63.64% | 55.56% | 100.0% |
同村者@Sillteの世界
HN#0 | 同村数#0 | HN#1 | 同村数#1 | HN#2 | 同村数#2 | HN#3 | 同村数#3 |
---|---|---|---|---|---|---|---|
ハルク | 63 | こころ | 29 | sasakama | 18 | マークポーク | 13 |
モトラド | 44 | ととねをぃ | 29 | AKO | 18 | 人狼 | 13 |
nttw | 42 | ふじた | 27 | おっさん | 18 | オク | 13 |
one shot one kill | 36 | ウィキッド | 26 | いぬ | 17 | 灰斗 | 13 |
t.n | 32 | ひげ男爵 | 25 | みたらし | 17 | 通行人A(仮) | 13 |
goburei | 32 | りんこ | 24 | kariko | 16 | 黄金の魔女 | 13 |
殺意の波動に目覚めたリュウ | 32 | シオン | 22 | シャドウ | 16 | tonnma | 12 |
アポロ | 32 | ヴァラ | 21 | はる | 16 | 電ちゃん | 12 |
役職野郎 | 31 | うな | 19 | ゆうる | 15 | ずいずい | 12 |
るなちー | 31 | ルール | 19 | オリオリオ | 14 | びっくり | 12 |
神様@Sillteの世界
HN#0 | 村数#0 | HN#1 | 村数#1 | HN#2 | 村数#2 |
---|---|---|---|---|---|
モトラド | 111 | オリオリオ | 4 | 由良 | 2 |
こころ | 23 | ラグナロク | 4 | aoisou | 2 |
めのう | 23 | 電ちゃん | 3 | amemuchi | 2 |
ヴァラ | 15 | 鳥紳士 | 3 | 姉ヶ崎 | 2 |
赤鯉 | 13 | 不機嫌な子犬 | 3 | morisima | 2 |
京 | 12 | 櫻 | 3 | ░ | 2 |
ハルク | 7 | 黒白 | 3 | スフレ | 2 |
しろごはん | 6 | 清水 | 2 | palermo | 2 |
しらさぎ | 4 | 誉れ | 2 | plnero | 1 |
yukiko1007 | 4 | beautiful_dreamer | 2 | びっくり | 1 |
Memoir -Sillteの世界 - もくじ-
人狼プレイヤーSillteさん@るる鯖のMemoirです。
(情報は2016/12/24までのものを使用)
基本情報
- Memoir -Sillteの世界-Chapter1 神様と希望と現実と社会 - 12A猫で学んだこと-Memoir-
役職情報
- Memoir -Sillteの世界-Chapter2-1 生まれて、噛んで、噛まれて、死んで。 - 12A猫で学んだこと-Memoir-
- ## Memoir -Sillteの世界-Chapter2-2 投票して、占って、護衛して。 - 12A猫で学んだこと-Memoir-
一言
Sillteさん。ハルクさんとgobureiさんとの同村数の多さが非常に目立っていた気がします。
ハルクさんとSillteさん、同村数が多いのですが、お互いに噛み合う数よりも、相互に投票し合う数が多いようです。
村の中で「どちらか一方を消す」というよりは、直接対決が多かったということを示唆していると思います。
Memoir -統計は人狼ゲームを面白くするかな?-
はじめに
お久しぶりです。StudentSです。 Memoirを作ってみたいと思いました。
- 人狼プレイヤーについて、データを使って騙る
ことを行います。
最初のターゲットは、るる鯖に参加していた井上美羽さんです。
(題材にして良いですか?と聞いたところ、快く、「いいよー」と言ってくれました。井上さん!好きです!)
無機質なデータをまとめて、井上美羽さんの世界をちょっと面白く描いてみたい。
人狼ゲームは1つ1つの村で物語があるゲームですが、それを大きな視点でみたら、何が見えてくるのかを知りたい。
面白いストーリーのMemoir(回顧録)になるかどうかを知りたい。それがこのエントリを作る理由です。
データをまとめる時は、敬称略で行っております。ご了承ください。
- (データのまとめ、間違っていたらすいません。)
...中の人の事情を吐くと、プログラミングの練習という側面もちょっとあったりします。 12A猫に関わって2年と少し。 人狼ゲームから学んだことは多かった。 そしてその期間、StudentSの中の人が、現実世界で学んだことも少なくなかった。 今の自分の実力がどんなもんかを試してみる....という側面がありますね。
- 2016/12/24 追記
...最後に妥協がいろいろはいってしまっている.
CNとHNの関係が村で一意になっていない村があったり、
サーバーの仕様変更があることに気がついていなかったり、
その場しのぎで逃げている所があるなぁ... これが今の自分か....
現在の問題点 / 仕様
- kari アカウントが入っている村の集計がカウントされない。
- 村に同一HNの人が複数いると、HN-CN(役職)の対応付けに失敗する場合がある