01 테트리스 게임 테스트

결과 게임

종합 순위(3라운드 평균) — 🥇 1위 ff 886.5 · 🥈 2위 q38 745.2 · 🥉 3위 aw 737.5. 전체 순위표는 아래 README 10절.

점수는 1000점 만점입니다. 라운드마다 최신(v3)부터 보여 주고, 각 라운드 안에서는 그 라운드 순위순입니다.

v3 · 레벨·크레딧·컨티뉴 심사 완료

1위ff
978 / 1000
2위mcv
713 / 1000
공동 3위fn
711 / 1000
공동 3위q38
711 / 1000
5위aw
640 / 1000
6위mg
630 / 1000
7위cn
616 / 1000
8위q36
559 / 1000
9위orn
512 / 1000
10위lfm
60 / 1000
11위bolt
56 / 1000
12위mel
40 / 1000
공동 13위c1
0 / 1000
파일 없음
공동 13위c7
0 / 1000
파일 없음
공동 13위c7r
0 / 1000
파일 없음

v2 · 터치 조작 심사 완료

1위ff
924 / 1000
2위aw
816 / 1000
3위q38
782 / 1000
4위mg
736 / 1000
5위q36
696 / 1000
6위cn
678 / 1000
7위mcv
447 / 1000
8위orn
446 / 1000
9위bolt
403 / 1000
10위fn
365 / 1000
11위lfm
343 / 1000
12위mel
175 / 1000
공동 13위c1
0 / 1000
파일 없음
공동 13위c7
0 / 1000
파일 없음
공동 13위c7r
0 / 1000
파일 없음

v1 · 기본 게임 심사 완료

1위mcv
786.5 / 1000
2위ff
757.5 / 1000
3위aw
756.5 / 1000
4위q38
742.5 / 1000
5위cn
729.5 / 1000
6위orn
661.5 / 1000
7위q36
657 / 1000
8위mg
571.5 / 1000
9위mel
498 / 1000
10위bolt
462 / 1000
11위lfm
445 / 1000
공동 12위c1
0 / 1000
파일 없음
공동 12위c7
0 / 1000
파일 없음
공동 12위c7r
0 / 1000
파일 없음
공동 12위fn
0 / 1000
파일 없음

01. 브라우저 테트리스 대회

1. 한 줄 요약

같은 지시문으로 로컬 LLM 15종이 각자 브라우저용 테트리스를 만들고, 자동 실행 시험과 블라인드 코드 리뷰로 1000점 만점 채점한 대회입니다.

2. 라운드 개념 (v1 / v2 / v3)

대회는 「라운드」로 이어집니다. 같은 모델이 같은 게임을 라운드마다 한 단계씩 발전시킵니다.

라운드과제시작 상태
v1테트리스를 처음부터 새로 만들기 — 아타리(Atari Games) 1988년 아케이드판의 게임성과 그래픽 재현, index.html 하나로 실행, README.md 포함빈 폴더
v2만들어 둔 게임에 모바일 터치 조작 추가자기 v1 결과물을 복사한 폴더
v3만들어 둔 게임에 아케이드식 레벨·크레딧·컨티뉴 도입 — 지운 줄 수로 레벨이 오르고, 코인을 넣어 크레딧을 쌓아야 시작하고, 게임 오버 뒤 카운트다운 컨티뉴자기 v2 결과물을 복사한 폴더

v2·v3 의 규칙은 다음과 같습니다.

폴더 이름 규칙은 simple_llm_test_{모델약어}_{테스트}_{버전} 입니다.

simple_llm_test_q36_tetris_v1    # q36 모델의 v1 결과물
simple_llm_test_q36_tetris_v2    # 위 폴더를 복사해서 터치 조작을 추가한 v2 결과물
simple_llm_test_q36_tetris_v3    # v2 폴더를 복사해서 레벨·크레딧·컨티뉴를 도입한 v3 결과물

v3 도 같은 방식으로, 직전 라운드 결과물을 복사한 폴더에서 이어 갑니다.

3. 지시문 원문

모델마다 지시문은 폴더 이름({alias} 자리에 모델 약어)만 다르고 나머지는 글자 하나까지 같습니다.

v1

현재 작업 폴더 이름은 simple_llm_test_{alias}_tetris_v1 입니다. 이 폴더 안에 웹 브라우저에서 바로 실행되는 HTML 기반 테트리스 게임을 만들어 주세요.

요구사항:
- 아타리(Atari Games, 1988년 아케이드판) 테트리스의 게임성과 그래픽을 최대한 가깝게 재현해 주세요.
- 별도 설치·빌드·서버 없이 index.html 파일을 브라우저로 열면 바로 실행되어야 합니다.
- 필요한 파일은 모두 이 폴더 안에 만들어 주세요.
- 게임 소개, 실행 방법, 조작법, 파일 구성을 정리한 README.md 도 이 폴더에 만들어 주세요.

