Forums / Fun! / Memeory Lane

63,527 total conversations in 189 threads


Locked Locked
[Forum Games] Ban the user above you!

Last posted Sep 24, 2014 at 06:18PM EDT. Added Jan 09, 2013 at 05:02PM EST
3753 posts from 307 users

Banned for not using Java.
/* Finds the lowest common multiple (LCM) of two numbers */
function LCMCalculator(x, y) { // constructor function
var checkInt = function (x) { // inner function
if (x % 1 !== 0) {
throw new TypeError(x + " is not an integer"); // throw an exception
}
return x;
};
this.a = checkInt(x)
// ^ semicolons are optional
this.b = checkInt(y);
}
// The prototype of object instances created by a constructor is
// that constructor's "prototype" property.
LCMCalculator.prototype = { // object literal
constructor: LCMCalculator, // when reassigning a prototype, set the constructor property appropriately
gcd: function () { // method that calculates the greatest common divisor
// Euclidean algorithm:
var a = Math.abs(this.a), b = Math.abs(this.b), t;
if (a < b) {
// swap variables
t = b;
b = a;
a = t;
}
while (b !== 0) {
t = b;
b = a % b;
a = t;
}
// Only need to calculate GCD once, so "redefine" this method.
// (Actually not redefinition--it's defined on the instance itself,
// so that this.gcd refers to this "redefinition" instead of LCMCalculator.prototype.gcd.)
// Also, 'gcd' = "gcd", this['gcd'] = this.gcd
this['gcd'] = function () {
return a;
};
return a;
},
// Object property names can be specified by strings delimited by double (") or single (') quotes.
"lcm" : function () {
// Variable names don't collide with object properties, e.g. |lcm| is not |this.lcm|.
// not using |this.a * this.b| to avoid FP precision issues
var lcm = this.a / this.gcd() * this.b;
// Only need to calculate lcm once, so "redefine" this method.
this.lcm = function () {
return lcm;
};
return lcm;
},
toString: function () {
return "LCMCalculator: a = " + this.a + ", b = " + this.b;
}
};

// Define generic output function; this implementation only works for web browsers
function output(x) {
document.body.appendChild(document.createTextNode(x));
document.body.appendChild(document.createElement('br'));
}

// Note: Array's map() and forEach() are defined in JavaScript 1.6.
// They are used here to demonstrate JavaScript's inherent functional nature.
[[25, 55], [21, 56], [22, 58], [28, 56]].map(function (pair) { // array literal + mapping function
return new LCMCalculator(pair[0], pair[1]);
}).sort(function (a, b) { // sort with this comparative function
return a.lcm() – b.lcm();
}).forEach(function (obj) {
output(obj + ", gcd = " + obj.gcd() + ", lcm = " + obj.lcm());
});

01000010 01100001 01101110 01101110 01100101 01100100 00100000 01100110 01101111 01110010 00100000 01100011 01101111 01101101 01100010 01101111 00100000 01100010 01110010 01100101 01100001 01101011 01101001 01101110 01100111 00101110 00100000 01001110 01101111 01110111 00100000 01110111 01101000 01100001 01110100 00100000 01100001 01101101 00100000 01001001 00100000 01100111 01101111 01101110 01101110 01100001 00100000 01100100 01101111 00100000 01110111 01101001 01110100 01101000 00100000 01110100 01101000 01101001 01110011 00111111 00100000 00111010 00101000

Skeletor-sm

This thread is closed to new posts.

This thread was locked by an administrator.

Why don't you start a new thread instead?

Yo! You must login or signup first!