Advertisement
anas_harby

Untitled

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