在此逻辑问题上我应该使用什么AI技术或其他方法?

时间:2018-09-25 17:32:08

标签: algorithm

出于教学目的,我试图完成这一挑战: 生成一个随机的3位数(1-9),Char序列为DESC,例如,“ 123”是一个无效数字,其原因是1> 2和2> 3; “ 321”有效。

当您尝试猜测数字时,对于正确放置的字符,它返回C,对于错误放置的字符,它返回N,例如:

randomly generated "961"
algorithm try "321" and XPTO returns C = 1 and N = 0
algorithm try "654" and XPTO returns C = 0 and N = 1

目标是通过尽可能少的尝试有效地获得C = 3,甚至不知道我需要学习什么样的AI技术,任何技巧或建议?

1 个答案:

答案 0 :(得分:0)

@juvian提示后,我构建了一个js解决方案

首先创建一个列表:

function generateList(){
List = new Array();
for (i = 1; i <= 7; i++) { 
for (j = i+1; j <= 8; j++) { 
for (k = j+1; k <= 9; k++) { 
List.push(""+k+j+i);}}}
WriteResult(List.length,List[0]);
}

然后进行测试,并从列表中排除“不可能”组合

for( var i = List.length-1; i >= 0; i--){ 
var C = Number(document.getElementById("C").value);
var N = Number(document.getElementById("N").value);
var Guess = ""+Number(document.getElementById("Guess").value);
var CountC = 0
var CountN = 0

for( var j = 0; j < 3; j++)
{
if (Guess.substr(j, 1) == List[i].substr(j, 1)) {CountC++;}
else if (List[i].split(Guess.substr(j, 1)).length > 1) {CountN++;}
}
console.log(List[i]+" C:"+CountC+" N:"+CountN);
if (CountC != C || CountN != N) {List.splice(i, 1); }
}  
WriteResult(List.length,List[0]); 
}