FOP-2425-Marathon/H07/src/main/java/h07/Main.java
2025-04-04 15:13:13 +02:00

86 lines
3 KiB
Java

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() {
// TODO: H2.2 - uncomment to test
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() {
var ten = new PeanoAddExpression().evaluate(() -> {
return THREE;
}, () -> {
return SEVEN;
}).evaluate();
System.out.println(ten);
var _21 = new PeanoMultiplyExpression().evaluate(() -> {
return THREE;
}, () -> {
return SEVEN;
}).evaluate();
System.out.println(_21);
}
@StudentImplementationRequired
private static void filterFoldMapTests() {
int lowerBound = 1;
int upperBound = 10;
var timesTable = NumberExpressionFactory.multiplicationTable(lowerBound, upperBound);
var filtered = NumberExpressionFactory.filter(timesTable, x -> {
return x % 3 == 0;
});
var peano = PeanoNumberExpressionFactory.fromNumberExpressions(filtered);
var sum = PeanoNumberExpressionFactory.fold(peano, () -> {
return new Zero();
}, (e1, e2) -> {
return new PeanoAddExpression().evaluate(e1, e2);
});
System.out.println(new ConvertPeanoToNumberExpressionImpl().convert(sum).evaluate());
}
}