Skip to content

Instantly share code, notes, and snippets.

@allanjamesvestal
Last active April 19, 2018 16:15
Show Gist options
  • Select an option

  • Save allanjamesvestal/48969f3128652847169795ee2a5715e2 to your computer and use it in GitHub Desktop.

Select an option

Save allanjamesvestal/48969f3128652847169795ee2a5715e2 to your computer and use it in GitHub Desktop.
All Tests Pass week 14 (source: http://jsbin.com/nigoxufore)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<title>JS Bin</title>
</head>
<body>
<script id="jsbin-javascript">
/**
* Week 14: Smallest sum of two factors.
*
* Given a number `A`, find the smallest value of `B+C`, if `A=B*C`.
*
**/
"use strict";
function smallestSumOfTwoFactors(value) {
var smallest = value + 1;
for (var i = 1; i < Math.sqrt(value); i++) {
if (value % i === 0) {
var secondNumber = value / i;
if (i + secondNumber < smallest) {
smallest = i + secondNumber;
}
}
}
return smallest;
}
// Don't edit anything after this line. Tests!
assertEqual(smallestSumOfTwoFactors(3), 4, "3: 1+3=4");
assertEqual(smallestSumOfTwoFactors(12), 7, "12: 3+4=7");
assertEqual(smallestSumOfTwoFactors(24), 10, "24: 4+6=10");
assertEqual(smallestSumOfTwoFactors(36), 13, "36: 4+9=13");
assertEqual(smallestSumOfTwoFactors(199), 200, "199: 1+199=200");
assertEqual(smallestSumOfTwoFactors(4322), 2163, "4322: 2+2161=2163");
assertEqual(smallestSumOfTwoFactors(634256), 1593, "634256: 784+189=1593");
console.log("All clear ๐ŸŽ‰");
// Assertion library
/**
* Basic assert.
*
* Example: assert(foo == true, "Foo equal true");
*
* @param assertion
* @param message
*/
function assert(assertion, message) {
if (!assertion) {
console.trace();
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
} else {
console.log(!!message ? "Pass: " + message : "Assertion passed.");
}
}
/**
* Helper function for deep object equal.
*
* Example: assertEqual({foo: "bar"}, {foo: "bar"}, "Objects equal.");
*
* @param first
* @param second
* @param message
*/
function assertObjectEqual(first, second, message) {
if (!first || !second) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
var firstKeys = Object.keys(first),
secondKeys = Object.keys(second);
if (firstKeys.length !== secondKeys.length) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
firstKeys.forEach(function (key) {
if (typeof first[key] === "object") {
assertObjectEqual(first[key], second[key], message);
} else if (first[key] !== second[key]) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
});
console.log(!!message ? "Pass: " + message : "Assertion passed.");
}
/**
* Assert equal.
*
* Example: assertEqual(true, true, "True equals true.");
*
* @param first
* @param second
* @param message
*/
function assertEqual(first, second, message) {
if (typeof first === "object") {
assertObjectEqual(first, second, message);
} else {
assert(first === second, message);
}
}
</script>
<script id="jsbin-source-javascript" type="text/javascript">/**
* Week 14: Smallest sum of two factors.
*
* Given a number `A`, find the smallest value of `B+C`, if `A=B*C`.
*
**/
function smallestSumOfTwoFactors(value) {
let smallest = value + 1;
for (let i = 1; i < Math.sqrt(value); i++) {
if (value % i === 0) {
let secondNumber = value / i;
if (i + secondNumber < smallest) {
smallest = i + secondNumber;
}
}
}
return smallest;
}
// Don't edit anything after this line. Tests!
assertEqual(smallestSumOfTwoFactors(3), 4, "3: 1+3=4");
assertEqual(smallestSumOfTwoFactors(12), 7, "12: 3+4=7");
assertEqual(smallestSumOfTwoFactors(24), 10, "24: 4+6=10");
assertEqual(smallestSumOfTwoFactors(36), 13, "36: 4+9=13");
assertEqual(smallestSumOfTwoFactors(199), 200, "199: 1+199=200");
assertEqual(smallestSumOfTwoFactors(4322), 2163, "4322: 2+2161=2163");
assertEqual(smallestSumOfTwoFactors(634256), 1593, "634256: 784+189=1593");
console.log("All clear ๐ŸŽ‰");
// Assertion library
/**
* Basic assert.
*
* Example: assert(foo == true, "Foo equal true");
*
* @param assertion
* @param message
*/
function assert(assertion, message) {
if (!assertion) {
console.trace();
throw (!!message) ? `Assertion fail: ${message}.` : `Assertion fail.`;
} else {
console.log((!!message) ? `Pass: ${message}` : "Assertion passed.");
}
}
/**
* Helper function for deep object equal.
*
* Example: assertEqual({foo: "bar"}, {foo: "bar"}, "Objects equal.");
*
* @param first
* @param second
* @param message
*/
function assertObjectEqual(first, second, message) {
if (!first || !second) {
throw (!!message) ? `Assertion fail: ${message}.` : `Assertion fail.`;
}
let firstKeys = Object.keys(first),
secondKeys = Object.keys(second);
if (firstKeys.length !== secondKeys.length) {
throw (!!message) ? `Assertion fail: ${message}.` : `Assertion fail.`;
}
firstKeys.forEach((key) => {
if (typeof first[key] === "object") {
assertObjectEqual(first[key], second[key], message);
} else if (first[key] !== second[key]) {
throw (!!message) ? `Assertion fail: ${message}.` : `Assertion fail.`;
}
});
console.log((!!message) ? `Pass: ${message}` : "Assertion passed.");
}
/**
* Assert equal.
*
* Example: assertEqual(true, true, "True equals true.");
*
* @param first
* @param second
* @param message
*/
function assertEqual(first, second, message) {
if (typeof first === "object") {
assertObjectEqual(first, second, message);
} else {
assert(first === second, message);
}
}
</script></body>
</html>
/**
* Week 14: Smallest sum of two factors.
*
* Given a number `A`, find the smallest value of `B+C`, if `A=B*C`.
*
**/
"use strict";
function smallestSumOfTwoFactors(value) {
var smallest = value + 1;
for (var i = 1; i < Math.sqrt(value); i++) {
if (value % i === 0) {
var secondNumber = value / i;
if (i + secondNumber < smallest) {
smallest = i + secondNumber;
}
}
}
return smallest;
}
// Don't edit anything after this line. Tests!
assertEqual(smallestSumOfTwoFactors(3), 4, "3: 1+3=4");
assertEqual(smallestSumOfTwoFactors(12), 7, "12: 3+4=7");
assertEqual(smallestSumOfTwoFactors(24), 10, "24: 4+6=10");
assertEqual(smallestSumOfTwoFactors(36), 13, "36: 4+9=13");
assertEqual(smallestSumOfTwoFactors(199), 200, "199: 1+199=200");
assertEqual(smallestSumOfTwoFactors(4322), 2163, "4322: 2+2161=2163");
assertEqual(smallestSumOfTwoFactors(634256), 1593, "634256: 784+189=1593");
console.log("All clear ๐ŸŽ‰");
// Assertion library
/**
* Basic assert.
*
* Example: assert(foo == true, "Foo equal true");
*
* @param assertion
* @param message
*/
function assert(assertion, message) {
if (!assertion) {
console.trace();
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
} else {
console.log(!!message ? "Pass: " + message : "Assertion passed.");
}
}
/**
* Helper function for deep object equal.
*
* Example: assertEqual({foo: "bar"}, {foo: "bar"}, "Objects equal.");
*
* @param first
* @param second
* @param message
*/
function assertObjectEqual(first, second, message) {
if (!first || !second) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
var firstKeys = Object.keys(first),
secondKeys = Object.keys(second);
if (firstKeys.length !== secondKeys.length) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
firstKeys.forEach(function (key) {
if (typeof first[key] === "object") {
assertObjectEqual(first[key], second[key], message);
} else if (first[key] !== second[key]) {
throw !!message ? "Assertion fail: " + message + "." : "Assertion fail.";
}
});
console.log(!!message ? "Pass: " + message : "Assertion passed.");
}
/**
* Assert equal.
*
* Example: assertEqual(true, true, "True equals true.");
*
* @param first
* @param second
* @param message
*/
function assertEqual(first, second, message) {
if (typeof first === "object") {
assertObjectEqual(first, second, message);
} else {
assert(first === second, message);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment