Программирование и лотереи: часть 1
В этой части автор рассказывает причинах написания данного цикла и генерирует первую самую простую статистику одной лотереи – по убыванию числа выпадений номеров.
Введение
Мне всегда интересна была тема лотерей. Нет, не в связи с азартом (я не «игровой» как говорят у нас на местном сленге), а в связи с программированием. Я не отношусь к тем людям, кто хочет нащупать так называемую «систему выигрыша» (спойлер – её нет), но хочу выявить некие закономерности (спойлер – они есть).
Этот цикл небольших моих статей будет интересен определённой части программистов, кто интересуется данной областью. Определенной структуры цикла у меня пока нет, всё пишется и публикуется так сказать «с колес». Язык программирования преимущественно PHP, код с пояснениями, поймет даже начинающий веб разработчик.
Первое исследование
Перейдем к практике. Так как нам по большому счету безразлично что исследовать, то берем первую попавшуюся лотерею - «Пять-О-Пять» от Национальной Лотереи.
Примечание. Все упоминающиеся в этой и последующих статьях лотереи и организаторы не заплатили мне ничего, я не призываю играть и не рекламирую азартный бизнес. Изображения, скриншоты и торговые марки принадлежат правообладателям, используются исключительно в демонстрационных целях. Моральная сторона дела мне не очень интересна, я исследую только техническую. Так что претензии не принимаются (улыбающийся смайлик).
Итак, в лотерейном билете «Пять-О-Пять» два игровых поля. Заполните первое поле, выбрав пять неповторяющихся чисел от 1 до 50 включительно и два числа от 1 до 12 включительно во втором поле.
Национальная лотерея предоставляет публичное апи для показа результатов прошлых игр. Это очень удобно не надо парсить сайт. Скачиваем файлик json для всех прошлых розыгрышей пять-опять. Их немного, меньше 6 тысяч.
Структура json довольно проста
Код ниже читает этот скачанный ранее json (напрямую с сервера сайт не отдаёт, надо имитировать браузер – этим мы займемся в следующих материалах), декодирует, обрабатывает все розыгрыши, подсчитывает число выпадений и получившийся массив (ключ – номер, значение – число выпадений) сортирует по убыванию. Информация выводится в виде таблицы.
<?php
// Читаем содержимое файла
$jsonContent = file_get_contents('json.txt');
if ($jsonContent === false) {
die('Не удалось прочитать файл json.txt');
}
// Декодируем JSON
$data = json_decode($jsonContent, true);
if ($data === null) {
die('Ошибка при парсинге JSON');
}
// Массивы для подсчета main и sub номеров
$mainCounts = [];
$subCounts = [];
// Обрабатываем каждый розыгрыш
foreach ($data['content'] as $draw) {
// Подсчет main-номеров
if (isset($draw['combination']['main'])) {
foreach ($draw['combination']['main'] as $number) {
$mainCounts[$number] = ($mainCounts[$number] ?? 0) + 1;
}
}
// Подсчет sub-номеров
if (isset($draw['combination']['sub'])) {
foreach ($draw['combination']['sub'] as $number) {
$subCounts[$number] = ($subCounts[$number] ?? 0) + 1;
}
}
}
// Сортировка по убыванию
arsort($mainCounts);
arsort($subCounts);
?>
<html>
<head>
<title>loto upread.ru</title>
<link rel="stylesheet" type="text/css" href="bootstrap.css" >
</head>
<body>
<div id="wrapper">
<div>
<h2>Основные номера (main)</h2>
<table class="table table-striped">
<tr>
<th>Номер</th>
<th>Выпадений</th>
</tr>
<?php
foreach ($mainCounts as $number => $count) {
echo "<tr><td>$number</td><td>$count</td></tr>";
}
?>
</table>
</div>
<div>
<h2>Дополнительные номера (sub)</h2>
<table class="table table-striped">
<tr>
<th>Номер</th>
<th>Выпадений</th>
</tr>
<?php
foreach ($subCounts as $number => $count) {
echo "<tr><td>$number</td><td>$count</td></tr>";
}
?>
</table>
</div>
</div>
</body>
<style>
#wrapper{
display: flex;
margin: auto;
justify-content: space-around;
}
</style>
</html>
И в итоге получается у нас что-то типа такого
Для красоты я добавил бутстрап для оформления.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Программы на заказ
Отзывы
Контакты