타입 챌린지 7544 - Construct Tuple

소파의 벨로그·2025년 5월 7일

타입챌린지

목록 보기
76/131

문제 링크]()

문제

주어진 길이의 tuple을 만들어라

Construct a tuple with a given length.

내 풀이

type ConstructTupleImplement<L extends number, Result extends unknown[]=[]>=
  Result['length'] extends L?
    Result
    :ConstructTupleImplement<L,[...Result,unknown]>

type ConstructTuple<L extends number> = ConstructTupleImplement<L>

우선 사용처에서 구현용 제네릭을 사용하지 못하게 하기 위해 구현과 실제 타입을 분리했다.

간단한 재귀 형태이다.

다른 사람의 풀이

type ConstructTuple<L extends number, O extends string = `${L}`, Count extends unknown[] = []> =
  O extends `${infer F}${infer R}` ? (
    ConstructTuple<L, R, N<Count>[keyof N & F]>
  ) : Count

type N<T extends unknown[] = []> = {
  '0': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T],
  '1': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown],
  '2': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown],
  '3': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown],
  '4': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown],
  '5': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown],
  '6': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown],
  '7': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
  '8': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
  '9': [...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, ...T, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown, unknown],
}

문제에서 명시한 1000 제한을 뛰어넘은 풀이이다.

T의 n*10+[property]개를 하는 타입 N을 구현한 후, 이를 활용한 풀이이다.

참고자료

https://github.com/type-challenges/type-challenges/issues/14153

0개의 댓글