Skip to content

Instantly share code, notes, and snippets.

@harrisonmalone
Last active November 27, 2018 11:47
Show Gist options
  • Save harrisonmalone/f4ccf3eecafa1e42b8db6d785ffe3d06 to your computer and use it in GitHub Desktop.
Save harrisonmalone/f4ccf3eecafa1e42b8db6d785ffe3d06 to your computer and use it in GitHub Desktop.
morning challenge 27/11, nice use case for sort and looping through two arrays
// Given two arrays a and b write a function comp(a, b) (compSame(a, b) in Clojure) that checks whether the two arrays have the "same" elements, with the same multiplicities. "Same" means, here, that the elements in b are the elements in a squared, regardless of the order.
// Examples
// Valid arrays
// a = [121, 144, 19, 161, 19, 144, 19, 11]
// b = [121, 14641, 20736, 361, 25921, 361, 20736, 361]
// comp(a, b) returns true because in b 121 is the square of 11, 14641 is the square of 121, 20736 the square of 144, 361 the square of 19, 25921 the square of 161, and so on. It gets obvious if we write b's elements in terms of squares:
// a = [121, 144, 19, 161, 19, 144, 19, 11]
// b = [11*11, 121*121, 144*144, 19*19, 161*161, 19*19, 144*144, 19*19]
function comp(a, b) {
if (a === null || b === null) {
return false
}
let i = 0
const arr = []
const sortedA = a.sort((a, b) => a - b)
const sortedB = b.sort((a, b) => a - b)
for(i; i < a.length; i++) {
if ((sortedA[i] ** 2) === sortedB[i]) {
arr.push('true')
}
else {
arr.push('false')
}
}
return !arr.includes('false')
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment