86 lines
3 KiB
Java
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());
|
|
}
|
|
}
|