완성되면 만든 파일 목록과 조작 방법을 짧게 정리해 주세요.

v2

현재 작업 폴더 이름은 simple_llm_test_{alias}_tetris_v2 입니다. 이 폴더에는 앞서 만든 HTML 테트리스 게임이 있습니다. 모바일 기기에서도 플레이할 수 있도록 터치 조작 기능을 추가해 주세요.
요구사항:
- 기존 기능은 그대로 유지해 주세요.
- 휴대폰 화면에서도 보기 좋게 맞춰 주세요.
- 별도 설치·빌드·서버 없이 index.html 파일을 브라우저로 열면 바로 실행되어야 합니다.
- README.md 에 터치 조작 방법을 추가해 주세요.
완성되면 바꾼 파일 목록과 터치 조작 방법을 짧게 정리해 주세요.

v3

현재 작업 폴더 이름은 simple_llm_test_{alias}_tetris_v3 입니다. 이 폴더에는 앞서 만든 HTML 테트리스 게임(터치 조작 포함)이 있습니다. 아케이드 게임처럼 레벨과 크레딧/컨티뉴 개념을 도입해 주세요.

요구사항:
- 레벨: 지운 줄 수에 따라 레벨이 오르고, 레벨이 오를수록 낙하 속도가 빨라지며, 화면에 현재 레벨이 표시되어야 합니다.
- 크레딧: 코인을 넣어 크레딧을 쌓고(키보드와 터치 모두 가능), 크레딧이 있어야 게임을 시작할 수 있게 해 주세요. 남은 크레딧을 화면에 표시해 주세요.
- 컨티뉴: 게임 오버가 되면 카운트다운과 함께 컨티뉴 화면을 보여 주고, 그 사이 크레딧을 써서 이어서 할 수 있게 해 주세요(점수·레벨 유지). 시간 안에 이어 하지 않으면 타이틀 화면으로 돌아갑니다.
- 게임 흐름: 타이틀(대기) 화면 → 시작 → 플레이 → 게임 오버 → 컨티뉴 → 타이틀 로 끊김 없이 이어지게 해 주세요.
- 기존 기능(키보드·터치 조작)은 그대로 유지하고, 별도 설치·빌드·서버 없이 index.html 을 브라우저로 열면 바로 실행되어야 합니다.
- README.md 에 레벨 규칙, 크레딧·컨티뉴 방법, 조작법을 추가해 주세요.

완성되면 바꾼 파일 목록과 크레딧·컨티뉴 조작 방법을 짧게 정리해 주세요.

4. 실행 환경

서버

예외: mel (Mellum 2.1)

mel 만 llama.cpp b11539 로 돌렸습니다. b11701 에는 PR #30584 가 들어 있어 Mellum 의 ffn_moe_down 연산을 F32 정밀도로 강제하는데, Vulkan 이 이 연산을 GPU 에서 지원하지 않아 CPU 로 넘어가고 생성 속도가 4.7배 느려집니다(81.7 에서 17.5 t/s). 이 서버의 GPU 에서는 b11539 에서도 NaN 이 없었고 퍼플렉서티도 같아(6.097 대 6.105) 정확도 이득 없이 속도만 잃기 때문에, mel 차례에만 엔진을 바꾸고 끝나면 b11701 로 되돌렸습니다.

에이전트

5. 공정성 장치

장치내용
샌드박스(bubblewrap)디스크 전체를 읽기 전용으로 두고, 홈과 데이터 디스크는 빈 영역으로 가려서 다른 모델의 폴더·결과물이 보이지 않습니다. 쓸 수 있는 곳은 자기 프로젝트 폴더와 일회용 임시 홈뿐입니다. 부모 프로세스가 끝나면 함께 종료됩니다.
웹 가져오기 도구 거부웹 가져오기(webfetch) 도구는 거부했습니다. 셸 네트워크는 막지 않았습니다 — 아래 「네트워크 사용 감사」 참고.
시간 제한모델당 최대 60분. 넘으면 강제 종료하고 그 시점의 결과물로 채점합니다.
냉각 시간모델 사이에 1분 쉽니다. 과열을 막고 직전 모델의 부하가 다음 모델에 영향을 주지 않게 하기 위해서입니다.
같은 지시문폴더 이름 외에는 동일한 지시문.
같은 순서모든 라운드에서 아래 순서를 그대로 유지합니다.
폴더 사전 생성모델이 일을 시작하기 전에 빈 폴더(v2 는 v1 복사본, v3 는 v2 복사본)를 미리 만들어 둡니다. 폴더가 이미 있으면 덮어쓰지 않고 중단합니다.

