
진짜 아쉽게 2등했다….
문제 발견하고 솔브까지 15분 걸렸는데, 문제를 출제하자마자 바로 발견했다면 퍼블이 확정이였을텐데…
app.py: Flask 서버. 세션/엔드포인트(/, /start, /click) 정의.templates/index.html: 100개의 상자를 클릭하는 프런트엔드. 서버 응답(JSON)에 따라 상태 갱신.static/style.css: 스타일.flag.txt: 정답 플래그(로컬 번들에는 더미 DH{fake_flag})./start가 호출되면 두 개의 무작위 순열이 생성.
board: 1..100을 무작위 섞은 배열 (각 “박스”가 품고 있는 숫자).targets: 1..100을 무작위 섞은 배열 (라운드별로 맞춰야 할 “목표 숫자”).게임 상태(GameState):
current_round: 현재 라운드 번호(0부터 시작, 총 100라운드).attempts_left: 남은 시도 횟수(라운드마다 최대 50회).opened_boxes: 이미 열어본 박스 기록(라운드가 넘어도 남음).current_round += 1, 시도횟수 50으로 리셋, 다음 목표 제시.