fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class Ideone
  9. {
  10.  
  11. static int[] pai = new int[9];
  12. static ArrayList<int[]> list = new ArrayList<>();
  13. static int shanten = 14;
  14. static int[] hand = new int[9];
  15. static int[] pat = new int[6];
  16.  
  17. public static void check() {
  18. int c = 0, p = 0;
  19. for (int i = 0; i < 9; i++) {
  20. if (hand[i] > pai[i]) {
  21. c += hand[i] - pai[i];
  22. p = i;
  23. }
  24. }
  25. if (c < shanten) {
  26. shanten = c;
  27. list.clear();
  28. pat[5] = -(p+1);
  29. list.add((int[])pat.clone());
  30. } else if (c == shanten) {
  31. pat[5] = -(p+1);
  32. list.add((int[])pat.clone());
  33. }
  34. }
  35.  
  36. public static void main (String[] args) throws java.lang.Exception
  37. {
  38. int[] deal = new int[]{0,0,0,1,2,3,4,5,6,7,8,8,8};
  39. Arrays.fill(hand, 4);
  40. for (int d : deal) hand[d]--;
  41.  
  42. // your code goes here
  43. Arrays.fill(pai, 4);
  44. atama();
  45.  
  46. System.out.println(shanten);
  47.  
  48. System.out.println("和了の形");
  49. for (int[] res : list)
  50. System.out.println(Arrays.toString(res));
  51.  
  52. TreeSet<String> set = new TreeSet<>();
  53. for (int[] res : list) {
  54. String p = Integer.toString(-res[5]);
  55. String[] zs = new String[5];
  56. for (int i = 0; i < 5; i++) {
  57. zs[i] = Integer.toString(res[i]);
  58. }
  59. for (int i = 0; i < 5; i++) {
  60. String z = zs[i];
  61. zs[i] = zs[i].replaceFirst(p, "");
  62. String[] tmp = (String[])zs.clone();
  63. Arrays.sort(tmp);
  64. set.add(Arrays.toString(tmp));
  65. zs[i] = z;
  66. }
  67. Arrays.sort(zs);
  68. set.remove(Arrays.toString(zs));
  69. }
  70.  
  71. System.out.println("待ちの形");
  72. for (String s : set) {
  73. System.out.println(s);
  74. }
  75.  
  76. }
  77.  
  78. static void atama() {
  79. for (int i = 0; i < 9; i++) {
  80. pai[i] -= 2;
  81. pat[0] = 11 * (i+1);
  82. kotsu(4, 0);
  83. juntsu(4, 0);
  84. pai[i] += 2;
  85. }
  86. }
  87.  
  88. static void kotsu(int rem, int p) {
  89. if (rem == 0) {
  90. check();
  91. return;
  92. }
  93. for (int i = p; i < 9; i++) {
  94. if (pai[i] < 4) continue;
  95. pai[i] -= 3;
  96. pat[5-rem] = 111 * (i+1);
  97. kotsu(rem - 1, i);
  98. juntsu(rem - 1, 0);
  99. pai[i] += 3;
  100. }
  101. }
  102.  
  103. static void juntsu(int rem, int p) {
  104. if (rem == 0) {
  105. check();
  106. return;
  107. }
  108. for (int i = p; i < 7; i++) {
  109. if (pai[i] == 0) continue;
  110. if (pai[i+1] == 0) continue;
  111. if (pai[i+2] == 0) continue;
  112. pai[i]--;
  113. pai[i+1]--;
  114. pai[i+2]--;
  115. pat[5-rem] = 111 * (i+1) + 12;
  116. juntsu(rem - 1, i);
  117. pai[i]++;
  118. pai[i+1]++;
  119. pai[i+2]++;
  120. }
  121. }
  122. }
Success #stdin #stdout 0.1s 50968KB
stdin
1112345678999
stdout
1
和了の形
[11, 999, 123, 345, 678, -3]
[11, 999, 123, 456, 678, -6]
[11, 999, 123, 456, 789, -9]
[22, 111, 999, 345, 678, -2]
[55, 111, 999, 234, 678, -5]
[88, 111, 999, 234, 567, -8]
[99, 111, 123, 456, 789, -1]
[99, 111, 234, 456, 789, -4]
[99, 111, 234, 567, 789, -7]
待ちの形
[11, 12, 345, 678, 999]
[11, 123, 45, 678, 999]
[11, 123, 456, 78, 999]
[11, 123, 456, 789, 99]
[111, 2, 345, 678, 999]
[111, 23, 456, 789, 99]
[111, 234, 5, 678, 999]
[111, 234, 56, 789, 99]
[111, 234, 567, 8, 999]
[111, 234, 567, 89, 99]