00459-medium-flatten

Back

// 你的答案
type Flatten<T extends unknown[], U extends unknown[] = []> = T extends [infer H, ...infer R] ? H extends unknown[] ? [...Flatten<H, [...U]>, ...Flatten<R>] : Flatten<R, [...U, H]> : U;

Solution by HelloGGG #33413

type Flatten<T extends any[], U extends any[] = []> = T extends [infer F, ...infer R] 
  ? F extends any[] ? Flatten<[...F, ...R], [...U]> : Flatten<[...R], [...U, F]>
  : U;

Solution by ZhipengYang0605 #32826

type Flatten<T extends any[]> = T extends [infer R, ...infer U] ? (R extends any[] ? [...Flatten<R>, ...Flatten<U>] : [R, ...Flatten<U>]) : []

Solution by Leen27 #32804

type Flatten<T extends unknown[]> = T extends [] 
  ? []
  : T extends [infer A, ...infer B] 
    ? A extends unknown[] 
      ? [...Flatten<A>, ...Flatten<B>]
      : [A, ...Flatten<B>]
    : []

Solution by dev-hobin #32403

type Flatten<T extends any[]> = T extends [infer first, ...infer list]
  ? first extends [...infer R]
    ? Flatten<[...R, ...list]>
    : [first, ...Flatten<list>]
  : T

Solution by nivenice #32394

type Flatten<A extends any[]> = A extends [infer F, ...infer R]
    ? F extends any[]
        ? [...Flatten<F>, ...Flatten<R>] : [F, ...Flatten<R>]
    : []

Solution by shuxiaoduo #32204

// your answers
type Flatten<T extends unknown[]> = T extends [] ? []:
                                      T extends [infer L, ...infer R] ?
                                        L extends unknown[] ? [...Flatten<L>,...Flatten<R>] : 
                                      [L,...Flatten<R>]
                                    : T

Solution by pea-sys #32160

