Open kscory opened 4 months ago
SOS
type ParseInt<T extends string> = T extends `${infer U extends number}` ? U : never;
type ReverseString<T extends string> = T extends `${infer F}${infer Rest}` ? `${ReverseString<Rest>}${F}` : ''
type RemoveLeadingZero<T extends string> = T extends '0' ? '0' : T extends `0${infer Rest}` ? RemoveLeadingZero<Rest> : T;
type ReversePositiveMinus<T extends string> = T extends `${infer Digit extends number}${infer Rest}`
? Digit extends 0
? `9${ReversePositiveMinus<Rest>}`
: `${[9, 0, 1, 2, 3, 4, 5, 6, 7, 8][Digit]}${Rest}`
: never
type PositiveMinus<T extends string> = ParseInt<RemoveLeadingZero<ReverseString<ReversePositiveMinus<ReverseString<T>>>>>
type ReverseNegativeMinus<T extends string> = T extends '9' ? '01'
: T extends `${infer Digit extends number}${infer Rest}`
? Digit extends 9
? `0${ReverseNegativeMinus<Rest>}`
: `${[1, 2, 3, 4, 5, 6, 7, 8, 9][Digit]}${Rest}`
: never
type NegativeMinus<T extends string> = ParseInt<`-${ReverseString<ReverseNegativeMinus<ReverseString<T>>>}`>
type MinusOne<T extends number> = T extends 0 ? -1
: `${T}` extends `-${infer Abs}`
? NegativeMinus<Abs>
: PositiveMinus<`${T}`>
이게 뭔...
type step1ParseInt<T extends string> = T extends `${infer Digit extends number}`?Digit : never;
type step2ReverseString<S extends string> = S extends `${infer First}${infer Rest}` ? `${step2ReverseString<Rest>}${First}` : ""
type step3RemoveLeadingZeros<S extends string> = S extends '0' ? S : S extends `${0}${infer Rest}` ? step3RemoveLeadingZeros<Rest>:S
type step4InternalMinusOne<S extends string> =
S extends `${infer Digit extends number}${infer Rest}`?
Digit extends 0?
`9${step4InternalMinusOne<Rest>}`:
`${[9, 0, 1, 2, 3, 4, 5, 6, 7, 8][Digit]}${Rest}`
:never
type MinusOne<T extends number> = T extends 0? -1 :step1ParseInt<step3RemoveLeadingZeros<step2ReverseString<step4InternalMinusOne<step2ReverseString<`${T}`>>>>>
눈물이 주룩주룩
답안을 작성해주세요.