arena-test / index.html
openfree's picture
Create index.html
1e04b1b verified
Raw
History Blame Contribute Delete
26.9 kB
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>LLM Creativity Battle Arena</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
}
.container {
max-width: 1400px;
margin: 0 auto;
}
.header {
background: white;
border-radius: 20px;
padding: 30px;
margin-bottom: 30px;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
text-align: center;
}
.header h1 {
color: #333;
font-size: 2.5em;
margin-bottom: 10px;
}
.header p {
color: #666;
font-size: 1.1em;
}
.main-content {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
margin-bottom: 30px;
}
.battle-arena {
grid-column: 1 / -1;
background: white;
border-radius: 20px;
padding: 30px;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.prompt-section {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
border-radius: 15px;
padding: 25px;
margin-bottom: 30px;
color: white;
}
.prompt-category {
display: inline-block;
background: rgba(255,255,255,0.3);
padding: 5px 15px;
border-radius: 20px;
margin-bottom: 15px;
font-size: 0.9em;
}
.prompt-text {
font-size: 1.3em;
font-weight: bold;
line-height: 1.5;
}
.responses-container {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 30px;
margin-bottom: 30px;
}
.response-box {
background: #f8f9fa;
border-radius: 15px;
padding: 25px;
position: relative;
min-height: 300px;
transition: all 0.3s ease;
}
.response-box:hover {
transform: translateY(-5px);
box-shadow: 0 15px 40px rgba(0,0,0,0.1);
}
.response-label {
position: absolute;
top: -15px;
left: 20px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 8px 20px;
border-radius: 20px;
font-weight: bold;
font-size: 1.2em;
}
.response-content {
margin-top: 20px;
line-height: 1.6;
color: #333;
max-height: 400px;
overflow-y: auto;
}
.model-reveal {
display: none;
margin-top: 20px;
padding: 15px;
background: linear-gradient(135deg, #e0f7fa 0%, #b2ebf2 100%);
border-radius: 10px;
text-align: center;
}
.model-reveal.show {
display: block;
animation: fadeIn 0.5s ease;
}
.model-name {
font-size: 1.3em;
font-weight: bold;
color: #00796b;
}
.vote-section {
text-align: center;
margin: 30px 0;
}
.vote-buttons {
display: flex;
justify-content: center;
gap: 30px;
margin-bottom: 20px;
}
.vote-btn {
padding: 15px 50px;
font-size: 1.2em;
font-weight: bold;
border: none;
border-radius: 30px;
cursor: pointer;
transition: all 0.3s ease;
color: white;
}
.vote-btn-a {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
.vote-btn-b {
background: linear-gradient(135deg, #f093fb 0%, #f5576c 100%);
}
.vote-btn:hover {
transform: scale(1.05);
box-shadow: 0 10px 25px rgba(0,0,0,0.2);
}
.vote-btn:disabled {
opacity: 0.5;
cursor: not-allowed;
}
.leaderboard {
background: white;
border-radius: 20px;
padding: 30px;
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
}
.leaderboard h2 {
color: #333;
margin-bottom: 25px;
font-size: 2em;
text-align: center;
}
.leaderboard-table {
width: 100%;
border-collapse: collapse;
}
.leaderboard-table th {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
padding: 15px 10px;
text-align: left;
font-size: 0.9em;
}
.leaderboard-table td {
padding: 12px 10px;
border-bottom: 1px solid #e0e0e0;
font-size: 0.95em;
}
.leaderboard-table tr:hover {
background: #f5f5f5;
}
.rank-medal {
display: inline-block;
width: 30px;
text-align: center;
}
.rank-1 { color: #ffd700; font-size: 1.5em; }
.rank-2 { color: #c0c0c0; font-size: 1.4em; }
.rank-3 { color: #cd7f32; font-size: 1.3em; }
.score-cell {
font-weight: bold;
text-align: center;
}
.score-high { color: #4caf50; }
.score-medium { color: #ff9800; }
.score-low { color: #f44336; }
.category-tabs {
display: flex;
gap: 10px;
margin-bottom: 25px;
flex-wrap: wrap;
}
.category-tab {
padding: 10px 20px;
background: #f0f0f0;
border: none;
border-radius: 20px;
cursor: pointer;
transition: all 0.3s ease;
font-weight: 500;
}
.category-tab.active {
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
color: white;
}
.new-battle-btn {
display: block;
margin: 30px auto;
padding: 15px 40px;
font-size: 1.1em;
font-weight: bold;
background: linear-gradient(135deg, #4caf50 0%, #8bc34a 100%);
color: white;
border: none;
border-radius: 30px;
cursor: pointer;
transition: all 0.3s ease;
}
.new-battle-btn:hover {
transform: scale(1.05);
box-shadow: 0 10px 25px rgba(76,175,80,0.3);
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin-top: 30px;
}
.stat-card {
background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%);
border-radius: 15px;
padding: 20px;
text-align: center;
}
.stat-value {
font-size: 2em;
font-weight: bold;
color: #667eea;
}
.stat-label {
color: #666;
margin-top: 5px;
}
@keyframes fadeIn {
from { opacity: 0; transform: translateY(10px); }
to { opacity: 1; transform: translateY(0); }
}
.loading {
display: inline-block;
width: 20px;
height: 20px;
border: 3px solid rgba(0,0,0,.1);
border-radius: 50%;
border-top-color: #667eea;
animation: spin 1s ease-in-out infinite;
}
@keyframes spin {
to { transform: rotate(360deg); }
}
.elo-badge {
display: inline-block;
background: #ff6b6b;
color: white;
padding: 3px 8px;
border-radius: 10px;
font-size: 0.85em;
margin-left: 5px;
}
.win-rate {
display: inline-block;
padding: 3px 8px;
border-radius: 10px;
font-size: 0.85em;
}
.win-rate-high { background: #c8e6c9; color: #2e7d32; }
.win-rate-medium { background: #fff3e0; color: #e65100; }
.win-rate-low { background: #ffebee; color: #c62828; }
</style>
</head>
<body>
<div class="container">
<div class="header">
<h1>๐ŸŽจ LLM ์ฐฝ์˜์„ฑ ๋ฐฐํ‹€ ์•„๋ ˆ๋‚˜</h1>
<p>AI๋“ค์˜ ์ฐฝ์˜์  ๋Šฅ๋ ฅ์„ ๊ฒจ๋ฃจ๋Š” ์‹ค์‹œ๊ฐ„ ๋Œ€๊ฒฐ ์‹œ์Šคํ…œ</p>
</div>
<div class="battle-arena">
<div class="prompt-section">
<div class="prompt-category" id="promptCategory">๐Ÿ’ก ํ˜์‹ /๋ฐœ๋ช…</div>
<div class="prompt-text" id="promptText">
2050๋…„ ์ธ๋ฅ˜๊ฐ€ ํ™”์„ฑ์— ์ •์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค. ํ™”์„ฑ์—์„œ ๊ฐ€์žฅ ๋จผ์ € ํ•„์š”ํ•œ ๋น„์ฆˆ๋‹ˆ์Šค 3๊ฐ€์ง€๋ฅผ ์ œ์•ˆํ•˜๊ณ , ๊ฐ๊ฐ์˜ ์ˆ˜์ต ๋ชจ๋ธ์„ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
</div>
</div>
<div class="responses-container">
<div class="response-box">
<div class="response-label">๋ชจ๋ธ A</div>
<div class="response-content" id="responseA">
<div class="loading"></div> ์‘๋‹ต ์ƒ์„ฑ ์ค‘...
</div>
<div class="model-reveal" id="modelA">
<div class="model-name">GPT-4</div>
</div>
</div>
<div class="response-box">
<div class="response-label">๋ชจ๋ธ B</div>
<div class="response-content" id="responseB">
<div class="loading"></div> ์‘๋‹ต ์ƒ์„ฑ ์ค‘...
</div>
<div class="model-reveal" id="modelB">
<div class="model-name">Claude 3</div>
</div>
</div>
</div>
<div class="vote-section">
<div class="vote-buttons">
<button class="vote-btn vote-btn-a" onclick="vote('A')">๐Ÿ…ฐ๏ธ ๋ชจ๋ธ A ์„ ํƒ</button>
<button class="vote-btn vote-btn-b" onclick="vote('B')">๐Ÿ…ฑ๏ธ ๋ชจ๋ธ B ์„ ํƒ</button>
</div>
<button class="new-battle-btn" onclick="newBattle()">๐Ÿ”„ ์ƒˆ๋กœ์šด ๋Œ€๊ฒฐ ์‹œ์ž‘</button>
</div>
</div>
<div class="leaderboard">
<h2>๐Ÿ† ์ฐฝ์˜์„ฑ ๋ฆฌ๋”๋ณด๋“œ</h2>
<div class="category-tabs">
<button class="category-tab active" onclick="filterLeaderboard('overall')">์ข…ํ•ฉ</button>
<button class="category-tab" onclick="filterLeaderboard('storytelling')">์Šคํ† ๋ฆฌํ…”๋ง</button>
<button class="category-tab" onclick="filterLeaderboard('innovation')">๋ฐœ๋ช…/ํ˜์‹ </button>
<button class="category-tab" onclick="filterLeaderboard('business')">๋น„์ฆˆ๋‹ˆ์Šค</button>
<button class="category-tab" onclick="filterLeaderboard('artistic')">์˜ˆ์ˆ ์„ฑ</button>
<button class="category-tab" onclick="filterLeaderboard('problem')">๋ฌธ์ œํ•ด๊ฒฐ</button>
</div>
<table class="leaderboard-table">
<thead>
<tr>
<th>์ˆœ์œ„</th>
<th>LLM ๋ชจ๋ธ</th>
<th>์ข…ํ•ฉ์ ์ˆ˜</th>
<th>์Šคํ† ๋ฆฌ</th>
<th>ํ˜์‹ </th>
<th>๋น„์ฆˆ๋‹ˆ์Šค</th>
<th>์˜ˆ์ˆ </th>
<th>๋ฌธ์ œํ•ด๊ฒฐ</th>
<th>๋Œ€๊ฒฐ์ˆ˜</th>
<th>์Šน๋ฅ </th>
<th>ELO</th>
</tr>
</thead>
<tbody id="leaderboardBody">
<!-- ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋จ -->
</tbody>
</table>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-value">1,234</div>
<div class="stat-label">์ด ๋Œ€๊ฒฐ ์ˆ˜</div>
</div>
<div class="stat-card">
<div class="stat-value">56</div>
<div class="stat-label">์ฐธ์—ฌ ๋ชจ๋ธ ์ˆ˜</div>
</div>
<div class="stat-card">
<div class="stat-value">8.7</div>
<div class="stat-label">ํ‰๊ท  ์ฐฝ์˜์„ฑ ์ ์ˆ˜</div>
</div>
<div class="stat-card">
<div class="stat-value">92%</div>
<div class="stat-label">์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„</div>
</div>
</div>
</div>
</div>
<script>
// ํ”„๋กฌํ”„ํŠธ ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ ์˜ˆ์‹œ
const PROMPT_CATEGORIES = {
storytelling: {
name: "๐Ÿ“š ์Šคํ† ๋ฆฌํ…”๋ง",
prompts: [
"2050๋…„ ์„œ์šธ์˜ ํ•˜๋ฃจ๋ฅผ ๋ฌ˜์‚ฌํ•ด์ฃผ์„ธ์š”",
"๊ฐœ๋ฏธ๊ฐ€ ์ฃผ์ธ๊ณต์ธ SF ์†Œ์„ค์˜ ์ฒซ ์žฅ์„ ์จ์ฃผ์„ธ์š”",
"๋ฐฑ์„ค๊ณต์ฃผ๋ฅผ ์‚ฌ์ด๋ฒ„ํŽ‘ํฌ ๋ฒ„์ „์œผ๋กœ ์žฌํ•ด์„ํ•ด์ฃผ์„ธ์š”"
]
},
innovation: {
name: "๐Ÿ’ก ๋ฐœ๋ช…/ํ˜์‹ ",
prompts: [
"ํ”Œ๋ผ์Šคํ‹ฑ ์“ฐ๋ ˆ๊ธฐ๋ฅผ ํ•ด๊ฒฐํ•  ํ˜์‹ ์ ์ธ ๋ฐฉ๋ฒ•์„ ์ œ์•ˆํ•˜์„ธ์š”",
"๋ฏธ๋ž˜์˜ ๊ตํ†ต์ˆ˜๋‹จ์„ ๋””์ž์ธํ•ด์ฃผ์„ธ์š”",
"๋…ธ์ธ๋“ค์„ ์œ„ํ•œ ์ƒˆ๋กœ์šด SNS ์„œ๋น„์Šค๋ฅผ ๊ธฐํšํ•˜์„ธ์š”"
]
},
business: {
name: "๐Ÿ’ผ ๋น„์ฆˆ๋‹ˆ์Šค",
prompts: [
"ํ™”์„ฑ์— ์ฒซ ๋ฒˆ์งธ๋กœ ์„ธ์šธ ๋น„์ฆˆ๋‹ˆ์Šค๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?",
"Z์„ธ๋Œ€๋ฅผ ์œ„ํ•œ ์ƒˆ๋กœ์šด ๊ธˆ์œต ์„œ๋น„์Šค๋ฅผ ์ œ์•ˆํ•˜์„ธ์š”",
"์ „ํ†ต ์‹œ์žฅ์„ ํ™œ์„ฑํ™”ํ•  ๋””์ง€ํ„ธ ์ „๋žต์„ ์ˆ˜๋ฆฝํ•˜์„ธ์š”"
]
},
artistic: {
name: "๐ŸŽญ ์˜ˆ์ˆ ์  ์ฐฝ์˜์„ฑ",
prompts: [
"AI์™€ ์ธ๊ฐ„์˜ ์‚ฌ๋ž‘์„ ์ฃผ์ œ๋กœ ํ•œ ์‹œ๋ฅผ ์จ์ฃผ์„ธ์š”",
"์šฐ์ฃผ๋ฅผ ๋ฐฐ๊ฒฝ์œผ๋กœ ํ•œ ๋ฎค์ง€์ปฌ์˜ ์ค„๊ฑฐ๋ฆฌ๋ฅผ ๋งŒ๋“ค์–ด์ฃผ์„ธ์š”",
"์‹œ๊ฐ„ ์—ฌํ–‰ ๊ฒŒ์ž„์˜ ์Šคํ† ๋ฆฌ๋ผ์ธ์„ ์ž‘์„ฑํ•˜์„ธ์š”"
]
},
problem: {
name: "๐Ÿงฉ ๋ฌธ์ œ ํ•ด๊ฒฐ",
prompts: [
"๋ฌด์ธ๋„์—์„œ ์Šค๋งˆํŠธํฐ ํ•˜๋‚˜๋กœ ์ƒ์กดํ•˜๋Š” ๋ฐฉ๋ฒ•",
"์™ธ๊ณ„์ธ๊ณผ์˜ ์ฒซ ๋งŒ๋‚จ์„ ์ค€๋น„ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ",
"100๋…„ ํ›„ ์ธ๋ฅ˜์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ฐฉ๋ฒ•"
]
}
};
// ์ƒ˜ํ”Œ LLM ๋ชจ๋ธ ๋ชฉ๋ก
const LLM_MODELS = [
"GPT-4", "Claude 3", "Gemini Pro", "LLaMA 3", "Mistral Large",
"PaLM 2", "Qwen 2", "Yi-34B", "Falcon 180B", "MPT-30B"
];
// ์ƒ˜ํ”Œ ๋ฆฌ๋”๋ณด๋“œ ๋ฐ์ดํ„ฐ
const leaderboardData = [
{
model: "GPT-4",
overall: 9.2,
storytelling: 9.5,
innovation: 9.0,
business: 9.3,
artistic: 9.1,
problem: 9.0,
battles: 523,
winRate: 78.5,
elo: 2150
},
{
model: "Claude 3",
overall: 9.0,
storytelling: 9.2,
innovation: 8.8,
business: 9.1,
artistic: 9.0,
problem: 8.9,
battles: 487,
winRate: 75.2,
elo: 2120
},
{
model: "Gemini Pro",
overall: 8.8,
storytelling: 8.7,
innovation: 8.9,
business: 8.8,
artistic: 8.6,
problem: 9.0,
battles: 412,
winRate: 71.8,
elo: 2080
},
{
model: "LLaMA 3",
overall: 8.5,
storytelling: 8.4,
innovation: 8.6,
business: 8.3,
artistic: 8.5,
problem: 8.7,
battles: 356,
winRate: 68.4,
elo: 2040
},
{
model: "Mistral Large",
overall: 8.3,
storytelling: 8.2,
innovation: 8.4,
business: 8.1,
artistic: 8.3,
problem: 8.5,
battles: 298,
winRate: 64.7,
elo: 2000
}
];
let currentModels = [];
let hasVoted = false;
// ๋ฆฌ๋”๋ณด๋“œ ๋ Œ๋”๋ง
function renderLeaderboard(category = 'overall') {
const tbody = document.getElementById('leaderboardBody');
tbody.innerHTML = '';
// ์นดํ…Œ๊ณ ๋ฆฌ๋ณ„ ์ •๋ ฌ
let sortedData = [...leaderboardData];
if (category !== 'overall') {
sortedData.sort((a, b) => b[category] - a[category]);
} else {
sortedData.sort((a, b) => b.overall - a.overall);
}
sortedData.forEach((item, index) => {
const row = tbody.insertRow();
// ์ˆœ์œ„
const rankCell = row.insertCell();
if (index === 0) rankCell.innerHTML = '<span class="rank-medal rank-1">๐Ÿฅ‡</span>';
else if (index === 1) rankCell.innerHTML = '<span class="rank-medal rank-2">๐Ÿฅˆ</span>';
else if (index === 2) rankCell.innerHTML = '<span class="rank-medal rank-3">๐Ÿฅ‰</span>';
else rankCell.textContent = index + 1;
// ๋ชจ๋ธ๋ช…
row.insertCell().textContent = item.model;
// ์ ์ˆ˜๋“ค
const scoreClasses = (score) => {
if (score >= 9) return 'score-high';
if (score >= 8) return 'score-medium';
return 'score-low';
};
const overallCell = row.insertCell();
overallCell.className = 'score-cell ' + scoreClasses(item.overall);
overallCell.textContent = item.overall.toFixed(1);
const storyCell = row.insertCell();
storyCell.className = 'score-cell ' + scoreClasses(item.storytelling);
storyCell.textContent = item.storytelling.toFixed(1);
const innovationCell = row.insertCell();
innovationCell.className = 'score-cell ' + scoreClasses(item.innovation);
innovationCell.textContent = item.innovation.toFixed(1);
const businessCell = row.insertCell();
businessCell.className = 'score-cell ' + scoreClasses(item.business);
businessCell.textContent = item.business.toFixed(1);
const artisticCell = row.insertCell();
artisticCell.className = 'score-cell ' + scoreClasses(item.artistic);
artisticCell.textContent = item.artistic.toFixed(1);
const problemCell = row.insertCell();
problemCell.className = 'score-cell ' + scoreClasses(item.problem);
problemCell.textContent = item.problem.toFixed(1);
// ๋Œ€๊ฒฐ ์ˆ˜
row.insertCell().textContent = item.battles;
// ์Šน๋ฅ 
const winRateCell = row.insertCell();
const winRateClass = item.winRate >= 70 ? 'win-rate-high' :
item.winRate >= 50 ? 'win-rate-medium' : 'win-rate-low';
winRateCell.innerHTML = `<span class="win-rate ${winRateClass}">${item.winRate}%</span>`;
// ELO
const eloCell = row.insertCell();
eloCell.innerHTML = `${item.elo}<span class="elo-badge">ELO</span>`;
});
}
// ์นดํ…Œ๊ณ ๋ฆฌ ํ•„ํ„ฐ
function filterLeaderboard(category) {
// ํƒญ ํ™œ์„ฑํ™” ์ƒํƒœ ๋ณ€๊ฒฝ
document.querySelectorAll('.category-tab').forEach(tab => {
tab.classList.remove('active');
});
event.target.classList.add('active');
// ๋ฆฌ๋”๋ณด๋“œ ์žฌ๋ Œ๋”๋ง
renderLeaderboard(category);
}
// ์ƒˆ๋กœ์šด ๋ฐฐํ‹€ ์‹œ์ž‘
function newBattle() {
hasVoted = false;
// ๋ฒ„ํŠผ ํ™œ์„ฑํ™”
document.querySelectorAll('.vote-btn').forEach(btn => {
btn.disabled = false;
});
// ๋ชจ๋ธ ์ •๋ณด ์ˆจ๊ธฐ๊ธฐ
document.querySelectorAll('.model-reveal').forEach(el => {
el.classList.remove('show');
});
// ๋žœ๋ค ์นดํ…Œ๊ณ ๋ฆฌ ์„ ํƒ
const categories = Object.keys(PROMPT_CATEGORIES);
const randomCategory = categories[Math.floor(Math.random() * categories.length)];
const category = PROMPT_CATEGORIES[randomCategory];
// ๋žœ๋ค ํ”„๋กฌํ”„ํŠธ ์„ ํƒ
const randomPrompt = category.prompts[Math.floor(Math.random() * category.prompts.length)];
// ํ”„๋กฌํ”„ํŠธ ํ‘œ์‹œ
document.getElementById('promptCategory').textContent = category.name;
document.getElementById('promptText').textContent = randomPrompt;
// ๋žœ๋ค์œผ๋กœ 2๊ฐœ ๋ชจ๋ธ ์„ ํƒ
const shuffled = [...LLM_MODELS].sort(() => 0.5 - Math.random());
currentModels = shuffled.slice(0, 2);
// ์‘๋‹ต ๋กœ๋”ฉ ์‹œ๋ฎฌ๋ ˆ์ด์…˜
document.getElementById('responseA').innerHTML = '<div class="loading"></div> ์‘๋‹ต ์ƒ์„ฑ ์ค‘...';
document.getElementById('responseB').innerHTML = '<div class="loading"></div> ์‘๋‹ต ์ƒ์„ฑ ์ค‘...';
// ์ƒ˜ํ”Œ ์‘๋‹ต ์ƒ์„ฑ (์‹ค์ œ๋กœ๋Š” API ํ˜ธ์ถœ)
setTimeout(() => {
document.getElementById('responseA').innerHTML = generateSampleResponse(randomCategory, 'A');
document.getElementById('responseB').innerHTML = generateSampleResponse(randomCategory, 'B');
}, 2000);
// ๋ชจ๋ธ๋ช… ์—…๋ฐ์ดํŠธ (์ˆจ๊น€ ์ƒํƒœ)
document.querySelector('#modelA .model-name').textContent = currentModels[0];
document.querySelector('#modelB .model-name').textContent = currentModels[1];
}
// ์ƒ˜ํ”Œ ์‘๋‹ต ์ƒ์„ฑ
function generateSampleResponse(category, model) {
const responses = {
innovation: {
A: `ํ™”์„ฑ ์ •์ฐฉ ๋น„์ฆˆ๋‹ˆ์Šค TOP 3:
1. **ํ™”์„ฑ ์‚ฐ์†Œ ๋ฑ…ํฌ (Mars O2 Bank)**
- ์„œ๋น„์Šค: ๊ฐœ์ธ/๊ธฐ์—…์šฉ ์‚ฐ์†Œ ์ƒ์‚ฐ, ์ €์žฅ, ๋ฐฐ๊ธ‰
- ์ˆ˜์ต๋ชจ๋ธ: ์›” ๊ตฌ๋…์ œ + ํ”„๋ฆฌ๋ฏธ์—„ ์ˆœ๋„ ์˜ต์…˜
- ์˜ˆ์ƒ ์ˆ˜์ต: ์—ฐ 500์–ต ํ™”์„ฑ๋‹ฌ๋Ÿฌ
2. **๋ ˆ๊ณจ๋ฆฌ์Šค 3D ํ”„๋ฆฐํŒ… ๊ฑด์„ค**
- ์„œ๋น„์Šค: ํ™”์„ฑ ํ† ์–‘์œผ๋กœ ๊ฑด๋ฌผ/์ธํ”„๋ผ ๊ฑด์„ค
- ์ˆ˜์ต๋ชจ๋ธ: ๊ฑด์„ค ํ”„๋กœ์ ํŠธ ๊ณ„์•ฝ + ์žฅ๋น„ ์ž„๋Œ€
- ์˜ˆ์ƒ ์ˆ˜์ต: ์—ฐ 300์–ต ํ™”์„ฑ๋‹ฌ๋Ÿฌ
3. **์ง€๊ตฌ-ํ™”์„ฑ ํ–ฅ์ˆ˜ ๋ฐฐ๋‹ฌ ์„œ๋น„์Šค**
- ์„œ๋น„์Šค: ์ง€๊ตฌ ์Œ์‹, ๋ฌผํ’ˆ์˜ ์ •๊ธฐ ๋ฐฐ์†ก
- ์ˆ˜์ต๋ชจ๋ธ: ๋ฐฐ์†ก๋ฃŒ + ํ”„๋ฆฌ๋ฏธ์—„ ํšŒ์›์ œ
- ์˜ˆ์ƒ ์ˆ˜์ต: ์—ฐ 200์–ต ํ™”์„ฑ๋‹ฌ๋Ÿฌ`,
B: `ํ™”์„ฑ ํ•„์ˆ˜ ๋น„์ฆˆ๋‹ˆ์Šค ์ œ์•ˆ:
1. **ํƒœ์–‘๊ด‘ ์—๋„ˆ์ง€ ๊ทธ๋ฆฌ๋“œ**
- ๊ฑฐ๋Œ€ ํƒœ์–‘๊ด‘ ํŒจ๋„ ๋†์žฅ ์šด์˜
- ์—๋„ˆ์ง€ ํ† ํฐ ๋ธ”๋ก์ฒด์ธ ๊ฑฐ๋ž˜ ์‹œ์Šคํ…œ
- B2B/B2C ์ „๋ ฅ ๊ณต๊ธ‰ ๊ณ„์•ฝ
2. **ํ™”์„ฑ ๋†์—… ๋” (AgroDome)**
- ์ˆ˜์ง๋†์žฅ + ์œ ์ „์ž ํŽธ์ง‘ ์ž‘๋ฌผ
- ์‹๋Ÿ‰ ์ž๊ธ‰์ž์กฑ ์‹œ์Šคํ…œ ๊ตฌ์ถ•
- ๋†์‚ฐ๋ฌผ ์ง๊ฑฐ๋ž˜ + ์ข…์ž ํŒ๋งค
3. **์‹ฌ๋ฆฌ ๊ฑด๊ฐ• VR ์„ผํ„ฐ**
- ์ง€๊ตฌ ํ–ฅ์ˆ˜๋ณ‘ ์น˜๋ฃŒ ํ”„๋กœ๊ทธ๋žจ
- ๊ฐ€์ƒํ˜„์‹ค ์ง€๊ตฌ ์ฒดํ—˜๊ด€
- ๊ตฌ๋…์ œ + ๋งž์ถคํ˜• ์น˜๋ฃŒ ์„ธ์…˜`
},
storytelling: {
A: `2050๋…„ ์„œ์šธ, ์˜ค์ „ 7์‹œ.
ํ•˜๋Š˜์„ ๊ฐ€๋กœ์ง€๋ฅด๋Š” ์—์–ดํƒ์‹œ๋“ค์ด ์•„์นจ ์ถœ๊ทผ๊ธธ์„ ์•Œ๋ฆฐ๋‹ค. ํ•œ๊ฐ•์€ ์ด์ œ ๊ฑฐ๋Œ€ํ•œ ์ˆ˜์ƒ ํƒœ์–‘๊ด‘ ํŒจ๋„๋กœ ๋ฎ์—ฌ์žˆ๊ณ , ๊ทธ ์œ„๋ฅผ ๋‹ฌ๋ฆฌ๋Š” ํ•˜์ดํผ๋ฃจํ”„๊ฐ€ 3๋ถ„๋งˆ๋‹ค ์ง€๋‚˜๊ฐ„๋‹ค.
๊น€๋ฏผ์ค€์€ ๋‡Œ-์ปดํ“จํ„ฐ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์˜ค๋Š˜์˜ ์ผ์ •์„ ํ™•์ธํ•œ๋‹ค. ํ™€๋กœ๊ทธ๋žจ ํšŒ์˜๊ฐ€ 2๊ฑด, ๋ฉ”ํƒ€๋ฒ„์Šค ํ”„๋ ˆ์  ํ…Œ์ด์…˜์ด 1๊ฑด. ์ฐฝ ๋ฐ–์œผ๋กœ ๋ณด์ด๋Š” ๋‚จ์‚ฐํƒ€์›Œ๋Š” ์ด์ œ ๊ฑฐ๋Œ€ํ•œ ๊ณต๊ธฐ์ •ํ™” ํƒ€์›Œ๋กœ ๋ณ€๋ชจํ–ˆ๋‹ค...`,
B: `์„œ์šธ, 2050๋…„.
๋„์‹œ๋Š” ์ž ๋“ค์ง€ ์•Š๋Š”๋‹ค. ๊ฑด๋ฌผ๋“ค์€ ์Šค์Šค๋กœ ํ˜ธํกํ•˜๋ฉฐ ๋Œ€๊ธฐ๋ฅผ ์ •ํ™”ํ•œ๋‹ค. ๊ฑฐ๋ฆฌ์˜ ๋‚˜๋ฌด๋“ค์€ ์œ ์ „์ž ์กฐ์ž‘์œผ๋กœ ๋ฐค์—๋„ ์‚ฐ์†Œ๋ฅผ ๋งŒ๋“ค์–ด๋‚ธ๋‹ค.
์ƒˆ๋ฒฝ 4์‹œ, AI ๊ด€์ œ์„ผํ„ฐ์—์„œ ๋„์‹œ์˜ ํ•˜๋ฃจ๊ฐ€ ์‹œ์ž‘๋œ๋‹ค. 3์ฒœ๋งŒ ์‹œ๋ฏผ์˜ ์›€์ง์ž„์„ ์˜ˆ์ธกํ•˜๊ณ , ๊ตํ†ตํ๋ฆ„์„ ์ตœ์ ํ™”ํ•œ๋‹ค. ์ง€ํ•˜ 50๋ฏธํ„ฐ ์•„๋ž˜์—์„  ์ž์œจ์ฃผํ–‰ ๋ฌผ๋ฅ˜ ๋กœ๋ด‡๋“ค์ด ์กฐ์šฉํžˆ ๋ฌผ์ž๋ฅผ ์šด๋ฐ˜ํ•œ๋‹ค...`
}
};
return responses[category]?.[model] || "์ฐฝ์˜์ ์ธ ์‘๋‹ต์ด ์ƒ์„ฑ๋˜์—ˆ์Šต๋‹ˆ๋‹ค...";
}
// ํˆฌํ‘œ ์ฒ˜๋ฆฌ
function vote(choice) {
if (hasVoted) return;
hasVoted = true;
// ๋ฒ„ํŠผ ๋น„ํ™œ์„ฑํ™”
document.querySelectorAll('.vote-btn').forEach(btn => {
btn.disabled = true;
});
// ๋ชจ๋ธ ๊ณต๊ฐœ
document.getElementById('modelA').classList.add('show');
document.getElementById('modelB').classList.add('show');
// ํˆฌํ‘œ ๊ฒฐ๊ณผ ์ €์žฅ (์‹ค์ œ๋กœ๋Š” ์„œ๋ฒ„๋กœ ์ „์†ก)
const winner = choice === 'A' ? currentModels[0] : currentModels[1];
const loser = choice === 'A' ? currentModels[1] : currentModels[0];
console.log(`์Šน์ž: ${winner}, ํŒจ์ž: ${loser}`);
// ์•Œ๋ฆผ
setTimeout(() => {
alert(`ํˆฌํ‘œ๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!\n์Šน์ž: ${winner}\n\nELO ๋ ˆ์ดํŒ…์ด ์—…๋ฐ์ดํŠธ๋ฉ๋‹ˆ๋‹ค.`);
}, 500);
}
// ํŽ˜์ด์ง€ ๋กœ๋“œ์‹œ ์ดˆ๊ธฐํ™”
window.onload = function() {
renderLeaderboard();
newBattle();
};
</script>
</body>
</html>