Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save okayurisotto/795b43a05b261013f63ac2dd98384807 to your computer and use it in GitHub Desktop.
Save okayurisotto/795b43a05b261013f63ac2dd98384807 to your computer and use it in GitHub Desktop.
type Seq<T extends number, V extends number[] = []> = V["length"] extends T
? V
: Seq<T, [...V, V["length"]]>;
type Add<T extends number, U extends number> = [...Seq<T>, ...Seq<U>]["length"];
type Sub<
T extends number,
U extends number,
V extends never[] = []
> = U extends T ? V["length"] : Sub<T, Add<U, 1>, [...V, never]>;
type Mul<T extends number, V extends number> = V extends 1
? T
: Mul<Add<T, T>, Sub<V, 1>>;
type Div<
T extends number,
U extends number,
Result extends number = 0
> = T extends Seq<U>[number] ? [Result, T] : Div<Sub<T, U>, U, Add<Result, 1>>;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment