Begin the euler project
This commit is contained in:
parent
a1ea242d23
commit
693642ec36
17 changed files with 4714 additions and 0 deletions
9
.prettierrc
Normal file
9
.prettierrc
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"semi": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"singleQuote": true,
|
||||||
|
"printWidth": 100,
|
||||||
|
"tabWidth": 4,
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"arrowParens": "avoid"
|
||||||
|
}
|
4
euler/.gitignore
vendored
Normal file
4
euler/.gitignore
vendored
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
node_modules
|
||||||
|
.yarn/cache
|
||||||
|
.yarn/install-state.gz
|
||||||
|
build
|
768
euler/.yarn/releases/yarn-3.1.0.cjs
vendored
Normal file
768
euler/.yarn/releases/yarn-3.1.0.cjs
vendored
Normal file
File diff suppressed because one or more lines are too long
2
euler/.yarnrc.yml
Normal file
2
euler/.yarnrc.yml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
yarnPath: .yarn/releases/yarn-3.1.0.cjs
|
||||||
|
nodeLinker: node-modules
|
16
euler/_pythonarchive/1 - Multiples of 3 or 5.py
Normal file
16
euler/_pythonarchive/1 - Multiples of 3 or 5.py
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
below = 1000
|
||||||
|
multiplesOf = [3,5]
|
||||||
|
toAdd = []
|
||||||
|
|
||||||
|
for i in range(1, below):
|
||||||
|
for num in multiplesOf:
|
||||||
|
if i % num == 0:
|
||||||
|
toAdd.append(i)
|
||||||
|
|
||||||
|
toAdd = list(dict.fromkeys(toAdd))
|
||||||
|
total = 0
|
||||||
|
|
||||||
|
for i in toAdd:
|
||||||
|
total += i
|
||||||
|
|
||||||
|
print(total)
|
13
euler/_pythonarchive/2 - Even Fibonacci numbers.py
Normal file
13
euler/_pythonarchive/2 - Even Fibonacci numbers.py
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
sequence = [1, 2]
|
||||||
|
|
||||||
|
while sequence[len(sequence) - 1] < 4000000:
|
||||||
|
sequence.append(sequence[len(sequence) - 1] + sequence[len(sequence) - 2])
|
||||||
|
sequence.pop()
|
||||||
|
|
||||||
|
total = 0
|
||||||
|
|
||||||
|
for i in sequence:
|
||||||
|
if i % 2 == 0:
|
||||||
|
total += i
|
||||||
|
|
||||||
|
print(total)
|
10
euler/_pythonarchive/3 - Largest prime factor.py
Normal file
10
euler/_pythonarchive/3 - Largest prime factor.py
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
n = 600851475143
|
||||||
|
i = 2
|
||||||
|
|
||||||
|
while i * i <= n:
|
||||||
|
if n % i:
|
||||||
|
i += 1
|
||||||
|
else:
|
||||||
|
n //= i
|
||||||
|
|
||||||
|
print(n)
|
20
euler/gulpfile.js
Normal file
20
euler/gulpfile.js
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
const gulp = require('gulp');
|
||||||
|
const typescript = require('gulp-typescript');
|
||||||
|
const uglify = require('gulp-uglify');
|
||||||
|
const rename = require('gulp-rename');
|
||||||
|
|
||||||
|
gulp.task('build', () => {
|
||||||
|
const tsc = typescript.createProject('tsconfig.json');
|
||||||
|
|
||||||
|
return gulp
|
||||||
|
.src('src/**/*.ts')
|
||||||
|
.pipe(tsc())
|
||||||
|
.pipe(uglify({ mangle: { toplevel: true } }))
|
||||||
|
.pipe(
|
||||||
|
rename(path => {
|
||||||
|
if (path.basename === 'utils') return;
|
||||||
|
path.basename = path.basename.substr(0, 1);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.pipe(gulp.dest('build'));
|
||||||
|
});
|
18
euler/package.json
Normal file
18
euler/package.json
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
{
|
||||||
|
"name": "project-euler",
|
||||||
|
"packageManager": "yarn@3.1.0",
|
||||||
|
"scripts": {
|
||||||
|
"build": "gulp build",
|
||||||
|
"start": "node run"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/node": "^16.11.6",
|
||||||
|
"chalk": "^4.1.2",
|
||||||
|
"gulp": "^4.0.2",
|
||||||
|
"gulp-cli": "^2.3.0",
|
||||||
|
"gulp-rename": "^2.0.0",
|
||||||
|
"gulp-typescript": "^6.0.0-alpha.1",
|
||||||
|
"gulp-uglify": "^3.0.2",
|
||||||
|
"typescript": "^4.4.4"
|
||||||
|
}
|
||||||
|
}
|
50
euler/run.js
Normal file
50
euler/run.js
Normal file
|
@ -0,0 +1,50 @@
|
||||||
|
const fs = require('fs');
|
||||||
|
const chalk = require('chalk');
|
||||||
|
const { spawnSync } = require('child_process');
|
||||||
|
|
||||||
|
const run = (file, puzzleName) => {
|
||||||
|
// Calculate the length of the divider for the puzzle
|
||||||
|
let divider = '--';
|
||||||
|
|
||||||
|
for (let j = 0; j < puzzleName.length; j++) {
|
||||||
|
divider += '-';
|
||||||
|
}
|
||||||
|
|
||||||
|
// Log output
|
||||||
|
console.log(divider);
|
||||||
|
console.log(chalk.bold(chalk.greenBright(puzzleName)));
|
||||||
|
console.log(divider);
|
||||||
|
|
||||||
|
spawnSync('node', [`build/${file}`], { shell: true, stdio: 'inherit' });
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get files
|
||||||
|
const tsFiles = fs
|
||||||
|
.readdirSync('src')
|
||||||
|
.filter(f => f.endsWith('.ts'))
|
||||||
|
.filter(f => f !== 'utils.ts');
|
||||||
|
const jsFiles = fs
|
||||||
|
.readdirSync('build')
|
||||||
|
.filter(f => f.endsWith('.js'))
|
||||||
|
.filter(f => f !== 'utils.js');
|
||||||
|
|
||||||
|
try {
|
||||||
|
// Extract the puzzle number
|
||||||
|
const puzzleNumber = process.argv[2];
|
||||||
|
if (isNaN(puzzleNumber)) throw Error();
|
||||||
|
|
||||||
|
// Find the associated puzzle
|
||||||
|
const tsFile = tsFiles.filter(f => f.startsWith(puzzleNumber))[0];
|
||||||
|
const puzzleName = tsFile.split('.ts')[0];
|
||||||
|
|
||||||
|
run(`${puzzleNumber}.js`, puzzleName);
|
||||||
|
} catch (error) {
|
||||||
|
for (let i = 0; i < jsFiles.length; i++) {
|
||||||
|
const file = jsFiles[i];
|
||||||
|
const tsFile = tsFiles[i];
|
||||||
|
const puzzleName = tsFile.split('.ts')[0];
|
||||||
|
|
||||||
|
run(file, puzzleName);
|
||||||
|
console.log();
|
||||||
|
}
|
||||||
|
}
|
12
euler/src/1 - Multiples of 3 or 5.ts
Normal file
12
euler/src/1 - Multiples of 3 or 5.ts
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
import { calcSum } from './utils';
|
||||||
|
|
||||||
|
const below = 1000;
|
||||||
|
const multiplesOf = [3, 5];
|
||||||
|
const toAdd: Set<number> = new Set();
|
||||||
|
|
||||||
|
// Find all of the multiples of 3 and 5 below 1000
|
||||||
|
for (let i = 1; i < below; i++) {
|
||||||
|
multiplesOf.forEach(num => (i % num == 0 ? toAdd.add(i) : null));
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(calcSum(Array.from(toAdd)));
|
15
euler/src/2 - Even Fibonacci Numbers.ts
Normal file
15
euler/src/2 - Even Fibonacci Numbers.ts
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
import { calcSum } from './utils';
|
||||||
|
|
||||||
|
const sequence = [1, 2];
|
||||||
|
const max = 4000000;
|
||||||
|
|
||||||
|
// Keep making new nujm
|
||||||
|
while (sequence[sequence.length - 1] < max) {
|
||||||
|
const newValue = sequence[sequence.length - 1] + sequence[sequence.length - 2];
|
||||||
|
|
||||||
|
sequence.push(newValue);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter out the even numbers and find the sum
|
||||||
|
const even = sequence.filter(n => n % 2 === 0);
|
||||||
|
console.log(calcSum(even));
|
9
euler/src/3 - Largest Prime Factor.ts
Normal file
9
euler/src/3 - Largest Prime Factor.ts
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
let number = 600851475143;
|
||||||
|
let i = 2;
|
||||||
|
|
||||||
|
while (i * i <= number) {
|
||||||
|
if (number % i) i += 1;
|
||||||
|
else number = Math.floor(number / i);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(number);
|
22
euler/src/4 - Largest Palindrome Number.ts
Normal file
22
euler/src/4 - Largest Palindrome Number.ts
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
const biggest = 999;
|
||||||
|
const smallest = 100;
|
||||||
|
|
||||||
|
// Work out all of the products of 3 digit numbers
|
||||||
|
const products: number[] = [];
|
||||||
|
|
||||||
|
for (let i = smallest; i < biggest + 1; i++) {
|
||||||
|
for (let j = smallest; j < biggest + 1; j++) {
|
||||||
|
products.push(i * j);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Filter for palindromic numbers
|
||||||
|
const palindromic = products.filter(
|
||||||
|
x => x.toString() === x.toString().split('').reverse().join('')
|
||||||
|
);
|
||||||
|
|
||||||
|
// Find the biggest palindrome number
|
||||||
|
const sorted = palindromic.sort((a, b) => b - a);
|
||||||
|
const largest = sorted[0];
|
||||||
|
|
||||||
|
console.log(largest);
|
4
euler/src/utils.ts
Normal file
4
euler/src/utils.ts
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
/**
|
||||||
|
* Calculates the sum of an array of numbers.
|
||||||
|
*/
|
||||||
|
export const calcSum = (numbers: number[]) => numbers.reduce((a, b) => a + b);
|
9
euler/tsconfig.json
Normal file
9
euler/tsconfig.json
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"compilerOptions": {
|
||||||
|
"target": "es5",
|
||||||
|
"module": "commonjs",
|
||||||
|
"outDir": "build"
|
||||||
|
},
|
||||||
|
"include": ["src/**/*.ts"],
|
||||||
|
"exclude": ["node_modules"]
|
||||||
|
}
|
3733
euler/yarn.lock
Normal file
3733
euler/yarn.lock
Normal file
File diff suppressed because it is too large
Load diff
Loading…
Reference in a new issue