Skip to content

Instantly share code, notes, and snippets.

@pixxelboy
Created September 16, 2011 12:32
Show Gist options
  • Select an option

  • Save pixxelboy/1222024 to your computer and use it in GitHub Desktop.

Select an option

Save pixxelboy/1222024 to your computer and use it in GitHub Desktop.

Revisions

  1. pixxelboy created this gist Sep 16, 2011.
    50 changes: 50 additions & 0 deletions gistfile1.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,50 @@
    // Part 1.
    // Implement a function prototype extension that caches function results for
    // the same input arguments of a function with one parameter.
    //
    // For example:
    // Make sin(1) have the result of Math.sin(1), but use a cached value
    // for future calls.
    //
    // Part 2.
    // Use this new function to refactor the code example.
    // Some good test numbers: 524287, 9369319, 2147483647 (all primes)
    //
    // In other words, if you have this code:
    //
    // Function.prototype.cached = function(){
    // ? (what goes here?)
    // }
    //
    // // For the isPrime function
    //
    // var cachedIsPrime = isPrime.cached();
    // isPrime(11); // --> true (cache miss, calls original isPrime(1) function, stores return value in cache)
    // isPrime(11); // --> true (cache hit, directly returns value)
    //
    // // ..but it short work on anything that takes just one (numeric) argument:
    //
    // var cachedSin = Math.sin.cached();
    //
    // cachedSin(1); // --> 0.8414709848078965 (cache miss, calls original Math.sin(1) function, stores return value in cache)
    // cachedSin(1); // --> 0.8414709848078965 (cache hit, directly returns value)


    function isPrime( num ) {
    if ( isPrime.cache[ num ] != null )
    return isPrime.cache[ num ];

    // everything but 1 can be prime
    var prime = num != 1;
    for ( var i = 2; i < num; i++ ) {
    if ( num % i == 0 ) {
    prime = false;
    break;
    }
    }

    isPrime.cache[ num ] = prime;
    return prime;
    }

    isPrime.cache = {};