|
|
|
| Имеется обычная текстовая строка, например типа «Прекрасный праздник Первомай». Длина её может быть любой; возможны латиница, знаки и цифры. Требуется на основании этой строки каким-либо образом сформировать целое число, находящееся в заданных пределах, например в диапазоне от 3 до 30.
Закономерность формирования этого числа не имеет значения. Главное, чтобы, вводя одну и ту же фразу как аргумент функции, мы получали бы одно и тоже число. | |
|
|
|
|
|
|
|
для: Владимир55
(22.04.2012 в 22:06)
| | Хм... может начать отталкиваться от существующего хэша, скажем md5? В нем же фактически 16-ричные числа, т.е. берем первые или последние два, складываем, будет правда немного больше, 32 (но это поправить не сложно). | |
|
|
|
|
|
|
|
для: cheops
(22.04.2012 в 22:18)
| | Интересно, а хэш md5, если его весь рассматривать как тридцатидвухразрядное шестнадцатиричное число, изменяется в диапазоне от единицы? Встречаеся ли случай, когда хеш 00000000000000000000000000000001 ? | |
|
|
|
|
|
|
|
для: Владимир55
(22.04.2012 в 22:35)
| | Теоретически такое возможно, только вряд ли это будет осмысленный текст, да и текстом это вряд ли будет (однако, не уверен полностью, не разбирал алгоритм). | |
|
|
|
|
|
|
|
для: cheops
(22.04.2012 в 22:37)
| | Это я к тому, что нельзя ли использовать весь хэш как число и затем масштабировать его в нужный диапазон. Не получится так? | |
|
|
|
|
|
|
|
для: Владимир55
(22.04.2012 в 22:39)
| | Хм... вообще можно попробовать, максимум вроде в районе 1х10e+77, если я ничего не путаю, а в числе с плавающей точкой двойной точности должно быть в районе 1х10e+308, т.е. запас есть. Сейчас попробуем. | |
|
|
|
|
|
|
|
для: Владимир55
(22.04.2012 в 22:39)
| | Можно начать отталкиваться от следующего скрипта
<?php
$number = (float)base_convert("449aa40455f137fc8c41c41db6275528", 16, 10);
$max = (float)base_convert("ffffffffffffffffffffffffffffffff", 16, 10);
echo round($number * 32 / $max);
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(22.04.2012 в 22:51)
| | Замечательно!
Спасибо! | |
|
|
|