This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 17% faster than using filter on set | |
function difference(a, b) { | |
const s = new Set(b) | |
const result = [] | |
for (const x of a) { | |
if (!s.has(x)) { | |
result.push(x) | |
} | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Check if a given string is a palindrome. | |
* | |
* @param {string} str - The string to be checked. | |
* @return {boolean} Returns true if the string is a palindrome, false otherwise. | |
*/ | |
function isPalindrome(str) { | |
const formattedStr = str.toLowerCase().replace(/[\W_]/g, ""); | |
const reversedStr = formattedStr.split("").reverse().join(""); | |
return formattedStr === reversedStr; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// This updated version should be more efficient due to the constant-time lookup in the dictionary, the use of StringBuilder for efficient string concatenation, and the iteration over the lookup keys in descending order. | |
func toRomanNumeral(_ num: Int) -> String { | |
let lookup: [Int: String] = [ | |
1000: "M", | |
900: "CM", | |
500: "D", | |
400: "CD", | |
100: "C", | |
90: "XC", | |
50: "L", |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func isPangram(string: String) -> Bool { | |
let alphabet = "abcdefghijklmnopqrstuvwxyz" | |
let lowerCaseString = string.lowercased() | |
for letter in alphabet { | |
if !lowerCaseString.contains(letter) { | |
return false | |
} | |
} | |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* Checks if a string is a Pangram. | |
* | |
* @param {string} string - The string to be checked. | |
* @return {boolean} Returns true if the string is a pangram, false otherwise. | |
*/ | |
const isPangram = (string) => { | |
const alphabet = "abcdefghijklmnopqrstuvwxyz" | |
const lowerCaseString = string.toLowerCase() |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Removed the localeCompare function call | |
// Replaced it with a more efficient comparison using the less-than and greater-than operators. | |
// This avoids the overhead of string comparison and should make the function faster. | |
/** | |
* Sorts an array of objects alphabetically based on a specified getter function. | |
* | |
* @param {Array} arr - The array to be sorted. | |
* @param {Function} getter - The getter function used to retrieve the value to compare. | |
* @param {string} [order="asc"] - The order in which to sort the array. Default is "asc" (ascending). |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// - Use the `split()` method to convert the string `str` into an array of characters. | |
// - Use the `sort()` method with a compare function to sort the characters in the array. | |
// - Use the `join()` method to recombine the sorted characters into a string. | |
/** | |
* Sorts the characters in a string in ascending order. | |
* | |
* @param {string} str - The string to sort. | |
* @return {string} The sorted string. | |
*/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// Instead of using an object with item and index properties, used an array with [item, index] values. | |
// This reduces the memory footprint and improves performance. | |
// Modified the .map() and .sort() functions to work with the array of [item, index] pairs. | |
// Used destructuring assignment in the .map() function to extract only the item value from each pair. | |
/** | |
* Sorts an array in a stable manner using a custom compare function. | |
* | |
* @param {Array} arr - The array to be sorted. | |
* @param {Function} compare - The compare function used to determine the order of elements. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
func weightedAverage(nums: [Double], weights: [Double]) -> Double { | |
var sum = 0.0 | |
var weightSum = 0.0 | |
for i in 0..<nums.count { | |
sum += nums[i] * weights[i] | |
weightSum += weights[i] | |
} | |
return sum / weightSum |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/// | |
/// | |
/// # Arguments | |
/// | |
/// * `nums`: | |
/// * `weights`: | |
/// | |
/// returns: f64 | |
/// | |
/// # Examples |