Fill
提出詳細
type TNum = 0[]; type NumOf<N extends number, _Acc extends 0[] = []> = _Acc["length"] extends N ? _Acc : NumOf<N, [..._Acc, 0]>; type Gte<This extends TNum, That extends TNum> = This extends [...That, ...infer R] ? true : false; type Add1<N extends number, _T = [...NumOf<N>, 0]["length"]> = _T extends number ? _T : never; type SplitAtIdx<Arr extends unknown[], I extends number, _Head extends unknown[] = []> = _Head["length"] extends I ? Arr extends [infer _, ...infer R] ? [_Head, R] : [_Head, []] : Arr extends [infer H, ...infer R] ? SplitAtIdx<R, I, [..._Head, H]> : [_Head, []] type Assign<Arr extends unknown[], T, I extends number> = Gte<NumOf<I>, NumOf<Arr["length"]>> extends true ? Arr : [...SplitAtIdx<Arr, I>[0], T, ...SplitAtIdx<Arr, I>[1]]; type Fill< T extends unknown[], N, Start extends number = 0, End extends number = T['length'], > = Gte<NumOf<Start>, NumOf<T["length"]>> extends true ? T : Gte<NumOf<Start>, NumOf<End>> extends true ? T : Fill<Assign<T, N, Start>, N, Add1<Start>, End>;
提出日時 | 2025-01-19 11:52:59 |
---|---|
問題 | Fill |
ユーザー | ookkoouu |
ステータス | Accepted |
import type { Equal, Expect } from '@type-challenges/utils' type cases = [ Expect<Equal<Fill<[], 0>, []>>, Expect<Equal<Fill<[], 0, 0, 3>, []>>, Expect<Equal<Fill<[1, 2, 3], 0, 0, 0>, [1, 2, 3]>>, Expect<Equal<Fill<[1, 2, 3], 0, 2, 2>, [1, 2, 3]>>, Expect<Equal<Fill<[1, 2, 3], 0>, [0, 0, 0]>>, Expect<Equal<Fill<[1, 2, 3], true>, [true, true, true]>>, Expect<Equal<Fill<[1, 2, 3], true, 0, 1>, [true, 2, 3]>>, Expect<Equal<Fill<[1, 2, 3], true, 1, 3>, [1, true, true]>>, Expect<Equal<Fill<[1, 2, 3], true, 10, 0>, [1, 2, 3]>>, Expect<Equal<Fill<[1, 2, 3], true, 0, 10>, [true, true, true]>>, ]