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

모든 루프엔 상한이 있어

~11 min · 상한-있는-루프, 실패, 복구, 종료

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

모든 루프엔 상한이 있어

Anvil은 되풀이할 수 있지만 어떤 루프도 끝없는 약속이 되지는 않아. 반복하는 모드에는 단단한 max_roundsmax_legs가 있어. 자리마다 차례에 재시도 횟수와 물러섰다 오는 간격이 정해져 있고, 계속 실패하는 참가자는 withdrawn이 돼. 회차는 남은 참가진으로 계속 가.

망가짐은 치명적으로 감추지 않고 드러내서 기록해. 무대에 결과물이 하나만 살아남으면 기본값으로 결정된 것이 되고, 하나도 없으면 중단해. 심사위원이 정해진 재시도 뒤에도 실패하면 남은 참가자 중에서 새로 무작위 대체를 뽑아. 대체할 후보군이 비어도 이미 들어온 표는 계속 세기 때문에 심사위원 한 명으로 심사단이 이어질 수 있어. 하지만 아무도 심사를 만들어내지 못하면 회차는 중단해.

Relay의 구간 상한과 모든 회전 상한은 모드의 계약과 기록 줄기에 들어가. ‘의미 있는 개선이 더는 없다’는 선언은 Relay를 일찍 끝낼 수 있지만, 단단한 상한은 어떤 품질 기준도 루프를 끝없이 늘리지 못하게 막아.

재대결은 또 하나의 숨은 재시도가 아니야. 아빠가 새로 이어진 회차를 명시적으로 만들고, 확정되거나 중단된 앞 회차와 기록 줄기 전체를 보존해. 중단은 살아 있는 회차의 일반 비상구로 남고 실패한 이력을 지우지 않아.

시도에 상한을 두고 망가짐을 기록해. 참가진 소진으로 인한 중단, 기권, 심사위원 한 명으로 이어가기, 기본값 결정, 새 재대결은 서로 다른 결말이야.

Code

상한이 있는 실패 경로·python
MAX_ROUNDS = 3


def resolve(artifacts, ballots):
    """결말을 이름으로 구분한다. 어느 것도 '조용히 실패'가 아니다."""
    if not artifacts:
        return "aborted:empty_field"
    if len(artifacts) == 1:
        return "decided_by_default"        # 기록에 그렇게 남긴다
    if not ballots:
        return "aborted:no_judgment"
    return "decided"


def run_rounds(field, judge):
    trail = []
    for rnd in range(1, MAX_ROUNDS + 1):   # 상한이 루프 밖이 아니라 안에 있다
        field = [a for a in field if judge(a)]
        trail.append({"round": rnd, "survivors": len(field)})
        if len(field) <= 1:
            break
    return field, trail


assert resolve([], []) == "aborted:empty_field"
assert resolve(["A"], []) == "decided_by_default"
assert resolve(["A", "B"], []) == "aborted:no_judgment"

survivors, trail = run_rounds(["A", "B", "C", "D"], lambda a: a < "C")
print(survivors, trail)

External links

Exercise

참가자 둘인 Arena에서 하나가 기권하고, 뽑힌 심사위원 둘이 대체 후보군이 빌 때까지 실패하는 경로를 그려 봐.
Hint
참가진은 계속 가고 심사단은 정직하게 약해지며 모든 단계가 기록돼.

Progress

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

댓글 0

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

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