Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 7, 2015 20:41:56

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

vanished

tz4678@gmail.com
Кроме русскоязычных программистов это никому не интересно
Позвольте огорчить, это вообще никому не интересно.




Офлайн

#2 Июнь 8, 2015 02:09:23

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

vanished

tz4678@gmail.com
Моя функция для генерации паролей, может кому пригодиться (использовать в консолечке браузера)
function randChars(length, charSet) {
  length = length || 8;
  charSet = charSet || "qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890";
  var ret = "";
  while (ret.length < length) {
    ret += charSet.charAt(Math.random() * charSet.length);
  }  
  return ret;
}
Позиция символа неправильно вычисляется. Есть вероятность, что индекс будет часто уходить за край, приводя к лишним проходам в цикле.

    <script type="text/javascript">
      function genPass(len, base) {
        var out = "";
 
        for (var i = 0; i < len; i++) {
          var idx = Math.round(Math.random() * 10000) % base.length;
          out += base.charAt(idx);
        }
        return out;
      }
      function genPassWrapper() {
        return genPass(8, "abcdefghijklmnopqrstuvwxyz" +
                          "ABCDEFGHIJKLMNOPQRSTUVWXYZ" +
                          "0123456789" +
                          "!@#$%^&*()_+|[]{}");
      }
      document.write(genPassWrapper());
    </script>



Отредактировано py.user.next (Июнь 8, 2015 02:11:26)

Офлайн

#3 Июнь 9, 2015 12:59:04

tz4678@gmail.com
Зарегистрирован: 2014-12-07
Сообщения: 71
Репутация: +  -2  -
Профиль   Отправить e-mail  

vanished

vanished

Отредактировано tz4678@gmail.com (Авг. 1, 2020 15:49:02)

Офлайн

#4 Июнь 9, 2015 14:26:36

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

vanished

tz4678@gmail.com
так что мой код не имеет никаких багов.
Не, речь идёт об индексе, он должен всегда находиться в строке. Если же он превышает, то charAt() возвращает пустую строку, из-за чего происходит повтор.

Вот пример, где видно, что там пустая строка:
    <script type="text/javascript">
      document.write("abc".charAt(2));
      document.write("abc".charAt(3));
      document.write(typeof("abc".charAt(3)));
    </script>



Офлайн

#5 Июнь 11, 2015 06:10:38

tz4678@gmail.com
Зарегистрирован: 2014-12-07
Сообщения: 71
Репутация: +  -2  -
Профиль   Отправить e-mail  

vanished

vanished

Отредактировано tz4678@gmail.com (Авг. 1, 2020 15:49:03)

Офлайн

#6 Июнь 11, 2015 07:16:05

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9846
Репутация: +  853  -
Профиль   Отправить e-mail  

vanished

Проверил всё, точно мне показалось, что там неправильно.
За границы не будет вылазить.

charSet.charAt(Math.random() * charSet.length);

>>> 3 * 0.999999999
2.999999997
>>> 3 * 0.5
1.5
>>> 3 * 0.1
0.30000000000000004
>>>



Отредактировано py.user.next (Июнь 11, 2015 07:19:51)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version