Случайная генерация int из существующего int
Рассмотрим следующее int;
int start = 287729472784;
Из этого int мне нужно создать новый int длиной всего три цифры, я могу использовать любое из значений от 0 до 9.
Однако, чтобы создать новый int, я не могу использовать какую-либо форму уже существующих генераторов случайных чисел.
Мне было интересно, можно ли использовать комбинацию модульных, xorиbit-shift операций для некоторого уменьшения числа. Например, xor последней цифры с предыдущей, но я не уверен, что это вообще возможно.
По сути, мне нужно создать int из трех цифр из начального int, в идеале уменьшив начальный int до трех.
Я надеюсь, что это имеет смысл, и я был бы признателен за любой вклад.
Спасибо
3 ответа
Не уверен, что понимаю ваши потребности, но если ваше единственное желание состоит в том, чтобы сгенерировать трехзначный номер из другого номера, возможно, вам поможет функция по модулю:
var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;
Если вы хотите, чтобы псевдослучайный модифицированный номер, который меняется для каждого поколения, вы можете использовать время в миллисекундах:
var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;
Я надеюсь, что это поможет.
VAL
Гектометр Я не понимаю проблемы, но... start % 1000
даст наименее значимые 3 цифры start
(хотя: будьте осторожны с отрицательными значениями)?
Лучший ответ действительно зависит от использования этого окончательного числа. Поскольку SHA1 достаточно "случайны" для начала, достаточно использовать% 1000 - вы получите хороший разброс по диапазону всех возможных входов SHA1, если все, что вам нужно - это хеш в таблицу.
Однако, если вы ищете преобразование, в котором трехзначное число практически не имеет отношения (то есть не просто по модулю...) к входу, вам понадобится какой-то способ разбить все биты на результат. Если это так, я бы предложил преобразование, такое как CRC16. Введите значение SHA1 в вашу любимую процедуру CRC16, а затем верните значение по модулю 1000, учитывая, что некоторые результаты будут появляться чаще, чем другие.