Compare commits

...

2 Commits

@ -0,0 +1,32 @@
import type { Equal, Expect } from '@type-challenges/utils'
type casesPalindrome = [
Expect<Equal<IsPalindrome<'abc'>, false>>,
Expect<Equal<IsPalindrome<'b'>, true>>,
Expect<Equal<IsPalindrome<'abca'>, false>>,
Expect<Equal<IsPalindrome<'abcba'>, true>>,
Expect<Equal<IsPalindrome<121>, true>>,
Expect<Equal<IsPalindrome<19260817>, false>>,
]
type CheckPalindrome<
T extends string[]
> =
T extends [infer First, ...infer Mid, infer Last]
? First extends Last
? Mid extends string[] ? CheckPalindrome<Mid> : never
: false
: true
;
type ToArr<T extends string> = T extends `${infer Head}${infer Tail}` ? [Head, ...ToArr<Tail>] : [];
type IsPalindrome<
T extends string | number
> =
T extends number
? IsPalindrome<`${T}`>
: T extends string
? CheckPalindrome<ToArr<T>>
: never

@ -0,0 +1,31 @@
import type { Equal, Expect } from '@type-challenges/utils'
type cases = [
Expect<Equal<ToNumber<'0'>, 0>>,
Expect<Equal<ToNumber<'5'>, 5>>,
Expect<Equal<ToNumber<'12'>, 12>>,
Expect<Equal<ToNumber<'27'>, 27>>,
Expect<Equal<ToNumber<'18@7_$%'>, never>>,
]
type Digit = '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9';
type IsNumber<
S extends string,
> =
S extends `${Digit}${infer Tail}`
? IsNumber<Tail>
: S extends ''
? true
: false
;
type ToNumber<
S extends string,
Acc extends 1[] = []
> =
IsNumber<S> extends true
? `${Acc['length']}` extends S
? Acc['length']
: ToNumber<S, [...Acc, 1]>
: never
Loading…
Cancel
Save