type Flatten<T extends any[], K extends any[] = []> = T extends []
  ? K
  : T extends [infer F, ...infer R]
  ? F extends any[]
    ? Flatten<[...F, ...R], [...K]>
    : Flatten<[...R], [...K, F]>
  : T;```

Solution by jinyoung234 #31738

type Flatten<T extends any[], A extends any[] = []> = T extends [infer F, ...infer R] 
  ? F extends any[] ? [...A, ...Flatten<F>, ...Flatten<R>] : [...A, F, ...Flatten<R>] 
  : A;

Solution by kai-phan #31642

type Flatten<T> = T extends [] 
? [] 
: T extends [infer First, ...infer Rest] 
  ? First extends unknown[] 
    ? [...Flatten<First>, ...Flatten<Rest>]
    : [First, ...Flatten<Rest>] 
  : T

Solution by SazonovV #31332

type Flatten<T extends any[], R extends any[] = []> = T extends [infer A, ...infer B] ? A extends Array<any> ? Flatten<[...A, ...B], R> : Flatten<B, [...R, A]> : R;

Solution by eward957 #31245

type Flatten<T extends any[]> = T extends [infer First, ...infer Rest]
  ? First extends any[]
    ? [...Flatten<First>, ...Flatten<Rest>]
    : [First, ...Flatten<Rest>]
  : [];

Solution by zyh-ultra #31142

type Flatten<T extends any[]> = T extends [infer F, ...infer Rest]
  ? F extends any[]
    ? Flatten<[...F, ...Rest]>
    : [F, ...Flatten<Rest>]
  : T

Solution by Minato1123 #31094

type Flatten<T extends unknown[]> =
  T extends [infer A, ...infer R]
    ? A extends unknown[]
      ? [...Flatten<A>, ...Flatten<R>]
      : [A, ...Flatten<R>]
    : [];

Solution by ricky-simple #31022

// 你的答案
type Flatten<T extends unknown[]> = T extends [infer L, ...infer Rest] ? (
  L extends unknown[] ? [...Flatten<L>, ...Flatten<Rest>]  : [L, ...Flatten<Rest>] 
) : T;

Solution by CDSP98 #31005

// your answers
type Flatten<T extends any[]> = T extends [infer F, ...infer R]
  ? F extends any[]
    ? [...Flatten<F>, ...Flatten<R>]
    : [F, ...Flatten<R>]
  : T

Solution by CharlieLoong #30939

// 解答をここに記入
type Flatten<T extends unknown[]> = T extends [infer F, ...infer R] ?  [ ...(F extends unknown[] ? Flatten<F> : [F]) , ...Flatten<R>] : []

Solution by Kakeru-Miyazaki #30858

type Flatten<T extends any[], K extends any[] = []> = T extends [
  infer F,
  ...infer R
]
  ? F extends any[]
    ? Flatten<[...F, ...R], K>
    : Flatten<R, [...K, F]>
  : K;

Solution by leejaehyup #30827

type Flatten<T> = T extends [] ? [] : T extends [infer S, ...infer Q] ? [...Flatten<S>, ...Flatten<Q>] : [T]; 

Solution by hskwon5170 #30547

type Flatten<T extends Array<any>> = T extends [infer A, ...infer B] ? [...A extends Array<any> ? Flatten<A> : [A], ...Flatten<B>] :[]

//if first is not array,we will change it to array,so we can use '...[]'

Solution by MrRabbit1993 #30444

// your answers
type FlattenAny<T extends any> =
  T extends [] ? [] :
  T extends [infer F, ...infer R]
  ? [...FlattenAny<F>, ...FlattenAny<R>]
  : [T]


type Flatten<T extends unknown[]> =  FlattenAny<T>

Solution by inevermore #30412

type Flatten<T> = 
  T extends [infer A, ...infer B]
    ? A extends any[]
      ? [...Flatten<A>, ...Flatten<B>]
      : [A, ...Flatten<B>]
    : T;

Solution by wouldRewind #30386

type Flatten<T extends any[], R extends any[] = []> = T extends [infer F, ...infer Rest] 
  ? Flatten<Rest, F extends any[] ? Flatten<F, R> : [...R, F]> 
  : R;

Solution by kai-phan #30352

type Flatten<T extends unknown[]> = T extends [unknown[], ...infer R]
  ? [...Flatten<T[0]>, ...Flatten<R>]
  : T extends [infer H, ...infer R]
  ? [H, ...Flatten<R>]
  : T;

Solution by renatoprime #30335

type Flatten<T> = T extends []
  ? []
  : T extends [infer First, ...infer Rest]
    ? [...Flatten<First>, ...Flatten<Rest>]
    : [T]

type flatten = Flatten<[1, 2, [3, 4], [[[5]]]]> // [1, 2, 3, 4, 5]

Solution by rxMATTEO #30095

// 你的答案
type Flatten<T extends any[]> =
  T extends [infer F, ...infer Rest] ?
  F extends any[] ? [...Flatten<F>, ...Flatten<Rest>] : [F, ...Flatten<Rest>] : T

Solution by YE840926098 #30024

type Flatten<T extends unknown[]> =  T extends [infer F, ...infer Rest] ? F extends unknown[] ? [...Flatten<F>, ...Flatten<Rest>]: [F, ...Flatten<Rest>] : []

Solution by myxmxy1234 #29807

type Flatten<T extends any[], U extends any[] = []> = 
  T extends [infer First, ...infer Rest]
    ? First extends any[]
      ? Flatten<[...First, ...Rest], U>
      : Flatten<Rest, [...U, First]>
    : U

Solution by maximallain #29446

type Flatten<S extends unknown[], T extends unknown[] = []> = 
    S extends [infer A, ...infer Rest] ? 
    A extends unknown[] ? Flatten<[...A, ...Rest], T> : Flatten<[...Rest], [...T, A]> 
    : T

Solution by MohammadArasteh #29415

type Flatten<U> = U extends [] ? [] : U extends [infer First, ...infer Rest] ? [...Flatten<First>, ...Flatten<Rest>] : [U]

Solution by Yirujet #29236