diff --git a/fizzbuzz.ts b/fizzbuzz.ts new file mode 100644 index 0000000..81fa204 --- /dev/null +++ b/fizzbuzz.ts @@ -0,0 +1,149 @@ +import type { Equal, Expect } from '@type-challenges/utils' + +type cases = [ + Expect, ['1']>>, + Expect, ['1', '2', 'Fizz', '4', 'Buzz']>>, + Expect, [ + '1', + '2', + 'Fizz', + '4', + 'Buzz', + 'Fizz', + '7', + '8', + 'Fizz', + 'Buzz', + '11', + 'Fizz', + '13', + '14', + 'FizzBuzz', + '16', + '17', + 'Fizz', + '19', + 'Buzz', + ]>>, + Expect, [ + '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 + : FizzBuzz + : Acc5['length'] extends 5 + ? FizzBuzz + : FizzBuzz + +; \ No newline at end of file