Advertisement
Guest User

Untitled

a guest
Oct 19th, 2016
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var pascalsTriangle = function () {
  2.     "use strict";
  3.     var tri = [[1]];
  4.     var nextRow = function (prevRow) {
  5.         var ary = [];
  6.  
  7.         // // more efficient for loop
  8.         // prevRow = [0].concat(prevRow);
  9.         // ary = new Array(prevRow.length);
  10.         // for (var i = 0, j = ((prevRow.length + prevRow.length % 2) / 2) ; i < j ; i += 1 ) {
  11.         //     ary[i] = prevRow[i] + prevRow[i + 1];
  12.         // }
  13.         // for (j = prevRow.length - 1 ; i <= j ; i += 1) {
  14.         //     ary[i] = ary[j - i];
  15.         // }
  16.  
  17.         ary = [0].concat(prevRow).map((v,i,a)=> v + (i + 1 < a.length ? a[i+1] : 0));
  18.         return ary;
  19.     };
  20.     var triangle = function self(n) {
  21.         if (n <= tri.length) {
  22.             return tri.slice(0, n);
  23.         }
  24.         tri = self(n - 1);
  25.         var prevRow = tri[tri.length - 1];
  26.         tri.push(nextRow(prevRow));
  27.         return tri;
  28.     };
  29.     var row = function (n) {
  30.         if (tri.length < n) {
  31.             tri = [].concat(triangle(n));
  32.         }
  33.         return tri[n - 1];
  34.     };
  35.     return {
  36.         triangle: triangle,
  37.         row: row,
  38.         reset: function(){tri = [[1]];}
  39.     };
  40. };
  41.  
  42. var algorithm = pascalsTriangle();
  43. var start_time;
  44. var end_time;
  45. var result;
  46.  
  47. start_time = performance.now();
  48. result = algorithm.triangle(5);
  49. end_time = performance.now();
  50. console.log("calculate 5 rows", result[4], end_time - start_time);
  51.  
  52. test(100);
  53.  
  54. result = algorithm.triangle(999);
  55. start_time = performance.now();
  56. result = algorithm.triangle(999);
  57. end_time = performance.now();
  58. console.log("retrieve 999 rows from cache", result[4], end_time - start_time);
  59.  
  60. function rep(x,f){
  61.     while (x > 0) {
  62.         f();
  63.         x -= 1;
  64.     }
  65. }
  66.  
  67. function test(x) {
  68.     start_time = performance.now();
  69.     rep(x, function(){ result = 0; result = algorithm.triangle(999); algorithm.reset(); });
  70.     end_time = performance.now();
  71.     console.log("Avg time to calculate 999 rows, tested " + x + " times", result[4], (end_time - start_time)/x);
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement