Skip to content

Commit

Permalink
edit readme
Browse files Browse the repository at this point in the history
  • Loading branch information
iamgamja committed Jan 1, 2024
1 parent 6385eb4 commit cf9f848
Showing 1 changed file with 39 additions and 25 deletions.
64 changes: 39 additions & 25 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ git clone <link>
npm install
```

4. 다음 명령어를 실행 후 나오는 링크에 접속하면 작성한 내용을 실시간으로 확인할 수 있습니다.
4. 다음 명령어를 실행 후 나오는 링크에 접속하면 작성한 내용을 실시간으로 확인할 수 있습니다. (`.ts` 파일을 수정했다면 새로고침을 해야 합니다.)

```bash
npm run dev
Expand All @@ -33,38 +33,52 @@ npm run dev

- `/src/data/` 폴더에 새 typescript 파일(`.ts`)을 생성해 주세요. 이후 그 파일에 시뮬레이션 코드를 작성하면 됩니다.
- `../utils`에서 다음을 import할 수 있습니다.
- `enum state`: 각 칸의 상태를 나타내는 enum입니다.
- `Player`
- `Block`
- `Item`
- `Empty`
- `Cell(y, x, state, value, text, board, N, M)`: 각 칸을 나타내는 클래스입니다. 다음 멤버 변수와 메서드에 접근할 수 있습니다.
- `y: number`, `x: number`: 위에서 `y`번째, 왼쪽에서 `x`번째의 칸임을 나타냅니다. (0-index)
- `enum State`: 각 칸의 상태를 나타내는 enum입니다.
- `Block`, `Item`, `Empty`
- `enum Direction`: 방향을 나타내는 enum입니다.
- `Up`, `Down`, `Left`, `Right`
- `dd: Record<Direction, [y: number, x: number]>`: 방향마다 y, x좌표에 더해지는 상수입니다.
- 예시: `dd[Direction.Up] = [-1, 0]`
- `Cell(state, {value, text}?)`: 각 칸을 나타내는 클래스입니다.
- `state: state`: 이 칸의 상태입니다.
- `value: any`: 이 칸에 다른 상태를 지정하려면 이 변수를 사용할 수 있습니다. (예시: 가중치 등)
- `text: string | null`: 이 칸에 적힐 글자입니다. `null`이면 기본값을 사용합니다.
- `board: board`: 전체 board의 참조입니다.
- `N: number`, `M: number`: board가 `N``M`열임을 나타냅니다.
- `canmove(y: number, x: number, c?: (now: Cell, next: Cell) => boolean): boolean`: `(y, x)`로 이동할 수 있는지 여부를 반환합니다.
- 이 칸과 `(y, x)`가 상하좌우로 인접하며, `(y, x)`의 state가 `Block`이 아니어야 합니다.
- `c`가 주어졌다면, 추가로 `c(이 칸, 이동한 칸)`을 만족해야 합니다.
- `move(y: number, x: number, cb?: (prev: Cell, now: Cell) => void)`: `(y, x)`로 이동합니다.
- 이 칸의 state가 `Player`이어야 합니다.
- 이 칸과 `(y, x)`의 데이터를 (좌표를 제외하고) 바꿉니다.
- `cb`가 주어졌다면, `cb(이 칸, 이동한 칸)`을 호출합니다.
- `deepcopy(board: board): board`: board를 깊은 복사하여 반환합니다.
- `getPlayer(board): [y: number, x: number]`: state가 `Player`인 칸의 좌표를 반환합니다.
- `type board = Cell[][]`
- `type stepstype = ((board: board) => [board, number])[]`
- `type datatype = { name: string; link: string; examples: string[] }`
- `copy()`: 복사본을 반환합니다.
- `Board(N, M, {value}?)`: 전체 격자를 나타내는 클래스입니다.
- `N: number`, `M: number`: 격자가 `N``M`열임을 나타냅니다.
- `value: any`: 전체 격자에 다른 상태를 지정하려면 이 변수를 사용할 수 있습니다. (예시: 플레이어가 획득한 아이템 등)
- `grid: Cell[][]`: `N``M`열의 2차원 Array입니다. **parseBoard 함수에서 초기화해야 합니다.**
- `player: {y: number, x: number}`: 플레이어의 위치입니다. **parseBoard 함수에서 초기화해야 합니다.**
- `playerCell`: `grid[player.y][player.x]`의 별칭입니다.
- `canmove(direction, {start, c}?)`
- `start`에서 `direction` 방향으로 이동할 수 있는지 여부를 반환합니다.
- `start`를 지정하지 않으면 `player`을 사용합니다.
- `N*M`의 범위를 벗어나지 않으며, `state``Block`이 아니어야 합니다.
- `c`가 주어지면, `c(현재 칸, 이동할 칸)`을 추가로 만족해야 합니다.
- `move(direction, {cb}?)`
- `player`를 direction 방향으로 이동합니다.
- `cb`가 주어지면, `cb(처음 칸, 이동한 칸)`을 실행합니다.
- `bfs(target, {start, order, c}?)`
- `start`에서 시작해 `target(cell)`을 만족하는 칸 중 가장 가까운 칸의 좌표와 거리를 반환합니다. 도달할 수 없다면 `null`을 반환합니다.
- `start`를 지정하지 않으면 `player`을 사용합니다.
- 이동은 `canmove`를 만족해야 합니다. `c`가 주어지면 `c`를 추가로 만족해야 합니다.
- bfs에서 시도하는 방향의 순서는 `order`을 사용합니다. 기본값은 `[Up, Left, Right, Down]`입니다.
- `getDistance(target, {start, c}?)`
- `bfs`를 사용해 거리를 반환합니다. 도달할 수 없다면 `null`을 반환합니다.
- `findDirection(target, {start, order, c}?)`
- `start`에서 `target(cell)`을 만족하는 칸 중 가장 가까운 칸으로 갈 때, 어느 방향으로 가야 하는지 반환합니다.
- `start`를 지정하지 않으면 `player`을 사용합니다.
- 이동은 `canmove`를 만족해야 합니다. `c`가 주어지면 `c`를 추가로 만족해야 합니다.
- 가능한 방향이 여러 개 있다면, `order`에서 앞에 위치하는 방향을 반환합니다. 기본값은 `[Up, Left, Right, Down]`입니다.
- `copy()`: 복사본을 반환합니다.
- 다음 3개의 변수와 1개의 함수를 export해야 합니다.
- `data: datatype`: 시뮬레이션의 정보를 담은 object입니다.
- `name: string`: 시뮬레이션의 이름입니다. **다른 시뮬레이션과 중복되어서는 안됩니다.**
- `link: string`: 문제의 링크입니다.
- `examples: string[]`: 제공되는 예제 입력입니다.
- `steps: stepstype`: 시뮬레이션의 각 단계를 구현한, 함수의 array입니다.
- 각 함수는 `(board: board) => [board, number]` 타입입니다.
- `steps: stepstype`: 시뮬레이션의 각 단계를 구현한 함수의 array입니다.
- 각 함수는 `(board: Board) => [Board, number]` 타입입니다.
- 반환하는 array의 첫번째 원소는 이 단계를 실행한 후의 board입니다.
- 두번째 원소는 다음으로 실행할 단계의 index(0-index)입니다. 단, 시뮬레이션을 종료할 때는 -1입니다.
- `stepNames: string[]`: 각 단계의 이름입니다.
- `parseBoard: (s: string) => board`: 입력을 받아 board를 반환하는 함수입니다.
- `parseBoard: (s: string) => Board`: 입력을 받아 Board를 반환하는 함수입니다.

0 comments on commit cf9f848

Please sign in to comment.