Генерация случайной строки с зависимой вероятностью - PullRequest
0 голосов
/ 24 мая 2018

Используя JavaScript или jQuery, я пытаюсь создать генератор string, который зависит от зависимых probability.Например, если бы я генерировал «доктор» с первого раза, никакие другие «доктора» не появлялись бы.Было бы перейти к другому url, как "сутенер".Как только все string имена будут использованы, он снова сгенерирует совершенно случайное имя до тех пор, пока у следующих 6 не будет повторений и т. Д.

Для контекста, вот code, который у меня есть длянезависимая вероятность (только случайные строки):

$("button").click(function() {
  var urls = [
    "mafia",
    "doctor",
    "cupid",
    "mafioso",
    "pimp",
    "detective"
  ];

  var url = urls[Math.floor(Math.random() * urls.length)];
  $("#log").append(url + "<br>"); // append url to log
	
	var last = $("#log").split("<br>").pop(); // get last part
  var text = urls.replace(last, ""); // replace in the array, hopefully
  
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button>Generate</button><br>
<div id="log"></div>

Любые мысли, даже шаг к достижению зависимости probability, - это ответ, который я бы с радостью принял.Заранее спасибо!

1 Ответ

0 голосов
/ 24 мая 2018

Попробуйте удалить случайно выбранный элемент из массива, когда он выбран, и, если длина массива равна 0, сбросьте его в исходный массив:

var origURLs = [
  "mafia",
  "doctor",
  "cupid",
  "mafioso",
  "pimp",
  "detective"
];
var currURLs;
$("button").click(function() {
  if (!currURLs || currURLs.length === 0) currURLs = [...origURLs];
  const randIndex = Math.floor(Math.random() * currURLs.length);
  const url = currURLs.splice(randIndex, 1)[0];
  $("#log").append(url + "<br>");
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button>Generate</button><br>
<div id="log"></div>
...