Our Permutation code in Java.
Permutation Class File:
package miscellaneous;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
public class Permutation extends Combination {
private List<String[]> local_store;
protected List<String[]> perm_store;
private int index;
public Permutation() {
super();
}
// till the ground for shuffle to grind on
public List<String[]> possibleWordPermutations(List<String> candidates, int size) {
perm_store = new ArrayList<>();
possibleWordCombinations(candidates, size);
// illegal 'r' value
if (comb_store.isEmpty() || r == 1) {
perm_store = comb_store;
} else {
String[][] last_two = new String[2][2];
for (int i = 0; i < comb_store.size(); i++) {
index = r - 1;
// copy up last two elements of 'comb_store.get(i)'
last_two[0][0] = last_two[1][1] = comb_store.get(i)[index--];
last_two[0][1] = last_two[1][0] = comb_store.get(i)[index--];
local_store = new ArrayList<>();
local_store.add(last_two[0]);
local_store.add(last_two[1]);
if (r > 2) {
shuffleWord(local_store, i);
}
perm_store.addAll(local_store);
}
}
return perm_store;
}
private void shuffleWord(List<String[]> arg_store, int i) {
local_store = new ArrayList<>();
List<String> members;
for (int j = 0; j < arg_store.size(); j++) {
members = new ArrayList<>();
members.addAll(Arrays.asList(arg_store.get(j)));
// add 'index' 'comb_store.get(i)' element to this list of members
members.add(comb_store.get(i)[index]);
int shift_index = members.size();
// shuffle this pack of words
while (shift_index > 0) {
// skip if already in store
if (!local_store.contains(members.toArray(new String[0]))) {
local_store.add(members.toArray(new String[0]));
}
// interchange these two neighbours
if (--shift_index > 0 && !members.get(shift_index).equals(members.get(shift_index - 1))) {
Collections.swap(members, shift_index - 1, shift_index);
}
}
}
// Are there any elements left? repeat if yes
if (index-- > 0) {
shuffleWord(local_store, i);
}
}
}
Main Class:
package miscellaneous;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
public class Miscellaneous {
public static void main(String[] args) {
List<String> goods = new ArrayList<>();
goods.add("Eno");
goods.add("Chidi");
goods.add("Olu");
goods.add("Ahmed");
goods.add("Osas");
goods.add("Gbeda");
Permutation perm = new Permutation();
List<String[]> result = perm.possibleWordPermutations(goods, 3);
System.out.println(perm.words + " permutation " + perm.r + ":\n");
int i = 0;
for (String[] set : result) {
System.out.println(++i + ": " + Arrays.toString(set) + ";");
}
System.out.println("\nNumber of ways is " + result.size() + ".");
}
}
Try it out!
Elegance (0.0)