초간단 자동차 경주 게임을 구현한다.
- 입력 요청: 사용자로부터 경주할 자동차 이름 목록을 입력받는다.
- 입력 요청: 사용자로부터 시도할 횟수를 입력받는다.
- 오류 처리: 자동차 이름이 5자를 초과하는 경우
[ERROR] 자동차 이름은 5자 이하만 가능합니다. - 오류 처리: 이름이 비어 있거나, 중복된 이름이 있는 경우
[ERROR] 자동차 이름 목록이 유효하지 않습니다. - 오류 처리: 시도 횟수가 양의 정수가 아닌 경우
[ERROR] 시도 횟수는 양의 정수만 가능합니다.
- 위치 저장: 자동차의 이름과 현재 위치를 저장하고 관리한다.
- 랜덤 값 추출: 무작위 값을 추출한다.
- 전진: 무작위 값이 4 이상일 경우 위치를 1 증가시킨다.
- 전체 턴 실행: 입력된 횟수만큼 모든 자동차에 대해 전진 로직을 반복 수행하고, 턴별 실행 결과를 저장한다.
- 최대 위치 계산: 레이스가 끝난 후 모든 자동차 중 최대 전진 거리를 찾는다.
- 우승자 판별: 최대 위치와 동일한 위치를 가진 자동차를 모두 선정한다.
- 차수별 실행 결과 출력: 매 턴마다
{자동차 이름} : {위치}형태(-개수)로 중간 결과를 출력한다. - 결과 출력: 우승자가 여러 명일 경우 쉼표로 구분하여
최종 우승자 : {자동차 이름}형태로 출력한다. - 오류 출력:
[ERROR] {메시지}출력 후 프로그램을 종료한다.
| 구분 | 상황 | 처리 방식 |
|---|---|---|
| [ERROR] | 자동차 이름이 5자를 초과하는 경우(seahkeem) |
[ERROR] 자동차 이름은 5자 이하만 가능합니다. |
| [ERROR] | 자동차 이름이 비어있는 경우 중복된 이름이 있을 경우 |
[ERROR] 자동차 이름 목록이 유효하지 않습니다. |
| [ERROR] | 시도 횟수가 양의 정수가 아닌 경우 (0, -1, a) |
[ERROR] 시도 횟수는 양의 정수만 가능합니다: 0 |
| 분류 | 상세 내용 |
|---|---|
| 코드 원칙 | indent depth를 2 이하로 유지하고, 3항 연산자 사용을 금지하며, 함수(메서드)는 **단일 책임(SRP)**을 지키도록 구현한다. |
| 커밋 원칙 | Git 커밋 단위는 기능 목록 단위로 작성하며, AngularJS Commit Convention을 준수한다. |
| 라이브러리 | MissionUtils의 Random 및 Console API만 사용하며, 외부 라이브러리 사용을 금지한다. |
| 테스트 | Jest를 사용하여 모든 기능과 모든 예외 상황에 대한 단위 테스트를 구현한다. |