Number.prototype.isRepeat=function() {

const str=this.toString();

return (parseInt(str.charAt(0))-parseInt(str.charAt(1)))*(parseInt(str.charAt(0))-parseInt(str.charAt(2)))*(parseInt(str.charAt(2))-parseInt(str.charAt(1)))==0;

};


Number.prototype.hasZero=function() {

const str=this.toString();

return parseInt(str.charAt(0))*parseInt(str.charAt(1))*parseInt(str.charAt(2))==0;

};


Number.prototype.calcSB=function(q) {

var _s=0,_b=0;

for(let i=0;i<3;++i) {

if(this.toString().charAt(i)==q.toString().charAt(i)) {_s++;}

else if(this.toString().charAt(i)==q.toString().charAt((i-1)%3)||this.toString().charAt(i)==q.toString().charAt((i+1)%3)) {_b++;}

}

return {s:_s,b:_b};

};


Number.prototype.valid=function(q,s,b) {

var _s=this.calcSB(q).s,

_b=this.calcSB(q).b;

return _s==s&&_b==b;

};


var cands=[];


start();


function start() {

for(let i=123;i<=987;++i) {

if(!i.isRepeat()&&!i.hasZero()) {cands.push(i);}

}

while(cands.length>1) {

main();

}

alert("found! : "+cands[0]);

}


function main() {

var q=cands[Math.floor(Math.random()*cands.length)];

var s=prompt(q+" strike");

var b=prompt(q+" ball");

for(let i=0;i<cands.length;++i) {

if(!cands[i].valid(q,s,b)) {cands.splice(i,1); i--;}

}

}


사용자의 인풋을 받고 컴퓨터가 정답을 추론하는건데..

가끔 정답을 맞히는데 보통 undefined로 나오더라. 어디가 문제일까