Skip to content

Instantly share code, notes, and snippets.

@vmrfriz
Last active February 21, 2024 06:25
Show Gist options
  • Save vmrfriz/2d73494d8695bb1b6059a41e71ff3189 to your computer and use it in GitHub Desktop.
Save vmrfriz/2d73494d8695bb1b6059a41e71ff3189 to your computer and use it in GitHub Desktop.
Статистика по знакам Зодиака

Статистика по знакам Зодиака

Использование

  1. В одной директории с zodiac.php положить файл zodiac.csv. Файл должен состоять из одной колонки с датами без первой заголовочной строки.
  2. Запустить скрипт php zodiac.php
  3. Профит

Получение результатов

Скрипт выводит результаты в stdout (стандартный вывод) в следующем формате:

Результат:
Козерог; 793; 7.8%
Лев; 810; 7.97%
Стрелец; 740; 7.28%
Скорпион; 817; 8.04%
Рак; 957; 9.42%
Овен; 817; 8.04%
Водолей; 809; 7.96%
Весы; 850; 8.36%
Дева; 844; 8.3%
Близнецы; 978; 9.62%
Телец; 829; 8.16%
Рыбы; 919; 9.04%

Сохранение в csv

Стандартный вывод можно перенаправить в файл и получить результат в csv:

php zodiac.php > result.csv
<?php
/**
* Нужно чтобы рядом со скриптом лежал файл zodiac.csv,
* где в один столбец с датами (каждая с новой строки).
*
* File format:
* ```
* 05.07.2003
* 28.02.1962
* 22.12.1999
* ...
* ```
*
* Запуск: php zodiac.php
* Результат:
* Козерог; 793; 7.8%
* Лев; 810; 7.97%
* Стрелец; 740; 7.28%
* Скорпион; 817; 8.04%
* Рак; 957; 9.42%
* Овен; 817; 8.04%
* Водолей; 809; 7.96%
* Весы; 850; 8.36%
* Дева; 844; 8.3%
* Близнецы; 978; 9.62%
* Телец; 829; 8.16%
* Рыбы; 919; 9.04%
*/
$zodiac = [
'Овен' => [321, 420],
'Телец' => [421, 520],
'Близнецы' => [521, 621],
'Рак' => [622, 722],
'Лев' => [723, 822],
'Дева' => [823, 923],
'Весы' => [924, 1023],
'Скорпион' => [1024, 1122],
'Стрелец' => [1123, 1221],
'Козерог' => [1222, 120],
'Водолей' => [121, 218],
'Рыбы' => [219, 320],
];
function getZodiac(int $date): string
{
global $zodiac;
$value = intval(date('nd', $date));
foreach ($zodiac as $name => [$start, $end]) {
$min = $start <= $value;
$max = $value <= $end;
if ($start < $end) {
if ($min && $max) {
return $name;
}
} elseif ($min || $max) {
return $name;
}
}
return null;
}
$dates = array_filter(explode("\n", file_get_contents('zodiac.csv')));
$result = [];
foreach ($dates as $date) {
$d = strtotime($date);
$z = getZodiac($d);
if (! array_key_exists($z, $result)) {
$result[$z] = 0;
}
$result[$z]++;
}
$all = array_sum($result);
foreach ($result as $z => $count) {
$percent = round(100 / $all * $count, 2);
echo "{$z}; {$count}; {$percent}%\n";
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment