Как создать разные итерации из 6-значного числа, которое также является 6-значным? - PullRequest
0 голосов
/ 25 августа 2018

Я использую алгоритм для создания 6-значного пин-кода из цепочки букв (у меня уже есть).Мне также нужно сделать разные итерации этого 6-значного вывода, которые все привели бы к исходному выводу, который можно использовать для генерации цепочки букв.

input "FEFOEISUDFRORI"
output 523923 

какой-то алгоритм ...

 first iteration: 123203

затем для аутентификации

iteration: 1 ; pin: 123203
output: 'FEFOEISUDFRORI' // same as original string

Есть идеи, как это сделать?

1 Ответ

0 голосов
/ 27 августа 2018

Самый простой способ решить эту математическую задачу, вероятно, с вращением.По сути, если выполнить сложение, а затем модуль, вращение приведет к функции «один к одному» с диапазоном, равным его области.

В приведенном мной примере будет вращаться все 6-значное число или отдельные цифры.числа.

function rRot(x, rot, max) {
  if (rot < 0) return lRot(x,-rot,max);
  rot = rot % max;
  return (x + rot) % max;  
}
function lRot(x, rot, max) {
  if (rot < 0) return rRot(x,-rot,max);
  rot = rot % max;
  return rRot(x,max-rot,max);
}

function rotDigits(x, r) {
  var pwr = 1, y = 0;
  while (x > 0) {
    var digit = x % 10;
    y += rRot(digit, r, 10) * pwr;
    
    x = Math.floor(x / 10);
    pwr *= 10;
  }
  return y;
}

var samples = [675821, 126421, 678321, 100001, 580127, 999999];

(function () {
  console.log("Rotate individual digits");
  samples.forEach(v => {
    var r = rotDigits(v, 7);
    var vr = rotDigits(r, 10-7);
    console.log(v.toString() + " => " + r.toString() + " => " + vr.toString());
  });
  console.log("Rotate whole number");
  samples.forEach(v => {
    var r = rRot(v, 65537, 1000000);
    var vr = lRot(r, 65537, 1000000);
    console.log(v.toString() + " => " + r.toString() + " => " + vr.toString());
  });
})()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...