본문 바로가기
C.W.K.
Stream
Lesson 02 of 05 · published

단계는 저절로 안 넘어가

~11 min · 수동-전진, 아빠-통제, 단계-관문, 동시성

Level 0찬 쇠
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

단계는 저절로 안 넘어가

자리가 작업을 끝냈다는 건 자기 역할이 끝났다는 뜻일 뿐 다음 단계를 여는 건 아니야. Open Run의 판은 phase_resolved, advance_ready, judging_ready, next_phase를 보여줘. 아빠가 어떤 손이 적법한지 보게 하되, 준비됐다는 사실을 동의로 바꾸지는 않아.

POST /advance는 Relay를 다음 구간으로 옮기거나 여러 단계짜리 모드의 다음, 심사단이 아닌 단계를 열어. 지금 단계의 자리가 남아 있으면 phase_unresolved로 거절해. 다음 단계가 심사단이면 bench_phase_next를 돌려줘. 심사단은 아빠가 심사 화면에서 불러 모아야 하니까.

Arena처럼 단계가 하나뿐인 모드에는 넘어갈 단계의 경계 자체가 없어. /advance는 no_phases를 돌려주고, 참가진이 다 풀리면 judging_ready가 따로 있는 심사단 동작을 가리켜. 여러 단계짜리 모드의 마지막 생산 단계도 뭉뚱그린 전진을 지어내지 않고 심사를 가리켜.

성공한 단계 변경은 새 역할 줄과 yard 재료가 열리기 전에 영속적으로 기록돼. 자리들이 언제 끝나느냐는 준비 상태에 영향을 줄 수 있지만 권한에는 못 줘.

준비 상태가 적법한 손을 고르고 움직이는 건 아빠야. 심사단이 아닌 전진과 심사단 소집은 서로 다른 동작이야.

Code

실제 단계 준비 상태와 타입이 붙은 거절·python
class Refusal(Exception):
    def __init__(self, code, message):
        super().__init__(message)
        self.code = code


def advance(board):
    """거절이 전부 이름을 갖는다 — '실패'라는 뭉뚱그린 상태가 없다."""
    if not board["phase_resolved"]:
        raise Refusal("phase_unresolved", "지금 단계에 남은 자리가 있다")
    nxt = board["next_phase"]
    if nxt is None:
        raise Refusal("no_phases", "넘어갈 단계 경계가 없다 — 심사로 간다")
    if nxt["kind"] == "bench":
        raise Refusal("bench_phase_next",
                      "다음은 심사단이다 — 심사 화면에서 소집해야 한다")
    return {"opened": nxt["label"]}


for board in (
    {"phase_resolved": False, "next_phase": {"kind": "answer"}},
    {"phase_resolved": True, "next_phase": None},
    {"phase_resolved": True, "next_phase": {"kind": "bench"}},
):
    try:
        advance(board)
    except Refusal as exc:
        print(f"409 {exc.code}: {exc}")

ok = advance({"phase_resolved": True,
              "next_phase": {"kind": "answer", "label": "answers"}})
print(ok)

External links

Exercise

Defense 회차에서 시험관이 다 끝나기 전, 다 끝난 뒤, 아빠가 답변 단계로 넘긴 뒤의 준비 상태를 보여 줘. 마지막 심사단이 왜 judging_ready를 쓰는지도 써.
Hint
phase_resolved, advance_ready, judging_ready와 실제로 있는 타입 붙은 거절을 써.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인 — 댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.