SeaWolf-AI's picture
three scored axes
c7483a0 verified
Raw
History Blame Contribute Delete
2.48 kB
# -*- coding: utf-8 -*-
"""μ‹œμ¦Œ 등둝뢀.
μ‹œμ¦Œλ§ˆλ‹€ λŒ€μƒ 물질ꡰ·게이트·배점이 λ‹€λ₯΄λ‹€. ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ λͺ¨λ“  μ‹œμ¦Œμ„ μ„œλΉ™ν•˜λ―€λ‘œ
섀정은 **ν™˜κ²½λ³€μˆ˜κ°€ μ•„λ‹ˆλΌ 인자**둜 흐λ₯Έλ‹€ - ν™˜κ²½λ³€μˆ˜λ‘œ 두면 μ‹œμ¦Œ ν•˜λ‚˜μ˜ 섀정이
λ‹€λ₯Έ μ‹œμ¦Œ μš”μ²­μ— μƒˆμ–΄ λ“€μ–΄κ°„λ‹€.
"""
SEASONS = [
{
"number": 1,
"name": "Open Materials Challenge",
"topic": "Solid-State Battery Electrolyte",
"topic_ko": "전고체 배터리 μ „ν•΄μ§ˆ",
"mobile_ion": "Li",
"opens": "2026-08-21",
"closes": "2026-11-30",
"prize": 0,
"open": True,
"prefix": "",
"anchors": "anchor_scores.json",
# κ²Œμ΄νŠΈλŠ” 자격만 λ³Έλ‹€. μ„±λŠ₯은 점수둜 λ°˜μ˜ν•œλ‹€.
"gate": {
"gap_min": 1.0, # μ „μžμ „λ„μ²΄λŠ” μ „μ§€λ₯Ό λ‹¨λ½μ‹œν‚¨λ‹€ - μ§„μ§œ μš”κ±΄
"hull_max": 0.10, # ν•©μ„± κ°€λŠ₯μ„± μƒν•œ
"ea_max": 1.0, # 리튬 관톡 경둜 쑴재 μ—¬λΆ€. 이진 νŒμ •
"max_atoms": 60,
"require_elements": ("Li",),
},
# 리튬 이동은 κ²Œμ΄νŠΈμ—μ„œλ§Œ λ³Έλ‹€ (관톡 κ²½λ‘œκ°€ μžˆλŠ”κ°€). μˆœμœ„ μΆ•μœΌλ‘œ μ“°μ§€ μ•ŠλŠ”λ‹€.
"weights": {
"oxidation": 40, # μ‚°ν™” μ•ˆμ •μ„±
"li_stability": 35, # λ¦¬νŠ¬κΈˆμ† μ•ˆμ •μ„±
"novelty": 25, # μš©λ„ μ‹ κ·œμ„± (μ‘°μ„± μ‹ κ·œμ„±μ΄ μ•„λ‹ˆλ‹€)
},
},
]
BY_NUMBER = {s["number"]: s for s in SEASONS}
DEFAULT = SEASONS[-1]
# κ³΅κ°œλ©΄μ— 내보내지 μ•ŠλŠ” ν‚€. 채점기 λ‚΄λΆ€ 사정이 μƒˆλ©΄ ν‘œμ ν™”λœ 제좜이 λ“€μ–΄μ˜¨λ‹€.
_PRIVATE = ("prefix", "anchors", "gate")
def get(n=None):
if n in (None, ""):
return DEFAULT
try:
return BY_NUMBER.get(int(n), DEFAULT)
except (TypeError, ValueError):
return DEFAULT
def gate(s):
return dict(s.get("gate") or {})
def path(s, name):
return (s.get("prefix") or "") + name
def public(s):
out = {k: v for k, v in s.items() if k not in _PRIVATE}
g = s.get("gate") or {}
# μ°Έκ°€μžκ°€ μ•Œμ•„μ•Ό 반렀λ₯Ό ν”Όν•  수 μžˆλŠ” κ°’λ§Œ κ³΅κ°œν•œλ‹€.
out["limits"] = {"max_atoms": g.get("max_atoms"),
"hull_max": g.get("hull_max"),
"gap_min": g.get("gap_min")}
return out
def all_public():
return [public(s) for s in SEASONS]