summaryrefslogtreecommitdiff
path: root/labs/lab05_permutation
diff options
context:
space:
mode:
Diffstat (limited to 'labs/lab05_permutation')
-rw-r--r--labs/lab05_permutation/Permutation.java51
-rw-r--r--labs/lab05_permutation/PermutationTester.java129
-rw-r--r--labs/lab05_permutation/lab05_permutation.pdfbin0 -> 76573 bytes
3 files changed, 180 insertions, 0 deletions
diff --git a/labs/lab05_permutation/Permutation.java b/labs/lab05_permutation/Permutation.java
new file mode 100644
index 0000000..b0cc541
--- /dev/null
+++ b/labs/lab05_permutation/Permutation.java
@@ -0,0 +1,51 @@
+import java.util.ArrayList;
+
+
+public class Permutation
+{
+ public static ArrayList<ArrayList<Integer>> permutation(final ArrayList<Integer> olist)
+ {
+ ArrayList<Integer> list = new ArrayList<Integer>();
+ for(Integer i : olist)
+ {
+ list.add(i);
+ }
+ //System.out.println("[ME]Permutateing " + list);
+ ArrayList<ArrayList<Integer>> output = new ArrayList<ArrayList<Integer>>();
+ //System.out.println("[ME] Size is " + list.size());
+ if(list.size() <= 1)
+ {
+ output.add(list);
+ }
+
+ else
+ {
+ ArrayList<Integer> newlist = list;
+ for(Integer i=0; i < list.size(); i++)
+ {
+ //System.out.println("[ME]First element for this permutation is " + newlist.get(0));
+ Integer firstEntry = newlist.remove(0);
+ for(ArrayList<Integer> l : permutation(newlist))
+ {
+ //System.out.println("[ME]This arraylist" + l);
+ ArrayList<Integer> tmp1 = new ArrayList<Integer>();
+ //ArrayList<Integer> tmp2 = new ArrayList<Integer>();
+ tmp1.add(firstEntry);
+ for(Integer i2 : l)
+ {
+ tmp1.add(i2);
+ //tmp2.add(i2);
+ }
+ //tmp2.add(firstEntry);
+ //System.out.println("[ME] This full permutation is " + tmp1 + ", i is " + i + " and size is " + list.size());
+ output.add(tmp1);
+ //output.add(tmp2);
+ }
+ newlist.add(firstEntry);
+ }
+ }
+
+ //System.out.println("[ME] Returning " + output);
+ return output;
+ }
+}
diff --git a/labs/lab05_permutation/PermutationTester.java b/labs/lab05_permutation/PermutationTester.java
new file mode 100644
index 0000000..2c56d3b
--- /dev/null
+++ b/labs/lab05_permutation/PermutationTester.java
@@ -0,0 +1,129 @@
+import java.util.ArrayList;
+
+
+public class PermutationTester
+{
+ public static void main(String[] args)
+ {
+ int point = 0;
+ ArrayList<Integer> list = new ArrayList<Integer>();
+ ArrayList<ArrayList<Integer>> result;
+
+ for(int i = 1; i <= 5; i++)
+ {
+ System.out.println("Testing permutation with " + i + " element(s)");
+ list.add(i);
+ /*Take this out*///System.out.println("[ME]Before" + list);
+ result = Permutation.permutation(list);
+ /*Take this out*///System.out.println("[ME]After" + list);
+ System.out.println("Your code said, the permutation of " + list + " is as follows:");
+ System.out.println(result);
+
+ boolean result1 = checkPermutationSize(list, result);
+ boolean result2 = checkPermutation(list, result);
+ if(result1 && result2)
+ {
+ point += 2;
+ System.out.println("Your current point is " + point + ".");
+ System.out.println();
+ }
+ else
+ {
+ System.out.println("Your current point is " + point + ".");
+ System.out.println("There is someting wrong with your method permutation().");
+ System.out.println("Fix your code and run this tester class again.");
+ break;
+ }
+ }
+ }
+
+ private static int factorial(int n)
+ {
+ if(n == 0)
+ return 1;
+ else
+ return n * factorial(n - 1);
+ }
+
+ private static boolean checkPermutation(ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result)
+ {
+ int numberOfElements = list.size();
+ int numberOfResults = result.size();
+
+ System.out.print("Check the size of each element: ");
+ for(int i = 0; i < numberOfResults; i++)
+ {
+ if(result.get(i).size() != list.size())
+ {
+ System.out.println("FAIL");
+ System.out.println("Every element in your result should contains " + numberOfElements + " elements.");
+ System.out.println("But an element of your result contains " + result.get(i).size() + " elements.");
+ return false;
+ }
+ }
+
+ System.out.println("PASS");
+
+ System.out.print("Check for duplicate elements: ");
+
+ for(int i = 0; i < numberOfResults; i++)
+ {
+ ArrayList<Integer> temp = result.get(i);
+
+ for(int j = i + 1; j < numberOfResults; j++)
+ {
+ if(temp.equals(result.get(j)))
+ {
+ System.out.println("FAIL");
+ System.out.println("Your result contains duplicate items which is " + temp + ".");
+ return false;
+ }
+ }
+ }
+
+ System.out.println("PASS");
+
+ System.out.print("Check each element: ");
+ for(int i = 0; i < numberOfResults; i++)
+ {
+ ArrayList<Integer> temp = result.get(i);
+
+ for(int j = 0; j < numberOfElements; j++)
+ {
+ int aNumber = list.get(j);
+
+ if(!temp.contains(aNumber))
+ {
+ System.out.println("FAIL");
+ System.out.println("The element " + temp + " in your result does not contain every element in " + list + ".");
+ }
+ }
+ }
+
+ System.out.println("PASS");
+
+ return true;
+ }
+
+ private static boolean checkPermutationSize(ArrayList<Integer> list, ArrayList<ArrayList<Integer>> result)
+ {
+ System.out.print("Check the size of the result: ");
+
+ int numberOfElements = list.size();
+ int numberOfResults = result.size();
+
+ if(factorial(numberOfElements) != numberOfResults)
+ {
+ System.out.println("FAIL");
+ System.out.println(" The list " + list + " contains " + numberOfElements + " elements.");
+ System.out.println(" Permutation of " + list + " should contains " + factorial(numberOfElements) + "elements.");
+ System.out.println(" But your result contains " + numberOfResults + " elements.");
+ return false;
+ }
+ else
+ {
+ System.out.println("PASS");
+ return true;
+ }
+ }
+} \ No newline at end of file
diff --git a/labs/lab05_permutation/lab05_permutation.pdf b/labs/lab05_permutation/lab05_permutation.pdf
new file mode 100644
index 0000000..fffd055
--- /dev/null
+++ b/labs/lab05_permutation/lab05_permutation.pdf
Binary files differ