SeaWolf-AI commited on
Commit
4149f1b
·
verified ·
1 Parent(s): b8a5854

상금 규칙 개정: 1위 부문 최다 보유자 1명 — 전 부문 제출 조건 폐지

Browse files
Files changed (3) hide show
  1. app.py +9 -8
  2. i18n.js +6 -6
  3. index.html +1 -2
app.py CHANGED
@@ -50,11 +50,11 @@ PRIZE = {
50
  "amount_usd": 1000,
51
  "winners": 1,
52
  "closes": "2027-12-31",
53
- # 🔴 자격은 **전 부문 제출**이다. 한 부문만 잘 맞히는 특화 모델이 아니라
54
- # 46부문 전체를 감당하는 범용 예측기를 가리는 시험대이기 때문이다.
55
- # 전 부문을 채운 사람들 중에서 1위 부문 수로 순위를 매긴다.
56
- "rule": "all_boards_then_most_firsts",
57
- "require_all_boards": True,
58
  }
59
 
60
 
@@ -393,12 +393,13 @@ def api_leaders():
393
  u = (r.get("leader") or {}).get("user")
394
  if u and not is_host(u):
395
  tally[u] = tally.get(u, 0) + 1
 
 
396
  standing = []
397
  for u, bs in cover.items():
398
  standing.append({"user": u, "firsts": tally.get(u, 0),
399
- "submitted": len(bs), "missing": n_boards - len(bs),
400
- "eligible": len(bs) >= n_boards})
401
- standing.sort(key=lambda x: (not x["eligible"], -x["firsts"], -x["submitted"]))
402
  return {"spec": SPEC, "n": len(rows), "rows": rows,
403
  "submissions": submission_count(),
404
  "held": sum(1 for r in rows if r["leader"]),
 
50
  "amount_usd": 1000,
51
  "winners": 1,
52
  "closes": "2027-12-31",
53
+ # **1위 부문을 가장 많이 가진 한 사람.** 전 부문 제출 조건은 두지 않는다
54
+ # (회장님 2026-08-29 개정) - 문턱이 참가를 막으면 겨룰 사람 자체가 없다.
55
+ # 부문마다 지표가 달라 점수를 합산할 수 없으므로 1위 부문의 개수로 센다.
56
+ "rule": "most_first_places",
57
+ "require_all_boards": False,
58
  }
59
 
60
 
 
393
  u = (r.get("leader") or {}).get("user")
394
  if u and not is_host(u):
395
  tally[u] = tally.get(u, 0) + 1
396
+ # 후보 목록. 1위를 가진 사람이 먼저 오고, 그 다음 참가 부문 수 순이다.
397
+ # 1위가 없어도 목록에 남긴다 - 참가한 사람이 보여야 판이 살아 있는 것으로 읽힌다.
398
  standing = []
399
  for u, bs in cover.items():
400
  standing.append({"user": u, "firsts": tally.get(u, 0),
401
+ "submitted": len(bs), "missing": 0, "eligible": True})
402
+ standing.sort(key=lambda x: (-x["firsts"], -x["submitted"], x["user"]))
 
