function finalAnswer=solver(numPegs,numColors,guessLimit,puzzleID)
numCallsMade=0;
guess=ones(1,numPegs);
actualColor=1;
nextPeg=1;
while((actualColor<numColors)&(nextPeg<=numPegs)&(numCallsMade<guessLimit))
prova=ones(1,numPegs)*actualColor;
[blacks,whites,numCallsMade]=scoreme(prova,puzzleID);
if(blacks>0)
guess(nextPeg:nextPeg+blacks-1)=actualColor;
nextPeg=nextPeg+blacks;
end
actualColor=actualColor+1;
end
if(numCallsMade==guessLimit)
finalAnswer=guess;
return
end
if(nextPeg<=numPegs)
guess(nextPeg:numPegs)=numColors;
end
bestScore=-Inf;
while numCallsMade<guessLimit
guess=guess(randperm(numPegs));
[black,white,numCallsMade]=scoreme(guess,puzzleID);
score=2*black+white;
if score>bestScore
finalAnswer=guess;
bestScore=score;
end
if black == numPegs
% perfect score, so return
finalAnswer=guess;
return
end
end
|