Всем привет! Делаю приложение на JavaScript для шифрования текста, в котором нужна последовательность случайных чисел и каждая зависила от введенного пользователем 
сида. Для усложнения подбора можно выбрать алгоритм рандома из предложенных (добавленные разработчиком), а можно добавить пользовательский. Но каждый алгоритм нужно проверять на коллизии, чтобы разные сиды НЕ выдавали одинаковые последовательности.
Это не задание по написанию алгоритма. Дальше узнаете, чего я добиваюсь этим вопросом.
Да, нужен алгоритм, который от пользователя принимает: 
- функцию для рандома 
alg(seed);
- - в свою очередь, функция принимает сид и возвращает еще одну функцию, уже которая при каждом обращении возвращает разные дробные числа, в диапазоне от 0 до 1;
- длину последовательности 
l;
- количество сидов 
n для перебора.
Алгоритм перебирает каждый сид от 0 до 
n, генерируя с помощью возвращенной через 
rand(seed) функции последовательность фиксированной длины 
l случайных чисел, записывая каждую в массив. После перебора, весь массив последовательностей проверяется на повторяющиеся. Если есть повторения, то алгоритм записывает в новый массив, на каких сидах они произошли. После - возвращает этот массив; если же повторений нет, то выдает пустой 
[]
~
Я сделал свой алгоритм проверки, но не уверен, что он хороший. Так вот, как я говорил, это не "задание" по написанию алгоритма. Я лишь уточняю, хороший ли мой алгоритм, правильно ли выполняет свою задачу и можно ли как-то его улучшить.
Вот алгоритм проверки
let hum = (a, max) => Math.floor(a * max);
function check(alg, l, n) { // args (алгоритм; длина последовательности; сколько сидов проверять)
  let results = [];
  let collisions = [];
  for (let i = 0; i < n; i++) {
    let r = alg(i);
    results.push('');
    for (let j = 0; j < l; j++) {
      results[i] += hum(r(), 4096) + (j == l - 1 ? '' : ' ');
    }
  }
  for (let k = 0; k < results.length; k++) {
    let curr = results.indexOf(results[k]);
    let st = k + ' => ' + curr;
    if (curr > -1 && curr != k) collisions.push(st);
  }
  //console.log(results)
  return collisions;
}
  
Пример использования
function rand1(s) { // Вроде без коллизий
    let value = s;
    return function() {
        value = (value * 16807 % 2147483647) * (s ** 2);
        let _l = (''+value).length;
        return value / (10 ** _l);
    }
}
function rand2(s) { // С коллизиями
    let value = s;
    return function() {
        value = (value * 16 % 2147);
        let _l = (''+value).length;
        return value / (10 ** _l);
    }
}
let _res = check(rand1, 15, 1e4)
console.log(_res);