
grisumbras
Пользователь-
Постов
1 296 -
Зарегистрирован
-
Посещение
Тип контента
Профили
Форумы
События
Весь контент grisumbras
-
ДХ — это Дарк Хереси РПГ?
-
Я о том, что это может быть подводка к показу первых минек систер.
-
Хм... Вторая подряд история на ВХ Комъюнити содержит сестричек.
-
А не Кил Тим в АоСии?
-
Вот и доказательство превосходства коммунистической модели! ДЭ сильно помогло то, что всякие эльдарские mad scientist'ы открывали свои лаборатории в паутине (и после Падения стали гемункулами). ЕМНИП, первое время после Падения Комморрой правили именно гемункулы, а затем они добровольно отдали власть благородным домам. Кстати, если уж говорить о "без пяти минут эдьдар", есть информация на каком уровне было человечество в эпоху пика по сравнению с Эльдарской Империей?
-
Vanguard Primaris Land Speeder — для ребят в Фобосе.
-
Кстати, новая история с Виджилуса почему-то навела меня на мысли о Слаанеш. Да еще некие французские товарищи сообщают, что скоро следует ожидать нового Кипера.
-
На сколько я вижу, ЕТС и рулконсил перестраховываются. Никаких "удвоений" стрельбы и "пострелять дважды дважды" там нет.
-
Это такой особый орочий счет: "адин, многа"
-
На сколько я помню, абсолютный минимум органики для самих механикумов — половина мозга (одно полушарие заменяется на компьютер, чтобы эмоции не мешали в работе). Полагаю, схожие ограничения и для сервиторов.
-
Там половина высоты модели — забор на спине. Я бы сказал, Абба по высоте ровно по середине между Жилиманом (стоящим ровно) и простым марином.
-
А где правила конкретно на matched play? Я видел только просто правила и еще очковую стоимость. Судя по кейвордам, в matched play его в армию не добавишь. Только ковать нарратив.
-
mean — математическое ожидание. Средняя температура по больнице. Если сделаешь миллиард выстрелов, сложишь все полученные раны и разделишь на миллиард, то получишь примерно это. median — медиана. Результат ровно по середине распределения. Вероятность исходов не лучше этого - 50%, вероятность исходов не хуже этого — 50%. standard deviation — среднеквадратичное отклонение. Характеристика разброса исходов, чем она выше — тем меньше надежность получить что-то близкое к мат. ожиданию. N% of outcomes — диапазон в который входит мат. ожидание и еще N% возможных исходов. Иначе говоря, с вероятностью N% результат будет такой. Я тут, правда, использую допущение, что случайная величина — нормальная, а это явно не так. mode — мода. Самый часто встречающийся результат. Здесь это бесполезный параметр, во всех случаях он равен нулю.
-
Поправил. В общем, на 5 ран я бы не расчитывал. без FNPsave: 4+; FNP: 7+ mean: 3.2150205761316872 median: 3 standard deviation: 2.705648849936942 25% of outcomes: [2, 4] 50% of outcomes: [1, 5] 80% of outcomes: [0, 6] 90% of outcomes: [0, 7] 0 is 30.56% of outcomes 1 is 3.86% of outcomes 2 is 7.72% of outcomes 3 is 10.29% of outcomes 4 is 11.36% of outcomes 5 is 11.57% of outcomes 6 is 11.57% of outcomes 7 is 7.72% of outcomes 8 is 3.86% of outcomes 9 is 1.29% of outcomes 10 is 0.21% of outcomes mode: 0 save: 3+; FNP: 7+ mean: 2.6791838134430725 median: 2 standard deviation: 2.745186987659309 25% of outcomes: [1, 3] 50% of outcomes: [0, 4] 80% of outcomes: [0, 6] 90% of outcomes: [0, 7] 0 is 42.13% of outcomes 1 is 3.22% of outcomes 2 is 6.43% of outcomes 3 is 8.57% of outcomes 4 is 9.47% of outcomes 5 is 9.65% of outcomes 6 is 9.65% of outcomes 7 is 6.43% of outcomes 8 is 3.22% of outcomes 9 is 1.07% of outcomes 10 is 0.18% of outcomes mode: 0 save: 2+; FNP: 7+ mean: 2.1433470507544583 median: 0 standard deviation: 2.6790530832302766 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 5] 90% of outcomes: [0, 6] 0 is 53.70% of outcomes 1 is 2.57% of outcomes 2 is 5.14% of outcomes 3 is 6.86% of outcomes 4 is 7.57% of outcomes 5 is 7.72% of outcomes 6 is 7.72% of outcomes 7 is 5.14% of outcomes 8 is 2.57% of outcomes 9 is 0.86% of outcomes 10 is 0.14% of outcomes mode: 0 FNP6+save: 4+; FNP: 6+ mean: 2.692222508001829 median: 3 standard deviation: 2.5270667273239606 25% of outcomes: [1, 3] 50% of outcomes: [0, 4] 80% of outcomes: [0, 5] 90% of outcomes: [0, 6] 0 is 36.34% of outcomes 1 is 4.58% of outcomes 2 is 8.58% of outcomes 3 is 10.77% of outcomes 4 is 11.45% of outcomes 5 is 11.22% of outcomes 6 is 9.34% of outcomes 7 is 5.14% of outcomes 8 is 2.02% of outcomes 9 is 0.50% of outcomes 10 is 0.06% of outcomes mode: 0 save: 3+; FNP: 6+ mean: 2.2435187566681907 median: 1 standard deviation: 2.515630567590213 25% of outcomes: [1, 3] 50% of outcomes: [0, 3] 80% of outcomes: [0, 5] 90% of outcomes: [0, 6] 0 is 46.95% of outcomes 1 is 3.81% of outcomes 2 is 7.15% of outcomes 3 is 8.97% of outcomes 4 is 9.54% of outcomes 5 is 9.35% of outcomes 6 is 7.78% of outcomes 7 is 4.29% of outcomes 8 is 1.68% of outcomes 9 is 0.42% of outcomes 10 is 0.05% of outcomes mode: 0 save: 2+; FNP: 6+ mean: 1.7948150053345526 median: 0 standard deviation: 2.4224074694235327 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 4] 90% of outcomes: [0, 5] 0 is 57.56% of outcomes 1 is 3.05% of outcomes 2 is 5.72% of outcomes 3 is 7.18% of outcomes 4 is 7.63% of outcomes 5 is 7.48% of outcomes 6 is 6.23% of outcomes 7 is 3.43% of outcomes 8 is 1.34% of outcomes 9 is 0.33% of outcomes 10 is 0.04% of outcomes mode: 0 FNP5+save: 4+; FNP: 5+ mean: 2.2105052583447646 median: 2 standard deviation: 2.3061613042336018 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 5] 90% of outcomes: [0, 6] 0 is 42.13% of outcomes 1 is 5.47% of outcomes 2 is 9.45% of outcomes 3 is 11.13% of outcomes 4 is 11.33% of outcomes 5 is 10.01% of outcomes 6 is 6.63% of outcomes 7 is 2.85% of outcomes 8 is 0.84% of outcomes 9 is 0.15% of outcomes 10 is 0.01% of outcomes mode: 0 save: 3+; FNP: 5+ mean: 1.8420877152873039 median: 0 standard deviation: 2.260672628028253 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 4] 90% of outcomes: [0, 5] 0 is 51.77% of outcomes 1 is 4.56% of outcomes 2 is 7.87% of outcomes 3 is 9.27% of outcomes 4 is 9.44% of outcomes 5 is 8.34% of outcomes 6 is 5.53% of outcomes 7 is 2.38% of outcomes 8 is 0.70% of outcomes 9 is 0.13% of outcomes 10 is 0.01% of outcomes mode: 0 save: 2+; FNP: 5+ mean: 1.473670172229843 median: 0 standard deviation: 2.152077723741157 25% of outcomes: [0, 2] 50% of outcomes: [0, 2] 80% of outcomes: [0, 4] 90% of outcomes: [0, 5] 0 is 61.42% of outcomes 1 is 3.65% of outcomes 2 is 6.30% of outcomes 3 is 7.42% of outcomes 4 is 7.55% of outcomes 5 is 6.67% of outcomes 6 is 4.42% of outcomes 7 is 1.90% of outcomes 8 is 0.56% of outcomes 9 is 0.10% of outcomes 10 is 0.01% of outcomes mode: 0 Код#!/usr/bin/env python3 import itertools import math import sys from functools import reduce def product(seq): return reduce((lambda a, b: a * b[0]), seq, 1) def all_or_nothing(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] fails = threshold - 1 outcomes[0] += current * product(tail) * fails full *= head current *= head - fails return continuation(full, current, outcome, tail, outcomes) def roll_for_damage(full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] full *= head for roll in range(1, head + 1): outcomes = continuation(full, current, roll, tail, outcomes) return outcomes def fnp(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] successes = threshold - 1 fails = head - successes failed_outcome = outcome - 1 full *= head if failed_outcome <= 0: outcomes[0] += current * product(tail) * fails current *= head - fails outcomes = continuation(full, current, outcome, tail, outcomes) else: outcomes = continuation(full, current * fails, failed_outcome, tail, outcomes) outcomes = continuation(full, current * successes, outcome, tail, outcomes) return outcomes def extra_damage(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] fails = threshold - 1 outcomes[outcome] += current * product(tail) * fails full *= head current *= head - fails return continuation(full, current, outcome + 1, tail, outcomes) def set_value(full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] outcomes[outcome] += current * head * product(tail) return outcomes def run_sequence(full, current, outcome, sequence, outcomes): if not sequence: return outcomes handler = sequence[0][1] return handler(full, current, outcome, sequence, outcomes, run_sequence) save = int(sys.argv[1]) if len(sys.argv) > 1 else 3 fnp_threshold = int(sys.argv[2]) if len(sys.argv) > 2 else 7 print("save: {}+; FNP: {}+".format(save, fnp_threshold)) save_threshold = 5 - save roll_sequence = [ (6, lambda *args: all_or_nothing(2, *args)), # to hit (6, lambda *args: all_or_nothing(2, *args)), # to wound (6, lambda *args: all_or_nothing(save_threshold , *args)), # save (6, roll_for_damage), # damage (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(3, *args)), # 3+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(4, *args)), # 4+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(5, *args)), # 5+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(6, *args)), # 6+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (1, set_value), ] outcomes = run_sequence( 1, 1, 1, roll_sequence, list(itertools.repeat(0, 11)), ) total_count = sum(outcomes) mean = sum([i * x for i, x in enumerate(outcomes)]) / total_count print("mean: {}".format(mean)) half = total_count / 2 for i, x in enumerate(outcomes): half -= x if half <= 0: median = i break print("median: {}".format(median)) def variance_item(x): x = x - mean return x * x variance = sum([variance_item(i) * x for i, x in enumerate(outcomes)]) / total_count s_deviation = math.sqrt(variance) print("standard deviation: {}".format(s_deviation)) proportions = ( (25, 0.318639), (50, 0.674490), (80, 1.281552), (90, 1.644854), ) for proportion, interval in proportions: min_x = math.trunc(max(0, mean - s_deviation * interval)) max_x = math.trunc(min(len(outcomes), mean + s_deviation * interval)) print("{}% of outcomes: [{}, {}]".format(proportion, min_x, max_x)) for i, x in enumerate(outcomes): print("{:2} is {:.2%} of outcomes".format(i, x / total_count)) mode = max(enumerate(outcomes), key=lambda x: x[1]) print("mode: {}".format(mode[0]))
-
Пардон, невнимательно правила прочитал. Чуть попозже переделаю.
-
Почитал про Виндикара и вероятность. Стало интересно посчитать. без FNPsave: 4+; FNP: 7+ mean: 2.1733539094650207 median: 2 standard deviation: 1.8133846971708114 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 4] 90% of outcomes: [0, 5] 0 is 30.555556% of outcomes 1 is 7.716049% of outcomes 2 is 15.432099% of outcomes 3 is 20.576132% of outcomes 4 is 15.003429% of outcomes 5 is 7.716049% of outcomes 6 is 2.572016% of outcomes 7 is 0.428669% of outcomes mode: 0 save: 3+; FNP: 7+ mean: 1.8111282578875172 median: 2 standard deviation: 1.8429163021096384 25% of outcomes: [1, 2] 50% of outcomes: [0, 3] 80% of outcomes: [0, 4] 90% of outcomes: [0, 4] 0 is 42.129630% of outcomes 1 is 6.430041% of outcomes 2 is 12.860082% of outcomes 3 is 17.146776% of outcomes 4 is 12.502858% of outcomes 5 is 6.430041% of outcomes 6 is 2.143347% of outcomes 7 is 0.357225% of outcomes mode: 0 save: 2+; FNP: 7+ mean: 1.4489026063100137 median: 0 standard deviation: 1.8005282802300437 25% of outcomes: [0, 2] 50% of outcomes: [0, 2] 80% of outcomes: [0, 3] 90% of outcomes: [0, 4] 0 is 53.703704% of outcomes 1 is 5.144033% of outcomes 2 is 10.288066% of outcomes 3 is 13.717421% of outcomes 4 is 10.002286% of outcomes 5 is 5.144033% of outcomes 6 is 1.714678% of outcomes 7 is 0.285780% of outcomes mode: 0 FNP 6+save: 4+; FNP: 6+ mean: 1.6057241655235481 median: 1 standard deviation: 1.6578488168585512 25% of outcomes: [1, 2] 50% of outcomes: [0, 2] 80% of outcomes: [0, 3] 90% of outcomes: [0, 4] 0 is 42.129630% of outcomes 1 is 9.112816% of outcomes 2 is 16.454332% of outcomes 3 is 17.064752% of outcomes 4 is 10.079863% of outcomes 5 is 4.034051% of outcomes 6 is 1.004924% of outcomes 7 is 0.119634% of outcomes mode: 0 save: 3+; FNP: 6+ mean: 1.3381034712696236 median: 0 standard deviation: 1.6274181278733642 25% of outcomes: [0, 1] 50% of outcomes: [0, 2] 80% of outcomes: [0, 3] 90% of outcomes: [0, 4] 0 is 51.774691% of outcomes 1 is 7.594013% of outcomes 2 is 13.711944% of outcomes 3 is 14.220626% of outcomes 4 is 8.399885% of outcomes 5 is 3.361709% of outcomes 6 is 0.837436% of outcomes 7 is 0.099695% of outcomes mode: 0 save: 2+; FNP: 6+ mean: 1.0704827770156988 median: 0 standard deviation: 1.5508949527019833 25% of outcomes: [0, 1] 50% of outcomes: [0, 2] 80% of outcomes: [0, 3] 90% of outcomes: [0, 3] 0 is 61.419753% of outcomes 1 is 6.075211% of outcomes 2 is 10.969555% of outcomes 3 is 11.376501% of outcomes 4 is 6.719908% of outcomes 5 is 2.689367% of outcomes 6 is 0.669949% of outcomes 7 is 0.079756% of outcomes mode: 0 FNP 5+save: 4+; FNP: 5+ mean: 1.1202560585276635 median: 0 standard deviation: 1.425972313382702 25% of outcomes: [0, 1] 50% of outcomes: [0, 2] 80% of outcomes: [0, 2] 90% of outcomes: [0, 3] 0 is 53.703704% of outcomes 1 is 10.538956% of outcomes 2 is 15.761392% of outcomes 3 is 12.372022% of outcomes 4 is 5.623076% of outcomes 5 is 1.674692% of outcomes 6 is 0.301068% of outcomes 7 is 0.025089% of outcomes mode: 0 save: 3+; FNP: 5+ mean: 0.9335467154397196 median: 0 standard deviation: 1.3670403893423693 25% of outcomes: [0, 1] 50% of outcomes: [0, 1] 80% of outcomes: [0, 2] 90% of outcomes: [0, 3] 0 is 61.419753% of outcomes 1 is 8.782463% of outcomes 2 is 13.134493% of outcomes 3 is 10.310019% of outcomes 4 is 4.685897% of outcomes 5 is 1.395577% of outcomes 6 is 0.250890% of outcomes 7 is 0.020908% of outcomes mode: 0 save: 2+; FNP: 5+ mean: 0.7468373723517756 median: 0 standard deviation: 1.2784682460116072 25% of outcomes: [0, 1] 50% of outcomes: [0, 1] 80% of outcomes: [0, 2] 90% of outcomes: [0, 2] 0 is 69.135802% of outcomes 1 is 7.025971% of outcomes 2 is 10.507595% of outcomes 3 is 8.248015% of outcomes 4 is 3.748718% of outcomes 5 is 1.116461% of outcomes 6 is 0.200712% of outcomes 7 is 0.016726% of outcomes mode: 0 Код import itertools import math import sys from functools import reduce def product(seq): return reduce((lambda a, b: a * b[0]), seq, 1) def all_or_nothing(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] fails = threshold - 1 outcomes[0] += current * product(tail) * fails full *= head current *= head - fails return continuation(full, current, outcome, tail, outcomes) def roll_for_damage(full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] full *= head for roll in range(1, head + 1): outcomes = continuation(full, current, roll, tail, outcomes) return outcomes def fnp(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] successes = threshold - 1 fails = head - successes failed_outcome = outcome - 1 full *= head if failed_outcome <= 0: outcomes[0] += current * product(tail) * fails current *= head - fails outcomes = continuation(full, current, outcome, tail, outcomes) else: outcomes = continuation(full, current * fails, failed_outcome, tail, outcomes) outcomes = continuation(full, current * successes, outcome, tail, outcomes) return outcomes def extra_damage(threshold, full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] fails = threshold - 1 outcomes[outcome] += current * product(tail) * fails full *= head current *= head - fails return continuation(full, current, outcome + 1, tail, outcomes) def set_value(full, current, outcome, sequence, outcomes, continuation): head = sequence[0][0] tail = sequence[1:] outcomes[outcome] += current * head * product(tail) return outcomes def run_sequence(full, current, outcome, sequence, outcomes): if not sequence: return outcomes handler = sequence[0][1] return handler(full, current, outcome, sequence, outcomes, run_sequence) save = int(sys.argv[1]) if len(sys.argv) > 1 else 3 fnp_threshold = int(sys.argv[2]) if len(sys.argv) > 2 else 7 print("save: {}+".format(save)) save_threshold = 5 - save roll_sequence = [ (6, lambda *args: all_or_nothing(2, *args)), # to hit (6, lambda *args: all_or_nothing(2, *args)), # to wound (6, lambda *args: all_or_nothing(save_threshold , *args)), # save (3, roll_for_damage), # damage (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(3, *args)), # 3+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(4, *args)), # 4+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(5, *args)), # 5+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (6, lambda *args: extra_damage(6, *args)), # 6+ extra (6, lambda *args: fnp(fnp_threshold, *args)), # FNP (1, set_value), ] outcomes = run_sequence( 1, 1, 1, roll_sequence, list(itertools.repeat(0, 8)), ) total_count = sum(outcomes) mean = sum([i * x for i, x in enumerate(outcomes)]) / total_count print("mean: {}".format(mean)) half = total_count / 2 for i, x in enumerate(outcomes): half -= x if half <= 0: median = i break print("median: {}".format(median)) def variance_item(x): x = x - mean return x * x variance = sum([variance_item(i) * x for i, x in enumerate(outcomes)]) / total_count s_deviation = math.sqrt(variance) print("standard deviation: {}".format(s_deviation)) proportions = ( (25, 0.318639), (50, 0.674490), (80, 1.281552), (90, 1.644854), ) for proportion, interval in proportions: min_x = math.trunc(max(0, mean - s_deviation * interval)) max_x = math.trunc(min(len(outcomes), mean + s_deviation * interval)) print("{}% of outcomes: [{}, {}]".format(proportion, min_x, max_x)) for i, x in enumerate(outcomes): print("{} is {:2%} of outcomes".format(i, x / total_count)) mode = max(enumerate(outcomes), key=lambda x: x[1]) print("mode: {}".format(mode[0]))
-
Да. В рулбуках это смотреть бесполезно, потому что это из эрраты. Кстати, "аффтар этого факта" — это ГВ.
-
Видел на Ютюбе альтернативного Сангвиния. У него копье, и перед ним кто-то гуманоидный падает/полулежит с "рогами" из локтей. Ка'банда?
-
Тзинч как-то уж совсем сильно изменил пути в этом треде про легион Тысячи Сынов.
-
vim is life
-
Данная дискуссия в очередной раз наглядно демонстрирует, что выкидывать концепцию Universal Special Rules было так себе идеей.
-
Вообще, до ETC этот хоумрул появился у американцев в ITC. На сколько я знаю, он в первую очередь мотивирован тем, что именно ГВшный террейн весь просматривается.