Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|---|---|---|
| .. | ||
| Client | ||
| Core | ||
| Server | ||
| ReadMe.md | ||
| TuringMachine.sln | ||
ReadMe.md
튜링 머신 시뮬레이터
학생이 튜링 머신을 직접 사용해보면서 동작 원리를 이해할 수 있는 교육용 웹 애플리케이션입니다.
프로젝트 구조
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 파일을 수정하고 페이지를 새로고침하면 바로 반영됩니다.
{
"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": "한국어 주석" }
]
}
]
}
내장 예제
- Binary Increment / 이진수 증가 — 이진수 1 증가
- String Reverse / 문자열 뒤집기 — 문자열 역순 복사
- Palindrome Check / 회문 검사 — 회문 검사
- Pattern Match / 패턴 탐색 — "ab" 패턴 탐색
- Count 0s vs 1s / 0과 1 개수 비교 — 0과 1의 개수 비교
빌드 및 실행
# 빌드
dotnet build
# 실행 (Server 프로젝트 기준)
dotnet run --project Server
브라우저에서 http://localhost:11100 으로 접속합니다.
핵심 설계
Core 라이브러리
- Tape:
Dictionary<int, char>기반의 희소 자료구조로 무한 테이프를 효율적으로 표현 - TransitionTable: (현재상태, 읽기기호) 쌍을 키로 하여 전이 규칙을 O(1)로 검색
- Machine:
Step()메서드로 한 단계씩 실행하며, 매칭되는 규칙이 없으면 자동 정지(halt)
클라이언트-서버 통신
- 클라이언트는
OnInitializedAsync에서GET /api/examples를 호출하여 예제 목록을 로드 - 튜링 머신 시뮬레이션 자체는 클라이언트(WebAssembly)에서 실행되므로 서버 통신 없이 동작