Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.*;
- public class Solver {
- static ArrayList <Integer> minterms = new ArrayList <Integer>();
- static ArrayList <Integer> dontcares = new ArrayList <Integer>();
- static ArrayList <ArrayList<String>> mintermsBinary = new ArrayList <ArrayList<String>>();
- static ArrayList <ArrayList<String>> primeImplicants = new ArrayList <ArrayList<String>>();
- static ArrayList <ArrayList<String>> comparisons = new ArrayList <ArrayList<String>>();
- static int countPrime=0;
- static Scanner in = new Scanner(System.in);
- private static void fillArrayList() {
- for(int i=0; i<8; i++) {
- mintermsBinary.add(new ArrayList());
- primeImplicants.add(new ArrayList());
- comparisons.add(new ArrayList());
- }
- }
- private static void decimalToBinary() {
- fillArrayList();
- for(int i=0; i<minterms.size(); i++) {
- int div = minterms.get(i), ones = 0;
- String res= "";
- while(div!=0) {
- if(div%2==1) {
- ones++;
- res = "1" + res;
- }
- else
- res = "0" + res;
- div/=2;
- }
- for(int j=0, len = res.length(); j<8-len; j++)
- res = "0" + res;
- mintermsBinary.get(ones).add(res);
- }
- for(int i=0; i<dontcares.size();i++) {
- int div = dontcares.get(i), ones = 0;
- String res = "";
- while(div!=0) {
- if(div%2==1) {
- ones++;
- res = "1" + res;
- }
- else
- res = "0" + res;
- div/=2;
- }
- for(int j=0, len = res.length(); j<8-len; j++)
- res = "0" + res;
- mintermsBinary.get(ones).add(res);
- }
- for(int i=0; i<mintermsBinary.size(); i++)
- Collections.sort(mintermsBinary.get(i));
- }
- private static String differBinary(String firstMinterm, String secondMinterm) {
- String result = "";
- for(int i=0; i<firstMinterm.length(); i++) {
- if(firstMinterm.charAt(i) != secondMinterm.charAt(i))
- result += "-";
- else
- result += firstMinterm.charAt(i);
- }
- return result;
- }
- private static void handleInput() {
- for(int k=0; k<mintermsBinary.size()-2; k++) {
- if(mintermsBinary.get(k).isEmpty())
- continue;
- int l = k+1;
- while(l<mintermsBinary.size() && mintermsBinary.get(l).isEmpty())
- l++;
- if(l==mintermsBinary.size())
- return;
- for(int i=0; i<mintermsBinary.get(k).size(); i++) {
- boolean fPrime = true;
- for(int j=0; j<mintermsBinary.get(l).size(); j++) {
- String iBinary = mintermsBinary.get(k).get(i);
- String jBinary = mintermsBinary.get(l).get(j);
- int iDecimal = Integer.parseInt(iBinary, 2);
- int jDecimal = Integer.parseInt(jBinary, 2);
- int difference = jDecimal - iDecimal;
- float exponent = (float) (Math.log(difference) / Math.log(2));
- if(difference>0 && exponent - (int) exponent ==0) {
- fPrime = false;
- String differenceBinary = differBinary(iBinary, jBinary);
- boolean fDuplicate = false;
- for(int m=0; m<comparisons.get(0).size(); m++)
- if(comparisons.get(0).get(0).equals(differenceBinary)) {
- fDuplicate = true;
- break;
- }
- if(!fDuplicate) {
- comparisons.get(0).add(differenceBinary);
- comparisons.get(0).add(String.valueOf(iDecimal));
- comparisons.get(0).add(String.valueOf(jDecimal));
- }
- }
- else
- continue;
- }
- if(fPrime) {
- String primeBinary = mintermsBinary.get(k).get(i);
- int primeDecimal = Integer.parseInt(primeBinary, 2);
- primeImplicants.get(countPrime).add(primeBinary);
- primeImplicants.get(countPrime).add(String.valueOf(primeDecimal));
- countPrime++;
- }
- }
- }
- }
- public static void main(String[] args) {
- System.out.println("Enter the minterms in decimal <-1 to finish>:");
- while(true) {
- int input;
- input = in.nextInt();
- if(input==-1)
- break;
- minterms.add(input);
- }
- System.out.println("Enter the dontcares in decimal <-1 to finish>:");
- while(true) {
- int input;
- input = in.nextInt();
- if(input==-1)
- break;
- dontcares.add(input);
- }
- decimalToBinary();
- handleInput();
- for(int i=0; i<comparisons.get(0).size(); i++) {
- System.out.println(comparisons.get(0).get(i));
- if((i+1)%3==0)
- System.out.println();
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement