turing-machine/Implementation
maxist 0949ce3e78 Change server port from 11100 to 48080
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-19 03:40:57 +09:00
..
Client Initial commit: Turing Machine Simulator (Blazor WebAssembly) 2026-02-18 23:56:17 +09:00
Core Initial commit: Turing Machine Simulator (Blazor WebAssembly) 2026-02-18 23:56:17 +09:00
Server Change server port from 11100 to 48080 2026-02-19 03:40:57 +09:00
ReadMe.md Initial commit: Turing Machine Simulator (Blazor WebAssembly) 2026-02-18 23:56:17 +09:00
TuringMachine.sln Initial commit: Turing Machine Simulator (Blazor WebAssembly) 2026-02-18 23:56:17 +09:00

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": "한국어 주석" }
      ]
    }
  ]
}

내장 예제

  1. Binary Increment / 이진수 증가 — 이진수 1 증가
  2. String Reverse / 문자열 뒤집기 — 문자열 역순 복사
  3. Palindrome Check / 회문 검사 — 회문 검사
  4. Pattern Match / 패턴 탐색 — "ab" 패턴 탐색
  5. 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)에서 실행되므로 서버 통신 없이 동작