Subscribed unsubscribe Subscribe Subscribe

12A猫で学んだこと-Memoir-

...What are you learning now?

初日占い文を作ってみる。 -位置情報の自動生成-

はじめに

12A猫の初日の占い文は、参加者の方の個性があって面白いですよね。
12A猫とは違って、狐入りの村の初日の占い文は、真偽判定に使われることが多いですね。EXCELプログラミング言語で占い文の自動生成をされている方は結構いらっしゃるみたいです。 最近、面白い自動生成を見せていただきました。

作成された方に聞いた所、JAVAで作成されたようです。 このエントリでは、るる鯖のゲームシステムに適合するように、 初日の占い文の生成をpythonを使ってやってみたいと思います。

目的

初日占い文を python + lxml で作成する。

運用手法

  1. .html ファイルを保存
  2. .html ファイルを読み込み、占い文を .txt に保存する
  3. .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)



使用例

f:id:StudentS:20170423200950p:plain

上記のような.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グレーの誰かに投票する。狼/村人は自分以外のグレーに投票する。

  1. 得票数が 3-1-0-0のパターン 1 / 4

    • 狼が吊れる確率 1/12
  2. 得票数が 2-2-0-0のパターン 1 / 4

    • 村2票 - 狼2票 の確率 2/12。 狼が吊れる確率 1/12。
  3. 得票数が 2-1-1-0のパターン 1 / 2

    • 狼が2票の確率 1/6

1-3より。 狼が吊れる確率 1/3。

(計算間違っていたらごめんなさい…)

Memoir -Sillteの世界-Chapter2-2 投票して、占って、護衛して。

Memoir

サマリー

  • 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 生まれて、噛んで、噛まれて、死んで。

Memoir

サマリー

  • 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 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 神様と希望と現実と社会

Memoir

サマリー

  • 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の世界 - もくじ-

Memoir

人狼プレイヤーSillteさん@るる鯖のMemoirです。
(情報は2016/12/24までのものを使用)

基本情報

一言

Sillteさん。ハルクさんとgobureiさんとの同村数の多さが非常に目立っていた気がします。
ハルクさんとSillteさん、同村数が多いのですが、お互いに噛み合う数よりも、相互に投票し合う数が多いようです。
村の中で「どちらか一方を消す」というよりは、直接対決が多かったということを示唆していると思います。

モトラド先生の下で人狼を同時期に始めた2人。
同門下生として、切磋琢磨をしていたのでしょうね。

Remove all ads

Memoir -統計は人狼ゲームを面白くするかな?-

Memoir

はじめに

お久しぶりです。StudentSです。 Memoirを作ってみたいと思いました。

  • 人狼プレイヤーについて、データを使って騙る

ことを行います。

最初のターゲットは、るる鯖に参加していた井上美羽さんです。 (題材にして良いですか?と聞いたところ、快く、「いいよー」と言ってくれました。井上さん!好きです!) 無機質なデータをまとめて、井上美羽さんの世界をちょっと面白く描いてみたい。
人狼ゲームは1つ1つの村で物語があるゲームですが、それを大きな視点でみたら、何が見えてくるのかを知りたい。
面白いストーリーのMemoir(回顧録)になるかどうかを知りたい。それがこのエントリを作る理由です。
データをまとめる時は、敬称略で行っております。ご了承ください。

  • (データのまとめ、間違っていたらすいません。)

...中の人の事情を吐くと、プログラミングの練習という側面もちょっとあったりします。 12A猫に関わって2年と少し。 人狼ゲームから学んだことは多かった。 そしてその期間、StudentSの中の人が、現実世界で学んだことも少なくなかった。 今の自分の実力がどんなもんかを試してみる....という側面がありますね。

  • 2016/12/24 追記 ...最後に妥協がいろいろはいってしまっている. CNとHNの関係が村で一意になっていない村があったり、
    サーバーの仕様変更があることに気がついていなかったり、
    その場しのぎで逃げている所があるなぁ... これが今の自分か....

現在の問題点 / 仕様

  • kari アカウントが入っている村の集計がカウントされない。
  • 村に同一HNの人が複数いると、HN-CN(役職)の対応付けに失敗する場合がある