Объявления

Друзья, если не получается зарегистрироваться, напишите на почту vdv_forever@bk.ru.
Я оторву свою задницу от всех дел и обязательно Вас активирую! :smile10:
Добро пожаловать на геройский форум! :smile25:

Неточности и дополнения!

В этом разделе можно оставить свои наблюдения и замечания по справочнику, а также высказать предложения по его совершенствованию и наполнению. Вся информация этого раздела будет скрупулезно рассматриваться и по мере сил и времени добавляться в справочник
offlineАватара пользователя
VDV_forever  
имя: Дмитрий
Администратор
 
Сообщения: 3862
Зарегистрирован: 22 мар 2009, 12:36
Пол: Мужчина
Поблагодарили: 986 раз.

AlexSpl пишет: Разд..

Сообщение VDV_forever » 29 сен 2011, 11:18

AlexSpl пишет:
Цитата:
Раздел 17. Формула расчёта количества очков.

Согласно руководству Heroes of Might and Magic: The Official Strategy Guide, выложенному Miner'ом, формула расчёта количества очков, получаемых за прохождение сценария, отличается от той, что представлена в Разделе 17.

Points = max(0, floor(200 - N1 - N2 - N3 - N4)),
Score = floor(MapRating * Points), где

Points - количество очков, получаемых за прохождение сценария;
Score - итоговый счёт;
MapRating - рейтинг карты сценария, показываемый при старте;

N1 = max(1, min(N, 60));
N2 = 1/2 * max(0, min(N - 60, 60));
N3 = 1/4 * max(0, min(N - 120, 240));
N4 = 1/8 * max(0, N - 360);

N - количество дней, затраченных на прохождение карты;
floor() - округление вниз.

Иными словами, за каждый день, проведённый на карте:
1) с 1-го по 60-й: отнимается 1 единица базового рейтинга;
2) с 61-го по 120-й: отнимается пол-единицы (1/2) базового рейтинга;
3) со 121-го по 360-й: отнимается четверть единицы (1/4) базового рейтинга;
4) начиная с 361-го: отнимается одна восьмая единицы (1/8) базового рейтинга.

Пример 1. Сколько очков заработает игрок, пройдя карту с рейтингом 150% за 400 дней, и каков будет итоговый счёт?

N1 = max(1, min(400, 60)) = 60;
N2 = 1/2 * max(0, min(400 - 60, 60)) = 1/2 * 60 = 30;
N3 = 1/4 * max(0, min(400 - 120, 240)) = 1/4 * 240 = 60;
N4 = 1/8 * max(0, min(400 - 360)) = 1/8 * 40 = 5.

Итого,
Points = max(0, floor(200 - 60 - 30 - 60 - 5)) = 45,
Score = floor(150% * 45) = 67.

Пример 2. Рассчитать очки и итоговый счёт за прохождение карты с рейтингом 60% за 60, 61, 62 и 63 дня.

Опуская промежуточные вычисления, получим:

1) 60 дней: Очки = floor(200 - 60) = 140, Счёт = floor(0,6 * 140) = 84.
2) 61 день: Очки = floor(200 - 60,5) = 139, Счёт = floor(0,6 * 139) = 83.
3) 62 дня: Очки = floor(200 - 61) = 139, Счёт = floor(0,6 * 139) = 83.
4) 63 дня: Очки = floor(200 - 61,5) = 138, Счёт = floor(0,6 * 138) = 82.

Здесь я хочу подчеркнуть, что при расчётах выполняется два округления вниз! Т.е., например, для 63 дней без правильного округления получается неверный результат:
floor(0,6 * (200 - 61,5)) = floor(0,6 * 138,5) = floor(83,1) = 83! Правильный результат здесь - 82.

Вот оно как всё на самом деле!
Хотя формула в Справочнике верна (под Очками там подразумевается Счёт), если находиться на карте не более 60 дней.


Спустя пол года после написания целого раздела, я наконец то до него добрался! Со временем совсем напряг, увы.

Так вот, Саша не мог бы ты все же привести расчет в примере 2, где ты опускаешь промежуточные вычисления.

