import
java.util.*;
public
class
Main {
public
static
ArrayList<Integer> add(ArrayList<Integer> a) {
ArrayList<Integer> res =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < a.size() -
1
; i++) {
res.add(a.get(i) + a.get(i +
1
));
}
return
res;
}
public
static
ArrayList<Integer> sub(ArrayList<Integer> a) {
ArrayList<Integer> res =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < a.size() -
1
; i++) {
res.add(a.get(i) - a.get(i +
1
));
}
return
res;
}
public
static
ArrayList<Integer> mul(ArrayList<Integer> a) {
ArrayList<Integer> res =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < a.size() -
1
; i++) {
res.add(a.get(i) * a.get(i +
1
));
}
return
res;
}
public
static
ArrayList<Integer> div(ArrayList<Integer> a) {
ArrayList<Integer> res =
new
ArrayList<Integer>();
for
(
int
i =
0
; i < a.size() -
1
; i++) {
res.add((a.get(i) ==
0
|| a.get(i +
1
) ==
0
)
?
0
: (
int
) Math.floor(a.get(i) / a.get(i +
1
)));
}
return
res;
}
public
static
ArrayList<Integer> Operation(
int
i, ArrayList<Integer> A) {
switch
(i) {
case
1
:
return
add(A);
case
2
:
return
sub(A);
case
3
:
return
mul(A);
case
0
:
return
div(A);
default
:
return
new
ArrayList<Integer>();
}
}
public
static
void
main(String[] args)
{
HashMap<Character, Integer> d =
new
HashMap<Character, Integer>();
d.put(
'/'
,
0
);
d.put(
'*'
,
0
);
d.put(
'-'
,
0
);
d.put(
'+'
,
0
);
ArrayList<Integer> arr =
new
ArrayList<Integer>();
arr.add(
5
);
arr.add(-
2
);
arr.add(-
1
);
arr.add(
2
);
arr.add(
1
);
arr.add(
4
);
arr.add(
5
);
int
c =
1
;
while
(arr.size() !=
1
) {
int
x = c %
4
;
switch
(x) {
case
1
:
d.put(
'+'
, d.get(
'+'
) +
1
);
arr = Operation(x, arr);
break
;
case
2
:
d.put(
'-'
, d.get(
'-'
) +
1
);
arr = Operation(x, arr);
break
;
case
3
:
d.put(
'*'
, d.get(
'*'
) +
1
);
arr = Operation(x, arr);
break
;
case
0
:
d.put(
'/'
, d.get(
'/'
) +
1
);
arr = Operation(x, arr);
break
;
}
c++;
}
System.out.println(
"Reduced value: "
+ arr.get(
0
));
System.out.println(
"Operations Performed:"
);
for
(Map.Entry<Character, Integer> entry : d.entrySet()) {
System.out.println(entry.getKey() +
": "
+ entry.getValue());
}
}}