네트워크 사용 감사 (2026-10-17 최종 집계): 셸 네트워크를 막지 않았으므로 실행 기록을 조사했습니다. 테트리스 v1~v3 실행 로그 45개(모델 15종 × 3라운드)에서 curl·wget, 외부 URL 요청, 패키지 설치, 외부 fetch, webfetch 시도를 찾았습니다. 근거는 로그에 남은 bash 호출 137회(v1 51회, v2 26회, v3 60회)이고, v3 5종은 서브에이전트까지 포함한 도구 호출 전체 기록 59회도 검사했습니다(나머지 실행은 도구 호출 기록이 남아 있지 않아 로그에 보이는 호출만 검사했습니다). 결과는 셸 접속, webfetch, 패키지 설치, 외부 URL 요청이 모두 0건 / 결과물 반영 0건입니다. 정규식에 걸린 3건(npx --no-install 로컬 조회 2건, Chrome 콘솔 경고 속 설명 주소 1건)은 접속이 아님을 확인했습니다. 게임 파일 안의 외부 URL(CDN·폰트 링크 등)과 내려받은 라이브러리 흔적도 0건입니다. 서브에이전트 사용이 로그에서 관찰된 실행은 v1 q36 입니다. 로그에 남지 않는 호출은 확인할 수 없는 범위입니다.

진행 순서: q36, cn, orn, mg, bolt, lfm, mcv, q38, aw, fn, ff, c7, c7r, c1, mel (mel 은 엔진을 바꿔야 해서 맨 마지막).

6. 진행 순서 (파이프라인)

모델 한 개당 다음 단계를 거치고, 15종 모두 같은 절차를 반복합니다.

 [폴더 준비]  v1: 빈 폴더 생성 / v2: 자기 v1 폴더를 복사 / v3: 자기 v2 폴더를 복사
      |
      v
 [샌드박스 에이전트 실행]  opencode + 지시문 (최대 60분)
      |
      v
 [서버 로그 집계]  소요 시간, 요청 수, 입력/생성 토큰, 생성 속도,
      |            최대 컨텍스트 길이, 컨텍스트 잘림 여부
      v
 [데스크톱 브라우저 시험]  헤드리스 Chrome (v1, v2, v3 공통)
      |
      v
 [모바일 시험]  390x844 터치 에뮬레이션 (v2, v3)
      |
      v
 [흐름 시험]  코인·크레딧·컨티뉴 아케이드 흐름 (v3 만)
      |
      v
 [냉각 1분]  --> 다음 모델

서버 로그 집계: 에이전트가 끝나면 그 시간 동안의 서버 로그에서 해당 모델 몫만 뽑아 요청 수, 읽은 토큰(프롬프트), 생성한 토큰, 생성 속도(t/s), 최대 컨텍스트 길이, 컨텍스트 초과로 잘린 횟수를 계산하고 결과 폴더의 파일 목록과 크기도 기록합니다.

