mirror of
https://bitbucket.org/Mattrixwv/projecteulerts.git
synced 2025-12-06 17:43:59 -05:00
Updated to use new library layout
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-18-20
|
||||
//Modified: 10-18-20
|
||||
//Modified: 07-14-21
|
||||
//What is the sum of all the multiples of 3 or 5 that are less than 1000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -21,6 +21,7 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
|
||||
import { Stopwatch } from "../../../Typescript/typescriptClasses/Stopwatch";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
@@ -36,24 +37,26 @@ export abstract class Problem{
|
||||
this.description = description;
|
||||
this.solved = false;
|
||||
}
|
||||
//Make sure the problem has been solved and throw an exception if not
|
||||
protected solvedCheck(str: string): void{
|
||||
if(!this.solved){
|
||||
throw new Unsolved("You must solve the problem before you can see the " + str);
|
||||
}
|
||||
}
|
||||
//Gets
|
||||
getDescription(): string{
|
||||
public getDescription(): string{
|
||||
return this.description;
|
||||
}
|
||||
//Returns the result of solving the problem
|
||||
public abstract getResult(): string;
|
||||
//Returns the time taken to run the problem as a string
|
||||
public getTime(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("time it took to run the algorithm");
|
||||
return this.timer.getStr();
|
||||
}
|
||||
//Returns the timer as a stopwatch
|
||||
public getTimer(): Stopwatch{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("timer");
|
||||
return this.timer;
|
||||
}
|
||||
//Solve the problem
|
||||
@@ -63,4 +66,4 @@ export abstract class Problem{
|
||||
this.timer.reset();
|
||||
this.solved = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem1.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-18-20
|
||||
//Modified: 10-26-20
|
||||
//Modified: 07-14-21
|
||||
//What is the sum of all the multiples of 3 or 5 that are less than 1000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -25,6 +25,7 @@
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import {Problem} from "./Problem";
|
||||
|
||||
|
||||
export class Problem1 extends Problem{
|
||||
//Variables
|
||||
//Static variables
|
||||
@@ -48,9 +49,11 @@ export class Problem1 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get the sum of the progressions of 3 and 5 and remove the sum of progressions of the overlap
|
||||
this.fullSum = this.sumOfProgression(3) + this.sumOfProgression(5) - this.sumOfProgression(3 * 5);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -71,20 +74,17 @@ export class Problem1 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all numbers < ${Problem1.TOP_NUM + 1} is ${this.fullSum}`;
|
||||
}
|
||||
//Returns the requested sum
|
||||
public getSum(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.fullSum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all numbers < 1000 is 233168
|
||||
It took an average of 1.921 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem10.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-24-21
|
||||
//Modified: 03-24-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all the primes below two million
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -23,8 +23,8 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getPrimes, getSum } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { getPrimes } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
|
||||
|
||||
export class Problem10 extends Problem{
|
||||
@@ -51,9 +51,11 @@ export class Problem10 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get the sum of all prime numbers < GOAL_NUMBER
|
||||
this.sum = getSum(getPrimes(Problem10.GOAL_NUMBER));
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -68,22 +70,17 @@ export class Problem10 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all the primes < ${Problem10.GOAL_NUMBER + 1} is ${this.sum}`;
|
||||
}
|
||||
//Returns the sum that was requested
|
||||
public getSum(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all the primes < 2000000 is 142913828922
|
||||
It took an average of 170.840 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem11.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-24-21
|
||||
//Modified: 03-24-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all the primes below two million
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getProd } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { getProd } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
|
||||
|
||||
export class Problem11 extends Problem{
|
||||
@@ -80,6 +79,7 @@ export class Problem11 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Loop through every row and column
|
||||
for(let row = 0;row < Problem11.grid.length;++row){
|
||||
for(let col = 0;col < Problem11.grid[row].length;++col){
|
||||
@@ -155,6 +155,7 @@ export class Problem11 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -169,30 +170,22 @@ export class Problem11 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The greatest product of 4 numbers in a line is ${getProd(this.greatestProduct)}\nThe numbers are ${this.greatestProduct}`;
|
||||
}
|
||||
//Returns the numbers that were being searched
|
||||
public getNumbers(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("numbers");
|
||||
return this.greatestProduct;
|
||||
}
|
||||
//Returns teh product that was requested
|
||||
public getProduct(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("product of the numbers");
|
||||
return getProd(this.greatestProduct);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The greatest product of 4 numbers in a line is 70600674
|
||||
The numbers are 89,94,97,87
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem12.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-26-21
|
||||
//Modified: 03-26-21
|
||||
//Modified: 07-14-21
|
||||
//What is the value of the first triangle number to have over five hundred divisors?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getDivisors } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { getDivisors } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
|
||||
|
||||
export class Problem12 extends Problem{
|
||||
@@ -58,6 +57,7 @@ export class Problem12 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Loop until you find the appropriate number
|
||||
while((!foundNumber) && (this.sum > 0)){
|
||||
this.divisors = getDivisors(this.sum);
|
||||
@@ -72,6 +72,7 @@ export class Problem12 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -88,46 +89,32 @@ export class Problem12 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't bee solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The triangular number ${this.sum} is the sum of all numbers >= ${this.counter - 1} and has ${this.divisors.length} divisors`;
|
||||
}
|
||||
//Returns the triangular number
|
||||
public getTriangularNumber(): number{
|
||||
//If the problem hasn't bee solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("triangular number");
|
||||
return this.sum;
|
||||
}
|
||||
//Get the final number that was added to the triangular number
|
||||
public getLastNumberAdded(): number{
|
||||
//If the problem hasn't bee solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("last number added to get the triangular number");
|
||||
return this.counter - 1;
|
||||
}
|
||||
//Returns the list of divisors of the requested number
|
||||
public getDivisorsOfTriangularNumber(): number[]{
|
||||
//If the problem hasn't bee solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("divisors of the triangular number");
|
||||
return this.divisors;
|
||||
}
|
||||
//Returns the number of divisors of the requested number
|
||||
public getNumberOfDivisors(): number{
|
||||
//If the problem hasn't bee solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number of divisors of the triangular number");
|
||||
return this.divisors.length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results
|
||||
The triangular number 76576500 is the sum of all numbers >= 12375 and has 576 divisors
|
||||
It took an average of 301.951 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem13.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-26-21
|
||||
//Modified: 03-26-21
|
||||
//Modified: 07-14-21
|
||||
//Work out the first ten digits of the sum of the following one-hundred 50-digit numbers
|
||||
/*
|
||||
37107287533902102798797998220837590246510135740250
|
||||
@@ -125,8 +125,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getSumBig } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { getSumBig } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
|
||||
|
||||
export class Problem13 extends Problem{
|
||||
@@ -252,9 +251,11 @@ export class Problem13 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get the sum of all the numbers
|
||||
this.sum = getSumBig(Problem13.nums);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -269,30 +270,22 @@ export class Problem13 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all ${Problem13.nums.length} numbers is ${this.sum}\nThe first 10 digits of the sum of the numbers is ${this.sum.toString().substr(0, 10)}`;
|
||||
}
|
||||
//Returns the list of 50-digit numbers
|
||||
public getNumbers(): bigint[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("numbers");
|
||||
return Problem13.nums;
|
||||
}
|
||||
//Returns the sum of the 50-digit numbers
|
||||
public getSum(): bigint{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all 100 numbers is 5537376230390876637302048746832985971773659831892672
|
||||
The first 10 digits of the sum of the numbers is 5537376230
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem14.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-26-21
|
||||
//Modified: 03-26-21
|
||||
//Modified: 07-14-21
|
||||
/*
|
||||
The following iterative sequence is defined for the set of positive integers:
|
||||
n → n/2 (n is even)
|
||||
@@ -27,7 +27,6 @@ Which starting number, under one million, produces the longest chain?
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -57,6 +56,7 @@ export class Problem14 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Loop through all numbers <= MAX_NUM and check them against the series
|
||||
for(let currentNum = 1;currentNum <= Problem14.MAX_NUM;++currentNum){
|
||||
let currentLength: number = this.checkSeries(currentNum);
|
||||
@@ -67,6 +67,7 @@ export class Problem14 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -99,30 +100,22 @@ export class Problem14 extends Problem{
|
||||
}
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The number ${this.maxNum} produced a chain of ${this.maxLength} steps`;
|
||||
}
|
||||
//Returns the length of the requested chain
|
||||
public getLength(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("length of the longest chain");
|
||||
return this.maxLength;
|
||||
}
|
||||
//Returns the starting number of the requested chain
|
||||
public getStartingNumber(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("starting number of the longest chain");
|
||||
return this.maxNum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The number 837799 produced a chain of 525 steps
|
||||
It took an average of 1.178 seconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem15.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-29-21
|
||||
//Modified: 03-29-21
|
||||
//Modified: 07-14-21
|
||||
//How many routes from the top left corner to the bottom right corner are there through a 20×20 grid if you can only move right and down?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -51,10 +50,12 @@ export class Problem15 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//We write this as a recursive function
|
||||
//When in a location it always move right first, then down
|
||||
this.move(0, 0);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -88,20 +89,17 @@ export class Problem15 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The number of routes is ${this.numOfRoutes}`;
|
||||
}
|
||||
//Returns the number of routes found
|
||||
public getNumberOfRoutes(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number of routes");
|
||||
return this.numOfRoutes;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The number of routes is 137846528820
|
||||
It took 37.058 minutes to solve this problem.
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem16.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-29-21
|
||||
//Modified: 03-29-21
|
||||
//Modified: 07-14-21
|
||||
//What is the sum of the digits of the number 2^1000?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -53,6 +52,7 @@ export class Problem16 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get the number
|
||||
this.num = Problem16.NUM_TO_POWER ** Problem16.POWER;
|
||||
|
||||
@@ -64,6 +64,7 @@ export class Problem16 extends Problem{
|
||||
this.sumOfElements += parseInt(numString.charAt(cnt));
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -79,27 +80,22 @@ export class Problem16 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `${Problem16.NUM_TO_POWER}^${Problem16.POWER} = ${this.num}\nThe sum of the elements is ${this.sumOfElements}`;
|
||||
}
|
||||
//Returns the number that was calculated
|
||||
public getNumber(): bigint{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number");
|
||||
return this.num;
|
||||
}
|
||||
//Returns the sum o the digits of the number
|
||||
public getSum(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sumOfElements;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
2^1000 = 10715086071862673209484250490600018105614048117055336074437503883703510511249361224931983788156958581275946729175531468251871452856923140435984577574698574803934567774824230985421074605062371141877954182153046474983581941267398767559165543946077062914571196477686542167660429831652624386837205668069376
|
||||
The sum of the elements is 1366
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem17.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-29-21
|
||||
//Modified: 03-29-21
|
||||
//Modified: 07-14-21
|
||||
//If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -51,6 +51,7 @@ export class Problem17 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with 1 and increment
|
||||
for(let num: number = Problem17.START_NUM;num <= Problem17.STOP_NUM;++num){
|
||||
//Pass the number to a function that will create a string for the number
|
||||
@@ -59,6 +60,7 @@ export class Problem17 extends Problem{
|
||||
this.letterCount += this.getNumberChars(currentNumString);
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -185,20 +187,17 @@ export class Problem17 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all the letters in all the numbers ${Problem17.START_NUM}-${Problem17.STOP_NUM} is ${this.letterCount}`;
|
||||
}
|
||||
//Returns the number of letters asked for
|
||||
public getLetterCount(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("letter count");
|
||||
return this.letterCount;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all the letters in all the numbers 1-1000 is 21124
|
||||
It took an average of 485.744 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem18.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-05-21
|
||||
//Modified: 04-05-21
|
||||
//Modified: 07-14-21
|
||||
//Find the maximum total from top to bottom
|
||||
/*
|
||||
75
|
||||
@@ -40,7 +40,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -103,6 +102,7 @@ export class Problem18 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Invert the list
|
||||
this.invert(workingList);
|
||||
|
||||
@@ -154,6 +154,7 @@ export class Problem18 extends Problem{
|
||||
//Get the correct total which wil be the inversion of the current one
|
||||
this.actualTotal = ((100 * workingList.length) - this.foundPoints[this.foundPoints.length - 1].total);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -170,25 +171,23 @@ export class Problem18 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The value of the longest path is ${this.actualTotal}`;
|
||||
}
|
||||
//Returns the pyramid that was traversed as a string
|
||||
public getPyramid(): string{
|
||||
this.solvedCheck("pyramid of numbers");
|
||||
return Problem18.list.toString();
|
||||
}
|
||||
//Returns the trail the algorithm took as a string
|
||||
public getTrail(): string{
|
||||
this.solvedCheck("trail of the shortest path");
|
||||
//TODO:
|
||||
return "";
|
||||
}
|
||||
//Returns the total that was asked for
|
||||
public getTotal(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("total");
|
||||
return this.actualTotal;
|
||||
}
|
||||
}
|
||||
@@ -208,6 +207,7 @@ class location{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The value of the longest path is 1074
|
||||
It took an average of 134.407 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem18.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-06-21
|
||||
//Modified: 04-06-21
|
||||
//Modified: 07-14-21
|
||||
//How many Sundays fell on the first of the month during the twentieth century (1 Jan 1901 to 31 Dec 2000)?
|
||||
/*
|
||||
You are given the following information, but you may prefer to do some research for yourself.
|
||||
@@ -33,7 +33,6 @@ A leap year occurs on any year evenly divisible by 4, but not on a century unles
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -66,6 +65,7 @@ export class Problem19 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Run for all years 1901-2000
|
||||
for(let year = Problem19.START_YEAR;year <= Problem19.END_YEAR;++year){
|
||||
//Run for all months in the year
|
||||
@@ -80,6 +80,7 @@ export class Problem19 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -194,20 +195,17 @@ export class Problem19 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `There are ${this.totalSundays} Sundays that landed on the first of the months from ${Problem19.START_YEAR} to ${Problem19.END_YEAR}`;
|
||||
}
|
||||
//Returns the total sundays that were asked for
|
||||
public getTotalSundays(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("total number of sundays");
|
||||
return this.totalSundays;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
There are 171 Sundays that landed on the first of the months from 1901 to 2000
|
||||
It took an average of 4.314 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem2.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-19-20
|
||||
//Modified: 10-19-20
|
||||
//Modified: 07-14-21
|
||||
//The sum of the even Fibonacci numbers less than 4,000,000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { getAllFib } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getAllFib } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
|
||||
|
||||
export class Problem2 extends Problem{
|
||||
@@ -51,6 +50,7 @@ export class Problem2 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get a list of all fibonacci numbers <= TOP_NUM
|
||||
let fibNums = getAllFib(Problem2.TOP_NUM);
|
||||
//Setp through every element in the list checking ifit is even
|
||||
@@ -61,6 +61,7 @@ export class Problem2 extends Problem{
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -75,20 +76,17 @@ export class Problem2 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all even fibonacci numbers <= ${Problem2.TOP_NUM} is ${this.fullSum}`;
|
||||
}
|
||||
//Returns the requested sum
|
||||
public getSum(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.fullSum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all even fibonacci numbers <= 3999999 is 4613732
|
||||
It took an average of 6.330 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem20.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-07-21
|
||||
//Modified: 04-07-21
|
||||
//Modified: 07-14-21
|
||||
//What is the sum of the digits of 100!?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -52,6 +51,7 @@ export class Problem20 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Run through every number from 1 to 100 and multiply it by the current num to generate 100!
|
||||
for(let cnt = Problem20.TOP_NUM;cnt > 1;--cnt){
|
||||
this.num *= BigInt(cnt);
|
||||
@@ -65,6 +65,7 @@ export class Problem20 extends Problem{
|
||||
this.sum += parseInt(digit);
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -80,37 +81,27 @@ export class Problem20 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `${Problem20.TOP_NUM}! = ${this.num}\nThe sum of the digits is: ${this.sum}`;
|
||||
}
|
||||
//Returns the number 100!
|
||||
public getNumber(): bigint{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number");
|
||||
return this.num;
|
||||
}
|
||||
//Returns the number 100! in a string
|
||||
public getNumberString(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number as a string");
|
||||
return this.num.toString();
|
||||
}
|
||||
//Returns the sum of the digits of 100!
|
||||
public getSum(): number{
|
||||
//If the porblem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of the digits");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
100! = 93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
|
||||
The sum of the digits is: 648
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem21.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-08-21
|
||||
//Modified: 04-08-21
|
||||
//Modified: 07-14-21
|
||||
//Evaluate the sum of all the amicable numbers under 10000
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,8 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getDivisors, getSum } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { getDivisors } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -62,6 +62,7 @@ export class Problem21 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Generate the divisors of all numbers < 10000, get their sum, and add it to the list
|
||||
for(let cnt = 1;cnt < Problem21.LIMIT;++cnt){
|
||||
let divisors: number[] = getDivisors(cnt); //Get all the divisors of a number
|
||||
@@ -91,6 +92,7 @@ export class Problem21 extends Problem{
|
||||
//Sort the array for neatness
|
||||
this.amicable.sort((n1, n2) => n1 - n2);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -107,9 +109,7 @@ export class Problem21 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
let result: string = `All amicable numbers less than ${Problem21.LIMIT} are\n`;
|
||||
for(let cnt = 0;cnt < this.amicable.length;++cnt){
|
||||
result += `${this.amicable[cnt]}\n`;
|
||||
@@ -120,22 +120,17 @@ export class Problem21 extends Problem{
|
||||
}
|
||||
//Returns a vector with all of the amicable numbers calculated
|
||||
public getAmicable(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("amicable numbers");
|
||||
return this.amicable;
|
||||
}
|
||||
//Returns the sum of all of the amicable numbers
|
||||
public getSum(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of the amicable numbers");
|
||||
return getSum(this.amicable);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all of these amicable numbers is 31626
|
||||
It took an average of 7.454 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem22.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-08-21
|
||||
//Modified: 04-08-21
|
||||
//Modified: 07-14-21
|
||||
//What is the total of all the name scores in this file?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -21,8 +21,8 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -422,6 +422,7 @@ export class Problem22 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Sort all the names
|
||||
Problem22.names.sort();
|
||||
//Step through every name adding up the values of the characters
|
||||
@@ -440,6 +441,7 @@ export class Problem22 extends Problem{
|
||||
//Get the sum of all the numbers
|
||||
this.sum = getSum(this.prod);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -456,9 +458,7 @@ export class Problem22 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The answer to the question is ${this.sum}`;
|
||||
}
|
||||
//Returns the vector of the names being scored
|
||||
@@ -467,13 +467,12 @@ export class Problem22 extends Problem{
|
||||
}
|
||||
//Returns the sum of the names scores
|
||||
public getNameScoreSum(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("score of the names");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The answer to the question is 871198282
|
||||
It took an average of 473.266 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem23.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-08-21
|
||||
//Modified: 04-08-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all the positive integers which cannot be written as the sum of two abundant numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,8 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getDivisors, getSum } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { getDivisors } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -122,20 +122,17 @@ export class Problem23 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The answer is ${this.sum}`;
|
||||
}
|
||||
//Returns the sum of the numbers asked for
|
||||
public getSum(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The answer is 4179871
|
||||
It took an average of 7.798 seconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem24.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-08-21
|
||||
//Modified: 04-08-21
|
||||
//Modified: 07-14-21
|
||||
//What is the millionth lexicographic permutation of the digits 0, 1, 2, 3, 4, 5, 6, 7, 8 and 9?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getPermutations } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getPermutations } from "../../../Typescript/typescriptClasses/StringAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -52,9 +51,11 @@ export class Problem24 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get all the permutations of the string
|
||||
this.permutations = getPermutations(Problem24.nums);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -69,28 +70,22 @@ export class Problem24 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The 1 millionth permutation is ${this.permutations[Problem24.NEEDED_PERM - 1]}`;
|
||||
}
|
||||
//Returns an array with all of the permutations
|
||||
public getPermutationsList(): string[]{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("permutations");
|
||||
return this.permutations;
|
||||
}
|
||||
//Returns the requested permutation
|
||||
public getPermutation(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("1,000,000th permutation");
|
||||
return this.permutations[Problem24.NEEDED_PERM - 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The 1 millionth permutation is 2783915460
|
||||
It took an average of 1.946 seconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem25.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-08-21
|
||||
//Modified: 04-08-21
|
||||
//Modified: 07-14-21
|
||||
//What is the index of the first term in the Fibonacci sequence to contain 1000 digits?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getFibBig } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getFibBig } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -53,12 +52,14 @@ export class Problem25 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Move through all Fibonacci numbers until you reach the one with at least NUM_DIGITS digits
|
||||
while(this.number.toString().length < Problem25.NUM_DIGITS){
|
||||
this.index += 1n; //Increase the index number. Doing this at the beginning keeps the index correct at the end of the loop
|
||||
this.number = getFibBig(this.index); //Calculate the number
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -74,48 +75,37 @@ export class Problem25 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The first Fibonacci number with ${Problem25.NUM_DIGITS} digits is ${this.number}\nIts index is ${this.index}`;
|
||||
}
|
||||
//Returns the Fibonacci number asked for
|
||||
public getNumber(): bigint{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("fibonacci number");
|
||||
return this.number;
|
||||
}
|
||||
//Returns the Fibonacci number asked for as a string
|
||||
public getNumberString(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("fibonacci number as a string");
|
||||
return this.number.toString();
|
||||
}
|
||||
//Returns the index of the requested Fibonacci number
|
||||
public getIndex(): bigint{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("index of the fibonacci number");
|
||||
return this.index;
|
||||
}
|
||||
//Returns the index of the requested Fibonacci number as a string
|
||||
public getIndexString(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("index of the fibonacci number as a string");
|
||||
return this.index.toString();
|
||||
}
|
||||
//Returns the index of the requested Fibonacci number as a number
|
||||
public getIndexInt(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("index of the fibonacci number as an int");
|
||||
return Number(this.index);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The first Fibonacci number with 1000 digits is 1070066266382758936764980584457396885083683896632151665013235203375314520604694040621889147582489792657804694888177591957484336466672569959512996030461262748092482186144069433051234774442750273781753087579391666192149259186759553966422837148943113074699503439547001985432609723067290192870526447243726117715821825548491120525013201478612965931381792235559657452039506137551467837543229119602129934048260706175397706847068202895486902666185435124521900369480641357447470911707619766945691070098024393439617474103736912503231365532164773697023167755051595173518460579954919410967778373229665796581646513903488154256310184224190259846088000110186255550245493937113651657039447629584714548523425950428582425306083544435428212611008992863795048006894330309773217834864543113205765659868456288616808718693835297350643986297640660000723562917905207051164077614812491885830945940566688339109350944456576357666151619317753792891661581327159616877487983821820492520348473874384736771934512787029218636250627816
|
||||
Its index is 4782
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem26.ts
|
||||
//Matthew Ellison
|
||||
// Created: 04-18-21
|
||||
//Modified: 04-18-21
|
||||
//Modified: 07-14-21
|
||||
//Find the value of d < 1000 for which 1/d contains the longest recurring cycle in its decimal fraction part.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -52,6 +51,7 @@ export class Problem26 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with 1/2 and find out how long the logest cycle is by checking the reainders
|
||||
//Loop through every number from 2-999 and use it for the denominator
|
||||
for(let denominator: number = 2;denominator <= Problem26.TOP_NUM;++denominator){
|
||||
@@ -88,6 +88,7 @@ export class Problem26 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -103,27 +104,22 @@ export class Problem26 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The longest cycle is ${this.longestCycle} digits long\nIt started with the number ${this.longestNumber}`;
|
||||
}
|
||||
//Returns the length of the longest cycle
|
||||
public getLongestCycle(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("length of the longest cycle");
|
||||
return this.longestCycle;
|
||||
}
|
||||
//Returns the denominator that start the longest cycle
|
||||
public getLongestNumber(){
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("denominator that starts the longest cycle");
|
||||
return this.longestNumber;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The longest cycle is 982 digits long
|
||||
It started with the number 983
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem26.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-24-21
|
||||
//Modified: 05-24-21
|
||||
//Modified: 07-14-21
|
||||
//Find the product of the coefficients, |a| < 1000 and |b| <= 1000, for the quadratic expression that produces the maximum number of primes for consecutive values of n, starting with n=0.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { isPrime } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { isPrime } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -56,6 +55,7 @@ export class Problem27 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with the lowest possible A and check all possibilities after that
|
||||
for(let a: number = -Problem27.LARGEST_POSSIBLE_A; a <= Problem27.LARGEST_POSSIBLE_A;++a){
|
||||
//Start witht he lowest possible B and check all possibilities after that
|
||||
@@ -78,6 +78,7 @@ export class Problem27 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -94,45 +95,32 @@ export class Problem27 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The greatest number of primes found is ${this.topN}\nIt was found with A = ${this.topA}, B = ${this.topB}\nThe product of A and B is ${this.getProduct()}`;
|
||||
}
|
||||
//Returns the top A that was generated
|
||||
public getTopA(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("largest A");
|
||||
return this.topA;
|
||||
}
|
||||
//Returns the top B that was generated
|
||||
public getTopB(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("largest B");
|
||||
return this.topB;
|
||||
}
|
||||
//Returns the top N that was generated
|
||||
public getTopN(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("largest N");
|
||||
return this.topN;
|
||||
}
|
||||
//Returns the product of A and B for the answer
|
||||
public getProduct(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("product of A and B");
|
||||
return this.topA * this.topB;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The greatest number of primes found is 70
|
||||
It was found with A = -61, B = 971
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem28.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-26-21
|
||||
//Modified: 05-26-21
|
||||
//Modified: 07-14-21
|
||||
//What is the sum of the numbers on the diagonals in a 1001 by 1001 spiral formed by starting with the number 1 and moving to the right in a clockwise direction a 5 by 5 spiral
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -122,11 +121,13 @@ export class Problem28 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Setup the grid
|
||||
this.setupGrid();
|
||||
//FInd the sum of the diagonals in the grid
|
||||
this.findSum();
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -141,29 +142,22 @@ export class Problem28 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of the diagonals in the given grid is ${this.sumOfDiagonals}`;
|
||||
}
|
||||
//Returns the grid
|
||||
public getGrid(): number[][]{
|
||||
//IF the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("grid");
|
||||
return Problem28.grid;
|
||||
}
|
||||
//Returns the sum of the diagonals
|
||||
public getSum(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sumOfDiagonals;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of the diagonals in the given grid is 669171001
|
||||
It took an average of 16.924 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem29.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
//How many distinct terms are in the sequence generated by a^b for 2 <= a <= 100 and 2 <= b <= 100?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -53,6 +52,7 @@ export class Problem29 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start witht he first A and move towards the top
|
||||
for(let currentA = Problem29.BOTTOM_A;currentA <= Problem29.TOP_A;++currentA){
|
||||
//Start with the first B and move towards the top
|
||||
@@ -66,6 +66,7 @@ export class Problem29 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -80,9 +81,7 @@ export class Problem29 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The number of unique values generated by a^b for ${Problem29.BOTTOM_A} <= a <= ${Problem29.TOP_A} and ${Problem29.BOTTOM_B} <= b <= ${Problem29.TOP_B} is ${this.unique.length}`;
|
||||
}
|
||||
//Returns the lowest possible value for a
|
||||
@@ -103,14 +102,17 @@ export class Problem29 extends Problem{
|
||||
}
|
||||
//Returns a list of all the unique values for a^b
|
||||
public getUnique(): bigint[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("unique values for a^b");
|
||||
return this.unique;
|
||||
}
|
||||
//Returns the number of unique values for a^b
|
||||
public getNumUnique(): number{
|
||||
this.solvedCheck("number of unique values for a^b");
|
||||
return this.unique.length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The number of unique values generated by a^b for 2 <= a <= 100 and 2 <= b <= 100 is 9183
|
||||
It took an average of 349.571 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem3.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-19-20
|
||||
//Modified: 10-19-20
|
||||
//Modified: 07-14-21
|
||||
//The largest prime factor of 600851475143
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { getFactors } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getFactors } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
|
||||
|
||||
export class Problem3 extends Problem{
|
||||
@@ -51,10 +50,12 @@ export class Problem3 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get all the factors of the number
|
||||
this.factors = getFactors(Problem3.GOAL_NUMBER);
|
||||
//The last element should be the largest factor
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -69,23 +70,17 @@ export class Problem3 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The largest factor of the number ${Problem3.GOAL_NUMBER} is ${this.factors[this.factors.length - 1]}`;
|
||||
}
|
||||
//Returns the list of factors of the number
|
||||
public getFactors(): number[]{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("factors");
|
||||
return this.factors;
|
||||
}
|
||||
//Returns the largest factor of the number
|
||||
public getLargestFactor(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("largest factor");
|
||||
return this.factors[this.factors.length];
|
||||
}
|
||||
//Returns the number for which we are getting the factor
|
||||
@@ -94,6 +89,7 @@ export class Problem3 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
|
||||
*/
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem30.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all the numbers that can be written as the sum of the fifth powers of their digits.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -66,6 +65,7 @@ export class Problem30 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with the lowest number and increment until you reach the largest number
|
||||
for(let currentNum = Problem30.BOTTOM_NUM;currentNum <= Problem30.TOP_NUM;++currentNum){
|
||||
//Get the digits of the number
|
||||
@@ -85,6 +85,7 @@ export class Problem30 extends Problem{
|
||||
//Get the sum of the numbers
|
||||
this.sum = getSum(this.sumOfFifthNumbers);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -99,9 +100,7 @@ export class Problem30 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `This sum of all the numbers that can be written as the sum of the fifth powers of their digits is ${this.sum}`;
|
||||
}
|
||||
//This returns the top number to be checked
|
||||
@@ -110,22 +109,17 @@ export class Problem30 extends Problem{
|
||||
}
|
||||
//This returns a copy of the vector holding all the numbers that are the sum of the fifth power of their digits
|
||||
public getListOfSumOfFifths(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of all numbers that are the sum of the 5th power of their digits");
|
||||
return this.sumOfFifthNumbers;
|
||||
}
|
||||
//This returns the sum of all entries in sumOfFifthNumbers
|
||||
public getSumOfList(): number{
|
||||
//If the problem hasn't been solved throw an eception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of all numbers that are the sum of the 5th power of their digits");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
This sum of all the numbers that can be written as the sum of the fifth powers of their digits is 443839
|
||||
It took an average of 180.976 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem31.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
//How many different ways can £2 be made using any number of coins?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,7 +22,6 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -50,6 +49,7 @@ export class Problem31 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with 200p and remove the necessary coins with each loop
|
||||
for(let pound2 = Problem31.DESIRED_VALUE;pound2 >= 0;pound2 -= 200){
|
||||
for(let pound1 = pound2;pound1 >= 0;pound1 -= 100){
|
||||
@@ -67,6 +67,7 @@ export class Problem31 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -81,21 +82,17 @@ export class Problem31 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the proble
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `There are ${this.permutations} ways to make 2 pounds with the given denominations of coins`;
|
||||
}
|
||||
//Returns the number of correct permutations of the coins
|
||||
public getPermutations(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number of correct permutations of the coins");
|
||||
return this.permutations;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
There are 73682 ways to make 2 pounds with the given denominations of coins
|
||||
It took an average of 197.293 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem32.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { findNumOccurrence } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { findNumOccurrence } from "../../../Typescript/typescriptClasses/StringAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -85,6 +84,7 @@ export class Problem32 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Create the multiplicand and start working your way up
|
||||
for(let multiplicand = 1;multiplicand <= Problem32.TOP_MULTIPLICAND;++multiplicand){
|
||||
//Run through all possible multipliers
|
||||
@@ -108,6 +108,7 @@ export class Problem32 extends Problem{
|
||||
this.sumOfPandigitals += prod.getProduct();
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -140,21 +141,17 @@ export class Problem32 extends Problem{
|
||||
}
|
||||
//Gets
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `There are ${this.listOfProducts.length} unique 1-9 pandigitals\nThe sum of the products of the pandigitals is ${this.sumOfPandigitals}`
|
||||
}
|
||||
//Returns the sum of pandigitals
|
||||
public getSumOfPandigitlas(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of the pandigitals");
|
||||
return this.sumOfPandigitals;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
There are 7 unique 1-9 pandigitals
|
||||
The sum of the products of the pandigitals is 45228
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem33.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
/*
|
||||
The fraction 49/98 is a curious fraction, as an inexperienced mathematician in attempting to simplify it may incorrectly believe that 49/98 = 4/8, which is correct, is obtained by cancelling the 9s
|
||||
We shall consider fractions like, 30/50 = 3/5, to be trivial examples
|
||||
@@ -27,8 +27,8 @@ If the product of these four fractions is given in its lowest common terms, find
|
||||
*/
|
||||
|
||||
|
||||
import { gcd, getProd } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getProd } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { gcd } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -63,6 +63,7 @@ export class Problem33 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Search every possible numerator/denominator pair
|
||||
for(let denominator = Problem33.MIN_DENOMINATOR;denominator <= Problem33.MAX_DENOMINATOR;++denominator){
|
||||
for(let numerator = Problem33.MIN_NUMERATOR;(numerator < denominator) && (numerator <= Problem33.MAX_NUMERATOR);++numerator){
|
||||
@@ -109,6 +110,7 @@ export class Problem33 extends Problem{
|
||||
//Save the denominator
|
||||
this.prodDenominator = denomProd / curGcd;
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -124,37 +126,27 @@ export class Problem33 extends Problem{
|
||||
//Gets
|
||||
//Returns the reult of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The denominator of the product is ${this.prodDenominator}`;
|
||||
}
|
||||
//Returns the list of numerators
|
||||
public getNumerators(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of numerators");
|
||||
return this.numerators;
|
||||
}
|
||||
//Returns the list of denominators
|
||||
public getDenominators(): number[]{
|
||||
//If the porblem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of denominators");
|
||||
return this.denominators;
|
||||
}
|
||||
//Returns the answer to the question
|
||||
public getProdDenominator(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("denominator");
|
||||
return this.prodDenominator;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The denominator of the product is 100
|
||||
It took an average of 508.730 microseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem34.ts
|
||||
//Matthew Ellison
|
||||
// Created: 06-01-21
|
||||
//Modified: 06-01-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all numbers which are equal to the sum of the factorial of their digits
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { factorial } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { factorial } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -56,6 +55,7 @@ export class Problem34 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Pre-compute the possible factorials form 0! to 9!
|
||||
for(let cnt = 0;cnt <= 9;++cnt){
|
||||
this.factorials[cnt] = factorial(cnt);
|
||||
@@ -75,6 +75,7 @@ export class Problem34 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -93,30 +94,22 @@ export class Problem34 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all numbers that are the sum of their digit's factorials is ${this.sum}`;
|
||||
}
|
||||
//Returns the list of factorials from 0-9
|
||||
public getFactorials(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of factorials");
|
||||
return this.factorials;
|
||||
}
|
||||
//Returns the sum of all numbers equal to the sum of their digit's factorials
|
||||
public getSum(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all numbers that are the sum of their digit's factorials is 40730
|
||||
It took an average of 87.615 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem35.ts
|
||||
//Matthew Ellison
|
||||
// Created: 06-06-21
|
||||
//Modified: 06-06-21
|
||||
//Modified: 07-14-21
|
||||
//How many circular primes are there below one million?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,7 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getPrimes } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getPrimes } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -62,6 +61,7 @@ export class Problem35 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Get all primes under 1,000,000
|
||||
this.primes = getPrimes(Problem35.MAX_NUM);
|
||||
//Go through all primes, get all their rotations, and check if htose numbers are also primes
|
||||
@@ -84,6 +84,7 @@ export class Problem35 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -99,38 +100,27 @@ export class Problem35 extends Problem{
|
||||
//Gets
|
||||
//Returns a string with the solution to the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The number of all circular prime numbers under ${Problem35.MAX_NUM} is ${this.circularPrimes.length}`;
|
||||
}
|
||||
//Returns the array of primes < MAX_NUM
|
||||
public getPrimes(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of primes");
|
||||
return this.primes;
|
||||
}
|
||||
//Returns the array of circular primes < MAX_NUM
|
||||
public getCircularPrimes(): number[]{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of circular primes");
|
||||
return this.circularPrimes;
|
||||
}
|
||||
//Returns the number of circular primes < MAX_NUM
|
||||
public getNumCircularPrimes(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number oc circular primes");
|
||||
return this.circularPrimes.length;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The number of all circular prime numbers under 999999 is 55
|
||||
It took an average of 7.204 seconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem36.ts
|
||||
//Matthew Ellison
|
||||
// Created: 06-29-21
|
||||
//Modified: 06-29-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of all numbers, less than one million, which are palindromic in base 10 and base 2.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,9 @@
|
||||
*/
|
||||
|
||||
|
||||
import { getSum, isPalindrome, toBin } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { toBin } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { isPalindrome } from "../../../Typescript/typescriptClasses/StringAlgorithms";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
@@ -53,6 +54,7 @@ export class Problem36 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start with 1, check if it is a palindrome in base 10 and 2, and continue to MAX_NUM
|
||||
for(let num = 1;num < Problem36.MAX_NUM;++num){
|
||||
//Check if num is a palindrome
|
||||
@@ -68,6 +70,7 @@ export class Problem36 extends Problem{
|
||||
//Get the sum of all palindromes in the list
|
||||
this.sum = getSum(this.palindromes);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -83,30 +86,22 @@ export class Problem36 extends Problem{
|
||||
//Gets
|
||||
//Returns a string with the solution to the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all base 10 and base 2 palindromic numbers < ${Problem36.MAX_NUM} is ${this.sum}`;
|
||||
}
|
||||
//Return the array of palindromes < MAX_NUM
|
||||
public getPalindromes(){
|
||||
//If the porblem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of palindromes");
|
||||
return this.palindromes;
|
||||
}
|
||||
//Returns the sum of all elements in the array of palindromes
|
||||
public getSumOfPalindromes(){
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of all palindromes");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all base 10 and base 2 palindromic numbers < 999999 is 872187
|
||||
It took an average of 297.957 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem37.ts
|
||||
//Matthew Ellison
|
||||
// Created: 07-01-21
|
||||
//Modified: 07-01-21
|
||||
//Modified: 07-14-21
|
||||
//Find the sum of the only eleven primes that are both truncatable from left to right and right to left (2, 3, 5, and 7 are not counted).
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -21,10 +21,13 @@
|
||||
along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
import { getSum, isPrime, sieveOfEratosthenes } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
|
||||
import { getSum } from "../../../Typescript/typescriptClasses/ArrayAlgorithms";
|
||||
import { isPrime, sieveOfEratosthenes } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
export class Problem37 extends Problem{
|
||||
//Variables
|
||||
//Static variables
|
||||
@@ -51,6 +54,7 @@ export class Problem37 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Create the sieve and get the first prime number
|
||||
let sieve = sieveOfEratosthenes();
|
||||
let tempPrime = sieve.next().value;
|
||||
@@ -126,6 +130,7 @@ export class Problem37 extends Problem{
|
||||
//Get the sum of all elements in the truncPrimes list
|
||||
this.sum = getSum(this.truncPrimes);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -141,28 +146,22 @@ export class Problem37 extends Problem{
|
||||
//Gets
|
||||
//Returns a string with the solution to the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solve dthrow an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The sum of all left and right truncatable primes is ${this.sum}`;
|
||||
}
|
||||
//Returns the list of primes that can be truncated
|
||||
public getTruncatablePrimes(): number[]{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("list of truncatable primes");
|
||||
return this.truncPrimes;
|
||||
}
|
||||
//Returns the sum of all elements in truncPrimes
|
||||
public getSumOfTruncatablePrimes(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of truncatable primes");
|
||||
return this.sum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The sum of all left and right truncatable primes is 748317
|
||||
It took an average of 104.007 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem4.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-24-20
|
||||
//Modified: 10-24-20
|
||||
//Modified: 07-14-21
|
||||
//Find the largest palindrome made from the product of two 3-digit numbers
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
|
||||
export class Problem4 extends Problem{
|
||||
@@ -49,6 +48,7 @@ export class Problem4 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start at the first 3-digit number and check every one up to the last 3-digit number
|
||||
for(let firstNum: number = Problem4.START_NUM;firstNum <= Problem4.END_NUM;++firstNum){
|
||||
//You can start at the location of the first number because everything before that has already been tested. (100 * 101 == 101 * 100)
|
||||
@@ -71,6 +71,7 @@ export class Problem4 extends Problem{
|
||||
//Sort the palindromes so that the last one is the largest
|
||||
this.palindromes = this.palindromes.sort((n1, n2) => n1 - n2);
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -86,27 +87,22 @@ export class Problem4 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The largest palindrome is ${this.palindromes[this.palindromes.length - 1]}`;
|
||||
}
|
||||
//Returns the list of all palindromes
|
||||
public getPalindromes(): number[]{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("palindromes");
|
||||
return this.palindromes;
|
||||
}
|
||||
//Returns the largest palindrome
|
||||
public getLargestPalindrome(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("largest palindrome");
|
||||
return this.palindromes[this.palindromes.length - 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The largest palindrome is 906609
|
||||
It took an average of 121.130 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
//ProjectEulerTS/Problems/Problem5.ts
|
||||
//Matthew Ellison
|
||||
// Created: 10-26-20
|
||||
//Modified: 10-26-20
|
||||
//Modified: 07-14-21
|
||||
//What is the smallest positive number that is evenly divisible by all of the numbers from 1 to 20?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
Copyright (C) 2020 Matthew Ellison
|
||||
Copyright (C) 2021 Matthew Ellison
|
||||
|
||||
This program is free software: you can redistribute it and/or modify
|
||||
it under the terms of the GNU Lesser General Public License as published by
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
|
||||
export class Problem5 extends Problem{
|
||||
@@ -48,6 +47,7 @@ export class Problem5 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Start at 20 because it must at least be divisible by 20. Increment by 2 because it must be an even number to be divisible by 2
|
||||
let numFound: boolean = false; //A flag for finding the divisible number
|
||||
let currentNum: number = 20; //The number that it is currently checking against
|
||||
@@ -67,9 +67,10 @@ export class Problem5 extends Problem{
|
||||
currentNum += 2;
|
||||
}
|
||||
}
|
||||
|
||||
//Save the current number as the smallest
|
||||
this.smallestNum = currentNum
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -84,20 +85,17 @@ export class Problem5 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The smallest positive number evenly divisible by all number 1-20 is ${this.smallestNum}`;
|
||||
}
|
||||
//Returns the requested number
|
||||
public getNumber(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("number");
|
||||
return this.smallestNum;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The smallest positive number evenly divisible by all number 1-20 is 232792560
|
||||
It took an average of 892.378 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem6.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-10-21
|
||||
//Modified: 03-10-21
|
||||
//Modified: 07-14-21
|
||||
//Find the difference between the sum of the squares of the first one hundred natural numbers and the square of the sum.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -23,7 +23,6 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
|
||||
export class Problem6 extends Problem{
|
||||
@@ -53,6 +52,7 @@ export class Problem6 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Run through all numbers and add them to the appropriate sums
|
||||
for(let currentNum: number = Problem6.START_NUM;currentNum <= Problem6.END_NUM;++currentNum){
|
||||
this.sumOfSquares += (currentNum * currentNum); //Square the number and add it to the variable
|
||||
@@ -61,6 +61,7 @@ export class Problem6 extends Problem{
|
||||
//Square the sum of all the numbers
|
||||
this.squareOfSum *= this.squareOfSum;
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -76,34 +77,27 @@ export class Problem6 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The difference between the sum of the squares and the square of the sum of all numbers from ${Problem6.START_NUM}-${Problem6.END_NUM} is ${this.getDifference()}`;
|
||||
}
|
||||
//Returns the sum of all the squares
|
||||
public getSumOfSquares(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("sum of the squares");
|
||||
return this.sumOfSquares;
|
||||
}
|
||||
//Returns the square of all the sums
|
||||
public getSquareOfSum(){
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("square of the sums");
|
||||
return this.squareOfSum;
|
||||
}
|
||||
//Returns the requested difference
|
||||
public getDifference(): number{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("difference between the two numbers");
|
||||
return Math.abs(this.sumOfSquares - this.squareOfSum);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The difference between the sum of the squares and the square of the sum of all numbers from 1-100 is 25164150
|
||||
It took an average of 344.001 nanoseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem67.ts
|
||||
//Matthew Ellison
|
||||
// Created: 05-28-21
|
||||
//Modified: 05-28-21
|
||||
//Modified: 07-14-21
|
||||
//Find the maximum total from top to bottom
|
||||
/*
|
||||
59
|
||||
@@ -233,6 +233,7 @@ export class Problem67 extends Problem18{
|
||||
[23, 33, 44, 81, 80, 92, 93, 75, 94, 88, 23, 61, 39, 76, 22, 3, 28, 94, 32, 6, 49, 65, 41, 34, 18, 23, 8, 47, 62, 60, 3, 63, 33, 13, 80, 52, 31, 54, 73, 43, 70, 26, 16, 69, 57, 87, 83, 31, 3, 93, 70, 81, 47, 95, 77, 44, 29, 68, 39, 51, 56, 59, 63, 7, 25, 70, 7, 77, 43, 53, 64, 3, 94, 42, 95, 39, 18, 1, 66, 21, 16, 97, 20, 50, 90, 16, 70, 10, 95, 69, 29, 6, 25, 61, 41, 26, 15, 59, 63, 35]]
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The value of the longest path is 7273
|
||||
It took an average of 413.002 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem7.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-10-21
|
||||
//Modified: 03-10-21
|
||||
//Modified: 07-14-21
|
||||
//What is the 10001th prime number?
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -23,8 +23,7 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { getNumPrimes } from "../../../Typescript/typescriptClasses/Algorithms";
|
||||
import { getNumPrimes } from "../../../Typescript/typescriptClasses/NumberAlgorithms";
|
||||
|
||||
|
||||
export class Problem7 extends Problem{
|
||||
@@ -50,9 +49,11 @@ export class Problem7 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Setup the variables
|
||||
this.primes = getNumPrimes(Problem7.NUMBER_OF_PRIMES); //Holds the prime numbers
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -67,21 +68,17 @@ export class Problem7 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The ${Problem7.NUMBER_OF_PRIMES}th prime number is ${this.getPrime()}`;
|
||||
}
|
||||
//Returns the requested prime number
|
||||
public getPrime(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("prime");
|
||||
return this.primes[this.primes.length - 1];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The 10001th prime number is 104743
|
||||
It took an average of 3.534 milliseconds to run this problem through 100 iterations
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem8.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-10-21
|
||||
//Modified: 03-10-21
|
||||
//Modified: 07-14-21
|
||||
//Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
|
||||
/*
|
||||
73167176531330624919225119674426574742355349194934
|
||||
@@ -45,7 +45,6 @@
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
|
||||
|
||||
export class Problem8 extends Problem{
|
||||
@@ -74,6 +73,7 @@ export class Problem8 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Cycle through the string of numbers looking for the maximum product
|
||||
for(let cnt: number = 12;cnt < Problem8.NUMBER.length;++cnt){
|
||||
let currentProduct: number = parseInt(Problem8.NUMBER.substring(cnt - 12, cnt - 11)) * parseInt(Problem8.NUMBER.substring(cnt - 11, cnt - 10)) * parseInt(Problem8.NUMBER.substring(cnt - 10, cnt - 9)) * parseInt(Problem8.NUMBER.substring(cnt - 9, cnt - 8)) * parseInt(Problem8.NUMBER.substring(cnt - 8, cnt - 7)) * parseInt(Problem8.NUMBER.substring(cnt - 7, cnt - 6)) * parseInt(Problem8.NUMBER.substring(cnt - 6, cnt - 5)) * parseInt(Problem8.NUMBER.substring(cnt - 5, cnt - 4)) * parseInt(Problem8.NUMBER.substring(cnt - 4, cnt - 3)) * parseInt(Problem8.NUMBER.substring(cnt - 3, cnt - 2)) * parseInt(Problem8.NUMBER.substring(cnt - 2, cnt - 1)) * parseInt(Problem8.NUMBER.substring(cnt - 1, cnt)) * parseInt(Problem8.NUMBER.substring(cnt, cnt + 1));
|
||||
@@ -85,6 +85,7 @@ export class Problem8 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -98,29 +99,22 @@ export class Problem8 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The greatest product is ${this.maxProduct}\nThe numbers are ${this.maxNums}`;
|
||||
}
|
||||
//Returns the string of numbers that produces the largest product
|
||||
public getLargestNums(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("numbers that make the largest product");
|
||||
return this.maxNums;
|
||||
}
|
||||
//Returns the requested product
|
||||
public getLargestProduct(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("product of the numbers");
|
||||
return this.maxProduct;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The greatest product is 23514624000
|
||||
The numbers are 5576689664895
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//ProjectEulerTS/Problems/Problem9.ts
|
||||
//Matthew Ellison
|
||||
// Created: 03-24-21
|
||||
//Modified: 03-24-21
|
||||
//Modified: 07-14-21
|
||||
//There exists exactly one Pythagorean triplet for which a + b + c = 1000. Find the product abc.
|
||||
//Unless otherwise listed all non-standard includes are my own creation and available from https://bibucket.org/Mattrixwv/typescriptClasses
|
||||
/*
|
||||
@@ -22,8 +22,8 @@
|
||||
*/
|
||||
|
||||
|
||||
import { Problem } from "./Problem";
|
||||
import { Unsolved } from "../Unsolved";
|
||||
import { Problem } from "./Problem";
|
||||
|
||||
|
||||
export class Problem9 extends Problem{
|
||||
@@ -56,6 +56,7 @@ export class Problem9 extends Problem{
|
||||
//Start the timer
|
||||
this.timer.start();
|
||||
|
||||
|
||||
//Loop through all possible a's
|
||||
while((this.a < Problem9.GOAL_SUM) && (!this.found)){
|
||||
this.b = this.a + 1; //b must be larger than a
|
||||
@@ -76,6 +77,7 @@ export class Problem9 extends Problem{
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//Stop the timer
|
||||
this.timer.stop();
|
||||
|
||||
@@ -98,46 +100,32 @@ export class Problem9 extends Problem{
|
||||
//Gets
|
||||
//Returns the result of solving the problem
|
||||
public getResult(): string{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("result");
|
||||
return `The Pythagorean triplet is ${this.a} + ${this.b} + ${this.c}\nThe numbers' product is ${this.getProduct()}`;
|
||||
}
|
||||
//Returns the length of the first side
|
||||
public getSideA(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("first side");
|
||||
return this.a;
|
||||
}
|
||||
//Returns the length of the second side
|
||||
public getSideB(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("second side");
|
||||
return this.b;
|
||||
}
|
||||
//Returns the length of the hyp
|
||||
public getSideC(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("third side");
|
||||
return this.c;
|
||||
}
|
||||
//Returns the product of the 3 sides
|
||||
public getProduct(): number{
|
||||
//If the problem hasn't been solved throw an exception
|
||||
if(!this.solved){
|
||||
throw new Unsolved();
|
||||
}
|
||||
this.solvedCheck("product of all three sides");
|
||||
return this.a * this.b * this.c;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* Results:
|
||||
The Pythagorean triplet is 200 + 375 + 425
|
||||
The numbers' product is 31875000
|
||||
|
||||
Reference in New Issue
Block a user