개요
이 프로젝트는 ecole42의 ComputorV1 과제를 구현한 다항식 방정식 해결기(Polynomial Equation Solver)다. 최대 2차 방정식까지 해를 구할 수 있으며, 방정식을 파싱하고 표준형으로 축약한 후 해를 계산한다.
기능
- 다항식 방정식 파싱 및 검증
- 방정식을 표준형으로 축약 (reduced form)
- 다항식 차수(degree) 계산
- 0차, 1차, 2차 방정식 해 구하기
- 복소수 해 지원 (2차 방정식의 판별식 < 0인 경우)
설치
npm install
사용법
기본 실행
npm start "5 * X^0 + 4 * X^1 - 9.3 * X^2 = 1 * X^0"
또는
tsx ./index.ts "5 * X^0 + 4 * X^1 - 9.3 * X^2 = 1 * X^0"
개발 모드 (파일 변경 감지)
npm run dev
테스트 실행
npm test
방정식 형식
방정식은 다음 형식을 따라야 한다:
- 항(term) 형식:
[+/-]숫자 * X^숫자 - 등호(
=)를 포함해야 한다 - 공백은 자동으로 제거된다
예시
5 * X^0 + 4 * X^1 - 9.3 * X^2 = 1 * X^0
2 * X^1 = 3
1 * X^2 - 4 * X^1 + 3 = 0
출력 예시
Input:
5 * X^0 + 4 * X^1 - 9.3 * X^2 = 1 * X^0
Reduced form:
4 * X^0 + 4 * X^1 - 9.3 * X^2 = 0
Polynomial degree:
2
Result:
Discriminant > 0, the equation has two solution: x1 = -0.47513146390886934, x2 = 0.9052389907905898
지원하는 방정식 타입
0차 방정식 (상수 방정식)
- 예:
5 * X^0 = 5 * X^0 - 해가 없거나 모든 실수가 해인 경우를 판단한다
1차 방정식 (선형 방정식)
- 예:
2 * X^1 = 3 ax + b = 0형태로 변환하여 해를 구한다a = 0인 경우 특수 케이스를 처리한다
2차 방정식 (이차 방정식)
- 예:
1 * X^2 - 4 * X^1 + 3 = 0 ax² + bx + c = 0형태로 변환- 판별식(discriminant)에 따라:
- 판별식 > 0: 두 개의 실수 해
- 판별식 = 0: 하나의 실수 해 (중근)
- 판별식 < 0: 두 개의 복소수 해
3차 이상 방정식
- 해를 구할 수 없다는 메시지를 출력한다
프로젝트 구조
computorv1/
├── index.ts # 메인 진입점
├── lib/
│ └── useEquation.ts # 방정식 처리 로직
├── tests/ # 테스트 파일들
│ ├── basic.test.ts
│ ├── 1-degree.test.ts
│ ├── 2-degree.test.ts
│ └── ...
└── package.json
주요 함수
useEquation()
방정식 처리를 위한 함수들을 반환한다:
strToEquation(s: string): 문자열을 Equation 객체로 변환printInput(s: string): 입력 방정식 출력printReducedForm(e: Equation): 축약된 형태 출력printDegree(e: Equation): 다항식 차수 출력printSolution(e: Equation): 해 출력
기술 스택
- TypeScript: 타입 안정성
- @fxts/core: 함수형 프로그래밍 (pipe)
- console-log-colors: 컬러 출력
- Jest: 테스트 프레임워크
- tsx: TypeScript 실행 환경
테스트
프로젝트에는 다음 테스트가 포함되어 있다:
- 기본 방정식 테스트 (
basic.test.ts) - 0차 방정식 테스트 (
0-degree.test.ts) - 1차 방정식 테스트 (
1-degree.test.ts) - 2차 방정식 테스트 (
2-degree.test.ts) - 3차 이상 방정식 테스트 (
3+degree.test.ts) - 파싱 테스트 (
parsing.test.ts)