You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
33 lines
835 B
33 lines
835 B
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
|
|
|