add fizzbuzz

main
Kimi Löffel 3 years ago
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…
Cancel
Save