Случайная генерация int из существующего int - PullRequest
0 голосов
/ 20 февраля 2012

Рассмотрим следующее int:

int start = 287729472784;

Из этого int мне нужно создать новый int длиной всего три цифры, я могу использовать любое из значений от 0 до 9.

Однако, чтобы создать новый int, я не могу использовать какую-либо форму уже существующих генераторов случайных чисел.

Мне было интересно, можно ли использовать комбинацию modular , xor , и , bit-shift - операции для некоторого уменьшения числа вниз.Например, xor последней цифры с предыдущей, но я не уверен, возможно ли это вообще.

В основном мне нужно создать int длиной в три цифры из начального int, в идеале уменьшив начальный intдо трех цифр в длину.

Я надеюсь, что это имеет смысл, и я буду признателен за любой ввод.

Спасибо

Ответы [ 3 ]

3 голосов
/ 20 февраля 2012

Не уверен, что понимаю ваши потребности, но если ваше единственное желание - сгенерировать трехзначный номер из другого номера, возможно, вам поможет функция по модулю:

var startNumber = 287729472784;
var modifiedNumber = startNumber % 1000;

Если вы хотите псевдослучайное изменениеNumberчто меняется для каждого поколения, вы можете использовать время в миллисекундах:

var startNumber = 287729472784;
var modifiedNumber = startNumber * new Date().getTime() % 1000;

Надеюсь, это поможет.

vaL

1 голос
/ 20 февраля 2012

Лучший ответ действительно зависит от использования этого окончательного числа.Поскольку SHA1 достаточно «случайны» для начала, достаточно использовать% 1000 - вы получите хороший разброс по диапазону всех возможных входов SHA1, если все, что вам нужно - это хеш в таблицу.

Однако, если вы ищете преобразование, в котором трехзначное число практически не имеет отношения (то есть не только по модулю ...) к входу, вам понадобится какой-то способ разбить все битыв результате.Если это так, я бы предложил преобразование, такое как CRC16.Вставьте значение SHA1 в вашу любимую процедуру CRC16, а затем верните значение по модулю 1000, учитывая, что некоторые результаты будут появляться чаще, чем другие.

1 голос
/ 20 февраля 2012

Hm. Я не понимаю проблему, но ... start % 1000 даст 3 младших значащих цифры start (хотя: будьте осторожны с отрицательными значениями)?

...