Advertisement
Guest User

Untitled

a guest
May 2nd, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.81 KB | None | 0 0
  1. public class Table {
  2.  
  3. private ArrayList<ArrayList<ImplicantGroup>> table = new ArrayList<>();
  4. private ArrayList<Implicant> primes = new ArrayList<>();
  5. private ArrayList<Integer> expression = new ArrayList<>();
  6. private ArrayList<String> Ans = new ArrayList<>();
  7. private ArrayList<ArrayList<String>> allAnswers = new ArrayList<>();
  8. private HashMap<Integer, Boolean> visited = new HashMap<>();
  9. private HashMap<Integer, Integer> hashAnswer = new HashMap<>();
  10. private boolean[] taken;
  11. String ret = new String();
  12. public void initialize(String expression, String dontCare) {
  13. for (int i = 0; i < 500; i++)
  14. Ans.add("");
  15. int maxBinaryLength = 0;
  16. ArrayList<Implicant> initialExpression = new ArrayList<>();
  17. Pattern numPattern = Pattern.compile("\\d+");
  18. String totalExpression = expression + " " + dontCare;
  19. Matcher numMatcher = numPattern.matcher(totalExpression);
  20. while (numMatcher.find()) {
  21. String num = numMatcher.group();
  22. Integer temp = Integer.valueOf(num);
  23. String binary = Integer.toBinaryString(temp);
  24. maxBinaryLength = Math.max(maxBinaryLength, binary.length());
  25. }
  26. numMatcher = numPattern.matcher(totalExpression);
  27. while (numMatcher.find()) {
  28. HashSet<Integer> decimalNum = new HashSet<>();
  29. String num = numMatcher.group();
  30. Integer temp = Integer.valueOf(num);
  31. if (hashAnswer.get(temp) != null)
  32. continue;
  33. hashAnswer.put(temp, 0);
  34. decimalNum.add(temp);
  35. String binary = Integer.toBinaryString(temp);
  36. for (int i = binary.length(); i < maxBinaryLength; i++)
  37. binary = "0" + binary;
  38.  
  39. System.out.println(binary);
  40. initialExpression.add(new Implicant(binary, decimalNum, false));
  41. }
  42. numMatcher = numPattern.matcher(expression);
  43. while (numMatcher.find()) {
  44. Integer temp = Integer.valueOf(numMatcher.group());
  45. if (visited.get(temp) == null)
  46. visited.put(temp, true);
  47. else
  48. continue;
  49. this.expression.add(temp);
  50. }
  51. table.add(divideIntoGroups(initialExpression, maxBinaryLength));
  52. }
  53.  
  54. private ArrayList<ImplicantGroup> divideIntoGroups(ArrayList<Implicant> initial, int maxBinaryLength) {
  55. ArrayList<ImplicantGroup> ret = new ArrayList<>();
  56. for (int i = 0; i <= maxBinaryLength; i++) {
  57. ImplicantGroup temp = new ImplicantGroup();
  58. for (int j = 0; j < initial.size(); j++) {
  59. if (initial.get(j).countOnes() == i)
  60. temp.group.add(initial.get(j));
  61. }
  62. ret.add(temp);
  63. }
  64.  
  65. return ret;
  66. }
  67.  
  68. public void minimizeMyTable() {
  69.  
  70. while (true) {
  71. ArrayList<ImplicantGroup> newGroup = new ArrayList<>();
  72. ArrayList<ImplicantGroup> currentList = table.get(table.size() - 1);
  73. ImplicantGroup temp;
  74. for (int i = 0; i < currentList.size() - 1; i++) {
  75. temp = ImplicantGroup.createGroup(currentList.get(i), currentList.get(i + 1));
  76. if (temp.size() != 0)
  77. newGroup.add(temp);
  78. }
  79. if (newGroup.size() != 0)
  80. table.add(newGroup);
  81. else
  82. break;
  83. }
  84. for (int i = 0; i < table.size(); i++) {
  85. for (ImplicantGroup j : table.get(i)) {
  86. for (Implicant k : j.group) {
  87. if (k.taken)
  88. k.binary += " \u2713";
  89. else
  90. primes.add(k);
  91. }
  92. }
  93. }
  94. taken = new boolean[primes.size()];
  95. Arrays.fill(taken, new Boolean(false));
  96. }
  97.  
  98. void checkAnswer(int cnt) {
  99. for (int i = 0; i < expression.size(); i++)
  100. if (hashAnswer.get(expression.get(i)) == 0)
  101. return;
  102. if (cnt < Ans.size()) {
  103. allAnswers.clear();
  104. Ans = new ArrayList<String>();
  105. for (int i = 0; i < taken.length; i++) {
  106. if (taken[i] == true)
  107. Ans.add(primes.get(i).binary);
  108. }
  109. allAnswers.add(Ans);
  110. } else if (cnt == Ans.size()) {
  111. Ans = new ArrayList<String>();
  112. for (int i = 0; i < taken.length; i++) {
  113. if (taken[i] == true)
  114. Ans.add(primes.get(i).binary);
  115. }
  116. allAnswers.add(Ans);
  117. }
  118. }
  119.  
  120. public void getAns(int i, int cnt) {
  121.  
  122. if (i == primes.size()) {
  123. checkAnswer(cnt);
  124. return;
  125. }
  126.  
  127. for (int j : primes.get(i).terms) {
  128. hashAnswer.put(j, hashAnswer.get(j) + 1);
  129. }
  130. taken[i] = true;
  131. getAns(i + 1, cnt + 1);
  132. for (int j : primes.get(i).terms)
  133. hashAnswer.put(j, hashAnswer.get(j) - 1);
  134. taken[i] = false;
  135. getAns(i + 1, cnt);
  136. }
  137.  
  138. public String printMyTable() {
  139. ret = "";
  140. for (int i = 0; i < table.size(); i++) {
  141. for (int j = 0; j < table.get(i).size(); j++) {
  142. for (int k = 0; k < table.get(i).get(j).size(); k++){
  143. ArrayList<Integer> temp = new ArrayList<>(table.get(i).get(j).group.get(k).terms);
  144. for (int h = 0; h < temp.size(); h++) {
  145. System.out.print(temp.get(h) + " ");
  146. ret += temp.get(h).toString() + " ";
  147. }
  148. System.out.print("|");
  149. // ret += "|";
  150. System.out.println(table.get(i).get(j).group.get(k).binary);
  151. // ret += table.get(i).get(j).group.get(k).binary + "\n";
  152. }
  153. System.out.println("-------------------------");
  154. // ret += "-------------------------\n" ;
  155. }
  156. System.out.println("=========================================");
  157. // ret += "=========================================\n";
  158. }
  159. getAns(0, 0);
  160. HashSet<ArrayList<String>> duplicatesRemover = new HashSet<>(allAnswers);
  161. allAnswers = new ArrayList<>(duplicatesRemover);
  162. for (ArrayList<String> i : allAnswers) {
  163. for (int j = 0; j < i.size(); j++) {
  164. for (int k = 0; k < i.get(j).length(); k++) {
  165. if (i.get(j).charAt(k) == '-')
  166. continue;
  167. System.out.print((char) (k + (int) 'A'));
  168. ret += (char) (k + (int) 'A');
  169. if (i.get(j).charAt(k) == '0') {
  170. System.out.print("`");
  171. ret += " ";
  172. }
  173. }
  174. if (j != i.size() - 1){
  175. System.out.print(" + ");
  176. ret += " + ";
  177. }
  178.  
  179. }
  180. System.out.println();
  181. // ret += "\n";
  182. }
  183. return ret;
  184. }
  185. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement