ecole42

computorv1

computorv1은 ecole42의 프로젝트로, 다항식 방정식 해결기를 구현한 프로그램. TypeScript로 작성되었으며, 최대 2차 방정식까지 해를 구할 수 있다. 방정식을 파싱하고 표준형으로 축약한 후 0차, 1차, 2차 방정식의 해를 계산하며, 복소수 해도 지원한다. 함수형 프로그래밍 패러다임을 활용하여 방정식 처리 로직을 구현하였다

TypeScript

개요

이 프로젝트는 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)