fork download
  1. import java.util.ArrayList;
  2. import java.util.Arrays;
  3. import java.util.Collection;
  4. import java.util.HashSet;
  5. import java.util.Iterator;
  6. import java.util.List;
  7. import java.util.Scanner;
  8.  
  9. public class Main {
  10.  
  11. // http://stackoverflow.com/questions/187676/java-equivalents-of-c-sharp-string-format-and-string-join
  12. private static String join(Collection<?> s, String delimiter) {
  13. StringBuilder builder = new StringBuilder();
  14. Iterator<?> iter = s.iterator();
  15. while (iter.hasNext()) {
  16. builder.append(iter.next());
  17. if (!iter.hasNext()) {
  18. break;
  19. }
  20. builder.append(delimiter);
  21. }
  22. return builder.toString();
  23. }
  24.  
  25. private static <T> String join(T[] s, String delimiter){
  26. return join(Arrays.asList(s), delimiter);
  27. }
  28.  
  29. @SuppressWarnings("unused")
  30. private static Integer[] union(Integer[] a1, Integer[] a2){
  31. HashSet<Integer> u = new HashSet<Integer>();
  32. u.addAll(Arrays.asList(a1));
  33. u.addAll(Arrays.asList(a2));
  34.  
  35. return u.toArray(new Integer[u.size()]);
  36. }
  37.  
  38. private static Integer[] intersect(Integer[] a1, Integer[] a2){
  39. HashSet<Integer> u = new HashSet<Integer>();
  40. u.addAll(Arrays.asList(a1));
  41. u.retainAll(Arrays.asList(a2));
  42.  
  43. return u.toArray(new Integer[u.size()]);
  44. }
  45.  
  46. private static Integer[] findIndexs(Integer[] s, Integer e){
  47. List<Integer> lst = new ArrayList<Integer>();
  48. for (int i=0; i<s.length; i++){
  49. if (s[i] == e){
  50. lst.add(i);
  51. }
  52. }
  53.  
  54. return lst.toArray(new Integer[lst.size()]);
  55. }
  56.  
  57. private static GuestResult guest_4(Integer[] s1, Integer[] s2){
  58. Integer[] int_s1_s2 = intersect(s1, s2);
  59. int_s1_s2 = Arrays.asList(int_s1_s2).toArray(new Integer[]{null,null,null,null});
  60.  
  61. Integer[][] table_s1 = {
  62. findIndexs(s1, int_s1_s2[0]),
  63. findIndexs(s1, int_s1_s2[1]),
  64. findIndexs(s1, int_s1_s2[2]),
  65. findIndexs(s1, int_s1_s2[3])
  66. };
  67.  
  68. Integer[][] table_s2 = {
  69. findIndexs(s2, int_s1_s2[0]),
  70. findIndexs(s2, int_s1_s2[1]),
  71. findIndexs(s2, int_s1_s2[2]),
  72. findIndexs(s2, int_s1_s2[3])
  73. };
  74.  
  75. Integer[] count_a = {
  76. intersect(table_s1[0], table_s2[0]).length,
  77. intersect(table_s1[1], table_s2[1]).length,
  78. intersect(table_s1[2], table_s2[2]).length,
  79. intersect(table_s1[3], table_s2[3]).length
  80. };
  81.  
  82. Integer[] count_b = {
  83. Math.min(table_s1[0].length, table_s2[0].length) - count_a[0],
  84. Math.min(table_s1[1].length, table_s2[1].length) - count_a[1],
  85. Math.min(table_s1[2].length, table_s2[2].length) - count_a[2],
  86. Math.min(table_s1[3].length, table_s2[3].length) - count_a[3]
  87. };
  88.  
  89. return new GuestResult(
  90. count_a[0] + count_a[1] + count_a[2] + count_a[3],
  91. count_b[0] + count_b[1] + count_b[2] + count_b[3]
  92. );
  93. }
  94.  
  95. private static Integer[] splitToInts_4(String s){
  96. Integer[] tmp = {0,0,0,0};
  97.  
  98. int startIndex = 4 - s.length();
  99.  
  100. for (int i=0; i<s.length(); i++){
  101. tmp[i+startIndex] = Integer.parseInt(s.substring(i, i+1));
  102. }
  103.  
  104. return tmp;
  105. }
  106.  
  107. public static void main(String[] args) {
  108. Scanner scanner = new Scanner(System.in);
  109. while (true){
  110. Integer[] s1;
  111. {
  112. String tmp;
  113.  
  114. if (!scanner.hasNextInt()) break;
  115. tmp = scanner.next();
  116. if (tmp.length() > 4) break;
  117.  
  118. s1 = splitToInts_4(tmp);
  119. }
  120.  
  121. Integer[] s2;
  122. {
  123. String tmp;
  124.  
  125. if (!scanner.hasNextInt()) break;
  126. tmp = scanner.next();
  127. if (tmp.length() > 4) break;
  128.  
  129. s2 = splitToInts_4(tmp);
  130. }
  131.  
  132. GuestResult result = guest_4(s1, s2);
  133. System.out.println(join(s1, "") + " " +
  134. join(s2, "") +
  135. ": " + result.count_a() + "A" +
  136. result.count_b() + "B");
  137. }
  138. }
  139.  
  140. private static class GuestResult{
  141. private int _a, _b;
  142.  
  143. public GuestResult(int count_a, int count_b){
  144. _a = count_a;
  145. _b = count_b;
  146. }
  147.  
  148. public int count_a() {return _a;}
  149.  
  150. public int count_b() {return _b;}
  151. }
  152. }
  153.  
Success #stdin #stdout 0.06s 246080KB
stdin
2652 2351
1234 2345
1431 1134
stdout
2652 2351: 2A0B
1234 2345: 0A3B
1431 1134: 2A2B