diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/ch/epfl/xblast/Lists.java | 35 |
1 files changed, 30 insertions, 5 deletions
diff --git a/src/ch/epfl/xblast/Lists.java b/src/ch/epfl/xblast/Lists.java index f541b37..4ea45c2 100644 --- a/src/ch/epfl/xblast/Lists.java +++ b/src/ch/epfl/xblast/Lists.java | |||
@@ -1,8 +1,6 @@ | |||
1 | package ch.epfl.xblast; | 1 | package ch.epfl.xblast; |
2 | 2 | ||
3 | import java.util.ArrayList; | 3 | import java.util.*; |
4 | import java.util.Collections; | ||
5 | import java.util.List; | ||
6 | import java.util.stream.Collectors; | 4 | import java.util.stream.Collectors; |
7 | import java.util.stream.Stream; | 5 | import java.util.stream.Stream; |
8 | 6 | ||
@@ -45,12 +43,39 @@ public final class Lists { | |||
45 | } | 43 | } |
46 | 44 | ||
47 | /** | 45 | /** |
46 | * Returns a copy of the given list with element e inserted at index i. | ||
47 | * | ||
48 | * @param l the list | ||
49 | * @param i the insertion index | ||
50 | * @param e the element to insert | ||
51 | * @param <T> the type of the list's elements | ||
52 | * @return a copy of the list with the element inserted | ||
53 | */ | ||
54 | public static <T> List<T> inserted(List<T> l, int i, T e) { | ||
55 | List<T> r = new LinkedList<>(l); | ||
56 | r.add(i, e); | ||
57 | return r; | ||
58 | } | ||
59 | |||
60 | /** | ||
48 | * Returns all the permutations of the elements of the given list | 61 | * Returns all the permutations of the elements of the given list |
49 | * | 62 | * |
50 | * @param l given list | 63 | * @param l given list |
64 | * @param <T> the type of the list's elements | ||
51 | * @return a list of all the permutations of the list | 65 | * @return a list of all the permutations of the list |
66 | * @throws IllegalArgumentException if the given list is null | ||
52 | */ | 67 | */ |
53 | public static <T> List<List<T>> permutations(List<T> l) { | 68 | public static <T> List<List<T>> permutations(List<T> l) { |
54 | return null; | 69 | if (l == null) throw new IllegalArgumentException(); |
70 | if (l.size() <= 1) return Collections.singletonList(l); | ||
71 | if (l.size() == 2) return Arrays.asList(l, Lists.reversed(l)); | ||
72 | |||
73 | List<List<T>> p = new LinkedList<>(); | ||
74 | for (List<T> sp : Lists.permutations(l.subList(1, l.size()))) | ||
75 | for (int i = 0; i <= sp.size(); ++i) | ||
76 | p.add(Lists.inserted(sp, i, l.get(0))); | ||
77 | |||
78 | return p; | ||
55 | } | 79 | } |
80 | |||
56 | } | 81 | } |