Россия всегда впереди
Чемпионат ICPC проходит ежегодно. Первое соревнование состоялось в 1970 г. За последние 17 лет Россия каждый год входила в четверку лидеров и получала золотые медали.
Например, в 2004 г. «золото» взяли Санкт-Петербургский ИТМО (первое место) и Пермский госуниверситет (четвертое место), в 2005 г. – Московский госуниверситет (МГУ) и ИТМО (второе и третье места соответственно), в 2006 г. – Алтайский государственный технический университет (третье место) и Саратовский госуниверситет (СГУ, первое место). В 2007 г. «золото» получила команда ИТМО (третье место), год спустя добравшись до первого места. Золотая медаль также досталась команде Ижевского государственного технического университета (третье место)
Россия продолжила одерживать победы и в 2009 г., получив три золотые медали из четырех. Это заслуга команд ИТМО (победитель), а также Санкт-Петербургского и Саратовского госуниверситетов (третье и четвертое места).
Екатерина Столбова, фонд «Сколково»: Грант покроет до 80% расходов компаний на внедрение ИТ-решений
Поддержка ИТ-отрасли
В 2010 г. в числе победителей оказался только МГУ (второе место), в 2011 г. – Санкт-Петербургский госуниверситет (СПбГУ, четвертое место). На следующий год «золото» досталось ИТМО (победитель) и МФТИ (третье место).
В 2013 г. Россия благодаря студентам ИТМО заняла первое место на чемпионате ICPC, прошедшем в Санкт-Петербурге. Всего в числе медалистов оказались четыре российских вуза.
В 2014 г. Россия снова оказалась на первом месте. Победителями ICPC стали студенты СПбГУ.
На следующий год российские студенты ИТМО в очередной раз взяли первое место на ICPC, притом с двумя абсолютными рекордами. В 2016 г. тоже была за Россией – лидерами стали студенты СПбГУ.
Искусственный интеллект помог сохранить редкий язык
Инновации для промышленности
Ситуация не изменилась и в последующие годы. В 2017 г. первое место присудили команде ИТМО, а в и 2019 гг. его получила команда МГУ.
В 2020 г. проведение чемпионата было отменено в связи с пандемией коронавируса. В итоге, с учетом победы нижегородских студентов, Россия занимает первые места в ICPC девять лет подряд.
На этот факт обратил внимание и заместитель председателя правительства России Дмитрий Чернышенко, участвовавший в церемонии награждения победителей. Также на мероприятии присутствовали замминистра связи Максим Паршин и руководитель столичного Департамента информационных технологий Эдуард Лысенко, занявший этот пост в сентябре 2018 г
Следующий финал ICPC предварительно запланирован на ноябрь 2022 г. Он пройдет в Бангладеш (город пока не выбран).
QMJHL Team Ratings in NHL 20
While there are a few much lower team ratings in the QMJHL on NHL 20, there are multiple teams that boast the same peak rating in goaltending and defensively. Offensively, the Saint John Sea Dogs tote a slight edge over the rest.
Team | Goaltending | Defence | Offence |
Acadie-Bathurst Titan | 57 | 47 | 54 |
Baie-Comeau Drakkar | 57 | 51 | 49 |
Blainville-Boisbriand Armada | 57 | 49 | 55 |
Cape Breton Eagles | 58 | 55 | 56 |
Charlottetown Islanders | 57 | 52 | 55 |
Chicoutimi Saguenéens | 57 | 55 | 56 |
Drummondville Voltigeurs | 56 | 52 | 55 |
Gatineau Olympiques | 55 | 47 | 55 |
Halifax Mooseheads | 58 | 48 | 55 |
Moncton Wildcats | 58 | 56 | 56 |
Québec Remparts | 57 | 48 | 55 |
Rimouski Océanic | 58 | 55 | 56 |
Rouyn-Noranda Huskies | 57 | 51 | 55 |
Saint John Sea Dogs | 55 | 55 | 57 |
Shawinigan Cataractes | 57 | 55 | 55 |
Sherbrooke Phoenix | 56 | 55 | 55 |
Val-D’Or Foreurs | 57 | 55 | 55 |
Victoriaville Tigres | 56 | 54 | 55 |
Технические моменты
Те, кто дочитал до этого места, наверное, заметили, что рейтинг на конкретную дату в прошлом — величина постоянная, и будучи однажды рассчитанным, меняться уже не будет. Таким образом, можно было бы один раз рассчитать рейтинг-листы на каждый день с 1941 года по текущий момент и хранить их в базе. Но на мой взгляд, такой подход не совсем оптимален из-за большого объема таких данных. Но вариант каждый раз рассчитывать рейтинг для каждой даты с нуля тоже не очень хорош, поскольку если для расчета рейтинга на какую-либо дату в 40-х нам бы потребовалось обработать пару тысяч игр, то для расчета рейтинга на текущий момент — уже более 50 тысяч. Разница во времени расчета получалась довольно заметная (миллисекунды против сотен миллисекунд). Поэтому я пошел на компромисс. Я сохранил значения рейтинга каждой команды на момент начала каждого сезона, и промежуточные значения на любую дату внутри сезона рассчитываются не на основе всех игр с нуля, а на основе значений на начало конкретного сезона. Как вы понимаете, на результат расчета это не влияет, зато положительно сказывается на скорости.
Ах да, забыл самое главное. Как всё это дело обновляется. Просто обновляется. Написан скриптец, который делает запрос к вышеупомянутому API НХЛ и получает данные о свежесыгранных матчах. Скриптец дергается кроном несколько раз за ночь (время начала матчей колеблется от 7:30 вечера до 6:30 утра по Москве, так что я предпочитаю делать обновления несколько раз за игровой день).
Основная информация
НХЛ существует с 29 ноября 1917 года. Первый сезон начался 19 декабря 1917 года в Монреале. За всю историю неоднократно менялись правила и количество команд-участниц. Последний принятый клуб – Вегас Голден Найтс, существующий с 2017/18. В 2021/22 в лигу придет 32-й клуб – Сиэтл Кракен. В действующем формате – с Восточной и Западной конференциями и четырьмя дивизионами – НХЛ существует с 2013 года.
Турнир состоит из двух частей – регулярного чемпионата и плей-офф. В регулярном чемпионате команды играют по 82 матча – 41 дома и столько же на выезде. Число игр, которые проводятся с определенным участником, устанавливается на основе ежегодной ротации. Победившему клубу присуждают два очка, за ничью в основное время назначается одно очко, за поражение в основное время – ни одного. Такая система существует с 2005/06. Клуб, набравший наибольшее число очков в регулярном чемпионате, получает Президентский Кубок. Три лидера дивизионов и четыре лучших клуба по очкам отправляются в плей-офф.
В плей-офф проводятся серии игр на выбывание, до четырех побед. В серии может быть от четырех до семи игр. В случае ничьей играется овертайм – полноценный двадцатиминутный период 5*5 игроков. Если победитель не определен в первом овертайме, играется второй, третий, пятый – до первой забитой шайбы. Победитель плей-офф получает Кубок Стэнли.
В 2020-м, в связи со всемирной пандемией, были изменены некоторые правила – временно убраны конференции и поменялась структура дивизионов. Один из них сделан полностью канадским, благодаря чему команды могут не пересекать канадо-американскую границу в условиях эпидемии коронавируса. Клубы проводят по 56 игр внутри дивизионов, по четыре лучших выходят в плей-офф.
Самый титулованный клуб НХЛ – Монреаль Канадиенс, на счету которого 24 Кубка Стэнли и множество других командных и личных рекордов чемпионата.
Наряду с основным призом существует ряд трофеев, которые вручаются отдельным игрокам в зависимости от того, как они провели регулярный сезон. Хоккеист, набравший максимальное количество очков (голы плюс передачи) получает Арт Росс Трофи. Лучшему снайперу регулярного чемпионата вручается Морис Ришар Трофи. Александр Овечкин завоевывал эту награду девять раз. Голкипер, сыгравший более 25 игр и пропустивший минимум шайб, получает Уильям Дженнингс Трофи. Вратарь, продемонстрировавший лучшую игру, получает Везина Трофи – в этом случае фаворит определяется голосованием генменеджеров клубов НХЛ.
Взлеты и провалы
Серьезный подъем в турнирной таблице регулярного чемпионата
ожидает «Даллас». «Шерифы» в прошлом сезоне были, пожалуй, самой невезучей
командой лиги. Эпидемия травм, проблемы из-за «ковидных» ограничений и куча
других неурядиц не позволила зацепиться за плей-офф. Но сейчас «Даллас» полон
сил и решимости — если никаких потрясений не будет, то клуб обязательно займет
свое законное место в играх на вылет.
А вот «Нэшвилл», который и опередил «звезд» в гонке за 8
место в конференции, почти наверняка окажется за бортом плэй-офф. Давайте будем
честны: «хищникам» и так изрядно повезло в прошлом году. По-хорошему, они
должны были разъехаться по курортам уже после окончания регулярного сезона, но
— сумели пройти в плей-офф, где благополучно уступили «Каролине» в первом
раунде.
Школьный этап 2022 олимпиада по математике 4 класс Сириус
1.Когда‑то давно Кирилл задумался о сегодняшнем дне и понял следующее:
- Завтра не сентябрь;
- Через неделю будет сентябрь;
- Послезавтра не среда.
- В какой из указанных дней все эти три утверждения верны одновременно?
Выберите все верные варианты: Понедельник, 30 августа Вторник, 31 августа Среда, 25 августа
2.Числа 8, 9, 10, 11, 12 расставлены в ряд в некотором порядке. Оказалось, что сумма первых трёх из них равна 31, а сумма последних трёх равна 29. Определите число, стоящее посередине.
3.Каждый день сладкоежка покупает на одну конфету больше, чем в предыдущий. За одну неделю в понедельник, вторник и среду в сумме он купил 405 конфет. Сколько конфет он купил за четверг, пятницу и субботу в сумме на той же неделе?
4.В квадрате 13×13 закрасили чёрным цветом центральную клетку. Максим нашёл клетчатый прямоугольник наибольшей площади, который целиком располагается внутри квадрата и не содержит чёрную клетку. Сколько в нём клеток?
5.Алина добирается в школу на автобусе. Автобус ходит по расписанию каждые 15 минут. На дорогу до остановки девочка тратит всегда одинаковое число минут. Если она выйдет из дома в 8:20, то будет в школе в 8:57, а если выйдет из дома в 8:21, то опоздает в школу. Уроки начинаются в 9:00. На сколько минут Алина опоздает в школу, если выйдет из дома в 8:23?
6.Марк загадал трёхзначное число, большее 500, и сказал, что если все нечётные цифры этого числа заменить на А, а чётные — на Б, то получится АББ. Если же все цифры, делящиеся на три, заменить на В, а не делящиеся на три — на Г, то получится ВВГ. Укажите все трёхзначные числа, отвечающие этим условиям.
7.У каждой из 37 шестиугольных ячеек есть 3, 4 или 6 соседей. В некоторые из ячеек поставили фишки. После этого в каждую свободную ячейку, соседствующую не менее чем с двумя ячейками, которые содержат фишки, записали число этих соседних фишек. Затем фишки убрали, и на рисунке остались только числа. Сколько было фишек?
8.В прямоугольнике 9×14 расставили числа от 1 до 126. Получилось девять строк и четырнадцать столбцов. В каждом столбце выбрали среднее по величине число, а из средних чисел выбрали наибольшее. Какое наименьшее значение может принимать это наибольшее число? Напомним, что среди 99 чисел средним по величине называется такое, которое больше 49 других и меньше 49 других.
OHL Team Ratings in NHL 20
In the OHL team ratings of NHL 20, the Soo Greyhounds boast the highest rating between the pipes, many OHL clubs boast a similarly-rated defence, and the London Knights have the top-rated offence.
Team | Goaltending | Defence | Offence |
Barrie Colts | 57 | 49 | 52 |
Erie Otters | 56 | 55 | 54 |
Flint Firebirds | 57 | 56 | 55 |
Guelph Storm | 56 | 55 | 55 |
Hamilton Bulldogs | 56 | 48 | 55 |
Kingston Frontenacs | 57 | 51 | 48 |
Kitchener Rangers | 57 | 55 | 55 |
London Knights | 55 | 55 | 57 |
Mississauga Steelheads | 56 | 55 | 52 |
Niagara Icedogs | 57 | 47 | 49 |
North Bay Battalion | 55 | 47 | 51 |
Oshawa Generals | 57 | 55 | 54 |
Ottawa 67’s | 57 | 56 | 55 |
Owen Sound Attack | 57 | 56 | 55 |
Peterborough Petes | 57 | 55 | 55 |
Saginaw Spirit | 56 | 56 | 56 |
Sarnia Sting | 56 | 55 | 55 |
Soo Greyhounds | 58 | 55 | 55 |
Sudbury Wolves | 56 | 55 | 55 |
Windsor Spitfires | 57 | 55 | 56 |
Сотни претендентов
В прошедшем в Москве финале ICPC должны были участвовать команды 173 из 63 стран мира. Российская «сборная» в итоге оказалась наиболее многочисленной – страну на соревнованиях представляли 15 команд. Столько же было только у Индии, а затем следовали США (14 команд), Бразилия (девять команд) и Южная Корея (шесть команд).
Примечательно, что Россия имела все шансы стать второй по числу участвующих университетов. В последний момент с дистанции сошла «сборная» Китая, насчитывающая 18 команд. Истинная причина отказа страны от участия в ICPC не установлена, но официально страна ссылается на пандемию коронавируса.
По количеству подтвержденных случаев коронавируса (7,52 млн на 6 октября 2021 г.) Россия уступает как минимум США, Индии, Великобритании, Германии и Бразилии. Как в итоге распределились бы призовые места, если бы Китай не отказался от участия, неизвестно.
Школьный этап 2022 олимпиада по математике 9 класс Сириус
1.Группа туристов вышла на маршрут со стоянки. Через 15 минут турист Иван вспомнил, что забыл на стоянке фонарик, и пошёл за ним обратно со скоростью большей, чем у основной группы. Забрав фонарик, он стал догонять группу с той же повышенной скоростью и сделал это только спустя 1 час после того, как ушёл за фонариком. Считая скорости движения группы и Ивана вне группы постоянными, найдите, во сколько раз скорость Ивана больше скорости группы. Ответ запишите целым числом или десятичной дробью.
2.У Марфы‑рукодельницы в шкатулке лежит много булавок. В первый раз она достала оттуда три булавки, а в каждый последующий — на k булавок больше, чем в предыдущий. Оказалось, что в девятый раз она достала больше 65 булавок, а в тринадцатый — меньше 115. Запишите все возможные k.
3.К описанной около треугольника FDC окружности проведена касательная FK, причём ∠KFC=66∘. Точки K и D лежат по разные стороны от прямой FC, как и показано на рисунке. Найдите острый угол между биссектрисами углов CFD и FCD. Ответ выразите в градусах.
4.Среди сорока девяти подряд идущих натуральных чисел ровно 7 делятся на 8 без остатка. Какой остаток при делении на 8 даёт одиннадцатое по счёту число?
5.Для действительных чисел a и b известно, что ab=8, 1a2+1b2=0.75. Запишите все возможные значения a+b.
6.Четыре шахматиста — Иванов, Петров, Васильев и Кузнецов — сыграли однокруговой турнир (каждый с каждым по одной партии). За победу даётся 1 очко, за ничью — по 0.5 каждому. Оказалось, что у занявшего первое место 3 очка, а у занявшего последнее — 0.5. Сколько существует вариантов распределения очков у названных шахматистов, если некоторые из них могли набрать равное количество очков? (Например, варианты, когда у Иванова — 3, а у Петрова — 0.5, и когда у Петрова — 3, а у Иванова — 0.5, считаются различными!).
7.По кругу стоят люди — лжецы, которые всегда врут, и рыцари, всегда говорящие правду. И каждый из них сказал, что из людей, стоящих с ним рядом, лжецов и рыцарей поровну. Сколько всего людей, если рыцарей 42?
8.Параллелограмм ABCD сложили по диагонали BD так, что вершина C осталась на месте, а вершина A заняла положение A′. Отрезки BC и A′D пересеклись в точке K, причём BK:KC=5:2. Найдите площадь треугольника A′KC, если площадь параллелограмма ABCD равна 42.
Школьный этап 2022 олимпиада по математике 8 класс Сириус
1.Гирьки с весами 1,2,3,5,7,16 граммов разложили на две кучки с равными весами. В первой из них две гири, во второй — четыре гири. Какие две гири лежат в первой кучке?
2.В ряд выписаны все натуральные числа без пробелов: 12345678910111213. Какой по счёту цифрой от начала является двенадцатая девятка?
3.Из клетчатого квадрата со стороной 35 вырезали прямоугольник 31×32, примыкающий к одному из углов квадрата. Владик хочет в оставшемся куске закрасить пятиклеточный крестик. Сколькими способами он это может сделать?
4.Каждый вечер, начиная с первого сентября, маленький Антоша съедал по пирожному. После очередного пирожного он заметил, что за всё это время съел 10 вкусных пирожных (остальные ему показались невкусными). Но среди любых семи подряд съеденных пирожных не менее трёх оказывались вкусными. Какое наибольшее количество пирожных мог съесть Антоша?
5.Найдите наименьшее натуральное n такое, что натуральное n2+12n+11 делится на 92.
6.Второго сентября Карлсон съел 8 банок варенья, а начиная с третьего сентября ел каждый день столько, сколько уже съел в среднем за сентябрь. Двенадцатого сентября Карлсон съел 27 банок варенья. Сколько банок варенья он съел первого сентября?
7.В четырёхугольнике ABCD AB=BC=CD. Пусть E — точка пересечения AB и CD (B между A и E). Оказалось, что AC=CE и ∠BEC=40∘. Найдите ∠BDC.
8. Есть 8 прямоугольных листов бумаги. За каждый ход выбирается один из листов и делится прямолинейным разрезом, не проходящим через вершины, на два листа. После 70 ходов оказалось, что все листки — треугольники или шестиугольники. Сколько треугольников?
Филипп Грубауэр из «Сиэтл Кракен»
Один из самых шокирующих трансферов этого года. Все ожидали, что Грубауэр повторно подпишет контракт с «Эвеланш». Но вместо этого он перенес свой талант на родину «Starbucks» и гранжа. «Когда открылось окно, мне позвонили из Сиэтла. Для меня было несложно присоединиться к новому клубу, стать частью чего-то нового и творить историю, как это сделали до меня другие», — сказал Грубауэр после подписания шестилетнего контракта на сумму 35,4 миллиона долларов. Можно только гадать, как будут выглядеть его статистические цифры, поскольку перед ним совершенно новая команда, но у него действительно впечатляющее резюме. В прошлом сезоне он добился 30-9-1 с 1,95 GAA и 0,922 процента сейвов и семью локаутами, чтобы заработать возможность стать финалистом «Vezina Trophy». Конечно, впереди него были Микко Рантанен, Габриэль Ландеског, Натан Маккиннон и Кейл Макар. Но Грубауэр – это парень, у которого за всю карьеру процент сейвов составляет 0,920, так что он определенно не будет нервничать даже перед такими именитыми хоккеистами.
Лучшие игроки НХЛ сезона 2021/2022
Конечно, хоккей — игра командная, но роль личности в истории преуменьшать тоже нельзя. Функционеры НХЛ об этом тоже не забывают и присуждают несколько индивидуальных трофеев
Есть смысл попробовать обратить внимание на тех, кто имеет больше всего шансов на их получение
«Арт Росс Трофи» (лучший бомбардир) и «Харт Трофи» (MVP регулярного сезона)
Без вариантов — Коннор Макдэвид из «Эдмонтона». Он чертовски
быстр и много, очень много забивает. В прошлой регулярке он набрал аж 102 очка
по системе «гол+пас»; для сравнения — всего на счету «нефтяников» 183 шайбы.
Сложно представить, где бы «Ойлерс» были без Макдэвида. Мало ли, что в первом же
раунде Кубка Стэнли «Эдмонтон» буквально развалился, всухую уступив
«Виннипегу»! Мы же ведем речь об индивидуальных трофеях, и их почти наверняка
получит форвард «нефтяников». Конечно, если травмы не помешают.
«Джеймс Норрис Трофи» (лучший защитник)
В этой номинации стоит ожидать победы 22-летнего Кейла
Макара из «Колорадо». Он считается одним из самых перспективных игроков лиги —
как на своей позиции, так и в целом. Скауты «Эвеланш» вовремя разглядели
талантливого парня в Юниорской хоккейной лиге Альберты, который в итоге был
выбран под общим четвертым номером на драфте-2017. Перед этим сезоном Макар
получил новый контракт на 9 миллионов долларов в год и, судя по всему, ему
придется оправдывать вложенные средства.
«Везина Трофи» (лучший вратарь)
Здесь вне конкуренции будет, вероятно, россиянин Андрей Василевский. В составе «Тампы» он буквально только что выиграл второй подряд Кубок Стэнли и стал самым ценным игроком плей-офф — некисло для голкипера! Уроженец Тюмени сейчас находится на самом пике своей карьеры — ему лишь 27, и он показывает потрясающий уровень. Если Василевскому удастся сохранять нужные кондиции, то он еще 10—15 лет сможет выступать в НХЛ. А нам остается только следить за Андреем и надеяться, что игроки из Национальной хоккейной лиги смогут приехать на Олимпиаду-2022.
«Колдер Трофи» (лучший новичок)
Коул Кофилд уже успел сыграть в НХЛ за «Монреаль», однако
это будет первый полный сезон для 20-летнего правого форварда. «Канадиенс» не
отличаются мощным составом и хоть какими-то амбициями; это означает, что на
плечи Кофилда может лечь колоссальная ответственность в виде лидерства в
команде. От того, насколько он справится с этим грузом, зависят и перспективы в
борьбе за титул лучшего новичка лиги. А конкуренция здесь нешуточная: на
«Колдер Трофи» претендуют также, например, Тревор Зеграс из «Анахайма», голкипер
«Флориды» Спенсер Найт и детройтский немец Мориц Зайдер.
Школьный этап 2022 олимпиада по математике 7 класс Сириус
1.Какие цифры надо вставить вместо звёздочек в десятичную запись 4⋆⋆1⋆ 53 ⋆ (вместо каждой звёздочки — ровно одну цифру), чтобы получившееся число было минимально возможным и делилось на 18? В ответ запишите полученное число.
2.В ряд расставлены натуральные числа от 4 до 12 в каком‑то порядке. Оказалось, что сумма первых семи чисел равна 53, а сумма средних семи чисел (т.е. без первого и последнего) равна 61. Какое число стоит на первом месте?
3.Согласно календарю марсиан, год состоит из 669 марсианских суток и делится на 12 месяцев (называемых так же, как и у нас). Три месяца в году (январь, май и сентябрь) — антивисокосные, в них 55 дней. В обычном же месяце 56 дней. В неделе у марсиан, как и у нас, семь дней. Однажды марсианин Ляпа заметил, что 13 мая пришлось на пятницу. В каком месяце 13 число придётся на пятницу в следующий раз?
4.На уроке математики Аня, Боря и Влад стали закрашивать клеточки с постоянной скоростью (но каждый со своей). Аня и Влад начали одновременно, а Боря присоединился потом — в тот момент, когда Аня закрасила 20 клеточек, а Влад — 32 клетки. Через некоторое время выяснилось, что Влад закрасил 56 клеточек, и Аня с Борей вместе — тоже 56. А к концу урока оказалось, что Аня с Борей закрасили поровну клеточек. Сколько клеток закрасил каждый из них?
5.Даны три четырёхзначных числа. Если в них все нечётные цифры заменить на 1, то сумма полученных чисел будет равна 6458. А если заменить на 1 все чётные цифры, то сумма чисел составит 5533. Чему на самом деле равна сумма данных чисел?
6.На конференцию приехали 120 человек. Каждый из них либо рыцарь, всегда говорящий правду, либо лжец, который всегда лжёт (те и другие присутствуют). Их распределили на несколько секций так, чтобы во всех было равное количество участников. Каждый из людей сказал: «Кроме меня, в моей секции поровну рыцарей и лжецов». Какое наибольшее количество рыцарей могло быть?
7.Флаг Панбалтии представляет собой прямоугольное полотно 100×150 см с белым крестом (горизонтальная и вертикальная линии одинаковой толщины), разбивающим зелёный фон на четыре прямоугольника (см. рисунок). Оказалось, что сумма периметров этих прямоугольников в 1.6 раз больше периметра креста. Найдите толщину креста. Ответ выразите в сантиметрах.
8. Из квадрата вырезали пять клеток, после чего оказалось, что существует 2710 способов вырезать полоску 1×3 (полоски бывают как горизонтальные, так и вертикальные). Найдите сторону квадрата.
Реализация
Итак, идея есть, теперь нужно ее реализовать. Для начала нам нужны результаты игр. Без них рейтинг не посчитать. Результаты можно было бы собрать на различных спортивных сайтах автоматически или, в случае крайней необходимости, даже вручную. Но, к счастью, у сайта НХЛ есть открытое API, через которое можно получить статистические данные не только по играм, но и по командам и игрокам за всю историю существования лиги.
Для начала я выкачал данные за один сезон, сохранил их в CSV и написал простенькую консольную программку на Python, которая по этим данным рассчитывала рейтинг. Успех. Затем я выкачал результаты всех игр с 1941 года. Почему с 1941? Несмотря на то, что лига существует с 1917 года, в первые годы ее существования клубы изрядно колбасило. Многие из них исчезали, просуществовав всего несколько лет (этому поспособствовала в том числе и Великая депрессия). Более-менее стабильный состав лиги сформировался к 1942 году (начало эры Большой шестерки). Один год я прибавил для того, чтобы к 1942 рейтинги уже имели какие-то осмысленные, отличные от начальных значения. С помощью своей консольной программулины я попытался посчитать рейтинги команд, и тут вскрылся один нюанс, о котором я расскажу чуть позже.
Итак, настало время хранить данные каким-то более приличным способом, чем csv-файлы на диске. Мне для этих целей вполне подошла PosgreSQL. Была создана таблица с командами и таблица с результатами игр. А теперь время рассказать про тот самый нюанс. Команды (а точнее, франшизы), порой меняют название. Хуже того, они иногда еще и переезжают. Что еще хуже, иногда две команды с одним названием из разных эпох — это две разные франшизы. Давайте более конкретно. Была в городе Виннипег команда Winnipeg Jets. Из-за финансовых проблем, связанных в том числе с падением канадского доллара, в середине 90-х вместе со всеми игроками она переехала в американский город Финикс, что в штате Аризона, и стала называться Phoenix Coyotes. А с середины 2010-х — Arizona Coyotes. И этот клуб исторически правопреемник того Виннипега. И рейтинг этой франшизы нужно считать непрерывно, от Виннипега через Финикс до Аризоны. А в 2011 клуб из американского города Атланта под названием Atlanta Thrashers нашел себе новый дом в Виннипеге и стал называться… да-да, Winnipeg Jets. И этот Виннипег — правопреемник Атланты, и никакого отношения к тому Виннипегу из 90-х не имеет. Такие дела. Пришлось создавать отдельную таблицу с названиями команд, их связью idшниками франшиз и периодами действия того или иного названия.
Поскольку в итоге я хотел получить вебсайт, на котором можно будет просматривать рейтинги, нужно было выбрать стек, на котором этот сайт будет построен. Так как у меня уже была написана вышеупомянутая программа на Python, было решено писать бекэнд на ее основе. Для этого был взят Flask, т. к. очевидно Django был бы overkill для такой задачи. В качестве библиотеки для фронтенда я взял React, поскольку я хотел сделать SPA с бесшовным переходом между страницами и датами (откуда у нас несколько страниц, я покажу позже). В качестве библиотеки компонентов я взял Material UI, хотя оглядываясь назад, стоит признать, что пару табличек я мог бы и вручную сверстать, не подключая целую библиотеку.
Надо заметить, что изначально я написал просто бекэнд на Flask, отдающий статику. То есть просто html с табличкой, как в старые добрые времена. Идея разделить фронт и бэк и прикрутить на фронт React появилась позже. Примерно в то же время я для пробы написал версию бекэнда на NodeJS (Express) и обнаружил, что она обрабатывает запросы в 2-3 раза быстрее, чем версия на Flask. Таким образом я выкинул Python + Flask и внедрил NodeJS + Express. SQLAlchemy уступила место Sequelize в качестве ORM.
Робин Ленер из «Вегас Голден Найтс»
В прошлом сезоне Ленер объединился с Марком-Андре Флери, чтобы заполучить трофей Уильяма М. Дженнингса, пропустив наименьшее количество голов. Это был не первый раз, когда имя Ленера гравировалось на кубках. Он выиграл его в 2019 году с Томасом Грейссом на Лонг-Айленде. Теперь, после некоторых перестановок в последние несколько лет, Ленер прочно обосновался в Неваде как вратарь №1. Он продемонстрировал показатели 13-4-2 с процентом сейвов 0,913. В постсезоне о нем было не о чем писать, но после сезона, в котором он боролся с сотрясением мозга, он готов к игре и к новым восторженным отзывам!
А что дальше?
Еще год назад (когда я и занимался всем вышеописанным) у меня были планы планы расширять функциональность данного сайта. Я хотел добавить больше интересных вариантов просмотра рейтинга (разбиение по конференциям и дивизионам, например), вероятности различных исходов в плей-офф, расчет сложности расписания игр для каждой команды и прочее. Также хотел перевести сайт на NextJs, чтобы был серверный рендеринг. К сожалению, энтузиазм поугас, и сейчас его едва хватает на то, чтобы поддерживать то, что есть. Если вдруг я найду время и желание, то возможно что-то и будет. Но вероятность этого не так и велика
Если кто-то дочитал досюда, большое спасибо за внимание. Кто не дочитал — тоже спасибо, но они этого не увидят