Yuzhe's Blog

yuzhes

Triangular Number

Triangular Number

Problem Link

Problem

Given a number N, return the N-th triangular number: T(N) = 1 + 2 + ... + N.

type T0 = TriangularNumber<0>  // 0
type T1 = TriangularNumber<1>  // 1
type T2 = TriangularNumber<3>  // 6   (1+2+3)
type T3 = TriangularNumber<10> // 55

Solution

type TriangularNumber<
  N extends number,
  Count extends unknown[] = [],
  Acc extends unknown[] = []
> =
  Count['length'] extends N
    ? Acc['length']
    : TriangularNumber<
        N,
        [...Count, unknown],
        [...Acc, ...Count, unknown]   // add (Count.length + 1) each iteration
      >

How it works:

  1. Count tracks how many steps have been taken (0, 1, 2, …).
  2. Each step, we add Count.length + 1 to Acc by spreading Count and appending one more element.
  3. When Count.length === N, Acc.length is 1 + 2 + ... + N.

Example for N = 3:

Key Takeaways