File tree Expand file tree Collapse file tree 11 files changed +241
-0
lines changed Expand file tree Collapse file tree 11 files changed +241
-0
lines changed Original file line number Diff line number Diff line change 1+ export const findDivisors = ( num : number ) => {
2+ const divisors = [ ] ;
3+
4+ const sqrt = Math . floor ( Math . sqrt ( num ) ) ;
5+
6+ for ( let i = 1 ; i <= sqrt ; i ++ ) {
7+ if ( num % i === 0 ) {
8+ divisors . push ( i ) ;
9+ if ( i !== sqrt ) {
10+ divisors . push ( Math . floor ( num / i ) ) ;
11+ }
12+ }
13+ }
14+
15+ divisors . sort ( ( a , b ) => a - b ) ;
16+
17+ return divisors ;
18+ } ;
Original file line number Diff line number Diff line change 1+ export const gcd = ( num1 : number , num2 : number ) : number => {
2+ if ( num1 === 0 || num2 === 0 ) {
3+ return 0 ;
4+ }
5+ if ( num1 === num2 ) {
6+ return num1 ;
7+ }
8+ if ( num1 > num2 ) {
9+ return gcd ( num1 - num2 , num2 ) ;
10+ }
11+ return gcd ( num1 , num2 - num1 ) ;
12+ } ;
13+
14+ export const gcdArray = ( num : number [ ] ) => {
15+ let result = num [ 0 ] ;
16+
17+ for ( let i = 1 ; i < num . length ; i ++ ) {
18+ result = gcd ( num [ i ] , result ) ;
19+ }
20+
21+ return result ;
22+ } ;
Original file line number Diff line number Diff line change 1+ export const greatestDifference = ( numbers : number [ ] ) => {
2+ let index = 0 ;
3+ let largest = numbers [ 0 ] ;
4+ const length = numbers . length ;
5+ let number ;
6+ let smallest = numbers [ 0 ] ;
7+
8+ for ( index ; index < length ; index ++ ) {
9+ number = numbers [ index ] ;
10+
11+ if ( number > largest ) {
12+ largest = number ;
13+ }
14+ if ( number < smallest ) {
15+ smallest = number ;
16+ }
17+ }
18+
19+ return largest - smallest ;
20+ } ;
Original file line number Diff line number Diff line change 1+ import { gcd } from './gcd' ;
2+
3+ export const lcm = ( num1 : number , num2 : number ) => {
4+ if ( num1 === 0 || num2 === 0 ) {
5+ return 0 ;
6+ }
7+ num1 = Math . abs ( num1 ) ;
8+ num2 = Math . abs ( num2 ) ;
9+ return ( num1 * num2 ) / gcd ( num1 , num2 ) ;
10+ } ;
11+
12+ export const lcmArray = ( num : number [ ] ) => {
13+ let result = num [ 0 ] ;
14+
15+ for ( let i = 1 ; i < num . length ; i ++ ) {
16+ result = num [ i ] * result / gcd ( num [ i ] , result ) ;
17+ }
18+
19+ return result ;
20+ } ;
Original file line number Diff line number Diff line change 1+ export const isPrime = ( n : number ) => {
2+ if ( n <= 1 ) {
3+ return false ;
4+ }
5+
6+ const sqrt = Math . floor ( Math . sqrt ( n ) ) ;
7+ for ( let i = 2 ; i < sqrt ; i ++ ) {
8+ if ( n % i === 0 ) {
9+ return false ;
10+ }
11+ }
12+
13+ return true ;
14+ } ;
15+
16+ export const testPrime = ( n : number ) => {
17+ if ( n <= 1 ) {
18+ return false ;
19+ } else {
20+ if ( n === 2 || n === 3 ) {
21+ return true ;
22+ } else if ( n % 2 === 0 ) {
23+ return false ;
24+ } else {
25+ const sqrt = Math . floor ( Math . sqrt ( n ) ) ;
26+ for ( let i = 3 ; i <= sqrt ; i += 2 ) {
27+ if ( n % i === 0 ) {
28+ return false ;
29+ }
30+ }
31+ }
32+ }
33+ return true ;
34+ } ;
35+
36+ const isPrime2 = ( n : number ) => ! [ ...Array ( n ) . keys ( ) ] . slice ( 2 ) . map ( i => ! ( n % i ) ) . includes ( true ) && ! [ 0 , 1 ] . includes ( n ) ;
Original file line number Diff line number Diff line change 1+ export const sieveOfEratosthenes = ( n : number ) => {
2+
3+ const prime : boolean [ ] = [ ] ;
4+
5+ for ( let i = 0 ; i < n ; i ++ ) {
6+ prime [ i ] = true ;
7+ }
8+
9+ for ( let p = 2 ; p * p <= n ; p ++ ) {
10+ if ( prime [ p ] ) {
11+ for ( let i = p * 2 ; i <= n ; i += p ) {
12+ prime [ i ] = false ;
13+ }
14+ }
15+ }
16+
17+ return prime . filter ( num => num === true ) ;
18+ } ;
Original file line number Diff line number Diff line change 1+ const stringSearch = ( text : string , pattern : string ) => {
2+ const n = text . length ;
3+ const m = pattern . length ;
4+
5+ if ( m > n ) {
6+ return - 1 ;
7+ }
8+
9+ for ( let i = 0 ; i < n ; i ++ ) {
10+ let j = 0 ;
11+ for ( j = 0 ; j < m && ( i + j ) < n ; j ++ ) {
12+ if ( text . charAt ( i + j ) !== pattern . charAt ( j ) ) {
13+ break ;
14+ }
15+ }
16+ if ( j === m ) {
17+ return i ;
18+ }
19+ }
20+
21+ return - 1 ;
22+ } ;
Original file line number Diff line number Diff line change 1+ const buildTable = ( pattern : string ) => {
2+ const length = pattern . length ;
3+ const table = [ ] ;
4+ let position = 2 ;
5+ let cnd = 0 ;
6+
7+ table [ 0 ] = - 1 ;
8+ table [ 1 ] = 0 ;
9+
10+ while ( position < length ) {
11+ if ( pattern [ position - 1 ] === pattern [ cnd ] ) {
12+ table [ position ++ ] = ++ cnd ;
13+ } else if ( cnd > 0 ) {
14+ cnd = table [ cnd ] ;
15+ } else {
16+ table [ position ++ ] = 0 ;
17+ }
18+ }
19+
20+ return table ;
21+ } ;
22+
23+ const knuthMorrisPratt = ( text : string , pattern : string ) => {
24+ const textLength = text . length ;
25+ const patternLength = pattern . length ;
26+ let m = 0 ;
27+ let i = 0 ;
28+ const table = buildTable ( pattern ) ;
29+
30+ while ( m + i < textLength ) {
31+ if ( pattern [ i ] === text [ m + i ] ) {
32+ if ( i === patternLength - 1 ) {
33+ return m ;
34+ }
35+ i ++ ;
36+ } else if ( table [ i ] >= 0 ) {
37+ i = table [ i ] ;
38+ m = m + i - table [ i ] ;
39+ } else {
40+ i = 0 ;
41+ m ++ ;
42+ }
43+ }
44+
45+ return textLength ;
46+ } ;
You can’t perform that action at this time.
0 commit comments