[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Псевдо рандом
Страницы: 1, 2
sx000
Нужна такая функци:
есть
$checksum = crc32($chtoto);

есть диапазон чисел минимальное значение скажем 3 максимальное значение 50.
Задача сделать уникальную выборку одного числа которое будет правдиво только для $checksum и заданного диапазона. Если скажем взять другой $checksum то будет другое число в заданном диапазоне ... но сколько не запрашивай число должно быть одно и тоже для одного и того же $checksum.
$checksum всегда один и тот же и используется в данном случае как ключ к получению итогового значения.
Не могу сообразить как это сделать. Помогите
Valick
описание задачи слишком туманно, но насколько я понял...
делайте таблицу в БД и заносите новоиспеченные отношения числа и $checksum, потом просто делаете выборку по $checksum перед генерацией нового рандома и если соответствие существует, то на этом и успокаиваемся.

_____________
Стимулятор ~yoomoney - 41001303250491
sx000
сразу скажу что база тут вообще не нужна, видимо на пример надо.
Есть диапазон $min = 3, $max = 50
есть число $chislo = 127651776553111
функция принимает $min,$max,$chislo
и выдает скажем 12 после расчетов ...
если я ему задам другое $chislo то он выдаст мне 27 допустим ... и всегда будет выдавать одно и тоже число в заданном диапазоне в зависимости от ключа
Valick
и где рандом?
просто возмите хеш от 3+50+127651776553111
___
а нет, вам же нужно от 3 до 50
значит придумывайте формулу, раз вам база не канает, хотя с базой это оптимальный вариант
можно конечно и в файле хранить, но с файлами горя хапните

_____________
Стимулятор ~yoomoney - 41001303250491
sx000
зачем нужна база для генерации значения в заданном диапазоне?
Игорь_Vasinsky
за то есть сессии.

но если будешь писать рекурсивную функцию - всегда есть шанс получить
Fatal error: Maximum function nesting level of '100' reached, aborting! in ....

_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
sx000
while ($checksum > $max ){
$checksum = $checksum / 2;
}


вот так вот сделал :) ну в конце проверку чтоб не было меньше минимального
sx000
function ($checksum, $min, $max){
while ($checksum > $max ){
$checksum = $checksum / 2;
}
if ($checksum < $min){
$checksum = $min;
}
return round($checksum);
}
sx000
надо было пожрать smile.gif а тов голове одни запахи были
Valick
т.е у вас и при 200 и при 100 и при 50 будет одинаковое число 25?
как это вяжется с условием задачи?

_____________
Стимулятор ~yoomoney - 41001303250491
sx000
ну можно коэффициент поменять на 1.1 и тогда будет все по другому ... есть прокол в одном когда я ему задаю минимально и максимально 250,255 он всегда будет давать 250 ...
sx000
function prand ($min, $max, $checksum){
while ($checksum > $max ){
$checksum = $checksum /1.3;
}
if ($checksum < $min){
$checksum = $checksum*1.1;
}
return round($checksum);
}

так вот костыль дописал в виде логично коэффициента в конце который меньше на делимое. просто не знаю как по другому сделать чтоб осталось в диапазоне нужном. Не могу прыгает за максимальное значение и все тут
sx000
Мозг уже взрывается smile.gif помогите пожалуйста
Valick
вам нужно писать формулу изобилующую тригонометрическими функциями
но гораздо проще вариант с БД, да и функции это зависимость, а с базой, что ни на есть рандом
если вам надо такую байду для каждого пользователя и ориентированную на сеанс, то и сессии пойдут

_____________
Стимулятор ~yoomoney - 41001303250491
sx000
function prand ($min, $max, $checksum){
$rasnost = $max - $min;
$checksum = preg_replace('#(\d\.\d)|(\d{1})#', ' $1$2 ', $checksum);
$procent = array_sum(explode(' ', $checksum));
$result = $min+(($rasnost/100)*$procent);
return round($result);
}

checksum у меня всегда 10 чисел, число не может быть больше 9 же :) значит я могу привести их сумму к какому то общему числу, которое будет по сути уникально. Сумма не может быть больше 90. А значит мона вычислить все через процентное отношение. Ну мож кто то умнее предложит вариант.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.