# 튜링 머신 시뮬레이터 학생이 튜링 머신을 직접 사용해보면서 동작 원리를 이해할 수 있는 교육용 웹 애플리케이션입니다. ## 프로젝트 구조 ``` Implementation/ ├── TuringMachine.sln # 솔루션 파일 ├── Core/ # 핵심 시뮬레이션 엔진 (클래스 라이브러리) │ ├── Machine.cs # 튜링 머신 본체 (상태, 헤드, 실행) │ ├── Tape.cs # 무한 테이프 (Dictionary 기반 희소 구조) │ ├── Transition.cs # 상태 전이 규칙 정의 │ └── ExampleConfig.cs # 예제 설정 모델 ├── Client/ # Blazor WebAssembly 프론트엔드 │ ├── Pages/ │ │ └── Home.razor # 메인 페이지 (시각화 + 편집) │ ├── Components/ │ │ ├── Controls.razor # Step/Run/Reset 버튼, 속도 조절 │ │ ├── TapeVisualizer.razor # 테이프 셀 시각화, 헤드 위치 표시 │ │ ├── TransitionTableVisualizer.razor # Action Table 출력 (No./Comment 포함) │ │ ├── ThemeToggle.razor # 다크/라이트 모드 전환 │ │ └── LanguageToggle.razor # 다국어 전환 (en-US, ko-KR) │ ├── Services/ │ │ └── LocalizationService.cs # 다국어 서비스 (JSON 번역 파일 로드) │ ├── Shared/ │ │ └── MainLayout.razor # 레이아웃 │ └── wwwroot/ # 정적 파일 (index.html, CSS) │ └── i18n/ # 번역 파일 │ ├── en-US.json # 영어 번역 │ └── ko-KR.json # 한국어 번역 └── Server/ # ASP.NET Core 백엔드 ├── Program.cs # 서버 설정, 미들웨어 ├── Controllers/ │ └── ExamplesController.cs # GET /api/examples 엔드포인트 └── Examples/ └── Examples.json # 예제 설정 파일 ``` ## 기술 스택 - **.NET 8.0** / **C# 12** - **Blazor WebAssembly** — 브라우저에서 C#을 직접 실행하는 SPA 프레임워크 - **ASP.NET Core** — 정적 파일 서빙 및 예제 API 제공 - **Bootstrap 5** — 기본 UI 스타일링 - **다국어 지원 (i18n)** — 영어(en-US), 한국어(ko-KR) 지원, JSON 기반 번역 파일 ## 주요 기능 ### 시각화 (상단 영역) - **상태 패널**: 현재 상태, 실행 스텝 수, 정지 여부 표시 - **테이프 시각화**: 15칸 뷰포트로 테이프를 표시하며, 헤드 위치를 하이라이트 - **컨트롤**: Step(한 단계 실행), Run/Pause(자동 실행), Reset(초기화), 속도 조절(50~1000ms) - **Action Table**: 전이 규칙을 번호와 함께 테이블로 표시, 현재 실행 중인 규칙 하이라이트, Comment 컬럼으로 각 규칙에 대한 설명 표시 ### 편집 (하단 영역) - **테이프 설정**: 초기 테이프 내용과 헤드 시작 위치 지정 - **Action Table 입력**: CSV 형식으로 전이 규칙 작성 ``` 현재상태, 읽기기호, 새상태, 쓰기기호, 이동방향(L/R/S), 주석(선택) ``` - **예제 버튼**: 서버의 `Examples.json`에서 로드된 예제를 버튼으로 빠르게 적용 ### 예제 관리 예제는 `Server/Examples/Examples.json` 파일에서 관리됩니다. 서버 재시작 없이 JSON 파일을 수정하고 페이지를 새로고침하면 바로 반영됩니다. ```json { "Name": [ { "Language": "en-US", "Value": "Example Name" }, { "Language": "ko-KR", "Value": "예제 이름" } ], "TapeInput": "초기 테이프", "HeadPosition": 0, "Actions": [ { "Value": "상태, 읽기, 새상태, 쓰기, 이동", "Comment": [ { "Language": "en-US", "Value": "English comment" }, { "Language": "ko-KR", "Value": "한국어 주석" } ] } ] } ``` ### 내장 예제 1. **Binary Increment / 이진수 증가** — 이진수 1 증가 2. **String Reverse / 문자열 뒤집기** — 문자열 역순 복사 3. **Palindrome Check / 회문 검사** — 회문 검사 4. **Pattern Match / 패턴 탐색** — "ab" 패턴 탐색 5. **Count 0s vs 1s / 0과 1 개수 비교** — 0과 1의 개수 비교 ## 빌드 및 실행 ```bash # 빌드 dotnet build # 실행 (Server 프로젝트 기준) dotnet run --project Server ``` 브라우저에서 `http://localhost:11100` 으로 접속합니다. ## 핵심 설계 ### Core 라이브러리 - **Tape**: `Dictionary` 기반의 희소 자료구조로 무한 테이프를 효율적으로 표현 - **TransitionTable**: (현재상태, 읽기기호) 쌍을 키로 하여 전이 규칙을 O(1)로 검색 - **Machine**: `Step()` 메서드로 한 단계씩 실행하며, 매칭되는 규칙이 없으면 자동 정지(halt) ### 클라이언트-서버 통신 - 클라이언트는 `OnInitializedAsync`에서 `GET /api/examples`를 호출하여 예제 목록을 로드 - 튜링 머신 시뮬레이션 자체는 클라이언트(WebAssembly)에서 실행되므로 서버 통신 없이 동작