О чём речь

Я истинный поклонник Формулы-1. За гонками слежу с восьми лет, в рабочем календаре расписаны все даты проведения Гран-При, а через RSS читаю несколько тематических сайтов. На одном из них ежегодно проводиться конкурс прогнозов. Правила просты – перед каждым Гран-При Вам нужно спрогнозировать первую десятку гонщиков на финише. По итогам сравнивается две таблицы — десять пилотов, указанных Вами в прогнозе и десять лучших пилотов по итогам гонки. Спрогнозировать финишную десятку тяжело из-за непредвиденных обстоятельств в виде сходов болидов, аварий или поломок. Потому я ответил на один простой вопрос — кто зарабатывает на ставках больше всех? Конечно букмекерские конторы. Так какие шансы на победу в конкурсе, если ставить по прогнозам, например, британской конторы William Hill?
Правила конкурса просты. Пилоты, финишировавшие вне призовой десятки, не учитываются. Если пилот финишировал на том месте, которое вы указали в прогнозе – вы получаете 25 очков, если ошиблись на одну позицию – 18 очков, на две – 15 очков, на три – 12 очков, на четыре – 10 очков, на пять — 8 очков, на шесть – 6 очков, на семь – 4 очка, на восемь – 2 очка и на девять – 1 очко. (Такие же очки получают гонщики за позицию на финише гонки). Очки за каждую позицию суммируются. При определении победителя по итогам сезона учитываются результаты пяти лучших прогнозов.
Приступаем к просчёту
Сначала я нашел прогноз букмекеров перед гонкой, а также итоги гонок и свёл их в одну таблицу.
Считать результаты по всем 20 Гран-При у меня не было желания, потому было решено написать небольшой скрипт. Но программировал последний раз я ешё в школе, и взяв на вооружение документацию Google Developers и их платформу, сумел набросать за довольно таки большой период времени работающий скрипт, вспомнив, при этом, внеземное чувство работающего скрипта после тридцати минут поиска ошибки.
*Пример Гран-При Австралии 2012
| № | Гонка | Прогноз | Баллы |
| 1 | Баттон | Феттель | 12 |
| 2 | Феттель | Хэмилтон | 18 |
| 3 | Хэмилтон | Уэббер | 18 |
| 4 | Уэббер | Баттон | 18 |
| 5 | Алонсо | Алонсо | 25 |
| 6 | Кобаяши | Росберг | 0 |
| 7 | Райкконен | Райкконен | 25 |
| 8 | Перес | Шумахер | 0 |
| 9 | Риккардо | Грожан | 0 |
| 10 | ди Реста | Масса | 0 |
Пример кода для подсчета баллов, заточен под данную таблицу
function points() { var sheet = SpreadsheetApp.getActiveSheet(); //работаем с активной таблицей var race, forecast = new Array(); //результат гонки и прогноз var points_race = new Array(25,18,15,12,10,8,6,4,2,1); //массив баллов for (var k=3; k<=215; k=k+11){ //просчёта всех гонок race = sheet.getRange(k, 2, 10, 1).getValues(); //считывает результат гонки forecast = sheet.getRange(k, 3, 10, 1).getValues(); //считывает прогноз for (var i=0; i<=9; i++){ sheet.getRange(k+i,4).setValue(0); //по умолчанию заполняем баллы "0" for (var j=0; j<=9 ; j++) if (race[i].toString() == forecast[j].toString()){ //сравниваем строки sheet.getRange(k+i,4).setValue(points_race[Math.abs(j-i)]); //записывает баллы break; //если сработало останавливаем цикл } } } }
После подсчета суммы баллов за каждый этап, с помощью функции LARGE выбрал пять лучших результатов.
Пятерка лучших результатов
| Гран-При | Сумма баллов |
| Индия | 156 |
| США | 155 |
| Канада | 118 |
| Сингапур | 117 |
| Австралия | 116 |
| Сумма | 662 |
Первый вывод
Несмотря на хороший общий результат по всем гонкам (2064 балла), моя пятерка лучших результатов (662 балла), конкуренции первой тройке призеров (789-767 балла) составить не смогла, но результат был лучшим чем мой собственный, построенный на «чутье».
Не сдаваться
На этом я не остановился и сделал в общей сложности семь разных функций прогноза.
- Выше описанная — прогноз просчитывался по ставкам букмекеров на отдельный этап;
- По ставкам букмекеров на победу в чемпионате, перед началом сезона;
- Ставки моего любимца кота «МацЫка», который прошелся по клавиатуре — случайная десятка гонщиков, одна для всех этапов;

- Случайная десятка гонщиков для каждого этапа разная;
- Результаты первой практики;
- Результаты второй практики;
- Результаты третей практики.
Всё результаты в одной таблице
| Расчёт | Сумма баллов 5 лучших результатов |
| Букмекеры-этапы | 662 |
| Букмекеры-чемпион | 640 |
| Случайный-один (МацЫк) | 569 |
| Случайный-всё | 542 |
| Первая практика | 596 |
| Вторая практика | 712 |
| Третья практика | 622 |
Выводы
В заключительной части статьи должен быть вывод, и с этим у меня проблема :) До начала работ, я думал что прогноз будет если не лучшим, то хотя бы близким к нему. Но подтвердилось другое — показать хороший результат за счет только простой теории вероятности не получиться, нужно модифицировать уже имеющийся алгоритм другими переменными. С другой стороны я повеселил свой, забывший что такое программирование, мозг, решил интересную для меня, а может и для Вас, задачу, и получил хоть немного опыта.
Пост Скриптум
На github код не заливал, поскольку он заточен под таблицу.
Таблица и сценарий доступны для просмотра, для работы с ними сделайте копию себе в Google Disk, для запуска подсчета — меню «Примочки».
Если у читателя возникнут какие-либо идеи о том, как еще можно просчитать прогноз — напишите мне, я с удовольствием выслушаю их.

