Compare commits
2 Commits
b0621f7c43
...
89a725f664
| Author | SHA1 | Date |
|---|---|---|
|
|
89a725f664 | 3 years ago |
|
|
148867f294 | 3 years ago |
@ -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…
Reference in new issue