Last change
on this file was 1, checked in by Wouter Pasman, 6 years ago |
Initial import : Genius 9.0.0
|
File size:
1.2 KB
|
Rev | Line | |
---|
[1] | 1 | package agents.anac.y2017.simpleagent;
|
---|
| 2 |
|
---|
| 3 | import java.util.ArrayList;
|
---|
| 4 | import java.util.List;
|
---|
| 5 |
|
---|
| 6 | public class CartesianCalculator {
|
---|
| 7 |
|
---|
| 8 | public <T> List<List<T>> calculate(List<List<T>> input) {
|
---|
| 9 | List<List<T>> res = new ArrayList<>();
|
---|
| 10 | if (input.isEmpty()) { // if no more elements to process
|
---|
| 11 | res.add(new ArrayList<T>()); // then add empty list and return
|
---|
| 12 | return res;
|
---|
| 13 | } else {
|
---|
| 14 | process(input, res); // we need to calculate the cartesian product
|
---|
| 15 | // of input and store it in res variable
|
---|
| 16 | }
|
---|
| 17 | return res; // method completes , return result
|
---|
| 18 | }
|
---|
| 19 |
|
---|
| 20 | private <T> void process(List<List<T>> lists, List<List<T>> res) {
|
---|
| 21 | List<T> head = lists.get(0); // take first element of the list
|
---|
| 22 | List<List<T>> tail = calculate(lists.subList(1, lists.size())); // invoke
|
---|
| 23 | // calculate
|
---|
| 24 | // on
|
---|
| 25 | // remaining
|
---|
| 26 | // element,
|
---|
| 27 | // here
|
---|
| 28 | // is
|
---|
| 29 | // recursion
|
---|
| 30 |
|
---|
| 31 | for (T h : head) { // for each head
|
---|
| 32 | for (List<T> t : tail) { // iterate over the tail
|
---|
| 33 | List<T> tmp = new ArrayList<>(t.size());
|
---|
| 34 | tmp.add(h); // add the head
|
---|
| 35 | tmp.addAll(t); // and current tail element
|
---|
| 36 |
|
---|
| 37 | res.add(tmp);
|
---|
| 38 | }
|
---|
| 39 | }
|
---|
| 40 | }
|
---|
| 41 | } |
---|
Note:
See
TracBrowser
for help on using the repository browser.