Как увеличить значение до заранее определенного значения, используя шестнадцатеричный предел (16) с максимум 16 числами / символами?(Javascript) - PullRequest
1 голос
/ 24 сентября 2019

Я пытаюсь увеличить семя максимум до 16 (используя hex: 0123456789ABCEDF) с пределом 16 чисел / символов.

Что-то вроде функции, которая генерирует результат в диапазонах, таких как:

между 0 и 33, результат должен быть:

0: "0000000000000000"
1: "0000000000000001"
2: "0000000000000002"
3: "0000000000000003"
4: "0000000000000004"
5: "0000000000000005"
6: "0000000000000006"
7: "0000000000000007"
8: "0000000000000008"
9: "0000000000000009"
10: "000000000000000A"
11: "000000000000000B"
12: "000000000000000C"
13: "000000000000000D"
14: "000000000000000E"
15: "000000000000000F"
16: "0000000000000010"
17: "0000000000000011"
18: "0000000000000012"
19: "0000000000000013"
20: "0000000000000014"
21: "0000000000000015"
22: "0000000000000016"
23: "0000000000000017"
24: "0000000000000018"
25: "0000000000000019"
26: "000000000000001A"
27: "000000000000001B"
28: "000000000000001C"
29: "000000000000001D"
30: "000000000000001E"
31: "000000000000001F"
32: "0000000000000020"
33: "0000000000000021"

Я уже сделал случайную функцию для генерации семян (что проще).Но если я хочу сгенерировать их по порядку, как мне поступить?

Случайная функция:

function makeid(length) {
      let result           = '';
      result += "0x";
      var characters       = '0123456789ABCDEF';
      var charactersLength = characters.length;
      for ( let i = 0; i < length; i++ ) {
        result += characters.charAt(Math.floor(Math.random() * charactersLength));
      }
      return result;
    }
    let seeds = ""
    
    let number = 50;
    
    function genSeeds(number){
      for(let s=0;s<number;s++){
        seeds+= "<span>"+makeid(16)+"</span><br>"
      }
      $('.result').html(seeds);
    }
    
    genSeeds(number);
.result {
  font-family: consolas;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="result"></div>

1 Ответ

1 голос
/ 24 сентября 2019

Вы можете взять функцию, которая добавляет один к данной шестнадцатеричной строке.

function inc(hex) {
    var carry = 1;
    return [...hex].reduceRight((r, v) => {
        r.unshift(((carry += parseInt(v, 16)) % 16).toString(16));
        carry >>= 4;
        return r;
    }, []).join('');
}

var value = '000000000000000A',
    count = 10;

while (count--) console.log(value = inc(value));
...