Генерация случайного числа, одинакового в течении часа

202 просмотра
0
0 Комментариев

Есть масса различных элементов и два возможных состояния у каждого. Нужно, чтобы это состояние рандомно генерировалось и не менялось в течении часа. Состояние каждого элемента не должно храниться в системе, а должно генерироваться по необходимости. Как это сделать? Пока есть идея такая — на основе номера часа и номера дня (чтобы каждый день новое и не повторялось в одинаковые часы каждого дня) и названия элемента сгенерировать случайное число от 1 до 10, если меньше 5 — то первое состояние, если больше — то второе. Но как сгенерировать число на основе другого числа? Или как ещё можно генерировать неизменное состояние (одно из двух), так, чтобы оно было одинаковым весь час? Нужно, чтобы это работало либо на сервере (Python, Django), либо на клиенте (JavaScript, Angular).

Приведу пример. Есть элементы А, В, С. И два состояния — 1 и 2. Допустим, в 20:00 часов при запросе их состояние вернётся А-1, В-1, С-2. Если сделать запросы в 20:05, 20:22, 20:45 и так далее, что вернётся всё равно А-1, В-1, С-2. Но если сделать запрос в следующий час, например в 21:03, то вернутся другие состояния для элементов, например А-2, В-1, С-1. Они не должны храниться где то, а должны именно генерироваться. Как такое сделать?


Добавить комментарий

2 Answers

Python Опубликовано 18.12.2018
0

Решил использованием встроенной функции hash. Я передаю ей название элемента и текущую дату, получая в ответ числовой хэш, различающийся при разной дате и одинаковый при одинаковых параметрах.

Добавить комментарий
0

Можно использовать seed из модуля range. Меняете seed раз в час и у вас будут новые значения. seed можно устанавливать исходя из чего угодно, даты, времени, числа или строки.

Например:

 import random
 
 random.seed(12345)
 for _ in range(5):
     print("%.3f" % random.random())
 
 print()
 
 random.seed(12345)
 for _ in range(5):
    print("%.3f" % random.random())
 
 #меняем seed и получаем новую последовательность
 print()
 
 random.seed(54321)
 for _ in range(5):
     print("%.3f" % random.random())

Добавить комментарий
Напишите свой ответ на данный вопрос.
Scroll Up