Added number generators

This commit is contained in:
2022-08-20 13:46:58 -04:00
parent e0825fe96e
commit 8f35397177
21 changed files with 441 additions and 17 deletions

View File

@@ -6,7 +6,7 @@
<groupId>mattrixwv</groupId>
<artifactId>myClasses</artifactId>
<version>1.0.1</version>
<version>1.2.0</version>
<name>myClasses</name>
<url>www.mattrixwv.com</url>

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import java.math.BigInteger;

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import java.math.BigInteger;
@@ -29,7 +29,7 @@ import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import mattrixwv.exceptions.InvalidResult;
import com.mattrixwv.exceptions.InvalidResult;
public class NumberAlgorithms{

View File

@@ -19,10 +19,10 @@ Copyright (C) 2022 Matthew Ellison
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import mattrixwv.exceptions.InvalidResult;
import com.mattrixwv.exceptions.InvalidResult;
public class Stopwatch{

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import java.util.ArrayList;

View File

@@ -0,0 +1,67 @@
//JavaClasses/src/main/java/com/mattrixwv/Triple.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
//This class implements a triplet of variables
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv;
public class Triple<T, U, V>{
private T a;
private U b;
private V c;
public Triple(T a, U b, V c){
this.a = a;
this.b = b;
this.c = c;
}
public T getA(){
return a;
}
public U getB(){
return b;
}
public V getC(){
return c;
}
@Override
public boolean equals(Object o){
if(this == o){
return true;
}
else if(o instanceof Triple<?, ?, ?>){
Triple<?, ?, ?> rightSide = (Triple<?, ?, ?>)o;
return (a.equals(rightSide.a) && b.equals(rightSide.b) && c.equals(rightSide.c));
}
else{
return false;
}
}
@Override
public int hashCode(){
return a.hashCode() + b.hashCode() * c.hashCode();
}
@Override
public String toString(){
return "[" + a.toString() + ", " + b.toString() + ", " + c.toString() + "]";
}
}

View File

@@ -3,7 +3,7 @@
// Created: 08-24-20
//Modified: 08-24-20
//This is an exception for an invalid result out of one of my algorithms
package mattrixwv.exceptions;
package com.mattrixwv.exceptions;
public class InvalidResult extends Exception{

View File

@@ -0,0 +1,57 @@
//JavaClasses/src/main/java/mattrixwv/HexagonalNumberGenerator.java
//Matthew Ellison
// Created: 08-20-22
//Modified: 08-20-22
//This class generates hexagonal numbers
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class HexagonalNumberGenerator implements Iterator<Long>{
private Long num;
public HexagonalNumberGenerator(){
num = 1L;
}
@Override
public boolean hasNext(){
return (2 * num * num) > 0;
}
@Override
public Long next(){
Long newNum = ((2 * num * num) - num);
++num;
if(num > 0){
return newNum;
}
else{
throw new NoSuchElementException("Number overflow");
}
}
public static boolean isHexagonal(Long x){
Long n = Math.round((Math.sqrt(1 + (8 * x)) + 1) / 4);
return ((2 * n * n) - n) == x;
}
}

View File

@@ -0,0 +1,57 @@
//JavaClasses/src/main/java/com/mattrixwv/generators/PentagonalNumberGenerator.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
//This class generates pentagonal numbers
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class PentagonalNumberGenerator implements Iterator<Long>{
private Long num;
public PentagonalNumberGenerator(){
num = 1L;
}
@Override
public boolean hasNext(){
return (3 * num * num) > 0;
}
@Override
public Long next(){
long newNum = ((3 * num * num) - num) / 2;
++num;
if(num > 0){
return newNum;
}
else{
throw new NoSuchElementException("Number overflow");
}
}
public static boolean isPentagonal(Long x){
Long n = Math.round((Math.sqrt(1 + (24 * x)) + 1) / 6);
return (((3 * n * n) - n) / 2) == x;
}
}

View File

@@ -19,7 +19,7 @@ Copyright (C) 2022 Matthew Ellison
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv.generators;
import java.util.ArrayList;

View File

@@ -19,7 +19,7 @@ Copyright (C) 2022 Matthew Ellison
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv.generators;
import java.math.BigInteger;

View File

@@ -0,0 +1,57 @@
//JavaClasses/src/main/java/com/mattrixwv/generators/TriangularNumberGenerator.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
//This class generates triangular numbers
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import java.util.Iterator;
import java.util.NoSuchElementException;
public class TriangularNumberGenerator implements Iterator<Long>{
private Long num;
public TriangularNumberGenerator(){
num = 1L;
}
@Override
public boolean hasNext(){
return (num * num) > 0;
}
@Override
public Long next(){
Long newNum = ((num * num) + num) / 2;
++num;
if(num > 0){
return newNum;
}
else{
throw new NoSuchElementException("Number overflow");
}
}
public static boolean isTriangular(Long x){
Long n = Math.round((Math.sqrt(1 + (8 * x)) - 1) / 2);
return (((n * n) + n) / 2) == x;
}
}

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -33,7 +33,7 @@ import java.util.List;
import org.junit.jupiter.api.Test;
import mattrixwv.exceptions.InvalidResult;
import com.mattrixwv.exceptions.InvalidResult;
public class TestNumberAlgorithms{

View File

@@ -22,7 +22,7 @@ Copyright (C) 2022 Matthew Ellison
*/
package mattrixwv;
package com.mattrixwv;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -31,7 +31,7 @@ import static org.junit.jupiter.api.Assertions.assertNotNull;
import org.junit.jupiter.api.Test;
import mattrixwv.exceptions.InvalidResult;
import com.mattrixwv.exceptions.InvalidResult;
public class TestStopwatch{

View File

@@ -19,7 +19,7 @@
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv;
import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@@ -0,0 +1,45 @@
//JavaClasses/src/test/java/com/mattrixwv/TestTriple.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class TestTriple{
@Test
public void testTriple(){
Triple<Long, Long, Long> longTriple1 = new Triple<Long, Long, Long>(1L, 2L, 3L);
Triple<Long, Long, Long> longTriple2 = new Triple<Long, Long, Long>(1L, 2L, 3L);
Triple<Long, Long, Long> longTriple3 = new Triple<Long, Long, Long>(3L, 2L, 1L);
assertEquals(1L, longTriple1.getA());
assertEquals(2L, longTriple1.getB());
assertEquals(3L, longTriple1.getC());
assertEquals(true, longTriple1.equals(longTriple1));
assertEquals(true, longTriple1.equals(longTriple2));
assertEquals(false, longTriple1.equals(longTriple3));
assertEquals(false, longTriple1.equals(1L));
assertEquals(Long.hashCode(1) + Long.hashCode(2) * Long.hashCode(3), longTriple1.hashCode());
assertEquals("[1, 2, 3]", longTriple1.toString());
}
}

View File

@@ -0,0 +1,47 @@
//JavaClasses/src/test/java/com/mattrixwv/generators/TestHexagonalNumberGenerator.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
public class TestHexagonalNumberGenerator{
@Test
public void hexagonalNumberGeneratorTest(){
HexagonalNumberGenerator gen = new HexagonalNumberGenerator();
List<Long> nums = Arrays.asList(1L, 6L, 15L, 28L, 45L, 66L, 91L, 120L, 153L);
ArrayList<Long> generatedNums = new ArrayList<>();
for(int cnt = 0;cnt < nums.size();++cnt){
generatedNums.add(gen.next());
}
assertEquals(nums, generatedNums);
assertEquals(true, gen.hasNext());
assertEquals(true, HexagonalNumberGenerator.isHexagonal(153L));
assertEquals(false, HexagonalNumberGenerator.isHexagonal(154L));
}
}

View File

@@ -0,0 +1,47 @@
//JavaClasses/src/test/java/com/mattrixwv/generators/TestPentagonalNumberGenerator.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
public class TestPentagonalNumberGenerator{
@Test
public void pentagonalNumberGeneratorTest(){
PentagonalNumberGenerator gen = new PentagonalNumberGenerator();
List<Long> nums = Arrays.asList(1L, 5L, 12L, 22L, 35L, 51L, 70L, 92L, 117L);
ArrayList<Long> generatedNums = new ArrayList<>();
for(int cnt = 0;cnt < nums.size();++cnt){
generatedNums.add(gen.next());
}
assertEquals(nums, generatedNums);
assertEquals(true, gen.hasNext());
assertEquals(true, PentagonalNumberGenerator.isPentagonal(117L));
assertEquals(false, PentagonalNumberGenerator.isPentagonal(118L));
}
}

View File

@@ -19,7 +19,7 @@ Copyright (C) 2022 Matthew Ellison
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package mattrixwv;
package com.mattrixwv.generators;
import static org.junit.jupiter.api.Assertions.assertEquals;

View File

@@ -0,0 +1,47 @@
//JavaClasses/src/test/java/com/mattrixwv/generators/TestTriangularNumberGenerator.java
//Mattrixwv
// Created: 08-20-22
//Modified: 08-20-22
/*
Copyright (C) 2022 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
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package com.mattrixwv.generators;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import org.junit.jupiter.api.Test;
public class TestTriangularNumberGenerator{
@Test
public void triangularNumberGeneratorTest(){
TriangularNumberGenerator gen = new TriangularNumberGenerator();
List<Long> nums = Arrays.asList(1L, 3L, 6L, 10L, 15L, 21L, 28L, 36L, 45L);
ArrayList<Long> generatedNums = new ArrayList<>();
for(int cnt = 0;cnt < nums.size();++cnt){
generatedNums.add(gen.next());
}
assertEquals(nums, generatedNums);
assertEquals(true, gen.hasNext());
assertEquals(true, TriangularNumberGenerator.isTriangular(55L));
assertEquals(false, TriangularNumberGenerator.isTriangular(54L));
}
}