Нельзя ли переписать формулу таким образом (упростить), что бы она была понятна любому обывателю? Ведь не все же программисты. Вот что означает к примеру "," и как ее рассматривать обычному игроку?

В общем-то раздел я уже переписал сегодня, но хотелось бы упростить.
http://www.handbookhmm.ru- Познай все тонкости игры!
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Points = max(0, floo..

Сообщение AlexSpl » 29 сен 2011, 13:42

Цитата:
Points = max(0, floor(200 - N1 - N2 - N3 - N4)),
Score = floor(MapRating * Points), где

Points - количество очков, получаемых за прохождение сценария;
Score - итоговый счёт;
MapRating - рейтинг карты сценария, показываемый при старте;

N1 = max(1, min(N, 60));
N2 = 1/2 * max(0, min(N - 60, 60));
N3 = 1/4 * max(0, min(N - 120, 240));
N4 = 1/8 * max(0, N - 360);

N - количество дней, затраченных на прохождение карты;
floor() - округление вниз.


Нетрудно заметить, что:
1) N2 = 0, N3 = 0, N4 = 0, если карта пройдена не более чем за 60 дней;
2) N3 = 0, N4 = 0, если карта пройдена не более чем за 120 дней;
3) N4 = 0, если карта пройдена не более чем за 360 дней.
Цитата:
1) 60 дней: Очки = floor(200 - 60) = 140, Счёт = floor(0,6 * 140) = 84.

N = 60 (N <= 60)
Здесь имеем N1 = max(1, min(N, 60)) = N = 60;
N2 = 0;
N3 = 0;
N4 = 0.
Поэтому Points = max(0, floor(200 - N1 - N2 - N3 - N4)) = floor(200 - N1) = floor(200 - 60) = 140;
Score = floor(MapRating * Points) = floor(60% * 140) = 84.
Цитата:
2) 61 день: Очки = floor(200 - 60,5) = 139, Счёт = floor(0,6 * 139) = 83.

N = 61 (60 < N <= 120)
Здесь имеем N1 = max(1, min(N, 60)) = 60;
N2 = 1/2 * max(0, min(N - 60, 60)) = 1/2 * max(0, min(61 - 60, 60)) = 1/2 * max(0, min(1, 60)) = 1/2 * max(0, 1) = 1/2 * 1 = 0,5;
N3 = 0;
N4 = 0.
Поэтому Points = max(0, floor(200 - N1 - N2 - N3 - N4)) = floor(200 - N1 - N2) = floor (200 - 60 - 0,5) = floor(139,5) = 139;
Score = floor(MapRating * Points) = floor(60% * 139) = 83.

Вообще, формула просто обобщает все возможные случаи и является, по сути, математической записью следующих правил:
Цитата:
Иными словами, за каждый день, проведённый на карте:
1) с 1-го по 60-й: отнимается 1 единица базового рейтинга;
2) с 61-го по 120-й: отнимается пол-единицы (1/2) базового рейтинга;
3) со 121-го по 360-й: отнимается четверть единицы (1/4) базового рейтинга;
4) начиная с 361-го: отнимается одна восьмая единицы (1/8) базового рейтинга.
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Конечно, нужно уточн..

Сообщение AlexSpl » 29 сен 2011, 14:06

Конечно, нужно уточнить, действительно ли минимальное количество очков, которое можно получить за прохождение карты, равно нулю. Вполне может быть, что оно равно 1.

Например, согласно формуле, ноль очков можно заработать, если пройти карту более чем за
60 + 60 + 240 + 392 = 752 дня :

Points = max(0, floor(200 – 60 – 1/2 * 60 – 1/4 * 240 – 1/8 * 392)) = 1, когда уже
Points = max(0, floor(200 – 60 – 1/2 * 60 – 1/4 * 240 – 1/8 * 393)) = 0!

Интересно, может ли игрок получить 0 очков?
Если да, то число 752 (дня) в Героях 1 является своебразной границей, отделяющей ненулевое количество очков от нулевого.

Счёт же может стать нулевым задолго от этой даты (зависит от рейтинга карты). Опять же вопрос: а может ли счёт быть нулевым?
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Не поленился провери..

