diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 000000000000..b9859f67b80d --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,8 @@ +# This configuration file was automatically generated by Gitpod. +# Please adjust to your needs (see https://www.gitpod.io/docs/config-gitpod-file) +# and commit this file to your remote git repository to share the goodness with others. + +tasks: + - init: mvn install -DskipTests=false + + diff --git a/src/main/java/com/thealgorithms/maths/FrizzyNumber.java b/src/main/java/com/thealgorithms/maths/FrizzyNumber.java new file mode 100644 index 000000000000..54fde877cf21 --- /dev/null +++ b/src/main/java/com/thealgorithms/maths/FrizzyNumber.java @@ -0,0 +1,31 @@ +package com.thealgorithms.maths; + +/** + * Calculates Frizzy numbers given a base and an index + * Indexing start at 1 + * + * @author Sattwik Sahu + * @since 2022-10-03 + */ +public class FrizzyNumber { + /** + * Returns the n-th number that is a sum of powers + * of the given base. + * Example: base = 3 and n = 4 + * Ascending order of sums of powers of 3 = + * 3^0 = 1, 3^1 = 3, 3^1 + 3^0 = 4, 3^2 + 3^0 = 9 + * Ans = 9 + * + * @param base The base whose n-th sum of powers is required + * @param n Index from ascending order of sum of powers of base + * @return n-th sum of powers of base + */ + public static double getNthFrizzy(int base, int n) { + double f = 0.0; + int i = 0; + do { + f += Math.pow(base, i++) * (n % 2); + } while ((n /= 2) > 0); + return f; + } +} diff --git a/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java b/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java new file mode 100644 index 000000000000..2a993b2d9cbb --- /dev/null +++ b/src/test/java/com/thealgorithms/maths/FrizzyNumberTest.java @@ -0,0 +1,50 @@ +package com.thealgorithms.maths; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +import org.junit.jupiter.api.Test; + +public class FrizzyNumberTest { + + @Test + public void testFrizziesForBase2() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(2, 1)); + assertEquals( + 3, + FrizzyNumber.getNthFrizzy(2, 3)); + assertEquals( + 1000, + FrizzyNumber.getNthFrizzy(2, 1000)); + } + + @Test + public void testFrizziesForBase3() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(3, 1)); + assertEquals( + 3, + FrizzyNumber.getNthFrizzy(3, 2)); + assertEquals( + 29430, + FrizzyNumber.getNthFrizzy(3, 1000)); + } + + @Test + public void testFrizziesForBase69() { + assertEquals( + 1, + FrizzyNumber.getNthFrizzy(69, 1)); + assertEquals( + 69, + FrizzyNumber.getNthFrizzy(69, 2)); + assertEquals( + 328510, + FrizzyNumber.getNthFrizzy(69, 9)); + assertEquals( + 333340, + FrizzyNumber.getNthFrizzy(69, 15)); + } +}