403
  return {"spec": SPEC, "n": len(rows), "rows": rows,
404
  "submissions": submission_count(),
405
  "held": sum(1 for r in rows if r["leader"]),
i18n.js CHANGED
@@ -30,10 +30,10 @@ ko: {
30
  secBrowse: "분야", secBrowseLead: "분야를 선택하면 소속 부문의 순위표와 제출 창구로 이동합니다.",
31
  prizeH: "상금",
32
  prizeLead: (amt,close)=>`마감일에 <b>한 분</b>에게 미화 ${amt}달러를 드립니다. 마감 ${close}.`,
33
- prizeRule: (n)=>`<b>참가는 한 부문이면 됩니다.</b> 부문 하나에 예측을 내면 그 부문 순위표에 바로 오릅니다.<br><b>상금 자격만</b> ${n}개 전 부문 제출입니다 — 한 부문 특화가 아니라 전체를 감당하는 예측기에 드리는 상이기 때문입니다. 전 부문을 채운 분들 중 <b>1위 부문의 개수</b>로 정하고, 동수이면 먼저 도달한 분이 우선합니다.`,
34
  statSubs: "제출",
35
- prizeElig: "자격 충족",
36
- prizeMissing: (n)=>`${n}개 부문 남음`,
37
  prizeHost: "주최측 계정(SeaWolf-AI 등)은 수상 대상이 아닙니다. 눈금 역할로 표에 남되 겨루지 않습니다.",
38
  prizeNone: "아직 수상 후보가 없습니다. 부문 하나에서 1위를 하면 이름이 여기 올라갑니다.",
39
  prizeStanding: "현재 후보",
@@ -237,10 +237,10 @@ en: {
237
  secBrowse: "Disciplines",
238
  prizeH: "Prize",
239
  prizeLead: (amt,close)=>`At the closing date <b>one entrant</b> receives USD ${amt}. Closes ${close}.`,
240
- prizeRule: (n)=>`<b>One board is enough to enter.</b> Submit predictions for a single board and you appear on that board's table straight away.<br><b>The prize alone</b> requires all ${n} boards — it goes to a predictor that handles the whole range, not one that wins a single board. Among those who cover every board, ranking is by <b>the number of boards you lead</b>, ties going to whoever got there first.`,
241
  statSubs: "submissions",
242
- prizeElig: "qualified",
243
- prizeMissing: (n)=>`${n} to go`,
244
  prizeHost: "Host accounts (SeaWolf-AI and others) are not eligible. They stay on the tables as a scale to read against, but they do not compete.",
245
  prizeNone: "No contenders yet. Take first place on any board and your name appears here.",
246
  prizeStanding: "Current contenders",
 
30
  secBrowse: "분야", secBrowseLead: "분야를 선택하면 소속 부문의 순위표와 제출 창구로 이동합니다.",
31
  prizeH: "상금",
32
  prizeLead: (amt,close)=>`마감일에 <b>한 분</b>에게 미화 ${amt}달러를 드립니다. 마감 ${close}.`,
33
+ prizeRule: (n)=>`<b>1위 부문을 가장 많이 가진 한 분</b>께 드립니다. 참가는 한 부문이면 되고, 몇 개를 내셨는지는 따지지 않습니다.<br>부문마다 지표가 달라 점수를 합산할 수 없으므로 <b>1위 부문의 개수</b>로 셉니다. 동수이면 먼저 도달한 분이 우선합니다.`,
34
  statSubs: "제출",
35
+ prizeElig: "",
36
+ prizeMissing: (n)=>"",
37
  prizeHost: "주최측 계정(SeaWolf-AI 등)은 수상 대상이 아닙니다. 눈금 역할로 표에 남되 겨루지 않습니다.",
38
  prizeNone: "아직 수상 후보가 없습니다. 부문 하나에서 1위를 하면 이름이 여기 올라갑니다.",
39
  prizeStanding: "현재 후보",
 
237
  secBrowse: "Disciplines",
238
  prizeH: "Prize",
239
  prizeLead: (amt,close)=>`At the closing date <b>one entrant</b> receives USD ${amt}. Closes ${close}.`,
240
+ prizeRule: (n)=>`It goes to <b>the entrant leading the most boards</b>. One board is enough to enter, and how many you submit to is not counted against you.<br>Boards use different metrics, so scores cannot be summed: what counts is <b>the number of boards you lead</b>. Ties go to whoever got there first.`,
241
  statSubs: "submissions",
242
+ prizeElig: "",
243
+ prizeMissing: (n)=>"",
244
  prizeHost: "Host accounts (SeaWolf-AI and others) are not eligible. They stay on the tables as a scale to read against, but they do not compete.",
245
  prizeNone: "No contenders yet. Take first place on any board and your name appears here.",
246
  prizeStanding: "Current contenders",
index.html CHANGED
@@ -437,8 +437,7 @@ function renderPrize(d){
437
  <p>${t.prizeLead(p.amount_usd.toLocaleString(), p.closes)}</p>
438
  <p>${t.prizeRule(p.n_boards)}</p>
439
  <div class="cand"><b>${t.prizeStanding}</b> — ${
440
- s.length? s.slice(0,6).map(x=>`${esc(x.user)} <span class="dim">(${
441
- x.eligible? t.prizeElig : t.prizeMissing(x.missing)} · ${t.prizeFirsts(x.firsts)})</span>`).join(" · ")
442
  : t.prizeNone}</div>
443
  <div class="fine">${t.prizeHost}</div>`;
444
  }
 
437
  <p>${t.prizeLead(p.amount_usd.toLocaleString(), p.closes)}</p>
438
  <p>${t.prizeRule(p.n_boards)}</p>
439
  <div class="cand"><b>${t.prizeStanding}</b> — ${
440
+ s.length? s.slice(0,6).map(x=>`${esc(x.user)} <span class="dim">(${t.prizeFirsts(x.firsts)})</span>`).join(" · ")
 
441
  : t.prizeNone}</div>
442
  <div class="fine">${t.prizeHost}</div>`;
443
  }