Advertisement
Aiaa

Classy

May 2nd, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.32 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(); 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. new_node.symbol = dash.get(i).symbol;
  262. printDebug(new_node.minterm);
  263. printDebug(new_node.symbol);
  264. if (remain == null) {
  265. remain = new LinkedList<Nody>();
  266. }
  267. // remain.add(new_node);
  268. remain.add(new_node);
  269. noRemain++;
  270. }
  271.  
  272. }
  273. finall_array = tmpdash;
  274. printDebug("tempy");
  275. for (int i = 0; i < tmpdash.size(); i++) {
  276. printDebug(tmpdash.get(i).symbol);
  277. printDebug(tmpdash.get(i).minterm);
  278. }
  279. if (tmpdash.size() != 0) {
  280.  
  281. getdashes(tmpdash);
  282. } else {
  283. int del = 0;
  284. printDebug("final ya yOyo");
  285. for (int i = 0; i < remain.size(); i++) {
  286. if (remain.get(i).equals(null)) {
  287. remain.remove(i);
  288. // del++;
  289. // i--;
  290. }
  291.  
  292. }
  293. for (int i = 0; i < remain.size(); i++) {
  294. for (int k = 0; k < remain.size(); k++) {
  295. if (i == k) {
  296. continue;
  297. }
  298. if (remain.get(k).minterm.equals(remain.get(i).minterm)) {
  299. remain.remove(k);
  300. }
  301. }
  302.  
  303. }
  304. printDebug("rem bef");
  305. for (int i = 0; i < remain.size(); i++) {
  306. printDebug(remain.get(i).symbol);
  307. printDebug(remain.get(i).minterm);
  308. }
  309. printDebug("rem af");
  310. // for (int i = 0; i < finall_array.size(); i++) {
  311. // printDebug(finall_array.get(i).symbol);
  312. // printDebug(finall_array.get(i).minterm);
  313. // }
  314. }
  315.  
  316. }
  317.  
  318. public static void main(String[] args) {
  319. // TODO Auto-generated method stub
  320. /**
  321. * scan from file
  322. */
  323.  
  324. /*
  325. * Scanner sc; try { sc = new Scanner(new File("salma.txt"));
  326. * LinkedList<Integer> input = new LinkedList<Integer>();
  327. * LinkedList<Integer> dontcare = new LinkedList<Integer>(); int num =
  328. * sc.nextInt(); if (num < 0) { throw new RuntimeException(); } int max
  329. * = num; input.add(num); while (sc.hasNext()) { num = sc.nextInt(); if
  330. * (num == -1) { break; } if (num < 0) { throw new RuntimeException(); }
  331. * input.add(num); if (max < num) { max = num; } } if (num == -1) {
  332. * while (sc.hasNext()) { num = sc.nextInt(); if (num == -1) { break; }
  333. * if (num < 0) { throw new RuntimeException(); } dontcare.add(num); if
  334. * (max < num) { max = num; } } } nOfBits = (int) (Math.log(max) /
  335. * Math.log(2)) + 1; for (int i = 0; i < input.size(); i++) { for (int j
  336. * = 0; j < i; j++) { if (input.get(i).equals(input.get(j))) {
  337. * input.remove(j); break; } } } for (int i = 0; i < dontcare.size();
  338. * i++) { for (int j = 0; j < i; j++) { if
  339. * (dontcare.get(i).equals(dontcare.get(j))) { dontcare.remove(j);
  340. * break; } } } for (int i = 0; i < dontcare.size(); i++) { for (int j =
  341. * 0; j < input.size(); j++) { if (input.get(j).equals(dontcare.get(i)))
  342. * { throw new RuntimeException(); } } }
  343. *
  344. * for (int i = 0; i < input.size(); i++) { if (i == 0) {
  345. * inputstr.append(input.get(i)); } else { inputstr.append("," +
  346. * input.get(i)); } } for (int i = 0; i < dontcare.size(); i++) { if (i
  347. * == 0) { dontcarestr.append(dontcare.get(i)); } else {
  348. * dontcarestr.append("," + dontcare.get(i)); } }
  349. *
  350. * } catch (Exception e) { System.out.println(
  351. * "Fail to read from file OR wrong input"); }
  352. */
  353. /**
  354. * scan form console
  355. */
  356. // StringBuilder dontcarestr1 = new StringBuilder();
  357. // StringBuilder inputstr1 = new StringBuilder();
  358. Scanner sc1;
  359. System.out.println("enter the min terms");
  360. try {
  361. sc1 = new Scanner(System.in);
  362. LinkedList<Integer> input1 = new LinkedList<Integer>();
  363. LinkedList<Integer> dontcare1 = new LinkedList<Integer>();
  364. int num = sc1.nextInt();
  365. if (num < 0) {
  366. throw new RuntimeException();
  367. }
  368. int max = num;
  369. input1.add(num);
  370. while (true) {
  371. System.out.println("enter -1 to input dontcare:");
  372. num = sc1.nextInt();
  373. if (num == -1) {
  374. break;
  375. }
  376. if (num < 0) {
  377. throw new RuntimeException();
  378. }
  379. input1.add(num);
  380. if (max < num) {
  381. max = num;
  382. }
  383. }
  384. if (num == -1) {
  385. System.out.println("enter don't care");
  386.  
  387. while (true) {
  388. System.out.println("enter -1 to end: ");
  389. num = sc1.nextInt();
  390. if (num == -1) {
  391. break;
  392. }
  393. if (num < 0) {
  394. throw new RuntimeException();
  395. }
  396. dontcare1.add(num);
  397. if (max < num) {
  398. max = num;
  399. }
  400. }
  401. }
  402. int max2 = max + 1;
  403.  
  404. nOfBits = (int) (Math.log(max) / Math.log(2)) + 1;
  405. /// check repetition in min terms
  406. for (int i = 0; i < input1.size(); i++) {
  407. for (int j = 0; j < i; j++) {
  408. if (input1.get(i).equals(input1.get(j))) {
  409. input1.remove(j);
  410. break;
  411. }
  412. }
  413. }
  414. //// check repetition in dontcare
  415. for (int i = 0; i < dontcare1.size(); i++) {
  416. for (int j = 0; j < i; j++) {
  417. if (dontcare1.get(i).equals(dontcare1.get(j))) {
  418. dontcare1.remove(j);
  419. break;
  420. }
  421. }
  422. }
  423. /// check for repetition in min terms and dont care
  424. for (int i = 0; i < dontcare1.size(); i++) {
  425. for (int j = 0; j < input1.size(); j++) {
  426. if (input1.get(j).equals(dontcare1.get(i))) {
  427. throw new RuntimeException();
  428. }
  429. }
  430. }
  431.  
  432. for (int i = 0; i < input1.size(); i++) {
  433. if (i == 0) {
  434. inputstr.append(input1.get(i));
  435. } else {
  436. inputstr.append("," + input1.get(i));
  437. }
  438. }
  439. printDebug(inputstr.toString());
  440.  
  441. for (int i = 0; i < dontcare1.size(); i++) {
  442. if (i == 0) {
  443. dontcarestr.append(dontcare1.get(i));
  444. } else {
  445. dontcarestr.append("," + dontcare1.get(i));
  446. }
  447. }
  448. printDebug(dontcarestr.toString());
  449.  
  450. } catch (Exception e1) {
  451. System.out.println("wrong input");
  452. }
  453. String inputString = inputstr.toString();
  454. String[] splitterInp = inputString.split(",");
  455.  
  456. array = new LinkedList[nOfBits + 1];
  457. for (int i = 0; i < splitterInp.length; i++) {
  458. int inty = Integer.parseInt(splitterInp[i]);
  459.  
  460. binary(inty);
  461. }
  462. String dontCareString = dontcarestr.toString();
  463. if(dontCareString.length() !=0 ){
  464. String[] splitterDon = dontCareString.split(",");
  465. for (int i = 0; i < splitterDon.length; i++) {
  466. binary(Integer.parseInt(splitterDon[i]));
  467. }
  468. }
  469.  
  470.  
  471.  
  472. for (int i = 0; i < nOfBits + 1; i++) {
  473. LinkedList<Nody> no = array[i];
  474. if (no != null) {
  475. int n = no.size();
  476. if (n != 0) {
  477. for (int j = 0; j < n; j++) {
  478. printDebug(array[i].get(j).minterm);
  479. }
  480. }
  481. }
  482.  
  483. }
  484. solve(array);
  485. printDebug("finbrra");
  486. printDebug(Integer.toString(finall_array.size()));
  487. for (int i = 0; i < finall_array.size(); i++) {
  488. printDebug("fingwa");
  489. printDebug(finall_array.get(i).symbol);
  490. printDebug(finall_array.get(i).minterm);
  491. }
  492. }
  493.  
  494. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement