console
<!DOCTYPE html>
<html>
<head>
<title>双色球智能选号</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body { padding: 20px; font-family: Arial; }
#result { margin-top: 20px; padding: 15px; border: 2px solid #4CAF50; border-radius: 5px; }
button {
background-color: #4CAF50;
color: white;
padding: 10px 20px;
border: none;
border-radius: 5px;
cursor: pointer;
}
</style>
</head>
<body>
<h2>双色球智能选号器</h2>
<button onclick="generateNumbers()">生成推荐号码</button>
<div id="result"></div>
<script>
// 工具函数
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
// 校验函数组
function hasConsecutive(nums) {
return nums.some((n, i) => i > 0 && n === nums[i-1]+1);
}
function checkRange(nums) {
return [1, 11, 21].every(start =>
nums.some(n => n >= start && n <= start+9)
);
}
function checkHistoryRepeat(nums, data) {
return !data.some(item =>
item.red.sort().join(',') === nums.sort().join(',')
);
}
function checkOddEvenRatio(nums, data) {
const oddCount = nums.filter(n => n%2 === 1).length;
return oddCount > 0 && oddCount < 6;
}
function checkPrimeComposite(nums, data) {
const primes = [2,3,5,7,11,13,17,19,23,29,31];
return nums.filter(n => primes.includes(n)).length <= 3;
}
function checkSizeRatio(nums, data) {
const big = nums.filter(n => n > 17).length;
return big >= 2 && big <= 4;
}
function checkThreeCode(nums, data) {
return nums.some((n, i) =>
nums.includes(n+1) && nums.includes(n+2)
);
}
// 数据相关函数
let historyData = [
{ red: [3, 8, 12, 19, 24, 29], blue: 7 },
{ red: [1, 5, 11, 17, 22, 33], blue: 12 }
];
function fetchLatestData() {
return historyData.length > 0 ? historyData : null;
}
// 核心生成函数
function generateNumbers() {
const latestData = fetchLatestData();
if (!latestData || latestData.length === 0) {
alert("暂无历史数据,正在使用随机模式生成");
return generateFallbackNumbers();
}
let validNumbers;
let attempts = 0;
do {
attempts++;
let candidate = generateBaseNumbers();
candidate = adjustNumbers(candidate, latestData);
if (checkAllConditions(candidate, latestData)) {
validNumbers = candidate;
break;
}
} while (attempts < 5000);
displayResult(validNumbers || "未找到符合所有条件的组合");
}
function generateBaseNumbers() {
let numbers = new Set();
numbers.add(getRandom(1,10));
numbers.add(getRandom(11,20));
numbers.add(getRandom(21,33));
while (numbers.size < 6) {
const num = getRandom(1, 33);
if (!numbers.has(num)) numbers.add(num);
}
return [...numbers].sort((a,b) => a-b);
}
function adjustNumbers(numbers, data) {
if (!data || data.length === 0) return numbers;
if (!hasConsecutive(numbers)) {
const pos = getRandom(0, 3);
numbers[pos] = numbers[pos+1]-1;
}
const lastNumbers = data[0].red;
const common = numbers.filter(n => lastNumbers.includes(n));
if (common.length < 1) {
numbers[getRandom(0,5)] = lastNumbers[getRandom(0,5)];
}
return [...new Set(numbers)].sort((a,b) => a-b).slice(0,6);
}
function checkAllConditions(numbers, data) {
return [
checkRange(numbers),
hasConsecutive(numbers),
checkHistoryRepeat(numbers, data),
checkOddEvenRatio(numbers, data),
checkPrimeComposite(numbers, data),
checkSizeRatio(numbers, data),
checkThreeCode(numbers, data)
].every(condition => condition);
}
function generateFallbackNumbers() {
let numbers = [];
while (numbers.length < 6) {
const num = getRandom(1, 33);
if (!numbers.includes(num)) numbers.push(num);
}
displayResult(numbers.sort((a,b) => a-b));
}
function displayResult(numbers) {
const resultDiv = document.getElementById('result');
resultDiv.innerHTML = numbers.length ?
`推荐号码:${numbers.join(', ')}` :
"未找到符合所有条件的组合";
}
</script>
</body>
</html>