gpt4 book ai didi

javascript - 需要使用 javascript 实现我的算法

转载 作者:行者123 更新时间:2023-12-02 19:26:34 27 4
gpt4 key购买 nike

我做了一个小算法,想用javascript来实现它。这是我的算法

我的 data.json 文件中有一个采用这种格式的数据

[
"109 200",
"109 201",
"102 202",
"103 202"
]

我想做的是

  1. 创建四个数组容器,即 c1、c2、c3 和 c4。
  2. 将以上数据原样放入c1容器中
  3. 循环c1并将数据按以下格式放入c4

    "109",
    "200",
    "109",
    "201",
    "102",
    "202",
    "103",
    "202"
  4. 循环c1并将它们以这种格式放入c2

    "109,200"
  5. 然后检查c3是否为空,然后从c2读取第一个值并将其插入c3。

  6. 重复步骤 4,但这次将 c1 中的第二个数据(即“109 201”)以这种格式放入 c2

    "109,201"
  7. 然后检查 c3 是否不为空,然后循环遍历 c2 并检查这两个值中的任何一个是否在 c4 中重复。如果重复,则重复步骤 6 和 7,直到从 data.json 中找到最少数量的数字。

这个算法效率不高,但我还是想用它。

这是我的代码。

var teams = [],
c1 = [], arr = [], left = [], right = [], j = 0,
show = function () {
var span = $('#list');

$.getJSON('data/data.json', function (ids) {

//c1.push(c);
for (var i = 0; i < ids.length; i++) {
var a = smallcontainer(ids);
var b = bigcontainer(ids);
var c;

if (c1 == "") {
c = a[0].split(" ");
console.log(c);
} else {

}


//console.log(c);
var id = ids[i];
teams = id;
$('<li>' + id + '</li>').appendTo(span);
}
});
},

smallcontainer = function (teams) { //arr
arr = [teams[j]];
j++;
return arr;
},

bigcontainer = function (ids) { //c3. in code it is left+right=result
for (var i = 0; i < ids.length; i++) {
var splitted = ids[i].split(" ");
left.push(splitted[0]);
right.push(splitted[1]);

}
var result = left.concat(right);
};

更新

data.json 文件中的数据有四个团队,每个团队有两名成员,采用这种形式

"109 200" = Team 1
"109 201" = Team 2
"102 202" = Team 3
"103 202" = Team 4

所以现在我必须计算最少人数,并且必须从此列表中的每个团队中选择一名成员并显示他们的 ID。所以上面的输出将是

109
202

最新更新

我仍在等待帮助

解决方案

这是 AlexBEll 和 PAEz 帮助下的解决方案。我使用了下面的解决方案,该解决方案基本上由 AlexBell 解决

var data = [
"1009 2000",
"1009 2001",
"1002 2002",
"1003 2002",
"1004 2003",
"1005 2004",
"1006 2005",
"1007 2006",
"1007 2007",
"1008 2008",
"1009 2008",
"1010 2009",
"1011 2010",
"1012 2010"
];

var first = [], second = [], result = {}, out = '';

//Separe the ids
for(var i = 0; i < data.length; i++){
var el = data[i].split(' ');
first[i] = el[0];
second[i] = el[1];
}

for(var k = 0; k < first.length; k++){

//Count the elements
var nOfFirst = countElemnts(first, first[k]);
var nOfSecond = countElemnts(second, second[k]);

//If the first is in more that second take it
if(nOfFirst > nOfSecond){
result[first[k]] = 0;
//Else take the second
}else if(nOfFirst < nOfSecond){
result[second[k]] = 0;
//If is only one take it
}else{
result[first[k]] = 0;
}

}

function countElemnts(arr, el){
var count = 0;
for(var j = 0; j < arr.length; j++){
if(arr[j] == el)
count++;
}
//console.log(el+' : '+count);
return count;
}

for(var n in result){
out += 'The id n: '+n+' is in the list\n';
}

alert(out);

最佳答案

这有效吗?......

var teams=[
"109 200",
"109 201",
"102 202",
"103 202"
];

var members ={};

var matesId='109';

// Members that won
var wins={};

// First lets find out how many teams a member is in
for (var i=0,length=teams.length; i<length;i++){
var temp = teams[i].split(' ');
for (var z=0,zlength=temp.length;z<zlength;z++){
if (!members[temp[z]]) members[temp[z]]={wins:0,totalTeams:0,id:temp[z]};
members[temp[z]].totalTeams=members[temp[z]].totalTeams+1;
}
teams[i]=[members[temp[0]],members[temp[1]]];
}

for (var i=0,length=teams.length; i<length;i++){
var member1=teams[i][0];
var member2=teams[i][1];
if (member1.totalTeams>member2.totalTeams){
member1.wins=member1.wins+1;
} else if (member1.totalTeams<member2.totalTeams){
member2.wins=member2.wins+1;
} else {
member1.wins=member1.wins+1;
member2.wins=member2.wins+1;
}
}

for (var i=0,length=teams.length; i<length;i++){
var member1=teams[i][0];
var member2=teams[i][1];
if (member1.wins>member2.wins){
if (wins[member2.id]!==true) wins[member1.id]=true;
} else if (member1.wins<member2.wins){
if (wins[member1.id]!==true) wins[member2.id]=true;
} else if (!wins[member1.id] && !wins[member2.id]) {
if (member1.id==matesId && member2.id==matesId) {
wins[matesId]=true;
} else{
// A draw, so pick one
Math.round(Math.random())==1 ? wins[member2.id]=true : wins[member1.id]=true;
}
}
}

var keys=Object.keys(wins);
var results=[];
results.push(keys.length);
for (var i=0,length=keys.length; i<length;i++){
results.push(keys[i]);
}
results=results.join('\n');
document.querySelector('#output').innerText=results;​

http://jsfiddle.net/PAEz/dLUqj/3/
编辑:更新了它,使其更容易阅读。
编辑:意识到你不需要平局和胜利,只要胜利就可以了。
最后编辑:注意到一个小错误,现在应该都正确了。

关于javascript - 需要使用 javascript 实现我的算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11981317/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com