Сообщение AlexSpl » 29 сен 2011, 16:15

Не поленился проверить. Оказывается, минимальное количество очков равно 20!
Таким образом, формулу придётся переписать так:

[pre2] Points = max(20, [200 - N1 - N2 - N3 - N4]),
Score = [MapRating * Points], где

Points - количество очков, получаемых за прохождение сценария;
Score - итоговый счёт;
MapRating - рейтинг карты сценария, показываемый при старте;

N1 = max(1, min(N, 60));
N2 = 1/2 * max(0, min(N - 60, 60));
N3 = 1/4 * max(0, min(N - 120, 240));
N4 = 1/8 * max(0, N - 360);

N - количество дней, затраченных на прохождение карты;
[] - округление вниз.[/pre2]

Заметьте, что минимальный счёт (Score), в отличие от количества очков (Points), может быть меньше 20! Исходя из того, что минимальный рейтинг составляет 5%, находим, что наименьший возможный итоговый счёт равен Scoremin = [5% * 20] = 1!

Неплохо бы теперь найти зависимость ранга (Дракон, Феникс и т.д.) от счёта
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Написал калькулятор ..

Сообщение AlexSpl » 29 сен 2011, 18:13

Написал калькулятор рейтинга (включает конвертер текущей даты в количество дней и наоборот). Позже добавлю определение ранга.

Так вот, оказывается, что минимальное количество очков (20) можно получить, если пройти карту за 593 или более (60 + 60 + 240 + 233) дней:

Points = [200 – 60 – 1/2 * 60 – 1/4 * 240 – 1/8 * 232] = 21,
Points = [200 – 60 – 1/2 * 60 – 1/4 * 240 – 1/8 * 233] = 20.

593 дня - это 22 месяц, 1 неделя, 5 день

Download H1RC
Вернуться к началу

offlineАватара пользователя
VDV_forever  
имя: Дмитрий
Администратор
 
Сообщения: 3862
Зарегистрирован: 22 мар 2009, 12:36
Пол: Мужчина
Поблагодарили: 986 раз.

Раздел 17. Формула р..

Сообщение VDV_forever » 04 окт 2011, 10:40

Раздел 17. Формула расчёта количества очков. полностью переписан и обновлен!

http://handbookhmm1.narod.ru/17.html

Саша, огромное спасибо за написание раздела и за ответы на некоторые вопросы посвященные ему.

http://handbookhmm1.narod.ru/news.html

Я надеюсь, ты не станешь рвать и метать за мою корректировку некоторых моментов... я лишь максимально облегчил понимание этих формул, и не нарушил их оригинальной структуры. Согласен?
http://www.handbookhmm.ru- Познай все тонкости игры!
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

N1 = 1 ... 60; при к..

Сообщение AlexSpl » 04 окт 2011, 10:58

Цитата:
N1 = 1 ... 60; при количестве дней от 1 до 60;

N2 = 1/2 * (N - 60); при количестве дней от 61 до 120;

N3 = 1/4 * (N - 360); при количестве дней от 121 до 360;

N4 = 1/8 * (N - 360); при количестве дней с 361;


N3 = 1/4 * (N - 120); при количестве дней от 121 до 360.

Цитата:
Пример расчета №2
Рассчитать очки и итоговый счёт за прохождение карты с рейтингом 60% за 63 дней.

63 дня.

Цитата:
Здесь необходимо подчеркнуть, что при расчётах выполняется два округления вниз! Т.е. в данном случае без правильного округления получается неверный результат:

Points = floor(200 - 60 - 1,5) = 138,5
Score = floor(60% * 138,5) = 83.


Правильно будет так:
Points = 200 - 60 - 1,5 = 138,5
Score = floor(60% * 138,5) = 83.

Т.е. данный пример демонстрирует, что если не округлить вниз количество очков, то итоговый счёт будет подсчитан неверно.

Цитата:
Пример расчета №3
Сколько очков заработает игрок, пройдя карту с рейтингом 150% за 400 дней, и каков будет итоговый счёт?

