parent
8dcc77ffc0
commit
5d491c6f3b
@ -0,0 +1,149 @@
|
||||
import type { Equal, Expect } from '@type-challenges/utils'
|
||||
|
||||
type cases = [
|
||||
Expect<Equal<FizzBuzz<1>, ['1']>>,
|
||||
Expect<Equal<FizzBuzz<5>, ['1', '2', 'Fizz', '4', 'Buzz']>>,
|
||||
Expect<Equal<FizzBuzz<20>, [
|
||||
'1',
|
||||
'2',
|
||||
'Fizz',
|
||||
'4',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'7',
|
||||
'8',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'11',
|
||||
'Fizz',
|
||||
'13',
|
||||
'14',
|
||||
'FizzBuzz',
|
||||
'16',
|
||||
'17',
|
||||
'Fizz',
|
||||
'19',
|
||||
'Buzz',
|
||||
]>>,
|
||||
Expect<Equal<FizzBuzz<100>, [
|
||||
'1',
|
||||
'2',
|
||||
'Fizz',
|
||||
'4',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'7',
|
||||
'8',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'11',
|
||||
'Fizz',
|
||||
'13',
|
||||
'14',
|
||||
'FizzBuzz',
|
||||
'16',
|
||||
'17',
|
||||
'Fizz',
|
||||
'19',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'22',
|
||||
'23',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'26',
|
||||
'Fizz',
|
||||
'28',
|
||||
'29',
|
||||
'FizzBuzz',
|
||||
'31',
|
||||
'32',
|
||||
'Fizz',
|
||||
'34',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'37',
|
||||
'38',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'41',
|
||||
'Fizz',
|
||||
'43',
|
||||
'44',
|
||||
'FizzBuzz',
|
||||
'46',
|
||||
'47',
|
||||
'Fizz',
|
||||
'49',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'52',
|
||||
'53',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'56',
|
||||
'Fizz',
|
||||
'58',
|
||||
'59',
|
||||
'FizzBuzz',
|
||||
'61',
|
||||
'62',
|
||||
'Fizz',
|
||||
'64',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'67',
|
||||
'68',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'71',
|
||||
'Fizz',
|
||||
'73',
|
||||
'74',
|
||||
'FizzBuzz',
|
||||
'76',
|
||||
'77',
|
||||
'Fizz',
|
||||
'79',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'82',
|
||||
'83',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
'86',
|
||||
'Fizz',
|
||||
'88',
|
||||
'89',
|
||||
'FizzBuzz',
|
||||
'91',
|
||||
'92',
|
||||
'Fizz',
|
||||
'94',
|
||||
'Buzz',
|
||||
'Fizz',
|
||||
'97',
|
||||
'98',
|
||||
'Fizz',
|
||||
'Buzz',
|
||||
]>>,
|
||||
]
|
||||
|
||||
type FizzBuzz<
|
||||
N extends number,
|
||||
Res extends string[] = [],
|
||||
Acc extends 1[] = [1],
|
||||
Acc3 extends 1[] = [1],
|
||||
Acc5 extends 1[] = [1],
|
||||
> =
|
||||
Res['length'] extends N
|
||||
? Res
|
||||
: Acc3['length'] extends 3
|
||||
? Acc5['length'] extends 5
|
||||
? FizzBuzz<N, [...Res, 'FizzBuzz'], [...Acc, 1], [1], [1]>
|
||||
: FizzBuzz<N, [...Res, 'Fizz'], [...Acc, 1], [1], [...Acc5, 1]>
|
||||
: Acc5['length'] extends 5
|
||||
? FizzBuzz<N, [...Res, 'Buzz'], [...Acc, 1], [...Acc3, 1], [1]>
|
||||
: FizzBuzz<N, [...Res, `${Acc['length']}`], [...Acc, 1], [...Acc3, 1], [...Acc5, 1]>
|
||||
|
||||
;
|
||||
Loading…
Reference in new issue