Advertisement
anas_harby

Untitled

Apr 29th, 2016
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.95 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. import java.util.*;
  4.    
  5.     public class Solver {
  6.    
  7.         static ArrayList <Integer> minterms = new ArrayList <Integer>();
  8.         static ArrayList <Integer> dontcares = new ArrayList <Integer>();
  9.         static ArrayList <ArrayList<String>> mintermsBinary = new ArrayList <ArrayList<String>>();
  10.         static ArrayList <ArrayList<String>> primeImplicants = new ArrayList <ArrayList<String>>();
  11.         static ArrayList <ArrayList<String>> comparisons = new ArrayList <ArrayList<String>>();
  12.        
  13.         static Scanner in = new Scanner(System.in);
  14.        
  15.         private static void fillArrayList() {
  16.             for(int i=0; i<8; i++)  {
  17.                 mintermsBinary.add(new ArrayList());
  18.                 primeImplicants.add(new ArrayList());
  19.                 comparisons.add(new ArrayList());
  20.             }
  21.                
  22.         }
  23.        
  24.         private static void decimalToBinary() {
  25.             fillArrayList();
  26.             for(int i=0; i<minterms.size(); i++) {
  27.                 int div = minterms.get(i), ones = 0;
  28.                 String res= "";
  29.                 while(div!=0) {
  30.                     if(div%2==1) {
  31.                         ones++;
  32.                         res = "1" + res;
  33.                     }
  34.                     else
  35.                         res = "0" + res;
  36.                     div/=2;
  37.                 }
  38.                 for(int j=0, len = res.length(); j<8-len; j++)
  39.                     res = "0" + res;
  40.                 mintermsBinary.get(ones).add(res);
  41.             }
  42.             for(int i=0; i<dontcares.size();i++) {
  43.                 int div = dontcares.get(i), ones = 0;
  44.                 String res = "";
  45.                 while(div!=0) {
  46.                     if(div%2==1) {
  47.                         ones++;
  48.                         res = "1" + res;
  49.                     }
  50.                     else
  51.                         res = "0" + res;
  52.                     div/=2;
  53.                 }
  54.                 for(int j=0, len = res.length(); j<8-len; j++)
  55.                     res = "0" + res;
  56.                 mintermsBinary.get(ones).add(res);
  57.             }
  58.             for(int i=0; i<mintermsBinary.size(); i++)
  59.                 Collections.sort(mintermsBinary.get(i));
  60.         }
  61.        
  62.         private static String differBinary(String firstMinterm, String secondMinterm) {
  63.             String result = "";
  64.             for(int i=0; i<firstMinterm.length(); i++) {
  65.                 if(firstMinterm.charAt(i) != secondMinterm.charAt(i))
  66.                     result += "-";
  67.                 else
  68.                     result += firstMinterm.charAt(i);
  69.             }
  70.             return result;
  71.         }
  72.        
  73.         private static void handleInput() {
  74.             for(int k=0; k<mintermsBinary.size()-2; k++) {
  75.                 if(mintermsBinary.get(k).isEmpty())
  76.                     continue;
  77.                 int l = k+1;
  78.                 while(l<mintermsBinary.size() && mintermsBinary.get(l).isEmpty())
  79.                     l++;
  80.                 if(l==mintermsBinary.size())
  81.                     return;
  82.                 for(int i=0; i<mintermsBinary.get(k).size(); i++) {
  83.                     for(int j=0; j<mintermsBinary.get(l).size(); j++) {
  84.                        
  85.                         String iBinary = mintermsBinary.get(k).get(i);
  86.                         String jBinary = mintermsBinary.get(l).get(j);
  87.                        
  88.                         int iDecimal = Integer.parseInt(iBinary, 2);
  89.                         int jDecimal = Integer.parseInt(jBinary, 2);
  90.                         int difference = jDecimal - iDecimal;
  91.                         float exponent =  (float) (Math.log(difference) / Math.log(2));
  92.                        
  93.                         if(difference>0 && exponent - (int) exponent ==0) {
  94.                             String differenceBinary = differBinary(iBinary, jBinary);
  95.                             boolean fDuplicate = false;
  96.                             for(int m=0; m<comparisons.get(0).size(); m++)
  97.                                 if(comparisons.get(0).get(0).equals(differenceBinary)) {
  98.                                     fDuplicate = true;
  99.                                     break;
  100.                                 }
  101.                             if(!fDuplicate) {
  102.                                 comparisons.get(0).add(differenceBinary);
  103.                                 comparisons.get(0).add(String.valueOf(iDecimal));
  104.                                 comparisons.get(0).add(String.valueOf(jDecimal));
  105.                             }
  106.                         }
  107.                         else
  108.                             continue;
  109.                     }
  110.                 }
  111.                
  112.             }
  113.         }
  114.        
  115.         public static void main(String[] args) {
  116.             System.out.println("Enter the minterms in decimal <-1 to finish>:");
  117.             while(true) {
  118.                 int input;
  119.                 input = in.nextInt();
  120.                 if(input==-1)
  121.                     break;
  122.                 minterms.add(input);
  123.             }
  124.             System.out.println("Enter the dontcares in decimal <-1 to finish>:");
  125.             while(true) {
  126.                 int input;
  127.                 input = in.nextInt();
  128.                 if(input==-1)
  129.                     break;
  130.                 dontcares.add(input);
  131.             }
  132.             decimalToBinary();
  133.             handleInput();
  134.             for(int i=0; i<comparisons.get(0).size(); i++) {
  135.                     System.out.println(comparisons.get(0).get(i));
  136.                     if((i+1)%3==0)
  137.                         System.out.println();
  138.             }
  139.         }
  140.        
  141.    
  142.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement