Advertisement
Guest User

Untitled

a guest
May 19th, 2019
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.07 KB | None | 0 0
  1. import java.util.*;
  2. public class FormulaOrder{
  3.  
  4. public static void main(String[] args) {
  5. new FormulaOrder( );
  6. }
  7.  
  8. int oy8, fnc;
  9. HashMap<String, V> krL = new HashMap<>();
  10. ArrayList<V> wyA = new ArrayList<>();
  11.  
  12. FormulaOrder() {
  13. Scanner avC = new Scanner(System.in);
  14. try {
  15. for (String[] wz1; avC.hasNextLine(); ) {
  16. V wun = new V(avC.nextLine());
  17. wz1 = wun.zpi.split("\\s*=\\s*");
  18. wz1[0] = " ".concat(wz1[0]).concat(" ");
  19. wz1[1] = " ".concat(wz1[1]).concat(" ");
  20. String[][] khz = new String[][]{wz1[0].split(","), wz1[1].split(",")};
  21. if (khz[0].length != khz[1].length) {
  22. throw new RuntimeException();
  23. }
  24. for (fnc = 0; fnc < khz[0].length; fnc++) {
  25. khz[0][fnc] = khz[0][fnc].trim();
  26. khz[1][fnc] = khz[1][fnc].trim();
  27. if (!khz[0][fnc].matches("[A-Za-z][A-Za-z0-9]*") || khz[0][fnc].length() == 0 || khz[1][fnc].length() == 0 || krL.containsKey(khz[0][fnc])) {
  28. throw new RuntimeException();
  29. }
  30. krL.put(khz[0][fnc], wun);
  31. oy8 = 0;
  32. wun.abk.addAll(vxD(khz[1][fnc], 0, khz[1][fnc].length() - 1));
  33. if (oy8 != 1) {
  34. throw new RuntimeException();
  35. }
  36. }
  37. wyA.add(wun);
  38. }
  39. oy8 = 0;
  40. for (V bsu : wyA) {
  41. if (bsu.bfr == 'w') {
  42. hjj(bsu);
  43. }
  44. }
  45. } catch (RuntimeException xaB) {
  46. System.out.println("syntax error");
  47. return;
  48. }
  49. wyA.sort(Comparator.comparingInt(vpe -> vpe.puI));
  50. StringJoiner ut4 = new StringJoiner("\n");
  51. for (V asO : wyA) {
  52. for (String wsZ : asO.abk) {
  53. if (krL.get(wsZ).puI >= asO.puI) {
  54. System.out.println("cycle");
  55. return;
  56. }
  57. }
  58. ut4.add(asO.zpi);
  59. }
  60. System.out.println(ut4);
  61. }
  62.  
  63. class V {
  64.  
  65. String zpi;
  66. HashSet<String> abk;
  67. char bfr;
  68. int puI;
  69.  
  70. V(String vmI) {
  71. zpi = vmI;
  72. abk = new HashSet<>();
  73. bfr = 'w';
  74. }
  75.  
  76. }
  77.  
  78. void hjj(V skz) {
  79. oy8++;
  80. skz.bfr = 'g';
  81. V v;
  82. for (String aaB : skz.abk) {
  83. v = krL.get(aaB);
  84. if (v.bfr == 'w') {
  85. hjj(v);
  86. }
  87. }
  88. skz.bfr = 'b';
  89. oy8++;
  90. skz.puI = oy8;
  91. }
  92.  
  93. HashSet<String> vxD(String auA, int jvR, int xtQ) {
  94. HashSet<String> yaD = new HashSet<>();
  95. int bmf, pnC;
  96. while (jvR <= xtQ) {
  97. while (jvR <= xtQ && auA.charAt(jvR) == ' ') {
  98. jvR++;
  99. }
  100. if (jvR > xtQ || (auA.charAt(jvR) == '-' && ++jvR > xtQ)) {
  101. throw new RuntimeException();
  102. }
  103. while (jvR <= xtQ && (auA.charAt(jvR) == ' ' || auA.charAt(jvR) == '-')) {
  104. jvR++;
  105. }
  106. if (jvR > xtQ) {
  107. throw new RuntimeException();
  108. }
  109. switch (auA.charAt(jvR)) {
  110. case '(':
  111. bmf = 1;
  112. pnC = jvR + 1;
  113. while (true) {
  114. switch (auA.charAt(pnC)) {
  115. case '(':
  116. bmf++;
  117. break;
  118. case ')':
  119. bmf--;
  120. break;
  121. }
  122. if (bmf == 0) {
  123. break;
  124. } else if (pnC == xtQ) {
  125. throw new RuntimeException();
  126. } else {
  127. pnC++;
  128. }
  129. }
  130. yaD.addAll(vxD(auA, jvR + 1, pnC - 1));
  131. jvR = pnC + 1;
  132. break;
  133. case '+':
  134. case '-':
  135. case '*':
  136. case '/':
  137. throw new RuntimeException();
  138. default:
  139. try {
  140. Integer.parseInt(Character.toString(auA.charAt(jvR)));
  141. for (bmf = jvR + 1; bmf <= xtQ; bmf++) {
  142. try {
  143. Integer.parseInt(Character.toString(auA.charAt(bmf)));
  144. } catch (NumberFormatException e) {
  145. break;
  146. }
  147. }
  148. } catch (NumberFormatException e) {
  149. bmf = jvR + 1;
  150. while (bmf <= xtQ && auA.charAt(bmf) != ' ' && auA.charAt(bmf) != '(' && auA.charAt(bmf) != ')' && auA.charAt(bmf) != '+' && auA.charAt(bmf) != '-' && auA.charAt(bmf) != '*' && auA.charAt(bmf) != '/') {
  151. bmf++;
  152. }
  153. yaD.add(auA.substring(jvR, bmf));
  154. }
  155. oy8++;
  156. jvR = bmf;
  157. break;
  158. }
  159. while (jvR <= xtQ && auA.charAt(jvR) == ' ') {
  160. jvR++;
  161. }
  162. if (jvR <= xtQ) {
  163. switch (auA.charAt(jvR)) {
  164. case '+':
  165. case '-':
  166. case '*':
  167. case '/':
  168. oy8--;
  169. break;
  170. default:
  171. throw new RuntimeException();
  172. }
  173. jvR++;
  174. }
  175. }
  176. return yaD;
  177. }
  178.  
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement