From 6847e8fa8926ca01ead600d1ad5639972f76d2e1 Mon Sep 17 00:00:00 2001 From: 2610361 Date: Tue, 16 Jun 2026 17:43:25 +0900 Subject: [PATCH] =?UTF-8?q?=EB=AF=B8=EB=A1=9C=20=EC=83=9D=EC=84=B1=C2=B7?= =?UTF-8?q?=EB=8B=A4=EC=9D=B5=EC=8A=A4=ED=8A=B8=EB=9D=BC=20=ED=83=90?= =?UTF-8?q?=EC=83=89=20=EC=8B=9C=EA=B0=81=ED=99=94=20=EC=95=B1=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - main.py: 기본 템플릿을 200×100 랜덤 미로 시각화 앱으로 교체. Flask는 단일 HTML 페이지를 서빙하고, 미로 생성(randomized DFS)· 다익스트라 탐색·렌더링은 브라우저 위 JavaScript로 처리. 속도 조절 슬라이더, 미로 재생성/탐색 버튼, 입구·출구·탐색 영역· 최단 경로 시각화 포함. 배포 규격대로 0.0.0.0:8080 유지. - README.md: 템플릿 안내에서 앱 기능·알고리즘 설명으로 갱신. - CLAUDE.md: 배포 규격(0.0.0.0:8080, requirements.txt) 규약 추가. --- CLAUDE.md | 11 ++ README.md | 36 ++++--- main.py | 301 +++++++++++++++++++++++++++++++++++++++++++++++++++++- 3 files changed, 331 insertions(+), 17 deletions(-) create mode 100644 CLAUDE.md diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 0000000..330ebc4 --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,11 @@ +## 배포 + +1. 변경 사항을 커밋/푸시합니다. +2. Kubero(https://kubero.bokdev.in)에서 배포하면 + `http://<내앱이름>.apps.bokdev.in` 으로 접속됩니다. + +## 꼭 지킬 규칙 (배포 규격) + +- HTTP 서버는 **0.0.0.0 의 8080 포트**에서 떠야 합니다. +- 새 패키지를 쓰면 `requirements.txt`에 꼭 추가하세요. +- 파일에 저장한 데이터는 재배포하면 사라집니다. \ No newline at end of file diff --git a/README.md b/README.md index cc572e4..3de2fe2 100644 --- a/README.md +++ b/README.md @@ -1,20 +1,26 @@ -# Python(Flask) 앱 템플릿 +# 랜덤 미로 생성 & 다익스트라 탐색 시각화 -Playground에 배포되는 Python 웹앱의 출발점입니다. +가로 200칸 × 세로 100칸의 랜덤 미로를 생성하고, 입구(좌상단)에서 출구(우하단)까지의 +최단 경로를 다익스트라 알고리즘으로 찾아 시각적으로 보여주는 웹앱입니다. -## 사용법 +Flask가 단일 HTML 페이지를 서빙하고, 미로 생성·탐색·렌더링은 모두 브라우저의 +`` 위에서 JavaScript로 동작합니다 (20,000칸을 부드럽게 애니메이션하기 위함). -1. 이 저장소 화면 오른쪽 위 **"이 템플릿 사용"** 버튼으로 내 앱 저장소를 만듭니다 - (소유자: **playground**, 이름: 영문 소문자, 예: `2610434-lunch-picker`). -2. Coder 워크스페이스 터미널에서 복제합니다: - `git clone https://gitea.bokdev.in/playground/<내앱이름>.git` -3. Claude Code에게 원하는 앱을 만들어 달라고 하세요. 예: - "main.py를 고쳐서 점심 메뉴 추천 앱을 만들어줘" -4. 커밋/푸시 후 Kubero(https://kubero.bokdev.in)에서 배포하면 - `http://<내앱이름>.apps.bokdev.in` 으로 접속됩니다. +## 기능 -## 꼭 지킬 규칙 (배포 규격) +- **즉시 생성**: 화면에 진입하면 미로가 바로 생성되며, 생성 과정(randomized DFS로 + 통로를 파나가는 과정)을 단계적으로 빠르게 애니메이션으로 보여줍니다. +- **입구 / 출구**: 좌상단이 입구(초록), 우하단이 출구(빨강)입니다. +- **속도 조절 바**: 미로와 버튼 사이의 가로 슬라이더로 애니메이션 속도를 조절합니다. + 진행 중에도 즉시 반영됩니다. +- **미로 재생성** 버튼: 새로운 랜덤 미로를 다시 생성합니다. +- **미로 탐색** 버튼: 다익스트라 알고리즘으로 입구→출구를 탐색합니다. + 탐색 영역이 파란색으로 확장되는 과정을 애니메이션으로 보여준 뒤, + 최단 경로를 노란색으로 그립니다. -- HTTP 서버는 **0.0.0.0 의 8080 포트**에서 떠야 합니다. -- 새 패키지를 쓰면 `requirements.txt`에 꼭 추가하세요 (Claude에게 부탁하면 해줍니다). -- 파일에 저장한 데이터는 재배포하면 사라집니다. +## 알고리즘 + +- **생성**: randomized DFS(깊이 우선 탐색 기반 백트래킹)로 모든 칸을 연결하는 + 하나의 완전한 미로(spanning tree)를 만듭니다. +- **탐색**: 모든 통로의 가중치가 1인 다익스트라 알고리즘으로 입구 칸에서 출구 칸까지의 + 최단 경로를 찾습니다. diff --git a/main.py b/main.py index 0e751be..4879a1d 100644 --- a/main.py +++ b/main.py @@ -1,13 +1,310 @@ -# 내 앱의 시작점입니다. Claude Code에게 "이 앱을 ~하게 바꿔줘"라고 요청하세요. +# 200x100 랜덤 미로 생성 + 다익스트라 탐색 시각화 앱 # 규칙: 반드시 0.0.0.0:8080 에서 HTTP 서비스해야 합니다 (배포 규격). from flask import Flask app = Flask(__name__) +PAGE = r""" + + + + +랜덤 미로 (200 x 100) + + + +

랜덤 미로  200 × 100  ·  다익스트라 탐색

+
+
+ + + +
+
+ + +
+
+
+ 입구 + 출구 + 탐색 영역 + 최단 경로 +
+ + + + +""" + @app.route("/") def home(): - return "

안녕하세요! 나의 첫 Playground 앱입니다 🎉

" + return PAGE if __name__ == "__main__":