git-subtree-dir: users/wpcarro git-subtree-mainline:464bbcb15cgit-subtree-split:24f5a642afChange-Id: I6105b3762b79126b3488359c95978cadb3efa789
		
			
				
	
	
		
			68 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
	
		
			1.3 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
function findRotationPoint(xs: Array<string>): number {
 | 
						|
  // Find the rotation point in the vector.
 | 
						|
  let beg = 0;
 | 
						|
  let end = xs.length - 1;
 | 
						|
 | 
						|
  while (beg != end) {
 | 
						|
    let mid = beg + Math.floor((end - beg) / 2);
 | 
						|
 | 
						|
    if (beg === mid) {
 | 
						|
      return xs[beg] < xs[end] ? beg : end;
 | 
						|
    }
 | 
						|
 | 
						|
    if (xs[end] <= xs[mid]) {
 | 
						|
      beg = mid;
 | 
						|
      end = end;
 | 
						|
    } else {
 | 
						|
      beg = beg;
 | 
						|
      end = mid;
 | 
						|
    }
 | 
						|
  }
 | 
						|
 | 
						|
  return beg;
 | 
						|
}
 | 
						|
 | 
						|
// Tests
 | 
						|
let desc;
 | 
						|
let actual;
 | 
						|
let expected;
 | 
						|
 | 
						|
desc = "small array one";
 | 
						|
actual = findRotationPoint(["cape", "cake"]);
 | 
						|
expected = 1;
 | 
						|
assertEquals(actual, expected, desc);
 | 
						|
 | 
						|
desc = "small array two";
 | 
						|
actual = findRotationPoint(["cake", "cape"]);
 | 
						|
expected = 0;
 | 
						|
assertEquals(actual, expected, desc);
 | 
						|
 | 
						|
desc = "medium array";
 | 
						|
actual = findRotationPoint(["grape", "orange", "plum", "radish", "apple"]);
 | 
						|
expected = 4;
 | 
						|
assertEquals(actual, expected, desc);
 | 
						|
 | 
						|
desc = "large array";
 | 
						|
actual = findRotationPoint([
 | 
						|
  "ptolemaic",
 | 
						|
  "retrograde",
 | 
						|
  "supplant",
 | 
						|
  "undulate",
 | 
						|
  "xenoepist",
 | 
						|
  "asymptote",
 | 
						|
  "babka",
 | 
						|
  "banoffee",
 | 
						|
  "engender",
 | 
						|
  "karpatka",
 | 
						|
  "othellolagkage"
 | 
						|
]);
 | 
						|
expected = 5;
 | 
						|
assertEquals(actual, expected, desc);
 | 
						|
 | 
						|
function assertEquals(a, b, desc) {
 | 
						|
  if (a === b) {
 | 
						|
    console.log(`${desc} ... PASS`);
 | 
						|
  } else {
 | 
						|
    console.log(`${desc} ... FAIL: ${a} != ${b}`);
 | 
						|
  }
 | 
						|
}
 |