Word generator based on random-weighted letters
Go to file
2022-04-16 04:25:19 +05:00
index.html initial commit 2022-04-16 03:15:39 +05:00
LICENSE Initial commit 2022-04-14 21:46:46 +05:00
README.md editing readme 2022-04-16 04:25:19 +05:00
wordgen.js initial commit 2022-04-16 03:15:39 +05:00

nickname-generator

Данный скрипт является примером использования на практике алгоритма случайного выбора элементов массива с учётом веса. Nickname-generator генерирует случайные слова (никнеймы) на основе случайных букв английского (латинского) алфавита. Если мы просто будем брать случайные буквы и составлять их них слова, то они будут выглядеть неестественно и неприглядно. Примеры:

  • srjxdq
  • moyssj
  • ywtckmw
  • wjvzw
  • xtwey

и т.д.

Как видим, такой подход не позволяет нам генерировать слова, которые хотя бы отдалённо напоминали обычные - получается просто набор бысмысленных букв. Чтобы придать словам натуральность и "человечность", нам нужно сделать как минимум две вещи:

  1. Исключить появление более двух гласных/согласных при генерировании слова. Данная задача является тривиальной и ее не имеет смысла рассматривать.
  2. Подбирать случайные буквы для слова с учётом их веса. Весами в данном случае будут являться частотность букв в английском языке. Таким образом мы должны уменьшить/увеличить шанс того, что определенная буква попадёт в наше генерируемое слово, и таких редко используемых букв, как, например, Q, Z и X будут встречаться в наших словах гораздо реже, чем E, T, A, O, I, которые по статистике являются самыми частыми в английских словах.

Используя всего два этих подхода, мы генерируем гораздо более натуральные "слова". Примеры:

  • haetise
  • earyn
  • sayuri
  • oathe
  • aulnelo
  • ureon
  • reirgas
  • theele

и т.д.

Алгоритм выбора случайных элементов массива на основе весов в JS

Относительно простой имплементацией подобного алгоритма является преобразование ряда рациональных чисел s1 (массива), являющимися весами для элементов, в ряд чисел s2, который получается посредством кумулятивного сложения чисел:

equation