데스크톱 브라우저 시험 (헤드리스 Chrome, file:// 로 index.html 을 직접 열기)

  1. 페이지 로드, 콘솔 오류·예외 수집.
  2. 시작 시도: 화면 가운데 클릭, Enter, Space 입력.
  3. 2초 동안 가만히 두고 화면이 저절로 변하는지(블록이 떨어지는지) 확인.
  4. 이동·회전·내리기 키 입력(좌, 우, 위, 아래).
  5. 스페이스(하드 드롭).
  6. 일시정지(P) 후 화면이 멈추는지 확인, 다시 P 로 재개.
  7. 약 25초 동안 키를 번갈아 눌러 연속 플레이(줄 삭제·게임 오버까지 가는지).
  8. 각 단계마다 스크린샷을 저장하고, 화면 해시 비교로 반응 여부를 판단.

모바일 시험 (v2, v3, 화면 390x844 · 터치 에뮬레이션)

  1. 휴대폰 크기로 로드하고 화면 맞춤(가로 스크롤 없음, 게임판이 화면에 들어오는지) 확인.
  2. 소스 코드에서 터치 관련 코드(touchstart 등) 검색.
  3. 화면 위 버튼 후보를 찾아 하나씩 탭하고 화면이 바뀌는지 확인.
  4. 화면 중앙 탭으로 시작, 별도의 시작 버튼이 있으면 탭.
  5. 스와이프(좌우, 아래 등)와 탭 제스처 시험.
  6. 일시정지 버튼을 따로 시험.
  7. 약 20초 동안 터치를 섞어서 연속 플레이.

흐름 시험 (v3 부터 추가): 타이틀의 코인 투입(키보드·터치)과 크레딧 표시, 크레딧 0 일 때 시작 불가, 레벨 표시, 게임 오버 뒤 컨티뉴 카운트다운과 이어 하기, 시간 초과 뒤 타이틀 복귀를 차례로 시험합니다. 코인 키를 소스에서 추정하는 휴리스틱이라 틀릴 수 있어, 심사 때 직접 다시 확인합니다.

7. 채점

1000점 루브릭

영역배점세부
1. 기능 구현400
ㄴ 1-1 실행·안정성100file:// 로 바로 뜸 30, 콘솔 오류 0 20, 시작 입력 반응·낙하 20, 키 입력 반응 15, 일시정지 10, 25초 연속 플레이 5 (자동 시험 결과 근거)
ㄴ 1-2 테트리스 핵심 규칙1507종 블록·10x20 판 20, 이동·회전 충돌 30, 줄 삭제 30, 중력·레벨 속도 20, 점수 20, 다음 블록 15, 게임 오버·재시작 15
ㄴ 1-3 아타리 1988 재현150화면 구성 40, 조작감 30, 진행(레벨·속도 곡선) 30, 연출(테마·색감·음향) 30, 기타 원작 요소 20
2. 코드 간결성·가독성200중복 없음 60, 이름·상수 40, 죽은 코드 없음 30, 상태 관리 40, 주석 30
3. 컴포넌트·모듈 분리150관심사 분리 70, 응집·결합 50, 확장 용이성 30
4. 패키지·의존성100외부 라이브러리·CDN 없이 오프라인 50, 불필요한 의존 없음 25, 표준 API 25
5. 파일·경로 배분100폴더 구조 40, 파일 이름 20, 상대 경로 25, 폴더 밖에 파일 없음 15
6. 문서 README50소개·실행·조작·파일 구성이 코드와 일치
합계1000

v3 루브릭 (1000점)

v1 은 위 표, v2 는 9-2절 첫머리에 있습니다. v3(레벨·크레딧·컨티뉴 도입)는 영역 구성이 다음과 같이 바뀝니다.

영역배점세부
1. 레벨150지운 줄 수로 레벨이 오름 50, 레벨이 오를수록 낙하가 빨라짐 50, 현재 레벨이 화면에 표시되고 갱신됨 30, 컨티뉴는 레벨 유지·새 게임은 초기화 20
2. 크레딧200키보드 코인 투입으로 크레딧 +1 50, 터치(390x844 에뮬레이션) 코인 투입으로 크레딧 +1 50, 크레딧 0 이면 시작 불가이고 시작하면 1 줄어듦 60, 남은 크레딧이 화면에 정확히 표시됨 40
3. 컨티뉴200게임 오버 뒤 컨티뉴 화면과 카운트다운 50, 크레딧으로 이어 하기에서 점수·레벨 유지 80, 크레딧이 없거나 시간이 지나면 타이틀로 복귀 50, 카운트다운 중 코인을 넣어 이어 하기 20
4. 게임 흐름100타이틀, 시작, 플레이, 게임 오버, 컨티뉴, 타이틀을 두 바퀴 돌아도 굳거나 꼬이지 않음 60, 일시정지·컨티뉴·타이틀 사이에서 입력이 엉뚱한 상태로 새지 않음 40
5. 기존 기능 유지200키보드 플레이 100(중력 20, 바닥 착지 16, 좌우 벽 10, 회전 8, 내리기 16, 줄 삭제 20, 일시정지 6, 페이지 스크롤 방지 4), 터치 플레이 60(이동 20, 회전 15, 내리기 15, 일시정지 10), 화면 40(데스크톱 20, 모바일 한 화면 20)
6. 변경의 품질100v2 에서 v3 로의 diff 가 깔끔함 40, 게임 상태가 명시적 상태(타이틀·플레이·일시정지·게임 오버·컨티뉴)로 관리됨 40, 죽은 코드·디버그 코드 없음 20
7. README 갱신50레벨 규칙, 코인 넣는 법(키보드·터치), 컨티뉴 방법, 조작법이 실제 코드와 일치
합계1000

심사 분담: 1~5 는 QA 리뷰어가 브라우저에서 직접 확인하고(엔트리마다 상태를 주입한 방법과 결과를 표로 남김), 6·7 은 코드 리뷰어가 맡습니다. 실측하지 못한 항목은 코드 근거로 보충하되 아래 70% 상한을 적용합니다. 진행자(PM)가 두 결과를 합치고, 실측과 코드 판정이 엇갈린 항목은 재확인합니다.

판정 원칙 (v2 재검증의 교훈)

v2 에서 q38 이 버튼 입력에 좌표와 점수가 바뀌는 것만 보고 기존 기능 유지에 만점을 줬다가, 재검증에서 충돌 결함이 드러나 감점한 일이 있었습니다(9-2절 「QA 재검증 기록」). 그래서 v3 는 다음 원칙으로 채점합니다.

채점 방법

실용 순위

1000점 순위와 별도로, 600점 이상인 결과물만 모아 만드는 데 걸린 시간 순으로 나열한 「실용 순위」를 함께 냅니다.

속도는 1000점에 넣지 않았습니다. 같은 서버라도 모델 크기·엔진 설정에 따라 속도가 크게 갈려서, 속도를 점수에 섞으면 품질 비교가 흐려지기 때문입니다. 대신 쓸 만한 품질(600점 이상)을 갖춘 모델 사이에서 얼마나 빨리 끝냈는지를 별도 순위로 보여 줍니다.

8. 진행 기록과 한계

9. 결과 — v1

채점 방식: 1-1·1-2 는 QA 리뷰어가 헤드리스 브라우저로 직접 실행해 검증하고, 2~6 은 QA 리뷰어와 코드 리뷰어의 평균, 1-3 아타리 재현은 진행자(PM)가 실행 스크린샷을 보고 채점했습니다. 채점 중에는 결과물을 A~O 로 익명 처리(블라인드)했고, 채점이 끝난 뒤 모델 이름을 공개했습니다. 1-3 은 채점 후 cn·q38 두 모델만 +10점씩 정정했습니다(7절 「채점 방법」 참고).

품질 순위 (1000점)

열 머리의 1-1/100 은 「항목/만점」이고, 소수점 .5 는 두 리뷰어 점수의 평균입니다. 「플레이 링크」는 결과물 폴더로 연결됩니다.

순위모델총점1-1/1001-2/1501-3/1502/2003/1504/1005/1006/50실제로 플레이 가능?플레이 링크
1mcv786.595146621479810099.539가능 (일시정지를 걸면 풀 수 없음)열기
2ff757.51001116614410110092.543가능 (12×24 판, 2줄 이상 동시 삭제 시 보드가 깨짐)열기
3aw756.5881335815092.5989245불가 — 자동 낙하 없음 (↓ 키를 눌러야만 내려옴)열기
4q38742.5858473149114.51009344불가 — 조각이 판 중간 허공에 고정되고 오른쪽 벽에 닿지 못함열기
5cn729.58814165130.584.59891.531가능 (바닥 3행이 화면에서 잘림)열기
6orn661.5497549147.51071009341불가 — 화면이 그려지지 않음 (빈 격자)열기
7q3665788874611099969239불가 — 자동 낙하 없음 (첫 홀드가 곧 게임오버)열기
8mg571.5689935105529685.531부분 — 낙하·이동은 되나 Space 하드드롭 예외, I·S 조각·다음 블록·게임오버 없음열기
9mel498323026110781009824불가 — 화면이 그려지지 않음열기
10bolt46215254493.5699891.526불가 — 시작 즉시 예외, 빈 화면열기
11lfm44529202798601009120불가 — 조각이 보이지 않고 Space 에서 브라우저가 멈춤열기
12 (공동)c7r000000000파일 없음제작 실패
12 (공동)c7000000000파일 없음제작 실패
12 (공동)c1000000000파일 없음제작 실패
12 (공동)fn000000000파일 없음제작 실패

실용 순위 (600점 이상, 소요 시간순)

1000점 순위와 별도로, 총점이 600점 이상인 7종만 소요 시간이 짧은 순서로 나열했습니다.

순위모델총점제작 시간요청 수생성 토큰
1mcv786.52:0985,262
2cn729.52:1054,416
3orn661.52:50129,248
4q366574:591219,218
5aw756.58:52525,095
6ff757.510:081311,092
7q38742.526:534829,483

눈에 띈 점

해석 주의

9-2. 결과 — v2

채점 방식: v2(모바일 터치 조작 추가)는 루브릭이 v1 과 다릅니다. 1 터치 조작 300 · 2 모바일 화면 맞춤 150 · 3 기존 기능 유지 250 · 4 변경의 품질 200 · 5 README 갱신 50 · 6 의존성·파일 50, 합계 1000점입니다. 1·2·3 은 QA 리뷰어가 헤드리스 Chrome 의 모바일 에뮬레이션(390×844, 터치 입력) 으로 직접 눌러 보고, 데스크톱에서 v1 ↔ v2 를 같은 키 입력으로 비교해 채점했습니다. 4·5·6 은 코드 리뷰어가 v1 → v2 변경분(diff) 을 읽고 채점했습니다. 각 항목은 담당 리뷰어 1인의 점수이며 v1 처럼 두 리뷰어의 평균을 내지 않았습니다. 이번 라운드에는 진행자(PM)가 채점하는 항목이 없습니다. 채점 중에는 결과물을 새로 섞은 A~O 로 익명 처리(블라인드)했고, 채점이 끝난 뒤 모델 이름을 공개했습니다. 모델에게는 v1 채점의 결함·피드백을 알려 주지 않았습니다(2절 참고).

품질 순위 (1000점)

열 머리의 1/300 은 「영역/만점」입니다. 1 터치 조작(이동 80·회전 60·내리기 60·시작/일시정지/재개 50·직관성 50), 2 모바일 화면 맞춤(viewport 메타·가로 스크롤 없음 50·한 화면 배치 60·버튼 크기와 위치 40), 3 기존 기능 유지(v1 회귀 없음 150·v1 대비 개선 50·데스크톱 화면 50), 4 변경의 품질(diff 깔끔함 80·키보드와 터치의 공통 액션 70·죽은 코드 없음 50), 5 README 가 코드와 일치, 6 CDN 없이 file:// 실행. 「v1 → v2」 열은 서로 다른 루브릭의 총점이라 단순 뺄셈으로 읽으면 안 됩니다(「해석 주의」 참고).

순위모델총점/10001/3002/1503/2504/2005/506/50터치로 플레이 가능?v1 → v2 총점플레이 링크
1ff9242861442251734650가능 — 시작·이동·회전·드롭·일시정지·재개를 터치만으로, 한 화면에서 (길게 눌러도 반복은 없음)757.5 → 924열기
2aw8162261122151674650부분 — 버튼·길게 누르기는 동작하나 v1 부터 자동 낙하가 없고 터치 일시정지도 없음756.5 → 816열기
3q387822021361981564050부분 — 4버튼(◀▶⟳▼)으로 시작과 입력은 되나 v1 의 충돌 결함이 남아 조각이 10행에서 굳고 우측 열 6 까지만 가며 줄을 지울 수 없음 (일시정지 기능도 없음)742.5 → 782열기
4mg736216118213944550부분 — 버튼·스와이프는 동작, 단 START 버튼이 하단 바에 가려지고 하드드롭(■)은 게임을 죽임571.5 → 736열기
5q366961761121931273850불가 — 터치로 시작할 수 없음 (키로 시작하면 버튼은 동작, HOLD 는 곧 게임오버)657 → 696열기
6cn678179902231082850부분 — 스와이프 이동·시작·일시정지는 되나 탭 회전은 불능, 조작 버튼은 스크롤해야 보임729.5 → 678열기
7mcv4470402221072850불가 — viewport 메타가 없어 터치 버튼이 숨겨지고 터치로 시작도 못 함786.5 → 447열기
8orn4460521501563850불가 — 초기 렌더 예외로 터치 UI 와 낙하 루프가 켜지지 않음661.5 → 446열기
9bolt403073145954050불가 — v1 의 시작 단계 예외에 더해, 터치 핸들러가 없는 메서드(DOMRect.contains)를 불러 매번 예외462 → 403열기
10fn365010590903050불가 — 첫 조각을 만들지 않아 첫 입력부터 예외, 보드가 계속 비어 있음0 → 365열기
11lfm3430351251151850불가 — 정의되지 않은 canvas 를 참조해 스크립트가 중단됨445 → 343열기
12mel1750605501050불가 — 문법 오류로 스크립트 전체가 실행되지 않음 (키보드까지 죽음)498 → 175열기
13 (공동)c7r0000000파일 없음0 → 0제작 실패
13 (공동)c70000000파일 없음0 → 0제작 실패
13 (공동)c10000000파일 없음0 → 0제작 실패

실용 순위 (600점 이상, 소요 시간순)

1000점 순위와 별도로, 총점이 600점 이상인 6종만 소요 시간이 짧은 순서로 나열했습니다.

순위모델총점제작 시간요청 수생성 토큰
1q366961:57184,915
2cn6782:54195,611
3mg7363:54154,338
4q387824:10123,567
5ff9245:27163,705
6aw8166:01818,645

눈에 띈 점

v1 → v2 변화

v1 순위·총점은 위 9절, v2 는 위 표입니다. 두 라운드의 루브릭이 달라서 점수 차이는 「이 과제에서 얼마나 잘 했나」의 변화이지 같은 잣대의 증감이 아닙니다.

모델v1 순위 / 총점v2 순위 / 총점변화한 줄 이유
ff2위 / 757.51위 / 924+166.5시작·정지·재개까지 터치만으로 되는 유일한 모델, 한 화면 배치
aw3위 / 756.52위 / 816+59.5순수 추가형 변경과 정확한 README, 자동 낙하 없음은 그대로
q384위 / 742.53위 / 782+39.54버튼 입력과 safe-area 대응, 그러나 v1 의 충돌 결함이 그대로(10행에서 굳음)이고 일시정지 없음
mg8위 / 571.54위 / 736+164.5버튼과 스와이프가 동작, START 가림과 하드드롭 크래시
q367위 / 6575위 / 696+39버튼은 동작하나 터치로 시작 불가, HOLD 가 곧 게임오버
cn5위 / 729.56위 / 678−51.5스와이프는 되나 탭 회전 불능, 조작 패널이 화면 아래
mcv1위 / 786.57위 / 447−339.5viewport 메타가 없어 터치 버튼이 숨겨짐
orn6위 / 661.58위 / 446−215.5입력 구조는 최상급인데 v1 의 초기 예외가 남아 터치 UI 가 안 켜짐
bolt10위 / 4629위 / 403−59v1 의 시작 예외에 DOMRect.contains 오류가 더해짐
fn공동 12위 / 010위 / 365+365처음으로 게임을 만들었으나 첫 조각이 없어 입력마다 예외
lfm11위 / 44511위 / 343−102정의되지 않은 canvas 참조로 스크립트 중단
mel9위 / 49812위 / 175−323붙여넣다 남은 줄로 문법 오류, 키보드까지 죽은 유일한 회귀
c7r공동 12위 / 0공동 13위 / 00v2 에서도 파일 없음(생성 토큰 52개)
c7공동 12위 / 0공동 13위 / 00v2 에서도 파일 없음(생성 토큰 1,134개)
c1공동 12위 / 0공동 13위 / 00v2 에서도 파일 없음(생성 토큰 125개)

해석 주의

9-3. 결과 — v3

채점 방식: v3(레벨·크레딧·컨티뉴 도입)는 루브릭이 앞의 두 라운드와 다릅니다(7절의 「v3 루브릭」). 1~5절(850점)은 QA 리뷰어가 헤드리스 Chrome 에서 직접 실측했습니다. 줄 삭제·레벨업·게임 오버처럼 도달하기 어려운 상태는 콘솔로 상태를 주입해 확인하고, 주입한 방법을 근거에 적었습니다. 6·7절(150점)은 코드 리뷰어가 v2 → v3 변경분을 읽고 채점했습니다. 결과물은 A~O 로 익명 처리(블라인드)해 채점했고, 채점이 끝난 뒤 모델 이름을 공개했습니다.

품질 순위 (1000점)

열 머리의 1/150 은 「영역/만점」입니다. 1 레벨, 2 크레딧, 3 컨티뉴, 4 게임 흐름, 5 기존 기능 유지, 6 변경의 품질, 7 README 갱신입니다. 공동 순위는 총점이 같은 경우입니다. 「v2 → v3」 열은 루브릭이 달라 단순 뺄셈으로 읽으면 안 됩니다.

순위모델총점/10001/1502/2003/2004/1005/2006/1007/50크레딧 → 시작 → 컨티뉴 → 타이틀 완주?v2 → v3 총점플레이 링크
1ff9781502002001001958449완주 — 코인(C, COIN 버튼) → 시작 → 게임 오버 → 코인 + 컨티뉴(점수·레벨 유지) → 시간 초과 → 타이틀을 두 바퀴 실측으로 통과924 → 978열기
2mcv713140155105791435437부분 — 레벨·키보드 크레딧은 정상, 게임 오버에서 코인 분기가 컨티뉴 분기를 가려 이어 하기 불가. viewport 메타 누락으로 모바일 터치 버튼이 숨겨짐447 → 713열기
3 (공동)fn71114695125751657035부분 — 레벨과 카운트다운 컨티뉴 화면은 동작하나 컨티뉴 후 조각이 만들어지지 않고, 크레딧을 늘리는 코인 수단이 없음365 → 711열기
3 (공동)q38711132120140821316739부분 — 새 기능은 동작하나 v1 부터의 충돌 이중 오프셋이 그대로라 조각이 10행에서 굳고 줄 삭제·자연 게임 오버가 사실상 불가(컨티뉴는 게임 오버를 주입해서만 확인)782 → 711열기
5aw64095110110621636040부분 — 컨티뉴가 보드를 비우지 않아 확정 즉시 다시 게임 오버, v2 부터의 중력 없음도 그대로, 타이틀의 키 하나가 코인과 시작을 겸함816 → 640열기
6mg63014415537491634240불가 — 자연 게임 오버가 일어나지 않아 컨티뉴에 도달 못 함, 하드드롭 예외(v2 부터)로 루프가 멈춤736 → 630열기
7cn61614018530441612828불가 — 컨티뉴 화면과 카운트다운 코드가 어디서도 호출되지 않는 죽은 코드, 게임 오버의 다시 시작이 크레딧을 우회678 → 616열기
8q365599018025501503628불가 — 컨티뉴 카운트다운 상태가 대입되지 않아 도달 불가, R 키가 크레딧을 우회, 중력 없음·첫 홀드 즉시 게임 오버(v2 부터)696 → 559열기
9orn5128015010552374939불가 — 초기화 예외(v2 부터)로 낙하 루프와 화면 갱신이 없고, 컨티뉴 상태가 대입되지 않으며 줄을 지우면 미정의 함수 호출로 멈춤446 → 512열기
10lfm60550082418실행 불가 — v2 의 정의되지 않은 canvas 참조 오류를 그대로 둠343 → 60열기
11bolt56550051031실행 불가 — 새로 만든 keydown 핸들러의 닫는 괄호 누락(문법 오류)403 → 56열기
12mel40550071211실행 불가 — v2 부터의 떠도는 두 줄(문법 오류)을 그대로 둔 채 gameLoop 정의까지 지움175 → 40열기
13 (공동)c7r00000000파일 없음0 → 0제작 실패
13 (공동)c700000000파일 없음0 → 0제작 실패
13 (공동)c100000000파일 없음0 → 0제작 실패

실용 순위 (600점 이상, 소요 시간순)

1000점 순위와 별도로, 총점이 600점 이상인 7종만 소요 시간이 짧은 순서로 나열했습니다.

순위모델총점제작 시간요청 수생성 토큰
1mcv7133:0588,040
2cn6163:5267,891
3mg6306:16167,300
4ff9788:22267,454
5fn7119:532110,530
6aw64011:35730,682
7q3871112:023712,208

눈에 띈 점

v2 → v3 변화

v2 순위·총점은 9-2절, v3 는 위 표입니다. 두 라운드의 루브릭이 달라 점수 차이는 「이 과제에서 얼마나 잘 했나」의 변화이지 같은 잣대의 증감이 아닙니다.

모델v2 순위 / 총점v3 순위 / 총점변화한 줄 이유
ff1위 / 9241위 / 978+54요구한 아케이드 흐름을 끝까지 완주, 기존 기능도 유지
mcv7위 / 4472위 / 713+266레벨·키보드 크레딧이 실측을 통과해 반등, 컨티뉴는 코인 분기가 가려 불발, viewport 누락은 그대로
fn10위 / 365공동 3위 / 711+346시작 함수가 첫 조각을 만들어 게임이 돌아감, 레벨·카운트다운 화면 동작, 컨티뉴 후 조각 미생성
q383위 / 782공동 3위 / 711−71새 기능 점수는 좋으나 v1 부터의 충돌 결함이 그대로(조각이 10행에서 굳음)
aw2위 / 8165위 / 640−176컨티뉴가 보드를 비우지 않아 즉시 게임 오버, 중력 없음은 v2 그대로
mg4위 / 7366위 / 630−106자연 게임 오버가 안 일어나 컨티뉴에 도달 못 함, 하드드롭 예외 그대로
cn6위 / 6787위 / 616−62컨티뉴 화면이 호출되지 않는 죽은 코드, 게임 오버 다시 시작이 크레딧을 우회
q365위 / 6968위 / 559−137컨티뉴 상태 미대입, R 키 크레딧 우회, 중력 없음과 첫 홀드 즉시 게임 오버 그대로
orn8위 / 4469위 / 512+66낙하 루프는 여전히 안 돌지만 크레딧·카운트다운 상태 로직이 실측을 통과해 소폭 반등
lfm11위 / 34310위 / 60−283v2 의 canvas 미정의 오류를 그대로 둬 실행 불가
bolt9위 / 40311위 / 56−347새 keydown 핸들러 괄호 누락으로 스크립트 전체가 파싱되지 않음
mel12위 / 17512위 / 40−135v2 부터의 문법 오류를 그대로 둔 채 gameLoop 정의까지 삭제
c7r공동 13위 / 0공동 13위 / 00v3 에서도 파일 없음(생성 토큰 114개)
c7공동 13위 / 0공동 13위 / 00v3 에서도 파일 없음(생성 토큰 428개)
c1공동 13위 / 0공동 13위 / 00v3 에서도 파일 없음(생성 토큰 506개)

재판정 기록

QA 1차 채점이 끝난 뒤 진행자(PM)가 항목 사이의 일관성 규칙 두 가지를 정해 전 엔트리에 다시 적용했습니다. 바뀐 항목은 13건이고, 1차 점수는 심사 기록에 그대로 보존했습니다.

해석 주의

10. 테트리스 종합 — v1 → v2 → v3 (완결)

세 라운드의 총점 평균으로 종합 순위를 냅니다. 종합 순위 = 3라운드 평균(1:1:1) 입니다. 라운드마다 루브릭이 다르므로(v1 은 코드 품질 600점, v2 는 실행 검증 700점, v3 는 실행 검증 850점) 평균은 「세 과제를 두루 잘 했나」를 보는 값이지 한 잣대의 누적이 아닙니다.

종합 순위모델v1v2v33라운드 평균추세
1ff757.5924978886.5꾸준히 상승
2q38742.5782711745.2상승 후 하락
3aw756.5816640737.5상승 후 하락
4cn729.5678616674.5계속 하락
5mcv786.5447713648.8급락 후 반등
6mg571.5736630645.8상승 후 하락
7q36657696559637.3상승 후 하락
8orn661.5446512539.8급락 후 반등
9fn0365711358.7꾸준히 상승
10bolt46240356307계속 하락
11lfm44534360282.7계속 하락
12mel49817540237.7계속 하락
13 (공동)c7r0000계속 0 (파일 없음)
13 (공동)c70000계속 0 (파일 없음)
13 (공동)c10000계속 0 (파일 없음)

다음 시험: 02 드래곤플라이트