Skip to content

Instantly share code, notes, and snippets.

@caesaneer
Created August 17, 2019 20:39
Show Gist options
  • Save caesaneer/f233e7974594a5ebb8204293da846e78 to your computer and use it in GitHub Desktop.
Save caesaneer/f233e7974594a5ebb8204293da846e78 to your computer and use it in GitHub Desktop.
Part 2
// ════════════════════════════════════════════════════════════════════════════════════════════════╡
// const crypto = require('crypto')
// ════════════════════════════════════════════════════════════════════════════════════════════════╡
module.exports = function CPU(times) {
// Keeps it to a 32 bit int
const num = 40
// Calculate Fibonacci sequence for num
function fib(n) {
if (n > 40) {
throw new TypeError('Fib: N is greater than 40.')
}
const s = [1]
let c = 1
let p = 0
let i = n - 1
while (i) {
c += p
p = c - p
s.push(c)
i -= 1
}
return s
}
// Check if int is prime
function prime(n) {
if (n % 1 !== 0) {
return false
} else if (n <= 1) {
return false
} else if (n <= 3) {
return true
} else if (n % 2 === 0) {
return false
}
const dl = Math.sqrt(n)
for (let d = 3; d <= dl; d += 2) {
if (n % d === 0) {
return false
}
}
return true
}
function reversePrime(arr) {
let l = arr.length
const r = []
while (l >= 1) {
if (prime(arr[l])) {
r.push(arr[l])
}
l -= 1
}
return r
}
function expand(arr) {
const ol = arr.length
let oc = 0
const l = ol * 4
const r = []
for (let i = 0; i < l; i += 1) {
r.push(arr[oc] + (i * oc))
if (oc < ol - 1) {
oc += 1
} else {
oc = 0
}
}
return r
}
function bubble(arr) {
const r = arr
for (let i = 0; i < arr.length; i += 1) {
for (let y = 0; y < arr.length - 1; y += 1) {
if (arr[y + 1] < arr[y]) {
const t = arr[y]
r[y] = arr[y + 1]
r[y + 1] = t
}
}
}
return r
}
const result = []
for (let c = 0; c < times; c += 1) {
const data = bubble(expand(reversePrime(fib(num))))
result.push(data[data.length - 1])
}
return result
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment