78 lines
3.2 KiB
Java
78 lines
3.2 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() {
|
|
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);
|
|
}
|
|
}
|