(euler) make puzzles functional
This commit is contained in:
parent
6b17075cfa
commit
563866d555
7 changed files with 73 additions and 44 deletions
|
@ -8,6 +8,7 @@
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/node": "^16.11.6",
|
"@types/node": "^16.11.6",
|
||||||
"chalk": "^4.1.2",
|
"chalk": "^4.1.2",
|
||||||
|
"execution-time": "^1.4.1",
|
||||||
"gulp": "^4.0.2",
|
"gulp": "^4.0.2",
|
||||||
"gulp-cli": "^2.3.0",
|
"gulp-cli": "^2.3.0",
|
||||||
"gulp-rename": "^2.0.0",
|
"gulp-rename": "^2.0.0",
|
||||||
|
|
10
euler/run.js
10
euler/run.js
|
@ -1,6 +1,7 @@
|
||||||
const fs = require('fs');
|
const fs = require('fs');
|
||||||
const chalk = require('chalk');
|
const chalk = require('chalk');
|
||||||
const { spawnSync } = require('child_process');
|
const { spawnSync } = require('child_process');
|
||||||
|
const perf = require('execution-time')();
|
||||||
|
|
||||||
const run = (file, puzzleName) => {
|
const run = (file, puzzleName) => {
|
||||||
// Calculate the length of the divider for the puzzle
|
// Calculate the length of the divider for the puzzle
|
||||||
|
@ -10,12 +11,19 @@ const run = (file, puzzleName) => {
|
||||||
divider += '-';
|
divider += '-';
|
||||||
}
|
}
|
||||||
|
|
||||||
// Log output
|
// Styling
|
||||||
console.log(divider);
|
console.log(divider);
|
||||||
console.log(chalk.bold(chalk.greenBright(puzzleName)));
|
console.log(chalk.bold(chalk.greenBright(puzzleName)));
|
||||||
console.log(divider);
|
console.log(divider);
|
||||||
|
|
||||||
|
// Execute the file
|
||||||
|
perf.start();
|
||||||
spawnSync('node', [`build/${file}`], { shell: true, stdio: 'inherit' });
|
spawnSync('node', [`build/${file}`], { shell: true, stdio: 'inherit' });
|
||||||
|
const results = perf.stop();
|
||||||
|
|
||||||
|
// Print time results
|
||||||
|
console.log();
|
||||||
|
console.log(chalk.bold(chalk.yellow(`Executed in ${results.words}`)));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Get files
|
// Get files
|
||||||
|
|
|
@ -1,12 +1,13 @@
|
||||||
import { calcSum } from './utils';
|
import { calcSum } from './utils';
|
||||||
|
|
||||||
const below = 1000;
|
const multiplesOf = (numbers: number[], upperBound: number) => {
|
||||||
const multiplesOf = [3, 5];
|
const results: Set<number> = new Set();
|
||||||
const toAdd: Set<number> = new Set();
|
|
||||||
|
|
||||||
// Find all of the multiples of 3 and 5 below 1000
|
for (let i = 1; i < upperBound; i++) {
|
||||||
for (let i = 1; i < below; i++) {
|
numbers.forEach(num => (i % num == 0 ? results.add(i) : null));
|
||||||
multiplesOf.forEach(num => (i % num == 0 ? toAdd.add(i) : null));
|
}
|
||||||
}
|
|
||||||
|
|
||||||
console.log(calcSum(Array.from(toAdd)));
|
return Array.from(results);
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(calcSum(multiplesOf([3, 5], 1000)));
|
||||||
|
|
|
@ -1,15 +1,22 @@
|
||||||
import { calcSum } from './utils';
|
import { calcSum } from './utils';
|
||||||
|
|
||||||
const sequence = [1, 2];
|
const fibonacciNumbers = (upperBound: number) => {
|
||||||
const max = 4000000;
|
const sequence = [1, 2];
|
||||||
|
|
||||||
// Keep making new nujm
|
// Keep making new numbers in the sequence until we hit the upper bound
|
||||||
while (sequence[sequence.length - 1] < max) {
|
while (sequence[sequence.length - 1] < upperBound) {
|
||||||
const newValue = sequence[sequence.length - 1] + sequence[sequence.length - 2];
|
const newValue = sequence[sequence.length - 1] + sequence[sequence.length - 2];
|
||||||
|
|
||||||
sequence.push(newValue);
|
sequence.push(newValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter out the even numbers and find the sum
|
return sequence;
|
||||||
const even = sequence.filter(n => n % 2 === 0);
|
};
|
||||||
console.log(calcSum(even));
|
|
||||||
|
const evenFibonacciNumbers = (upperBound: number) => {
|
||||||
|
const sequence = fibonacciNumbers(upperBound);
|
||||||
|
const even = sequence.filter(n => n % 2 === 0);
|
||||||
|
|
||||||
|
return even;
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(calcSum(evenFibonacciNumbers(4000000)));
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
let number = 600851475143;
|
const largestPrimeFactor = (number: number) => {
|
||||||
let i = 2;
|
let i = 2;
|
||||||
|
|
||||||
while (i * i <= number) {
|
while (i * i <= number) {
|
||||||
if (number % i) i += 1;
|
if (number % i) i += 1;
|
||||||
else number = Math.floor(number / i);
|
else number = Math.floor(number / i);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(number);
|
return number;
|
||||||
|
};
|
||||||
|
|
||||||
|
console.log(largestPrimeFactor(600851475143));
|
||||||
|
|
|
@ -1,22 +1,21 @@
|
||||||
const biggest = 999;
|
const largestPallidromeNumber = (lowerBound: number, upperBound: number) => {
|
||||||
const smallest = 100;
|
// Work out all of the products of 3 digit numbers
|
||||||
|
const products: number[] = [];
|
||||||
|
|
||||||
// Work out all of the products of 3 digit numbers
|
for (let i = lowerBound; i < upperBound + 1; i++) {
|
||||||
const products: number[] = [];
|
for (let j = lowerBound; j < upperBound + 1; j++) {
|
||||||
|
|
||||||
for (let i = smallest; i < biggest + 1; i++) {
|
|
||||||
for (let j = smallest; j < biggest + 1; j++) {
|
|
||||||
products.push(i * j);
|
products.push(i * j);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Filter for palindromic numbers
|
// Filter for palindromic numbers
|
||||||
const palindromic = products.filter(
|
const palindromic = products.filter(
|
||||||
x => x.toString() === x.toString().split('').reverse().join('')
|
x => x.toString() === x.toString().split('').reverse().join('')
|
||||||
);
|
);
|
||||||
|
|
||||||
// Find the biggest palindrome number
|
// Find the biggest palindrome number
|
||||||
const sorted = palindromic.sort((a, b) => b - a);
|
const sorted = palindromic.sort((a, b) => b - a);
|
||||||
const largest = sorted[0];
|
return sorted[0];
|
||||||
|
};
|
||||||
|
|
||||||
console.log(largest);
|
console.log(largestPallidromeNumber(100, 999));
|
||||||
|
|
|
@ -926,6 +926,15 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
|
"execution-time@npm:^1.4.1":
|
||||||
|
version: 1.4.1
|
||||||
|
resolution: "execution-time@npm:1.4.1"
|
||||||
|
dependencies:
|
||||||
|
pretty-hrtime: ^1.0.3
|
||||||
|
checksum: 0a5ef5604fc1ed9f626126443dfb52cd94926a657384433a3737e7878e1697e9b37e04e63a22e2ae2f6ac6bd20261f58fb8c890388f6d3fdf906425fca98be3d
|
||||||
|
languageName: node
|
||||||
|
linkType: hard
|
||||||
|
|
||||||
"expand-brackets@npm:^2.1.4":
|
"expand-brackets@npm:^2.1.4":
|
||||||
version: 2.1.4
|
version: 2.1.4
|
||||||
resolution: "expand-brackets@npm:2.1.4"
|
resolution: "expand-brackets@npm:2.1.4"
|
||||||
|
@ -2627,7 +2636,7 @@ __metadata:
|
||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"pretty-hrtime@npm:^1.0.0":
|
"pretty-hrtime@npm:^1.0.0, pretty-hrtime@npm:^1.0.3":
|
||||||
version: 1.0.3
|
version: 1.0.3
|
||||||
resolution: "pretty-hrtime@npm:1.0.3"
|
resolution: "pretty-hrtime@npm:1.0.3"
|
||||||
checksum: bae0e6832fe13c3de43d1a3d43df52bf6090499d74dc65a17f5552cb1a94f1f8019a23284ddf988c3c408a09678d743901e1d8f5b7a71bec31eeeac445bef371
|
checksum: bae0e6832fe13c3de43d1a3d43df52bf6090499d74dc65a17f5552cb1a94f1f8019a23284ddf988c3c408a09678d743901e1d8f5b7a71bec31eeeac445bef371
|
||||||
|
@ -2647,6 +2656,7 @@ __metadata:
|
||||||
dependencies:
|
dependencies:
|
||||||
"@types/node": ^16.11.6
|
"@types/node": ^16.11.6
|
||||||
chalk: ^4.1.2
|
chalk: ^4.1.2
|
||||||
|
execution-time: ^1.4.1
|
||||||
gulp: ^4.0.2
|
gulp: ^4.0.2
|
||||||
gulp-cli: ^2.3.0
|
gulp-cli: ^2.3.0
|
||||||
gulp-rename: ^2.0.0
|
gulp-rename: ^2.0.0
|
||||||
|
|
Loading…
Reference in a new issue