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()); } }