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

Defense와 Restoration

~11 min · defense, restoration, 도전, 복구

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

Defense와 Restoration

Defense는 공격자와의 결투가 아니라 모든 후보를 대상으로 한 구술 시험이야. 참가자가 먼저 결과물을 제출해. 시험관 지원 자리가 참가진을 읽고 모든 출품작에 질문을 내. 저자는 각자 자기 작업에 답해. 마지막 심사단은 결과물과 시험 답변을 함께 평가하고, 시험관은 경쟁 결과물을 내지도 심사위원이 되지도 않아.

Restoration은 과제서가 준 망가진 결과물로 시작해. 같은 차례 안에서 참가자는 먼저 요구된 진단을 만들고, 그다음 submission/ 아래에서 작업을 고쳐. 진단도 심사 대상의 일부야. 정해 둔 진단이 없으면 고친 파일이 있어도 diagnosis_required로 완료를 거절해.

Defense는 공통의 질문 아래서 결과물을 설명하고 지킬 수 있는지 재. Restoration은 바이트를 바꾸기 전에 무엇이 망가졌는지 이해했는지를 재. 어느 모드에도 공격자 승자나 항복 상태나 별도의 수리 단계를 지어내지 않아.

두 모드 모두 생각을 제약된 산출물로 만들어서 들여다볼 수 있게 해. Defense에서는 결과물과 짝지은 답변 파일이고, Restoration에서는 고친 산출물과 짝지은, 점수가 매겨지는 진단이야.

시험은 주인 노릇을 검증하고 진단은 수리를 땅에 붙여. 요구된 증거를 심사 대상 제출물 안에 둬.

Code

진단 없이는 완료가 열리지 않는다·python
class DiagnosisRequired(Exception):
    code = "diagnosis_required"


def mark_done(turn):
    """Restoration의 한 차례: 진단이 먼저, 수리가 나중. 순서가 계약이다."""
    if turn.get("mode") == "Restoration" and not turn.get("diagnosis"):
        raise DiagnosisRequired(
            "고친 파일이 있어도 진단이 없으면 완료가 아니다"
        )
    return {"state": "done", "judged": ["diagnosis", "submission"]}


repaired_only = {"mode": "Restoration", "submission": ["fix.py"]}
try:
    mark_done(repaired_only)
except DiagnosisRequired as exc:
    print(exc.code, "—", exc)

full = {"mode": "Restoration", "diagnosis": "경계 조건에서 off-by-one",
        "submission": ["fix.py"]}
print(mark_done(full))

External links

Exercise

Defense 회차 하나와 Restoration 회차 하나의 산출물 명세를 써 봐. 마지막 심사단이 받는 정확한 파일도 나열해.
Hint
Defense는 결과물과 답변, Restoration은 진단과 수리를 짝지어.

Progress

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

댓글 0

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

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