Problem Statement
You've designed a computer and implemented all the common arithmetic operators: addition, subtraction, multiplication and integer division. However, your budget was very limited, so you could only afford to place a single register in the computer. The register can store any non-negative integer value. Since there is only one register, there is no need to identify the store location or the operands of each operation or its result. The programming language has four instructions: '+', '-', '*' and '/'. Each instruction performs the corresponding operation using the value in the register as both its parameters. It then stores the result in the same register, overwriting the previous content.
A program for your computer is a sequential list of zero or more instructions. You want to show that, even with its limitations, your newly constructed computer is powerful. You will be given two
Definition
- Class:
- OneRegister
- Method:
- getProgram
- Parameters:
- int, int
- Returns:
- String
- Method signature:
- String getProgram(int s, int t)
- (be sure your method is public)
Notes
- A string comes lexicographically earlier than another one of the same length if and only if it contains a symbol with a lower ASCII code in the first position at which they differ. The operators in ascending order of ASCII code are: '*', '+', '-' and '/'.
- If the division operation is used when the register contains a zero, the program will give an error and terminate with a zero value in the register.
Constraints
- s and t will be between 1 and 1000000000 (10^9), inclusive.
Examples
7
392
Returns: "+*+"
The program executes as follows: Reg | Ins | Res -----+-----+----- 7 | + | 14 14 | * | 196 196 | + | 392
7
256
Returns: "/+***"
4
256
Returns: "**"
7
7
Returns: ""
A trivial program.
7
9
Returns: ":-("
No solution.
10
1
Returns: "/"
5
1250
Returns: "**+"
4099
4096
Returns: "/+*+**"
1000000000
536870912
Returns: "/+*+*+**+"
11
214358881
Returns: "***"
1
1
Returns: ""
1
2
Returns: "+"
1
4
Returns: "+*"
1
8
Returns: "+*+"
1
16
Returns: "+**"
1
128
Returns: "+*+*+"
1
256
Returns: "+***"
1
564
Returns: ":-("
1
65536
Returns: "+****"
1
262144
Returns: "+***+*"
1
1000000000
Returns: ":-("
2
256
Returns: "***"
3
4
Returns: "/+*"
3
16
Returns: "/+**"
3
59049
Returns: ":-("
4
2
Returns: "/+"
5
125
Returns: ":-("
5
6250000
Returns: "*+**"
6
144
Returns: "+*"
8
4
Returns: "/+*"
8
268435456
Returns: "*+**"
9
43046721
Returns: "***"
9
172186884
Returns: "**+*"
10
10245
Returns: ":-("
10
40000
Returns: "*+*"
10
100000000
Returns: "***"
11
214358881
Returns: "***"
13
456976
Returns: "+**"
14
802816
Returns: "++++++*"
17
83521
Returns: "**"
18
104976
Returns: "**"
19
16
Returns: "/+**"
21
168
Returns: "+++"
22
123904
Returns: "++++*"
22
234256
Returns: "**"
23
1083392
Returns: "+++++*+"
23
771751936
Returns: "+++++++++++++++++++++++++"
27
2916
Returns: "+*"
28
614656
Returns: "**"
32
1024
Returns: "*"
32
1048576
Returns: "**"
33
264
Returns: "+++"
41
2825761
Returns: "**"
43
172
Returns: "++"
48
73728
Returns: "++*+"
49
392
Returns: "+++"
49
5764801
Returns: "**"
50
838860800
Returns: "++++++++++++++++++++++++"
51
6765201
Returns: "**"
53
11236
Returns: "+*"
53
889192448
Returns: "++++++++++++++++++++++++"
62
260046848
Returns: "++++++++++++++++++++++"
66
18974736
Returns: "**"
68
21381376
Returns: "**"
72
1327104
Returns: "++++*"
74
592
Returns: "+++"
74
620756992
Returns: "+++++++++++++++++++++++"
75
31640625
Returns: "**"
76
46208
Returns: "+*+"
80
256
Returns: "/+***"
80
102400
Returns: "++*"
81
648
Returns: "+++"
83
881792
Returns: "+++*+"
86
875213056
Returns: "+**"
92
71639296
Returns: "**"
94
788529152
Returns: "+++++++++++++++++++++++"
96
768
Returns: "+++"
96
9437184
Returns: "+++++*"
97
88529281
Returns: "**"
124
64
Returns: "/+*+*"
128
96
Returns: ":-("
157
1024
Returns: "/+**+*"
257
256
Returns: "/+***"
454
256
Returns: "/+***"
637
512
Returns: "/+***+"
43393
65536
Returns: "/+****"
68467
68467
Returns: ""
102968
65536
Returns: "/+****"
999999
99999999
Returns: ":-("
1002736
1048576
Returns: "/+**+**"
3431332
2097152
Returns: "/+**+**+"
30199283
67108864
Returns: "/+*+**+*"
193221366
536870912
Returns: "/+*+*+**+"
1000000000
2
Returns: "/+"
1000000000
4
Returns: "/+*"
1000000000
16
Returns: "/+**"
1000000000
256
Returns: "/+***"
1000000000
65536
Returns: "/+****"
1000000000
1000000000
Returns: ""
512
65536
Returns: "/+****"
t is obtainable without division, but starting with division is faster.
10
1000000000
Returns: ":-("
465456
16769023
Returns: ":-("
4
32768
Returns: "+*+*+"
12345678
260846532
Returns: ":-("
29382974
293829747
Returns: ":-("
2
1
Returns: "/"
2
4
Returns: "*"
14
12
Returns: ":-("
666666670
886389896
Returns: ":-("
13
999999999
Returns: ":-("
65537
131073
Returns: ":-("
32
64
Returns: "+"
1
99999999
Returns: ":-("
5
40000
Returns: "+*+*"
5
2
Returns: "/+"
3
9
Returns: "*"
3
6718464
Returns: "+**+*"
77
64
Returns: "/+*+*"
1
536870912
Returns: "+*+*+**+"
7
368947264
Returns: "*+*+*"
7
1
Returns: "/"
3
81
Returns: "**"
350490028
991619984
Returns: ":-("
67
1000000000
Returns: ":-("
268435457
536870913
Returns: ":-("
10
2
Returns: "/+"
1000000000
999999999
Returns: ":-("
1
1024
Returns: "+**+*"
524288
536870912
Returns: "/+*+*+**+"
3
402653184
Returns: "+++++++++++++++++++++++++++"
7
114688
Returns: "++++++++++++++"
9
36
Returns: "++"
434
134217728
Returns: "/+*+**+*+"
1
43
Returns: ":-("
10
4
Returns: "/+*"
17
16
Returns: "/+**"
10889
10
Returns: ":-("
3
805306368
Returns: "++++++++++++++++++++++++++++"
12345
2
Returns: "/+"
3
256
Returns: "/+***"
999999999
808348673
Returns: ":-("
3
60466176
Returns: ":-("
7
2048
Returns: "/+**+*+"
128
256
Returns: "+"
8
16
Returns: "+"
7
49
Returns: "*"
162
104976
Returns: "+*"
1
5
Returns: ":-("
324987325
382975023
Returns: ":-("
3
2
Returns: "/+"
132
2
Returns: "/+"
1
805306368
Returns: ":-("
2
6
Returns: ":-("
65538
262148
Returns: ":-("
343
33554432
Returns: "/+*+***+"
3
1000000000
Returns: ":-("
77
2097152
Returns: "/+**+**+"
10000000
1
Returns: "/"
9
589824
Returns: "++++++++++++++++"
10000
100000000
Returns: "*"
6
787346436
Returns: ":-("
536870913
536870912
Returns: "/+*+*+**+"
50
100
Returns: "+"
7
1000000000
Returns: ":-("
7
8
Returns: "/+*+"
500000000
1000000000
Returns: "+"
7
268435456
Returns: "/+*+*+**"
3
11
Returns: ":-("
6
18
Returns: ":-("
16384
134217728
Returns: "/+*+**+*+"
256
1024
Returns: "++"
1
64
Returns: "+*+*"
17
8
Returns: "/+*+"
31000
961000000
Returns: "*"
512
131072
Returns: "/+****+"
500000
891896832
Returns: ":-("
3
536870912
Returns: "/+*+*+**+"
1024
65536
Returns: "++++++"
5
83886080
Returns: "++++++++++++++++++++++++"
64
256
Returns: "++"
7
14680064
Returns: "+++++++++++++++++++++"
2
67108864
Returns: "*+**+*"
1
3
Returns: ":-("
65500
70000
Returns: ":-("
3
65536
Returns: "/+****"