N1 = 60;
N2 = 1/2 * (400 - 120) = 1/2 * 280 = 140;
N3 = 1/4 * (400 - 240) = 1/4 * 160 = 40;
N4 = 1/8 * (400 - 360) = 1/8 * 40 = 5.
Итого,
Points = floor(200 - 140 - 40 - 5) = 15
Score = floor(150% * 15) = 22.

Правильный ответ здесь:
Points = 45
Score = 67

Здесь интересно отметить, что результат игрока будет 45 / 67, также если он пройдёт карту за 393, 394, 395, 396, 397, 398, 399 или 400 дней!
Вернуться к началу

offlineАватара пользователя
VDV_forever  
имя: Дмитрий
Администратор
 
Сообщения: 3862
Зарегистрирован: 22 мар 2009, 12:36
Пол: Мужчина
Поблагодарили: 986 раз.

AlexSpl пишет: Прав..

Сообщение VDV_forever » 04 окт 2011, 11:44

Все замечания по существу!

Что то я парюсь.., какая то лажа после пересчета

N1 = 60;
N2 = 1/2 * (400 - 60) = 1/2 * 340 = 170;
N3 = 1/4 * (400 - 120) = 1/4 * 280 = 70;
N4 = 1/8 * (400 - 360) = 1/8 * 40 = 5.
Итого,
Points = floor(200 - 60 - 170 - 70 - 5) = -105
Score = floor(150% * 15) = 22.

http://www.handbookhmm.ru- Познай все тонкости игры!
Вернуться к началу

offlineАватара пользователя
AlexSpl  
имя: Александр
Эксперт
Эксперт
 
Сообщения: 5587
Зарегистрирован: 17 сен 2010, 12:58
Пол: Мужчина
Награды: 14
Высшая медаль (1) Победителю турнира по HMM1_TE (2) Победителю этапа по HMM1 (1) Победителю этапа по HMM2 (1) Лучшему из лучших (1) 2 место 1 этапа по HMM1 (1)
3 место 1 этапа по HMM1 (1) 1 место 2 этапа по HMM2 (1) Победителю турнира по KB (2) Победителю турнира по KB (1) Грандмастер оффлайн-турниров (1) Боевой шлем (1)
Поблагодарили: 2185 раз.

Points = max(20, ),..

Сообщение AlexSpl » 04 окт 2011, 11:50

[pre2] Points = max(20, [200 - N1 - N2 - N3 - N4]),
Score = [MapRating * Points], где

Points - количество очков, получаемых за прохождение сценария;
Score - итоговый счёт;
MapRating - рейтинг карты сценария, показываемый при старте;

N1 = max(1, min(N, 60));
N2 = 1/2 * max(0, min(N - 60, 60));
N3 = 1/4 * max(0, min(N - 120, 240));
N4 = 1/8 * max(0, N - 360);

N - количество дней, затраченных на прохождение карты;
[] - округление вниз.[/pre2]

Для 400 дней считать нужно так:
N1 = 60
N2 = 1/2 * 60
N3 = 1/4 * 240
N4 = 1/8 * (400 - 360) = 1/8 * 40

Points = 200 - 60 - 1/2 * 60 - 1/4 * 240 - 1/8 * 40 = 200 - 60 - 30 - 60 - 5 = 45!
Вернуться к началу

offlineАватара пользователя
VDV_forever  
имя: Дмитрий
Администратор
 
Сообщения: 3862
Зарегистрирован: 22 мар 2009, 12:36
Пол: Мужчина
Поблагодарили: 986 раз.

AlexSpl пишет: N3 =..

Сообщение VDV_forever » 04 окт 2011, 12:06

AlexSpl пишет:
Цитата:
N3 = 1/4 * (N - 120); при количестве дней от 121 до 360.


тогда здесь будет правильно так:

N3 = 1/4 * (N - 240); при количестве дней от 121 до 360.

поправил по горячим следам http://handbookhmm1.narod.ru/17.html
http://www.handbookhmm.ru- Познай все тонкости игры!
Вернуться к началу

Пред.След.

Вернуться в Предложения и замечания

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1