Add German literature puzzle

셸에 독일 문학 탭을 더하고 site/german.html 을 추가했다. 9x9 41칸 14항목.

독일어 표기는 음절이 서로 겹치지 않아 격자가 성글게 나온다. 그래서 낱말 풀을
작품·작가에서 등장인물과 작품 속 핵심어까지 넓혀 교차 지점을 확보했다.
(로테, 헨젤, 카스토르프, 나르치스 같은 인물과 벌레·계약·향기 같은 핵심어)

격자는 기존 두 편과 같은 규약을 만족한다. 길이 2 이상 모든 구간이 단서가 붙은
항목과 일대일로 대응하고, 어떤 단서도 다른 항목의 정답을 그대로 담지 않는다.

탭이 셋이 되면서 아주 좁은 화면(560px 이하)에서는 상표를 접고 탭에 폭을 넘긴다.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-08 14:03:09 +09:00
co-authored by Claude Opus 5
parent 96262fc690
commit 5b2d6e10da
3 changed files with 94 additions and 4 deletions
+8 -3
View File
@@ -11,9 +11,10 @@
|---|---|---|---|
| 러시아 문학 | `/russian.html` | 9 × 9 · 40칸 | 13 |
| 영국 문학 | `/british.html` | 9 × 9 · 39칸 | 12 |
| 독일 문학 | `/german.html` | 9 × 9 · 41칸 | 14 |
각 페이지는 단독으로 열어도 동작한다. 셸(`/`)의 탭은 해시로 상태를 남기므로
`/#russian`, `/#british` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다.
`/#russian`, `/#british`, `/#german` 으로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다.
## 구성
@@ -22,8 +23,9 @@
| `site/index.html` | 셸 — 왼쪽 탭(좁은 화면에서는 위쪽 탭) + 게임을 띄우는 iframe |
| `site/russian.html` | 러시아 문학 편 (머리말 + 퍼즐 데이터) |
| `site/british.html` | 영국 문학 편 (머리말 + 퍼즐 데이터) |
| `site/assets/crossword.css` | 두 편이 공유하는 화면 양식 |
| `site/assets/crossword.js` | 두 편이 공유하는 게임 엔진 (한글 IME 입력, 검사/힌트/타이머) |
| `site/german.html` | 독일 문학 편 (머리말 + 퍼즐 데이터) |
| `site/assets/crossword.css` | 각 편이 공유하는 화면 양식 |
| `site/assets/crossword.js` | 각 편이 공유하는 게임 엔진 (한글 IME 입력, 검사/힌트/타이머) |
| `nginx/default.conf` | nginx 설정 (8080 리슨, `/healthz` 헬스체크) |
| `Dockerfile` | nginx:1.27-alpine 정적 서빙 이미지 |
| `k8s/deployment.yaml` | Deployment + NodePort Service (31380) |
@@ -50,6 +52,9 @@ nginx 로 파일만 내려주면 끝.
등록돼 있어야 한다.** 우연히 생긴 두 글자 구간이 남아 있으면 그 칸을 채워도
완료 판정이 나지 않는 것처럼 보이므로, 격자를 새로 짜면 이 조건을 먼저 확인한다.
단서를 쓸 때는 **다른 항목의 정답을 단서 안에 그대로 적지 않는다.** 서로가 서로를
알려 주면 두 칸이 한꺼번에 풀려 버린다.
## 배포
Jenkins 잡(`crossword`)을 돌리면 아래가 순서대로 진행된다.