добавил маску ... вариант угадали 4 числа из них 2 быка, затем 4 числа 0 быков
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
</head>
<body>
<script>
function buildAnswers() {
var all_res = [];
for (var i = 1; i < 10; ++i) {
for (var j = 0; j < 10; ++j) {
if (j == i) continue;
for (var k = 0; k < 10; ++k) {
if (k == j || k == i) continue;
for (var l = 0; l < 10; ++l) {
if (l == k || l == j || l == i) continue;
all_res.push([i, j, k, l]);
}
}
}
}
return all_res;
}
var arr = buildAnswers();
function getNum(arr) {
return arr[Math.floor(Math.random() * arr.length)]
}
function test(arr, n, bull) {
return function(a) {
var k = 0, t = 0,
s;
for (var i = 0; i < 4; i++) {
if(arr[i] == a[i] ) t++;
s = (arr[0] - a[i]) * (arr[1] - a[i]) * (arr[2] - a[i]) * (arr[3] - a[i])
if (!s) k++
}
if(t != bull) return false;
return k >= n
}
}
var filter = test(num, 1);
function filterAnswers(arr, filter) {
for (var i = arr.length - 1; i > -1; i--) {
if (!filter(arr[i])) arr.splice(i, 1);
}
}
var num = getNum(arr); //выбрали любое число из массива
document.write(num + " количество вариантов " + arr.length + "<br>");
var filter = test(num, 4, 2); //условно угадали 4 числа -- 2 быка
filterAnswers(arr, filter)
var num = getNum(arr); //выбрали любое число из массива
document.write("осталось вариантов " + arr.length + "<br>" + arr.join("<br>"));
var filter = test(num, 4, 0); //условно угадали 4 числа -- 0 быков
filterAnswers(arr, filter)
document.write("<br>осталось вариантов " + arr.length + "<br>" + arr.join("<br>")); // осталось вариантов
</script>
</body>
</html>