diff --git a/.idea/workspace.xml b/.idea/workspace.xml new file mode 100644 index 0000000..3d5b769 --- /dev/null +++ b/.idea/workspace.xml @@ -0,0 +1,13 @@ + + + + + { + "keyToString": { + "project.structure.last.edited": "Project", + "project.structure.proportion": "0.0", + "project.structure.side.proportion": "0.0" + } +} + \ No newline at end of file diff --git a/solution/H07/build.gradle.kts b/solution/H07/build.gradle.kts index d4cda26..0b67281 100644 --- a/solution/H07/build.gradle.kts +++ b/solution/H07/build.gradle.kts @@ -34,13 +34,4 @@ jagr { rubricProviderName.set("h07.H07_RubricProvider") } } - graders { - val graderPrivate by creating { - graderName.set("H07-Private") - rubricProviderName.set("h07.H07_RubricProvider") - configureDependencies { - implementation(libs.algoutils.tutor) - } - } - } } diff --git a/solution/H07/gradle/libs.versions.toml b/solution/H07/gradle/libs.versions.toml index 2a961b5..a245538 100644 --- a/solution/H07/gradle/libs.versions.toml +++ b/solution/H07/gradle/libs.versions.toml @@ -1,3 +1,3 @@ [plugins] -algomate = { id = "org.tudalgo.algomate", version = "0.7.1" } +algomate = { id = "org.tudalgo.algomate", version = "0.7.0" } style = { id = "org.sourcegrade.style", version = "3.0.0" } diff --git a/solution/H07/src/main b/solution/H07/src/main new file mode 120000 index 0000000..e2862ca --- /dev/null +++ b/solution/H07/src/main @@ -0,0 +1 @@ +/home/osh/Desktop/FOP-2425-Marathon/H07/src/main \ No newline at end of file diff --git a/solution/H07/src/main/java/h07/ArithmeticExpression.java b/solution/H07/src/main/java/h07/ArithmeticExpression.java deleted file mode 100644 index e09b72e..0000000 --- a/solution/H07/src/main/java/h07/ArithmeticExpression.java +++ /dev/null @@ -1,18 +0,0 @@ -package h07; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents an arithmetic operation on numbers. - */ -@StudentCreationRequired -public interface ArithmeticExpression { - /** - * Applies the arithmetic operation to the two numbers. - * - * @param num1 the first number - * @param num2 the second number - * @return the result of the operation - */ - NumberExpression evaluate(NumberExpression num1, NumberExpression num2); -} diff --git a/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpression.java b/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpression.java deleted file mode 100644 index 0f70a11..0000000 --- a/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpression.java +++ /dev/null @@ -1,18 +0,0 @@ -package h07; - -import h07.peano.PeanoNumberExpression; -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Converts a number expression to a Peano number expression. - */ -@StudentCreationRequired -public interface ConvertNumberToPeanoExpression { - /** - * Converts a number expression to a Peano number expression. - * - * @param numberExpression the number expression to convert - * @return the Peano number expression - */ - PeanoNumberExpression convert(NumberExpression numberExpression); -} diff --git a/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpressionImpl.java b/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpressionImpl.java deleted file mode 100644 index 483f6b6..0000000 --- a/solution/H07/src/main/java/h07/ConvertNumberToPeanoExpressionImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package h07; - -import h07.peano.PeanoNumberExpression; -import h07.peano.Zero; -import h07.peano.Successor; -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Converts a number expression to a Peano number expression. - */ -@StudentCreationRequired -public class ConvertNumberToPeanoExpressionImpl implements ConvertNumberToPeanoExpression { - @Override - public PeanoNumberExpression convert(NumberExpression numberExpression) { - int value = numberExpression.evaluate(); - - if (value == 0) { - return Zero::new; - } else { - return () -> new Successor(new ConvertNumberToPeanoExpressionImpl().convert(() -> value - 1).evaluate()); - } - } -} diff --git a/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpression.java b/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpression.java deleted file mode 100644 index e26db4c..0000000 --- a/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpression.java +++ /dev/null @@ -1,18 +0,0 @@ -package h07; - -import h07.peano.PeanoNumberExpression; -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Converts a Peano number expression to a number expression. - */ -@StudentCreationRequired -public interface ConvertPeanoToNumberExpression { - /** - * Converts a Peano number expression to a number expression. - * - * @param peanoNumberExpression the Peano number expression to convert - * @return the number expression - */ - NumberExpression convert(PeanoNumberExpression peanoNumberExpression); -} diff --git a/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpressionImpl.java b/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpressionImpl.java deleted file mode 100644 index c8a289a..0000000 --- a/solution/H07/src/main/java/h07/ConvertPeanoToNumberExpressionImpl.java +++ /dev/null @@ -1,23 +0,0 @@ -package h07; - -import h07.peano.NaturalNumber; -import h07.peano.PeanoNumberExpression; -import h07.peano.Successor; -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Converts a Peano number expression to a number expression. - */ -@StudentCreationRequired -public class ConvertPeanoToNumberExpressionImpl implements ConvertPeanoToNumberExpression { - @Override - public NumberExpression convert(PeanoNumberExpression peanoNumberExpression) { - NaturalNumber naturalNumber = peanoNumberExpression.evaluate(); - - if (naturalNumber instanceof Successor successor) { - return () -> new ConvertPeanoToNumberExpressionImpl().convert(() -> successor.predecessor).evaluate() + 1; - } else { - return () -> 0; - } - } -} diff --git a/solution/H07/src/main/java/h07/Main.java b/solution/H07/src/main/java/h07/Main.java deleted file mode 100644 index 186287f..0000000 --- a/solution/H07/src/main/java/h07/Main.java +++ /dev/null @@ -1,78 +0,0 @@ -package h07; - -import h07.peano.*; -import org.tudalgo.algoutils.student.annotation.DoNotTouch; -import org.tudalgo.algoutils.student.annotation.StudentImplementationRequired; - -/** - * Main entry point in executing the program. - */ -public class Main { - /** - * Main entry point in executing the program. - * - * @param args program arguments, currently ignored - */ - public static void main(String[] args) { - testHeader("Multiplication Table"); - numberExpressionMultiplicationTableTests(); - - testHeader("Peano Number Expressions"); - peanoNumberExpressionTests(); - - testHeader("Filter, Fold, Map"); - filterFoldMapTests(); - } - - @DoNotTouch - private static void testHeader(String testName) { - System.out.println("-----------------------------------"); - System.out.println("Running test: " + testName); - System.out.println("-----------------------------------"); - } - - @DoNotTouch - private static void numberExpressionMultiplicationTableTests() { - int lowerBound = 1; - int upperBound = 10; - NumberExpression[] multiplicationTable = NumberExpressionFactory.multiplicationTable(lowerBound, upperBound); - - for (int i = lowerBound; i <= upperBound; i++) { - for (int j = lowerBound; j <= upperBound; j++) { - System.out.printf("| %4s ", multiplicationTable[(i - lowerBound) * (upperBound - lowerBound + 1) + (j - lowerBound)].evaluate()); - } - System.out.println("|"); - } - } - - private static final NaturalNumber THREE = new Successor(new Successor(new Successor(new Zero()))); - private static final NaturalNumber SEVEN = new Successor(new Successor(new Successor(new Successor(new Successor(new Successor(new Successor(new Zero()))))))); - - @StudentImplementationRequired - private static void peanoNumberExpressionTests() { - PeanoNumberExpression three = () -> THREE; - PeanoNumberExpression seven = () -> SEVEN; - - PeanoNumberExpression sum = new PeanoAddExpression().evaluate(three, seven); - PeanoNumberExpression product = new PeanoMultiplyExpression().evaluate(three, seven); - - System.out.println(sum.evaluate()); - System.out.println(product.evaluate()); - - // Not required but can be used to convert Peano numbers to integers - System.out.println(new ConvertPeanoToNumberExpressionImpl().convert(sum).evaluate()); - System.out.println(new ConvertPeanoToNumberExpressionImpl().convert(product).evaluate()); - } - - @StudentImplementationRequired - private static void filterFoldMapTests() { - NumberExpression[] numbers = NumberExpressionFactory.multiplicationTable(1, 10); - NumberExpression[] filteredNumbers = NumberExpressionFactory.filter(numbers, n -> n % 3 == 0); - PeanoNumberExpression[] filteredPeanoNumbers = PeanoNumberExpressionFactory - .fromNumberExpressions(filteredNumbers); - PeanoNumberExpression foldedPeanoNumbers = PeanoNumberExpressionFactory.fold(filteredPeanoNumbers, Zero::new, - new PeanoAddExpression()); - int foldedNumber = new ConvertPeanoToNumberExpressionImpl().convert(foldedPeanoNumbers).evaluate(); - System.out.println(foldedNumber); - } -} diff --git a/solution/H07/src/main/java/h07/NumberExpression.java b/solution/H07/src/main/java/h07/NumberExpression.java deleted file mode 100644 index 4e3d162..0000000 --- a/solution/H07/src/main/java/h07/NumberExpression.java +++ /dev/null @@ -1,16 +0,0 @@ -package h07; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents a number expression. - */ -@StudentCreationRequired -public interface NumberExpression { - /** - * Evaluates the expression represented by this node. - * - * @return the result of the evaluation - */ - int evaluate(); -} diff --git a/solution/H07/src/main/java/h07/NumberExpressionFactory.java b/solution/H07/src/main/java/h07/NumberExpressionFactory.java deleted file mode 100644 index 3879f1f..0000000 --- a/solution/H07/src/main/java/h07/NumberExpressionFactory.java +++ /dev/null @@ -1,89 +0,0 @@ -package h07; - -import java.util.function.IntPredicate; - -import org.tudalgo.algoutils.student.annotation.DoNotTouch; -import org.tudalgo.algoutils.student.annotation.StudentImplementationRequired; - -/** - * A factory class for creating number expressions. - */ -public class NumberExpressionFactory { - /** - * Calculates the product of all possible pairs of numbers in the given array. - * - * @param numbers the array of number expressions to calculate the multiplication table - * @return An array of number expressions representing the result of the - * multiplication table of the given numbers. - */ - @StudentImplementationRequired - public static NumberExpression[] multiplicationTable(NumberExpression[] numbers) { - NumberExpression[] multiplicationTable = new NumberExpression[numbers.length * numbers.length]; - - ArithmeticExpression multiplication = (num1, num2) -> { - return () -> num1.evaluate() * num2.evaluate(); - }; - - for (int i = 0; i < numbers.length; i++) { - for (int j = 0; j < numbers.length; j++) { - multiplicationTable[i * numbers.length + j] = multiplication.evaluate(numbers[i], numbers[j]); - } - } - - return multiplicationTable; - } - - /** - * Calculates the product of all possible pairs of numbers in the given range. - * - * @param lowerBound the lower bound of the multiplication table, inclusive - * @param upperBound the upper bound of the multiplication table, inclusive - * @return An array of number expressions representing the result of the - * multiplication table of the numbers from lowerBound to upperBound. - */ - @DoNotTouch - public static NumberExpression[] multiplicationTable(int lowerBound, int upperBound) { - int numberOfNumbers = upperBound - lowerBound + 1; - NumberExpression[] baseNumbers = new NumberExpression[numberOfNumbers]; - - for (int i = lowerBound; i <= upperBound; i++) { - // Copy to local variable to make it effectively final, so it can be used in - // lambda - int finalI = i; - baseNumbers[i - lowerBound] = () -> finalI; - } - - return multiplicationTable(baseNumbers); - } - - /** - * Filters the given array of number expressions based on the given predicate. - * The returned array should contain only the number expressions that satisfy - * the predicate in the same order as they appear in the input array. - * This means there should be no null values in the returned array. - * - * @param numbers the array of number expressions to filter - * @param predicate the predicate to filter the number expressions - * @return An array of number expressions that satisfy the predicate. - */ - @StudentImplementationRequired - public static NumberExpression[] filter(NumberExpression[] numbers, IntPredicate predicate) { - int count = 0; - for (NumberExpression number : numbers) { - if (predicate.test(number.evaluate())) { - count++; - } - } - - NumberExpression[] result = new NumberExpression[count]; - - int nextIndex = 0; - for (NumberExpression number : numbers) { - if (predicate.test(number.evaluate())) { - result[nextIndex++] = number; - } - } - - return result; - } -} diff --git a/solution/H07/src/main/java/h07/peano/NaturalNumber.java b/solution/H07/src/main/java/h07/peano/NaturalNumber.java deleted file mode 100644 index 2575c74..0000000 --- a/solution/H07/src/main/java/h07/peano/NaturalNumber.java +++ /dev/null @@ -1,17 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.DoNotTouch; - -/** - * Represents a natural number. - */ -@DoNotTouch -public abstract class NaturalNumber { - /** - * Returns the string representation of the natural number. - * - * @return the string representation of the natural number - */ - @Override - public abstract String toString(); -} diff --git a/solution/H07/src/main/java/h07/peano/PeanoAddExpression.java b/solution/H07/src/main/java/h07/peano/PeanoAddExpression.java deleted file mode 100644 index b22c395..0000000 --- a/solution/H07/src/main/java/h07/peano/PeanoAddExpression.java +++ /dev/null @@ -1,27 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents an addition operation in Peano arithmetic. - */ -@StudentCreationRequired -public class PeanoAddExpression implements PeanoArithmeticExpression { - @Override - public PeanoNumberExpression evaluate(PeanoNumberExpression num1, PeanoNumberExpression num2) { - NaturalNumber naturalNumber1 = num1.evaluate(); - - if (naturalNumber1 instanceof Successor naturalNumber1Peano) { - return () -> { - return new Successor( - new PeanoAddExpression().evaluate( - () -> { return naturalNumber1Peano.predecessor; }, - num2 - ).evaluate() - ); - }; - } else { - return num2; - } - } -} diff --git a/solution/H07/src/main/java/h07/peano/PeanoArithmeticExpression.java b/solution/H07/src/main/java/h07/peano/PeanoArithmeticExpression.java deleted file mode 100644 index f71a126..0000000 --- a/solution/H07/src/main/java/h07/peano/PeanoArithmeticExpression.java +++ /dev/null @@ -1,18 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents an arithmetic operation in Peano arithmetic. - */ -@StudentCreationRequired -public interface PeanoArithmeticExpression { - /** - * Evaluates the expression represented by this node. - * - * @param num1 the first number to evaluate - * @param num2 the second number to evaluate - * @return the result of the evaluation - */ - PeanoNumberExpression evaluate(PeanoNumberExpression num1, PeanoNumberExpression num2); -} diff --git a/solution/H07/src/main/java/h07/peano/PeanoMultiplyExpression.java b/solution/H07/src/main/java/h07/peano/PeanoMultiplyExpression.java deleted file mode 100644 index d0fc974..0000000 --- a/solution/H07/src/main/java/h07/peano/PeanoMultiplyExpression.java +++ /dev/null @@ -1,29 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents a multiplication operation in Peano arithmetic. - */ -@StudentCreationRequired -public class PeanoMultiplyExpression implements PeanoArithmeticExpression { - @Override - public PeanoNumberExpression evaluate(PeanoNumberExpression num1, PeanoNumberExpression num2) { - NaturalNumber naturalNumber2 = num2.evaluate(); - - if (naturalNumber2 instanceof Successor naturalNumber2Peano) { - if (naturalNumber2Peano.predecessor instanceof Zero) { - return num1; - } else { - return () -> new PeanoAddExpression().evaluate( - num1, - new PeanoMultiplyExpression().evaluate( - num1, - () -> naturalNumber2Peano.predecessor)) - .evaluate(); - } - } else { - return Zero::new; - } - } -} diff --git a/solution/H07/src/main/java/h07/peano/PeanoNumberExpression.java b/solution/H07/src/main/java/h07/peano/PeanoNumberExpression.java deleted file mode 100644 index 2617b99..0000000 --- a/solution/H07/src/main/java/h07/peano/PeanoNumberExpression.java +++ /dev/null @@ -1,16 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.StudentCreationRequired; - -/** - * Represents a Peano number expression. - */ -@StudentCreationRequired -public interface PeanoNumberExpression { - /** - * Evaluates the expression represented by this node. - * - * @return the result of the evaluation - */ - NaturalNumber evaluate(); -} diff --git a/solution/H07/src/main/java/h07/peano/PeanoNumberExpressionFactory.java b/solution/H07/src/main/java/h07/peano/PeanoNumberExpressionFactory.java deleted file mode 100644 index adb1071..0000000 --- a/solution/H07/src/main/java/h07/peano/PeanoNumberExpressionFactory.java +++ /dev/null @@ -1,44 +0,0 @@ -package h07.peano; - -import h07.ConvertNumberToPeanoExpressionImpl; -import h07.NumberExpression; -import org.tudalgo.algoutils.student.annotation.StudentImplementationRequired; - -/** - * Represents a factory for Peano number expressions. - */ -public class PeanoNumberExpressionFactory { - /** - * Converts an array of number expressions to an array of Peano number expressions. - * - * @param numberExpressions the number expressions to convert - * @return the converted Peano number expressions - */ - @StudentImplementationRequired - public static PeanoNumberExpression[] fromNumberExpressions(NumberExpression[] numberExpressions) { - PeanoNumberExpression[] peanoNumberExpressions = new PeanoNumberExpression[numberExpressions.length]; - - for (int i = 0; i < numberExpressions.length; i++) { - peanoNumberExpressions[i] = new ConvertNumberToPeanoExpressionImpl().convert(numberExpressions[i]); - } - - return peanoNumberExpressions; - } - - /** - * Folds an array of Peano number expressions into a single Peano number expression. - * - * @param peanoNumberExpressions the Peano number expressions to fold - * @param initial the initial Peano number expression - * @param operation the operation to apply - * @return the folded Peano number expression - */ - @StudentImplementationRequired - public static PeanoNumberExpression fold(PeanoNumberExpression[] peanoNumberExpressions, PeanoNumberExpression initial, PeanoArithmeticExpression operation) { - PeanoNumberExpression result = initial; - for (PeanoNumberExpression peanoNumberExpression : peanoNumberExpressions) { - result = operation.evaluate(result, peanoNumberExpression); - } - return result; - } -} diff --git a/solution/H07/src/main/java/h07/peano/Successor.java b/solution/H07/src/main/java/h07/peano/Successor.java deleted file mode 100644 index 261f24f..0000000 --- a/solution/H07/src/main/java/h07/peano/Successor.java +++ /dev/null @@ -1,20 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.DoNotTouch; - -/** - * Represents a successor of a natural number in Peano arithmetic. - */ -@DoNotTouch -public class Successor extends NaturalNumber { - public final NaturalNumber predecessor; - - public Successor(NaturalNumber predecessor) { - this.predecessor = predecessor; - } - - @Override - public String toString() { - return "S(" + predecessor.toString() + ")"; - } -} diff --git a/solution/H07/src/main/java/h07/peano/Zero.java b/solution/H07/src/main/java/h07/peano/Zero.java deleted file mode 100644 index 4aa12d9..0000000 --- a/solution/H07/src/main/java/h07/peano/Zero.java +++ /dev/null @@ -1,14 +0,0 @@ -package h07.peano; - -import org.tudalgo.algoutils.student.annotation.DoNotTouch; - -/** - * Represents the number zero in Peano arithmetic. - */ -@DoNotTouch -public class Zero extends NaturalNumber { - @Override - public String toString() { - return "Z"; - } -} diff --git a/solution/H07/src/test b/solution/H07/src/test new file mode 120000 index 0000000..b48ee30 --- /dev/null +++ b/solution/H07/src/test @@ -0,0 +1 @@ +/home/osh/Desktop/FOP-2425-Marathon/H07/src/test \ No newline at end of file diff --git a/solution/H07/src/test/java/h07/ExampleJUnitTest.java b/solution/H07/src/test/java/h07/ExampleJUnitTest.java deleted file mode 100644 index 0dd0ee9..0000000 --- a/solution/H07/src/test/java/h07/ExampleJUnitTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package h07; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.*; - -/** - * An example JUnit test class. - */ -public class ExampleJUnitTest { - - @Test - public void testAddition() { - assertEquals(2, 1 + 1); - } -}