Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

216 - Slice #16150

Open
justBadProgrammer opened this issue Sep 16, 2022 · 0 comments
Open

216 - Slice #16150

justBadProgrammer opened this issue Sep 16, 2022 · 0 comments
Labels
216 answer Share answers/solutions to a question en in English

Comments

@justBadProgrammer
Copy link

justBadProgrammer commented Sep 16, 2022

// your answers
type Dictionary<
  E extends any = any > =
{
  '0':[],
  '1':[E],
  '2':[E,E],
  '3':[E,E,E],
  '4':[E,E,E,E],
  '5':[E,E,E,E,E],
  '6':[E,E,E,E,E,E],
  '7':[E,E,E,E,E,E,E],
  '8':[E,E,E,E,E,E,E,E],
  '9':[E,E,E,E,E,E,E,E,E],
} ;

type _10<
    E extends any = any> = [E,E,E,E,E,E,E,E,E,E]  ;

type Multyply<
    A extends readonly any[],
    B extends readonly any[]> =
    A extends [infer R,...infer U]
    ? [...B,...Multyply<U,B>]
    : []  ;

type ReverseString<
    S extends string> =
    S extends `${infer R extends string}${infer U extends string}`
    ? `${ReverseString<U>}${R}`
    : ''  ;

type ReverseStringToTuple<
    S extends string,
    E extends any = any> =
    S extends `${infer R extends keyof Dictionary<E>}${infer U extends string}`
    ? [...Dictionary<E>[R],...Multyply<_10<E>,ReverseStringToTuple<U>>]
    : []  ;

type Dif<
    A extends number,
    B extends number> =
    `${A}` extends `-${infer R extends number}`
    ? `${B}` extends `-${infer U extends number}`
    ? ReverseStringToTuple<ReverseString<`${A}`>> extends 
    [...ReverseStringToTuple<ReverseString<`${B}`>>,...infer R extends readonly any[]]
    ? `-${R['length'] }` extends `${infer N extends number}`
    ? N
    : never
    : ReverseStringToTuple<ReverseString<`${B}`>> extends 
    [...ReverseStringToTuple<ReverseString<`${A}`>>,...infer R extends readonly any[]]  
    ? R['length']
    : never
    : [...ReverseStringToTuple<ReverseString<`${A}`>>,...ReverseStringToTuple<ReverseString<`${B}`>>] extends
     infer R extends readonly any[]
    ? `-${R['length']}` extends `${infer N extends number}`
    ? N
    : never
    : never
    : `${B}` extends `-${infer U extends number}`
    ? [...ReverseStringToTuple<ReverseString<`${A}`>>,...ReverseStringToTuple<ReverseString<`${B}`>>] extends
     infer R extends readonly any[]
    ? R['length']
    : never
    : ReverseStringToTuple<ReverseString<`${A}`>> extends 
    [...ReverseStringToTuple<ReverseString<`${B}`>>,...infer R extends readonly any[]]
    ? R['length']    
    : ReverseStringToTuple<ReverseString<`${B}`>> extends 
    [...ReverseStringToTuple<ReverseString<`${A}`>>,...infer R extends readonly any[]]  
    ? `-${R['length'] }` extends `${infer N extends number}`
    ? N
    : never
    : never ;

    type Lesser<
        A extends number,
        B extends number> =
        `${Dif<A,B>}` extends `-${number}`
        ? true
        : false  ;

    type Greater<
        A extends number,
        B extends number> =
        `${Dif<B,A>}` extends `-${number}`
        ? true
        : false ;

type Slice<
    Arr extends readonly any[], 
    Start extends number = 0, 
    End extends number = Arr['length'],
    TrueStart extends number = `${Start}` extends `-${infer N extends number}` ? Dif<Arr['length'],N> : Start,
    TrueEnd extends number = `${End}` extends `-${infer M extends number}` ? Dif<Arr['length'],M> : End> =
    Greater<TrueStart,Arr['length']> extends true 
    ? []
    : Lesser<TrueEnd,0> extends true
    ? []
    : Greater<TrueStart,TrueEnd> extends true
    ? []
    : Arr extends [...ReverseStringToTuple<ReverseString<`${TrueEnd}`>>,...infer R]
    ? Arr extends [...infer U,...R]
    ? U extends[...ReverseStringToTuple<ReverseString<`${TrueStart}`>>,...infer S]
    ? S
    : never
    : never
    : never ; 
@justBadProgrammer justBadProgrammer added answer Share answers/solutions to a question en in English labels Sep 16, 2022
@github-actions github-actions bot added the 216 label Sep 16, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
216 answer Share answers/solutions to a question en in English
Projects
None yet
Development

No branches or pull requests

1 participant