Skip to content

Instantly share code, notes, and snippets.

@nakaly
Created January 25, 2017 15:02
Show Gist options
  • Save nakaly/f8ee394fd25e901421d9789eb224c1ed to your computer and use it in GitHub Desktop.
Save nakaly/f8ee394fd25e901421d9789eb224c1ed to your computer and use it in GitHub Desktop.
MakingProgramingGroup (better algorithm)
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class MakingProgramingGroup {
public static void main(String... args) {
List<String> allMembers = Arrays.asList("1", "2", "3", "4", "5", "6");
pairs(allMembers).forEach(group -> System.out.println("selectedGroup(better):" + group.stream().map(pair -> pair.stream().collect(Collectors.joining("&"))).collect(Collectors.joining(","))));
}
private static <T> List<List<List<T>>> pairs(List<T> list) {
T first = list.get(0);
List<T> rest = list.subList(1, list.size());
return IntStream.range(0, rest.size())
.mapToObj(i -> Stream.concat(Stream.of(Arrays.asList(first, rest.get(i))),
IntStream.range(1, list.size() / 2)
.mapToObj(j -> pair(rest, i, j)))
.collect(Collectors.toList()))
.collect(Collectors.toList());
}
private static <T> List<T> pair(List<T> list, int index, int offset) {
return Arrays.asList(list.get((index - offset + list.size()) % list.size()),
list.get((index + offset) % list.size()));
}
}
@nakaly
Copy link
Author

nakaly commented Jan 25, 2017

result

selectedGroup(better):1&2,6&3,5&4
selectedGroup(better):1&3,2&4,6&5
selectedGroup(better):1&4,3&5,2&6
selectedGroup(better):1&5,4&6,3&2
selectedGroup(better):1&6,5&2,4&3

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment