function generateReason(nums) { let sum = nums.reduce((a, b) => a + b, 0); let even = nums.filter(n => n % 2 === 0).length; let odd = 6 - even; let section1 = nums.filter(n => n <= 15).length; let section2 = nums.filter(n => n > 15 && n <= 30).length; let section3 = nums.filter(n => n > 30).length; // 연속 번호 체크 let consecutive = false; for (let i = 0; i < nums.length - 1; i++) { if (nums[i] + 1 === nums[i+1]) { consecutive = true; break; } } // 끝자리 다양성 let lastDigits = nums.map(n => n % 10); let uniqueLast = new Set(lastDigits).size; let messages = []; // 총합 분석 if (sum >= 100 && sum <= 170) { messages.push("📊 총합이 안정적인 당첨권 범위"); } else { messages.push("📊 총합이 다소 벗어나 있지만 반전 가능성"); } // 홀짝 if (odd === even) { messages.push("⚖️ 홀짝 완벽 균형"); } else { messages.push(`⚖️ 홀짝 비율 ${odd}:${even}로 자연스러운 분포`); } // 구간 분포 messages.push(`📍 구간 분포 ${section1}/${section2}/${section3}로 고르게 퍼짐`); // 연속성 if (consecutive) { messages.push("🔗 연속 번호 포함 (실제 당첨에서 자주 등장)"); } else { messages.push("🧩 독립형 번호 구성"); } // 끝자리 if (uniqueLast >= 5) { messages.push("🎯 끝자리 다양성 높음 (중복 리스크 감소)"); } else { messages.push("🎯 일부 패턴 집중형 구성"); } // 마지막 감성 (샤오린 전용) let emotional = [ "샤오린에게 오늘 좋은 흐름이 들어오는 조합이에요 💖", "차분하지만 강한 운이 느껴지는 구조에요 ✨", "작은 확률이지만 충분히 기대해볼 만해요 🍀" ]; messages.push(emotional[Math.floor(Math.random() * emotional.length)]); return messages.join(" / "); }