Skip to content

Commit b8d2bbc

Browse files
rotate + reverse
1 parent 1439b38 commit b8d2bbc

File tree

6 files changed

+81
-2
lines changed

6 files changed

+81
-2
lines changed

js/dist/array.js

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,35 @@ var repr = function ( array, left, right ) {
919919

920920
exports.repr = repr;
921921

922+
/* js/src/reverse.js */
923+
924+
var reverse = function ( a , i , j ) {
925+
926+
while ( i < j ) swap( a , i++ , --j ) ;
927+
928+
} ;
929+
930+
exports.reverse = reverse ;
931+
932+
/* js/src/rotate.js */
933+
934+
/**
935+
* In place O(n).
936+
*
937+
* Rotate right version.
938+
* See http://prakhar.me/articles/the-string-rotation-problem/.
939+
*/
940+
941+
var rotate = function ( a , i , j , n ) {
942+
943+
reverse( a , i , j ) ;
944+
reverse( a , i , i + n ) ;
945+
reverse( a , i + n , j ) ;
946+
947+
} ;
948+
949+
exports.rotate = rotate ;
950+
922951
/* js/src/set.js */
923952

924953
var set = function ( a , i , v ) {

js/dist/array.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/dist/array.min.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

js/src/reverse.js

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
2+
var reverse = function ( a , i , j ) {
3+
4+
while ( i < j ) swap( a , i++ , --j ) ;
5+
6+
} ;
7+
8+
exports.reverse = reverse ;

js/src/rotate.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
2+
/**
3+
* In place O(n).
4+
*
5+
* Rotate right version.
6+
* See http://prakhar.me/articles/the-string-rotation-problem/.
7+
*/
8+
9+
var rotate = function ( a , i , j , n ) {
10+
11+
reverse( a , i , j ) ;
12+
reverse( a , i , i + n ) ;
13+
reverse( a , i + n , j ) ;
14+
15+
} ;
16+
17+
exports.rotate = rotate ;

test/js/src/rotate.js

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
2+
test( "rotate" , function ( ) {
3+
4+
5+
var a , b , n ;
6+
7+
n = 1000 ;
8+
9+
a = array.alloc( n ) ;
10+
11+
b = array.alloc( n ) ;
12+
13+
array.iota( a , 0 , n , 0 ) ;
14+
15+
array.copy( a , 0 , n , b , 0 ) ;
16+
17+
array.rotate( a , 0 , n , n - 3 ) ;
18+
19+
b = b.concat( b.splice( 0 , 3 ) ) ;
20+
21+
deepEqual( a.length , n , "length did not change" ) ;
22+
23+
deepEqual( a , b , "works as expected" ) ;
24+
25+
} ) ;

0 commit comments

Comments
 (0)