Add French literature puzzle
셸에 프랑스 문학 탭을 영국 다음 자리에 더하고 site/french.html 을 추가했다. 9x9 40칸 15항목. 십칠 세기부터 이십 세기까지 정전으로 골랐다. 뒤마 · 스탕달 · 보들레르 · 프루스트 · 생텍쥐페리에 위고(자베르 · 코제트) · 플로베르(마담 보바리) · 모파상(여자의 일생) · 졸라(제르미날) · 카뮈(페스트) · 프레보(마농 레스코), 그리고 마들렌과 장미. 탭이 여섯이 되었으나 560px 이하에서 '문학'을 접는 처리로 충분히 들어간다. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -12,11 +12,12 @@
|
||||
| 한국 문학 | `/korean.html` | 9 × 9 · 41칸 | 15 |
|
||||
| 러시아 문학 | `/russian.html` | 9 × 9 · 40칸 | 13 |
|
||||
| 영국 문학 | `/british.html` | 9 × 9 · 39칸 | 12 |
|
||||
| 프랑스 문학 | `/french.html` | 9 × 9 · 40칸 | 15 |
|
||||
| 독일 문학 | `/german.html` | 9 × 9 · 41칸 | 14 |
|
||||
| 일본 문학 | `/japanese.html` | 9 × 9 · 44칸 | 14 |
|
||||
|
||||
기본으로 열리는 탭은 한국 문학이다. 각 페이지는 단독으로 열어도 동작한다. 셸(`/`)의 탭은 해시로 상태를 남기므로
|
||||
`/#korean`, `/#russian`, `/#british`, `/#german`, `/#japanese` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다.
|
||||
`/#korean`, `/#russian`, `/#british`, `/#french`, `/#german`, `/#japanese` 로 바로 들어갈 수 있고, 탭을 다시 눌러도 풀던 내용은 유지된다.
|
||||
|
||||
## 구성
|
||||
|
||||
@@ -26,6 +27,7 @@
|
||||
| `site/korean.html` | 한국 문학 편 (머리말 + 퍼즐 데이터) — 기본 탭 |
|
||||
| `site/russian.html` | 러시아 문학 편 (머리말 + 퍼즐 데이터) |
|
||||
| `site/british.html` | 영국 문학 편 (머리말 + 퍼즐 데이터) |
|
||||
| `site/french.html` | 프랑스 문학 편 (머리말 + 퍼즐 데이터) |
|
||||
| `site/german.html` | 독일 문학 편 (머리말 + 퍼즐 데이터) |
|
||||
| `site/japanese.html` | 일본 문학 편 (머리말 + 퍼즐 데이터) |
|
||||
| `site/assets/crossword.css` | 각 편이 공유하는 화면 양식 |
|
||||
|
||||
@@ -0,0 +1,74 @@
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
|
||||
<title>가로세로 낱말풀이 · 프랑스 문학</title>
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com">
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
||||
<link href="https://fonts.googleapis.com/css2?family=Black+Han+Sans&family=Gothic+A1:wght@300;500;700;900&family=Nanum+Myeongjo:wght@400;700;800&display=swap" rel="stylesheet">
|
||||
<link rel="stylesheet" href="assets/crossword.css">
|
||||
</head>
|
||||
<body>
|
||||
<div class="wrap">
|
||||
<header class="head">
|
||||
<div class="eyebrow">Littérature française · 9 × 9</div>
|
||||
<h1>프랑스 문학<em>가로세로 낱말풀이</em></h1>
|
||||
<div class="meta">
|
||||
<div><b id="timer">00:00</b><span>경과 시간</span></div>
|
||||
<div><b id="progress">0/40</b><span>채운 칸</span></div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main class="stage">
|
||||
<section>
|
||||
<div class="cluebar">
|
||||
<span class="cb-num" id="cbNum">–</span>
|
||||
<span class="cb-dir" id="cbDir">가로</span>
|
||||
<span class="cb-text" id="cbText">칸을 눌러 시작하세요.</span>
|
||||
</div>
|
||||
|
||||
<div class="board-frame">
|
||||
<div class="board" id="board" role="grid" aria-label="가로세로 낱말풀이 격자"></div>
|
||||
<input id="ime" type="text" lang="ko" inputmode="text"
|
||||
autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"
|
||||
aria-label="글자 입력">
|
||||
</div>
|
||||
|
||||
<div class="tools">
|
||||
<button type="button" data-act="flip">가로 ↔ 세로</button>
|
||||
<button type="button" data-act="check">검사</button>
|
||||
<button type="button" data-act="hint">이 칸 힌트</button>
|
||||
<button type="button" data-act="reveal">정답 보기</button>
|
||||
<button type="button" data-act="clear">전부 지우기</button>
|
||||
</div>
|
||||
|
||||
<p class="tip">
|
||||
같은 칸을 한 번 더 누르면 가로 ↔ 세로가 바뀌고, 오른쪽 단서도 그에 맞춰 바뀝니다.<br>
|
||||
<kbd>화살표</kbd> 이동 · <kbd>Space</kbd> 방향 전환 · <kbd>Tab</kbd> 다음 단어 · <kbd>Backspace</kbd> 지우고 뒤로
|
||||
</p>
|
||||
</section>
|
||||
|
||||
<aside>
|
||||
<section class="cluegroup">
|
||||
<h2>가로 열쇠</h2>
|
||||
<ol id="listA"></ol>
|
||||
</section>
|
||||
<section class="cluegroup">
|
||||
<h2>세로 열쇠</h2>
|
||||
<ol id="listD"></ol>
|
||||
</section>
|
||||
</aside>
|
||||
</main>
|
||||
</div>
|
||||
|
||||
<div class="done" id="done" hidden>
|
||||
<span id="doneMsg">전부 맞혔습니다.</span>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
const PUZZLE = {"size": 9, "grid": [["여", null, null, "뒤", "마", null, "마", "들", "렌"], ["자", "베", "르", null, "담", null, "농", null, null], ["의", null, null, null, "보", "들", "레", "르", null], ["일", null, null, null, "바", null, "스", null, null], ["생", "텍", "쥐", "페", "리", null, "코", "제", "트"], [null, null, null, "스", null, null, null, "르", null], ["프", "루", "스", "트", null, null, "장", "미", null], [null, null, "탕", null, null, null, null, "날", null], [null, null, "달", "타", "냥", null, null, null, null]], "nums": [[1, 0, 0, 2, 3, 0, 4, 0, 0], [5, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 6, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [7, 0, 0, 8, 0, 0, 9, 10, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [11, 0, 12, 0, 0, 0, 13, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 14, 0, 0, 0, 0, 0, 0]], "entries": [{"num": 1, "dir": "D", "r": 0, "c": 0, "answer": "여자의일생", "clue": "잔이 결혼과 배신 속에 늙어 가는 장편", "kind": "작품"}, {"num": 2, "dir": "A", "r": 0, "c": 3, "answer": "뒤마", "clue": "《삼총사》 《몬테크리스토 백작》을 쓴 대중소설의 왕", "kind": "작가"}, {"num": 3, "dir": "D", "r": 0, "c": 4, "answer": "마담보바리", "clue": "권태와 빚에 무너진 시골 의사 아내의 이야기", "kind": "작품"}, {"num": 4, "dir": "A", "r": 0, "c": 6, "answer": "마들렌", "clue": "홍차에 적신 순간 유년이 되살아난 과자", "kind": "핵심어"}, {"num": 4, "dir": "D", "r": 0, "c": 6, "answer": "마농레스코", "clue": "신학생을 파멸로 이끈 여인의 이야기", "kind": "작품"}, {"num": 5, "dir": "A", "r": 1, "c": 0, "answer": "자베르", "clue": "법만을 믿고 끝까지 추적하다 강에 뛰어든 경관", "kind": "인물"}, {"num": 6, "dir": "A", "r": 2, "c": 4, "answer": "보들레르", "clue": "《악의 꽃》으로 재판까지 받은 시인", "kind": "작가"}, {"num": 7, "dir": "A", "r": 4, "c": 0, "answer": "생텍쥐페리", "clue": "우편기 조종사로 살다 지중해에서 사라진 작가", "kind": "작가"}, {"num": 8, "dir": "D", "r": 4, "c": 3, "answer": "페스트", "clue": "오랑 시를 덮친 역병과 그에 맞선 사람들", "kind": "작품"}, {"num": 9, "dir": "A", "r": 4, "c": 6, "answer": "코제트", "clue": "여관에 맡겨졌다가 물동이를 이고 나오던 아이", "kind": "인물"}, {"num": 10, "dir": "D", "r": 4, "c": 7, "answer": "제르미날", "clue": "탄광 노동자들의 파업과 붕락을 그린 장편", "kind": "작품"}, {"num": 11, "dir": "A", "r": 6, "c": 0, "answer": "프루스트", "clue": "《잃어버린 시간을 찾아서》를 쓴 작가", "kind": "작가"}, {"num": 12, "dir": "D", "r": 6, "c": 2, "answer": "스탕달", "clue": "《적과 흑》 《파르마의 수도원》의 작가", "kind": "작가"}, {"num": 13, "dir": "A", "r": 6, "c": 6, "answer": "장미", "clue": "어린 왕자가 별에 두고 온 단 하나의 꽃", "kind": "핵심어"}, {"num": 14, "dir": "A", "r": 8, "c": 2, "answer": "달타냥", "clue": "가스코뉴에서 파리로 올라온 젊은 검객", "kind": "인물"}]};
|
||||
</script>
|
||||
<script src="assets/crossword.js"></script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -135,6 +135,10 @@ body{
|
||||
<span class="kr">영국<span class="suffix"> 문학</span></span>
|
||||
<span class="og">British literature</span>
|
||||
</a>
|
||||
<a href="french.html" target="stage" data-key="french">
|
||||
<span class="kr">프랑스<span class="suffix"> 문학</span></span>
|
||||
<span class="og">Littérature française</span>
|
||||
</a>
|
||||
<a href="german.html" target="stage" data-key="german">
|
||||
<span class="kr">독일<span class="suffix"> 문학</span></span>
|
||||
<span class="og">Deutsche Literatur</span>
|
||||
@@ -161,6 +165,7 @@ var PAGES = {
|
||||
korean: {file:'korean.html', name:'한국 문학'},
|
||||
russian: {file:'russian.html', name:'러시아 문학'},
|
||||
british: {file:'british.html', name:'영국 문학'},
|
||||
french: {file:'french.html', name:'프랑스 문학'},
|
||||
german: {file:'german.html', name:'독일 문학'},
|
||||
japanese:{file:'japanese.html', name:'일본 문학'}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user