Advertisement
Aiaa

Untitled

May 2nd, 2016
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.88 KB | None | 0 0
  1. import java.io.File;
  2. import java.util.LinkedList;
  3. import java.util.Scanner;
  4.  
  5. public class Classy {
  6. static int nOfBits = 0;
  7. static int noRemain = 0;
  8. static StringBuilder inputstr = new StringBuilder();
  9. static StringBuilder dontcarestr = new StringBuilder();
  10. static LinkedList<Nody> array[];
  11. static LinkedList<Nody> remain;
  12. static LinkedList<Nody> finall_array;
  13. static int arraysize = 0;
  14.  
  15. static void printDebug(String s) {
  16. System.out.println(s);
  17. }
  18.  
  19. static void binary(int decimal) {
  20.  
  21. StringBuilder conc = new StringBuilder();
  22. String bin = Integer.toBinaryString(decimal);
  23. int count = 0;
  24. for (int i = 0; i < bin.length(); i++) {
  25. if (bin.charAt(i) == '1') {
  26. count++;
  27. }
  28. }
  29. for (int i = 0; i < nOfBits - bin.length(); i++) {
  30. conc.append("0");
  31. }
  32. conc.append(bin);
  33. printDebug(conc.toString());
  34. int de = (int) Math.pow(2, nOfBits) - 1;
  35. printDebug("" + de);
  36. Nody new_node = new Nody((int) Math.pow(2, nOfBits) - 1);
  37. new_node.minterm = conc.toString();
  38. printDebug(new_node.minterm);
  39. // new_node.min[decimal] = true;
  40. String s = Integer.toString(decimal);
  41. if (new_node.symbol == null) {
  42. new_node.symbol = s;
  43. } else {
  44. new_node.symbol += s;
  45. }
  46. // new_node.symbol += s ;
  47. new_node.symbol += ",";
  48. // new_node.symbol.append(Integer.toString(decimal)).append(',');
  49. printDebug(new_node.symbol);
  50. int nOfOnes = 0;
  51. for (int i = 0; i < new_node.minterm.length(); i++) {
  52. if (new_node.minterm.charAt(i) == '1') {
  53. nOfOnes++;
  54. }
  55. }
  56. if (array[nOfOnes] == null) {
  57. array[nOfOnes] = new LinkedList();
  58. }
  59.  
  60. array[nOfOnes].add(new_node);
  61.  
  62. }
  63.  
  64. public static void solve(LinkedList<Nody> tmp[]) {
  65.  
  66. LinkedList<Nody> tmpnext = new LinkedList<Nody>();
  67. int i = 0;
  68. while (i < nOfBits) {
  69. LinkedList<Nody> no = tmp[i];
  70. LinkedList<Nody> no2 = tmp[i + 1];
  71. if (no == null || no2 == null) {
  72. i++;
  73. continue;
  74.  
  75. }
  76. int n = no.size();
  77. int n2 = no2.size();
  78. int del1 = 0;
  79. int del2 = 0;
  80. for (int j = 0; j < n; j++) {
  81. int take = 0;
  82. for (int k = 0; k < tmp[i + 1].size(); k++) {
  83. if (tmp[i + 1].get(k) == null) {
  84. continue;
  85.  
  86. }
  87. if (tmp[i].get(j) == null) {
  88. continue;
  89.  
  90. }
  91.  
  92. int count = 0;
  93. String newminterm = new String();
  94. for (int l = 0; l < nOfBits; l++) {
  95. printDebug(tmp[i].get(j).minterm);
  96. printDebug(tmp[i + 1].get(k).minterm);
  97. printDebug("" + tmp[i].get(j).minterm.charAt(l));
  98. printDebug("" + tmp[i + 1].get(k).minterm.charAt(l));
  99. if (tmp[i].get(j).minterm.charAt(l) == tmp[i + 1].get(k).minterm.charAt(l)) {
  100. if (newminterm == null) {
  101. newminterm = "" + tmp[i].get(j).minterm.charAt(l);
  102. } else {
  103. newminterm += "" + tmp[i].get(j).minterm.charAt(l);
  104. }
  105. // newminterm.append(tmp[i].get(j).minterm.charAt(l));
  106. printDebug(newminterm);
  107. continue;
  108.  
  109. } else {
  110. count++;
  111. if (newminterm == null) {
  112. newminterm = "-";
  113. } else {
  114. newminterm += "-";
  115. }
  116. printDebug(newminterm);
  117. // newminterm.append('-');
  118. if (count > 1)
  119. break;
  120.  
  121. }
  122. }
  123. if (count == 1) {
  124. Nody new_node = new Nody(nOfBits);
  125. new_node.minterm = newminterm;
  126. new_node.min[i] = true;
  127.  
  128. if (new_node.symbol == null) {
  129. new_node.symbol = tmp[i].get(j).symbol;
  130. // new_node.symbol += ",";
  131. new_node.symbol += tmp[i + 1].get(k).symbol;
  132. // new_node.symbol += ",";
  133. } else {
  134. new_node.symbol += tmp[i].get(j).symbol;
  135. // new_node.symbol += ",";
  136. new_node.symbol += tmp[i + 1].get(k).symbol;
  137. // new_node.symbol += ",";
  138. }
  139. printDebug(new_node.minterm);
  140. printDebug(new_node.symbol);
  141. // new_node.symbol.append(Integer.toString(i)).append(',').append(Integer.toString(i
  142. // + 1))
  143. // .append(',');
  144.  
  145. tmpnext.add(new_node);
  146. take = 1;
  147. }
  148.  
  149. }
  150. if (take == 0) {
  151. Nody new_node = new Nody(nOfBits);
  152. new_node.minterm = tmp[i].get(j).minterm;
  153. if (new_node.symbol == null) {
  154. new_node.symbol = tmp[i].get(j).symbol;
  155.  
  156. } else {
  157. new_node.symbol += tmp[i].get(j).symbol;
  158.  
  159. }
  160. // new_node.symbol.append(Integer.toString(i)).append(',');
  161. if (remain == null) {
  162. remain = new LinkedList<Nody>();
  163. }
  164. remain.add(new_node);
  165. for (int l = 0; l < remain.size(); l++) {
  166. printDebug("remain ya yoyo");
  167. printDebug(remain.get(l).minterm);
  168. printDebug(remain.get(l).symbol);
  169. }
  170. //
  171. noRemain++;
  172. }
  173. }
  174. i++;
  175. }
  176. getdashes(tmpnext);
  177.  
  178. }
  179.  
  180. public static void getdashes(LinkedList<Nody> dash) {
  181.  
  182. LinkedList<Nody> tmpdash = new LinkedList<Nody>();
  183. boolean check_ind[] = new boolean[dash.size()];
  184. printDebug(Integer.toString(dash.size()));
  185. for (int i = 0; i < dash.size() - 1; i++) {
  186.  
  187. int take = 0;
  188. if (check_ind[i] == true) {
  189. continue;
  190. }
  191. for (int j = 0; j < dash.size(); j++) {
  192. if (i == j) {
  193. continue;
  194. }
  195. printDebug(dash.get(i).minterm);
  196. printDebug(dash.get(i).symbol);
  197. printDebug(dash.get(j).minterm);
  198. printDebug(dash.get(j).symbol);
  199. int count = 0;
  200.  
  201. String newminterm = new String();
  202. for (int l = 0; l < nOfBits; l++) {
  203.  
  204. if (dash.get(j).minterm.charAt(l) == dash.get(i).minterm.charAt(l)) {
  205. if (newminterm == null) {
  206. newminterm = "" + dash.get(j).minterm.charAt(l);
  207. } else {
  208. newminterm += "" + dash.get(j).minterm.charAt(l);
  209. }
  210. // newminterm.append(dash.get(j).minterm.charAt(l));
  211. printDebug(newminterm);
  212. continue;
  213.  
  214. } else {
  215. count++;
  216. if (newminterm == null) {
  217. newminterm = "-";
  218. } else {
  219. newminterm += "-";
  220. }
  221. printDebug(newminterm);
  222. // newminterm.append('-');
  223. if (count > 1)
  224. break;
  225.  
  226. }
  227. }
  228. if (count == 1) {
  229. int add = 1;
  230. Nody new_node = new Nody(nOfBits);
  231. new_node.minterm = newminterm;
  232. if (new_node.symbol == null) {
  233. new_node.symbol = dash.get(i).symbol;
  234. new_node.symbol += dash.get(j).symbol;
  235.  
  236. // new_node.symbol += ",";
  237.  
  238. } else {
  239. new_node.symbol += dash.get(i).symbol;
  240. new_node.symbol += dash.get(j).symbol;
  241. // new_node.symbol += ",";
  242.  
  243. }
  244. printDebug(new_node.symbol);
  245. printDebug(new_node.minterm);
  246. // new_node.symbol.append(dash.get(i).symbol).append(dash.get(j).symbol).append(',');
  247. if (check_ind[j] == true) {
  248. if (new_node.minterm == dash.get(j).minterm)
  249. add = 0;
  250. }
  251. if (add == 1) {
  252. check_ind[j] = true;
  253. tmpdash.add(new_node);
  254. }
  255. take = 1;
  256. }
  257. }
  258. if (take == 0) {
  259. Nody new_node = new Nody(nOfBits);
  260. new_node.minterm = dash.get(i).minterm;
  261. printDebug(new_node.minterm);
  262. printDebug(new_node.symbol);
  263. if (remain == null) {
  264. remain = new LinkedList<Nody>();
  265. }
  266. // remain.add(new_node);
  267. remain.add(new_node);
  268. noRemain++;
  269. }
  270.  
  271. }
  272. finall_array = tmpdash;
  273. if (tmpdash.size() != 0) {
  274.  
  275. getdashes(tmpdash);
  276. } else {
  277. printDebug("final ya yOyo");
  278.  
  279. for (int i = 0; i < remain.size(); i++) {
  280. printDebug(remain.get(i).symbol);
  281. printDebug(remain.get(i).minterm);
  282. }
  283.  
  284. for (int i = 0; i < finall_array.size(); i++) {
  285. printDebug(finall_array.get(i).symbol);
  286. printDebug(finall_array.get(i).minterm);
  287. }
  288. }
  289.  
  290. }
  291.  
  292. public static void main(String[] args) {
  293. // TODO Auto-generated method stub
  294.  
  295. /**
  296. * scan form console
  297. */
  298. // StringBuilder dontcarestr1 = new StringBuilder();
  299. // StringBuilder inputstr1 = new StringBuilder();
  300. Scanner sc1;
  301. System.out.println("enter the min terms");
  302. try {
  303. sc1 = new Scanner(System.in);
  304. LinkedList<Integer> input1 = new LinkedList<Integer>();
  305. LinkedList<Integer> dontcare1 = new LinkedList<Integer>();
  306. int num = sc1.nextInt();
  307. if (num < 0) {
  308. throw new RuntimeException();
  309. }
  310. int max = num;
  311. input1.add(num);
  312. while (true) {
  313. System.out.println("enter -1 to input dontcare:");
  314. num = sc1.nextInt();
  315. if (num == -1) {
  316. break;
  317. }
  318. if (num < 0) {
  319. throw new RuntimeException();
  320. }
  321. input1.add(num);
  322. if (max < num) {
  323. max = num;
  324. }
  325. }
  326. if (num == -1) {
  327. System.out.println("enter don't care");
  328.  
  329. while (true) {
  330. System.out.println("enter -1 to end: ");
  331. num = sc1.nextInt();
  332. if (num == -1) {
  333. break;
  334. }
  335. if (num < 0) {
  336. throw new RuntimeException();
  337. }
  338. dontcare1.add(num);
  339. if (max < num) {
  340. max = num;
  341. }
  342. }
  343. }
  344. int max2 = max + 1;
  345.  
  346. nOfBits = (int) (Math.log(max) / Math.log(2)) + 1;
  347. /// check repetition in min terms
  348. for (int i = 0; i < input1.size(); i++) {
  349. for (int j = 0; j < i; j++) {
  350. if (input1.get(i).equals(input1.get(j))) {
  351. input1.remove(j);
  352. break;
  353. }
  354. }
  355. }
  356. //// check repetition in dontcare
  357. for (int i = 0; i < dontcare1.size(); i++) {
  358. for (int j = 0; j < i; j++) {
  359. if (dontcare1.get(i).equals(dontcare1.get(j))) {
  360. dontcare1.remove(j);
  361. break;
  362. }
  363. }
  364. }
  365. /// check for repetition in min terms and dont care
  366. for (int i = 0; i < dontcare1.size(); i++) {
  367. for (int j = 0; j < input1.size(); j++) {
  368. if (input1.get(j).equals(dontcare1.get(i))) {
  369. throw new RuntimeException();
  370. }
  371. }
  372. }
  373.  
  374. for (int i = 0; i < input1.size(); i++) {
  375. if (i == 0) {
  376. inputstr.append(input1.get(i));
  377. } else {
  378. inputstr.append("," + input1.get(i));
  379. }
  380. }
  381. printDebug(inputstr.toString());
  382.  
  383. for (int i = 0; i < dontcare1.size(); i++) {
  384. if (i == 0) {
  385. dontcarestr.append(dontcare1.get(i));
  386. } else {
  387. dontcarestr.append("," + dontcare1.get(i));
  388. }
  389. }
  390. printDebug(dontcarestr.toString());
  391.  
  392. } catch (Exception e1) {
  393. System.out.println("wrong input");
  394. }
  395. String inputString = inputstr.toString();
  396. String[] splitterInp = inputString.split(",");
  397. String dontCareString = dontcarestr.toString();
  398. String[] splitterDon = dontCareString.split(",");
  399. array = new LinkedList[nOfBits + 1];
  400. for (int i = 0; i < splitterInp.length; i++) {
  401. int inty = Integer.parseInt(splitterInp[i]);
  402.  
  403. binary(inty);
  404. }
  405. for (int i = 0; i < splitterDon.length; i++) {
  406. binary(Integer.parseInt(splitterDon[i]));
  407. }
  408. for (int i = 0; i < nOfBits + 1; i++) {
  409. LinkedList<Nody> no = array[i];
  410. if (no != null) {
  411. int n = no.size();
  412. if (n != 0) {
  413. for (int j = 0; j < n; j++) {
  414. printDebug(array[i].get(j).minterm);
  415. }
  416. }
  417. }
  418.  
  419. }
  420. solve(array);
  421. printDebug("finbrra");
  422. for (int i = 0; i < finall_array.size(); i++) {
  423. printDebug("fingwa");
  424. printDebug(finall_array.get(i).symbol);
  425. printDebug(finall_array.get(i).minterm);
  426. }
  427. }
  428.  
  429. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement