-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFortyTwoMain.java
More file actions
52 lines (45 loc) · 2.88 KB
/
FortyTwoMain.java
File metadata and controls
52 lines (45 loc) · 2.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
import java.util.ServiceLoader;
import nat.BinaryOperation;
import nat.Nat;
import nat.NatFactory;
import nat.OperationNotFoundException;
import nat.WrongArityException;
public class FortyTwoMain {
public static void main(String[] args) {
NatFactory factory = ServiceLoader.load(NatFactory.class).iterator().next();
Nat forty = factory.getZero().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor();
Nat two = factory.getZero().successor().successor();
BinaryOperation add, div, mod;
try {
add = factory.getOperation("ADD").asBinaryOperation();
div = factory.getOperation("DIV").asBinaryOperation();
mod = factory.getOperation("MOD").asBinaryOperation();
} catch(OperationNotFoundException e) {
System.err.println("Error.");
return;
} catch(WrongArityException e) {
System.err.println("Error!");
return;
}
Nat result = add.compute(forty, two);
System.out.println(numberToString(factory, result, div, mod));
}
private static String numberToString(NatFactory factory, Nat result, BinaryOperation div, BinaryOperation mod) {
if(result.equals(factory.getZero())) return "0";
else if(result.equals(factory.getZero().successor())) return "1";
else if(result.equals(factory.getZero().successor().successor())) return "2";
else if(result.equals(factory.getZero().successor().successor().successor())) return "3";
else if(result.equals(factory.getZero().successor().successor().successor().successor())) return "4";
else if(result.equals(factory.getZero().successor().successor().successor().successor().successor())) return "5";
else if(result.equals(factory.getZero().successor().successor().successor().successor().successor().successor())) return "6";
else if(result.equals(factory.getZero().successor().successor().successor().successor().successor().successor().successor())) return "7";
else if(result.equals(factory.getZero().successor().successor().successor().successor().successor().successor().successor().successor())) return "8";
else if(result.equals(factory.getZero().successor().successor().successor().successor().successor().successor().successor().successor().successor())) return "9";
else {
Nat ten = factory.getZero().successor().successor().successor().successor().successor().successor().successor().successor().successor().successor();
Nat ones = mod.compute(result, ten);
Nat tens = div.compute(result, ten);
return numberToString(factory, tens, div, mod) + numberToString(factory, ones, div, mod);
}
}
}