- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试选择组合,以便每个元素精确地代表两次。理想情况下,它应该随机选择组合,以便在以后的运行中不会总是产生相同的结果。
示例集
[1、2、3、4、5]
没有重复的所有可能组合是:
[[1、2],[1、3],[1、4],[1、5],[2、3],[2、4],[2、5],[3、4],[ 3,5],[4,5]]
我需要得到类似的东西:
[[1,2],[1,3],[2,5],[3,4],[4,5]]
function comboExists(combos, test) {
for(let i = 0; i < combos.length; i++){
if(test[0] === combos[i][0] || test[0] === combos[i][1]) {
if(test[0] === combos[i][0] && test[1] === combos[i][1]) {
return true;
}
if(test[0] === combos[i][1] && test[1] === combos[i][0]) {
return true;
}
}
}
return false;
}
function countPlayerMatches(combos, player) {
let count = 0;
for(let i = 0; i < combos.length; i++) {
if(combos[i][0] === player || combos[i][1] === player) {
count++;
}
}
return count;
}
function getPlayerPool(combos, players, playerToMatch, maxCount) {
let playerPool = [];
if(countPlayerMatches(combos, playerToMatch) < maxCount) {
for(let i = 0; i < players.length; i++) {
if(players[i] !== playerToMatch && countPlayerMatches(combos, players[i]) < maxCount) {
let matchUp = [players[i], playerToMatch];
if( !comboExists(combos, matchUp)) {
playerPool.push(players[i]);
}
}
}
}
return playerPool;
}
function playersCountLessThanMax(players, combos, maxCount) {
for(let i = 0; i < players.length; i++){
if(countPlayerMatches(combos, players[i]) < maxCount) {
return true;
}
}
return false;
}
function matchPlayers(players, maxCount) {
let combos = [];
let tries = 0;
while(playersCountLessThanMax(players, combos, maxCount)) {
combos = [];
tries++;
for(let i = 0; i < players.length; i++){
let playerToMatch = players[i];
if(countPlayerMatches(combos, playerToMatch) < maxCount) {
let playerPool = getPlayerPool(combos, players, playerToMatch, maxCount);
if(playerPool.length < 1) {
break;
}
let j = Math.floor((Math.random() * playerPool.length));
combos.push([playerToMatch, playerPool[j]]);
}
}
}
console.log(tries);
return combos;
}
const players = [1, 2, 3, 4, 5];
const maxCount = 2;
console.log(matchPlayers(players, maxCount));
最佳答案
您可以尝试如下操作:
理念:
创建一个从给定数据返回随机值的函数。
创建一个验证该值的函数。
创建一个映射以保留计数和要忽略的值列表。
在有效输入上,更新该值的计数。发布增量,检查其是否已达到阈值。
如果是,请将其添加到ignoreList
。
输入无效时,以圆形模式移至下一个索引,并重复上述操作。
每个迭代重复两次,因为您需要2个元素对。
循环直到所有元素都不在ignoreList
中并返回对列表
function getRandomPairs(data, maxReps) {
const map = {};
let ignoreList = [];
const result = [];
function processNumber(ignoreNum) {
const n = getRandomValue(data, ignoreList.concat(ignoreNum));
map[n] = (map[n] || 0) + 1;
if (map[n] >= maxReps) {
ignoreList.push(n);
}
return n;
}
while (ignoreList.length !== data.length) {
const x = processNumber();
const y = processNumber(x);
if (result.join(' | ').indexOf([x, y].join()) === -1)
result.push([x, y]);
else {
map[x]--;
map[y]--;
ignoreList = ignoreList.filter((n) => ![x,y].includes(n))
}
}
return result;
}
function validateInput(value, ignoreList) {
return !(Array.isArray(ignoreList) && ignoreList.includes(value))
}
function getRandomIndex(data) {
return Math.floor(Math.random() * data.length);
}
function getRandomValue(data, ignoreList, index) {
const i = index !== undefined ? index : getRandomIndex(data);
const value = data[i];
if (!validateInput(value, ignoreList)) {
return getRandomValue(data, ignoreList, (i + 1) % data.length);
}
return value;
}
const data = [1, 2, 3, 4, 5];
console.log(getRandomPairs(data, 2).join(' | '));
console.log(getRandomPairs(data, 2).join(' | '));
console.log(getRandomPairs(data, 2).join(' | '));
关于javascript - 随机选择组合,以便每个元素精确地代表两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54284805/
感觉我在这里遗漏了一些明显的东西,所以提前道歉。无论如何,这是我尝试转换的一些数据a: acct_num year_prem prem exc 001 20
我正在尝试将表中的模式与用户话语 匹配。 string userUtterance = "I want identification number for number of customers";
当尝试在 Precise 上链接 gccgo 时,出现此链接错误: matt@matt-1005P:~/src/gopath/src/meme$ gccgo cmd/meme/main.go -o m
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
假设我有以下数据和命令: clc;clear; t = [0:0.1:1]; t_new = [0:0.01:1]; y = [1,2,1,3,2,2,4,5,6,1,0]; p = interp1(
我总是想给精确匹配比只匹配前缀的分数更高的分数(例如,“ball”在与“ball*”匹配时应该比“ballistic”得到更高的分数)。 我当前(详细)的方法是在创建 PrefixQuery 时始终执
有什么解决方法可以让我在 Android 中使用 long 或 double 来寻找音频文件中的位置吗?目前 seekTo 只接受 ints 参数。我想更精确(比如在十分之一秒内) int resID
我的 replacingOccurrences 函数有问题。我有一个这样的字符串: let x = "john, johnny, johnney" 我需要做的只是删除“john” 所以我有这段代码:
我正在使用 BeautifulSoup 进行网页抓取。我有这段代码来提取 a 标签的值,但它似乎不起作用。显示错误: AttributeError: 'int' object has no attri
我要在带有标记顶点和标记有向边的图上寻找一种不精确的图匹配算法。我的任务是检测两个图表的变化以将它们显示给开发人员(想想颠覆差异)。我已经实现了基于禁忌搜索 ( this ) 的优化算法,但我无法让该
我有两个网站: example.com 和 yyy.com 他们都有类似的网络应用程序,但在不同的服务器上。我想让 Apache 将所有路径请求重定向到 example.com 与 完全相同的方式yy
因此,我尝试合并两个公司信息数据库(从现在起表 A 和表 B),其中最常见(且可靠)的单一引用点是网站 URL。表 A 已更新,表 B 待更新。 我已经从表 A 中提取了 URL,并使用 PHP 清理
我正在 http://classicorthodoxbible.com/new.html 上制作效果主要描述中的 Angular 色,包裹在自己的跨度中,从他们通常的休息地点移动到随机位置,然后通过指
我目前正在使用我的 Raspberry Pi 及其内置 UART 输入编写 MIDI 合成器。 在某个时间点,为了启用 MIDI 输入的实时回放,我必须设置一种环形缓冲区以与 OpenAL 一起使用,
在 C 中,当设置了一个 float 时, int main(int argc, char *argv[]) { float temp = 98.6f; printf("%f\n",
实现 MP3 无间隙循环的最佳可能性是什么?目前我正在使用 AVAudioPlayer 并将 .numberOfLoops() 属性设置为 -1 但可以听到,轨道重新启动。情况并非如此,例如使用 Tr
我想创建不一定是“正确”矩阵的“类矩阵”对象。但是,确切地说,“类矩阵”是什么意思? 示例 1 > image(1:9) Error in image.default(1:9) : argument
给定一个像这样的 XML 文档: john &title; 我想解析上面的 XML 文档并生成其所有实体已解析的副本。因此,给定上述 XMl 文档,解析器应输出: john
需要说明的是,这种方法不是我要找的: 事实上,此方法会调整 ImageField 的大小。我想将 Image 对象的大小调整为特定且精确的无比例分辨率。有什么办法吗? --编辑-- 对我来说,Ima
我正在尝试使用 TF2.0 eager 模式执行精确的 GP 回归,基于来自 https://colab.research.google.com/github/tensorflow/probabili
我是一名优秀的程序员,十分优秀!