export const perm = ( a ) : number [ ] [ ] => { if ( a . length ) { return a . reduce ( ( r , v , i ) => [ ... r , ... perm ( [ ... a . slice ( 0 , i ) , ... a . slice ( i + 1 ) ] ) . map ( ( x ) => [ v , ... x ] ) , ] , [ ] ) ; } else { return [ [ ] ] ; } } ;