Случайная генерация 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, учитывая, что некоторые результаты будут появляться чаще, чем другие.

Другие вопросы по тегам