Advertisement
anas_harby

Untitled

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