• Source
    1. /* package whatever; // don't place package name! */
    2.  
    3. import java.util.*;
    4. import java.lang.*;
    5. import java.io.*;
    6.  
    7. class Register {
    8. class Regi{
    9. int no;
    10. int power;
    11. int x;
    12. List<Boolean> machiList=new LinkedList<Boolean>();
    13. void add(char cnt){
    14. if(cnt=='x'){
    15. machiList.add(true);
    16. }else{
    17. for(int i=0;i<cnt-'0';i++){
    18. machiList.add(false);
    19. }
    20. }
    21. }
    22. public Regi(int no,int power){
    23. this.no=no;
    24. this.power=power;
    25. }
    26. public int run(){
    27. for(int i=0;i<power;i++){
    28. if(machiList.isEmpty())return 0;
    29. if(machiList.get(0))return machiList.size();
    30. machiList.remove(0);
    31. }
    32. return machiList.size();
    33. }
    34. }
    35. void test(String list,String ans){
    36. List<Regi> regiList=new ArrayList<Regi>(){
    37. {
    38. add(new Regi(1,2));
    39. add(new Regi(2,7));
    40. add(new Regi(3,3));
    41. add(new Regi(4,5));
    42. add(new Regi(5,2));
    43. }
    44. private static final long serialVersionUID = 1L;
    45. };
    46. for(char x:list.toCharArray()){
    47. if(x=='.'){
    48. for(Regi regi:regiList){
    49. regi.run();
    50. }
    51. }else{
    52. regiList.get(0).add(x);
    53. }
    54. Collections.sort(regiList,new Comparator<Regi>(){
    55. public int compare(Regi r1,Regi r2){
    56. return r1.machiList.size()*1000+r1.no-r2.machiList.size()*1000-r2.no;
    57. }
    58. });
    59. }
    60. String sb=calcAns(regiList);
    61. if(!ans.equals(sb)){
    62. System.out.println(list+"="+ans+":"+sb);
    63. }
    64. }
    65. private String calcAns(List<Regi> regiList){
    66. Regi[] regis=new Regi[5];
    67. for(Regi regi:regiList){
    68. regis[regi.no-1]=regi;
    69. }
    70. String pre="";
    71. StringBuilder sb=new StringBuilder();
    72. for(Regi regi:regis){
    73. sb.append(pre).append(regi.machiList.size());
    74. pre=",";
    75. }
    76. return sb.toString();
    77. }
    78. private void run(){
    79. /*0*/ test( "42873x.3.", "0,4,2,0,0" );
    80. /*1*/ test( "1", "1,0,0,0,0" );
    81. /*2*/ test( ".", "0,0,0,0,0" );
    82. /*3*/ test( "x", "1,0,0,0,0" );
    83. /*4*/ test( "31.", "1,0,0,0,0" );
    84. /*5*/ test( "3x.", "1,1,0,0,0" );
    85. /*6*/ test( "99569x", "9,9,6,6,9" );
    86. /*7*/ test( "99569x33", "9,9,9,9,9" );
    87. /*8*/ test( "99569x33.", "7,2,6,4,7" );
    88. /*9*/ test( "99569x33..", "5,0,4,0,5" );
    89. /*10*/ test( "12345x3333.", "4,0,3,2,3" );
    90. /*11*/ test( "54321x3333.", "3,0,3,0,4" );
    91. /*12*/ test( "51423x3333.", "3,4,4,0,4" );
    92. /*13*/ test( "12x34x.", "1,0,1,0,2" );
    93. /*14*/ test( "987x654x.32", "7,6,4,10,5" );
    94. /*15*/ test( "99999999999x99999999.......9.", "20,10,12,5,20" );
    95. /*16*/ test( "997", "9,9,7,0,0" );
    96. /*17*/ test( ".3.9", "1,9,0,0,0" );
    97. /*18*/ test( "832.6", "6,6,0,0,0" );
    98. /*19*/ test( ".5.568", "3,5,6,8,0" );
    99. /*20*/ test( "475..48", "4,8,0,0,0" );
    100. /*21*/ test( "7.2..469", "1,4,6,9,0" );
    101. /*22*/ test( "574x315.3", "3,3,1,7,1" );
    102. /*23*/ test( "5.2893.x98", "10,9,5,4,1" );
    103. /*24*/ test( "279.6xxx..4", "2,1,4,1,1" );
    104. /*25*/ test( "1.1.39..93.x", "7,1,0,0,0" );
    105. /*26*/ test( "7677749325927", "16,12,17,18,12" );
    106. /*27*/ test( "x6235.87.56.9.", "7,2,0,0,0" );
    107. /*28*/ test( "4.1168.6.197.6.", "0,0,3,0,0" );
    108. /*29*/ test( "2.8.547.25..19.6", "6,2,0,0,0" );
    109. /*30*/ test( ".5.3x82x32.1829..", "5,0,5,0,7" );
    110. /*31*/ test( "x.1816..36.24.429.", "1,0,0,0,7" );
    111. /*32*/ test( "79.2.6.81x..26x31.1", "1,0,2,1,1" );
    112. /*33*/ test( "574296x6538984..5974", "14,13,10,15,14" );
    113. /*34*/ test( "99.6244.4376636..72.6", "5,6,0,0,3" );
    114. /*35*/ test( "1659.486x5637168278123", "17,16,16,18,17" );
    115. /*36*/ test( ".5.17797.x626x5x9457.3.", "14,0,3,5,8" );
    116. /*37*/ test( "..58624.85623..4.7..23.x", "1,1,0,0,0" );
    117. /*38*/ test( "716.463.9.x.8..4.15.738x4", "7,3,5,8,1" );
    118. /*39*/ test( "22xx.191.96469472.7232377.", "10,11,18,12,9" );
    119. /*40*/ test( "24..4...343......4.41.6...2", "2,0,0,0,0" );
    120. /*41*/ test( "32732.474x153.866..4x29.2573", "7,5,7,8,5" );
    121. /*42*/ test( "786.1267x9937.17.15448.1x33.4", "4,4,8,4,10" );
    122. /*43*/ test( "671714849.149.686852.178.895x3", "13,16,13,10,12" );
    123. /*44*/ test( "86x.47.517..29621.61x937..xx935", "7,11,8,8,10" );
    124. /*45*/ test( ".2233.78x.94.x59511.5.86x3.x714.", "4,6,10,8,8" );
    125. /*46*/ test( ".793...218.687x415x13.1...x58576x", "8,11,8,6,9" );
    126. /*47*/ test( "6.6x37.3x51x932.72x4x33.9363.x7761", "15,13,15,12,15" );
    127. /*48*/ test( "6..4.x187..681.2x.2.713276.669x.252", "6,7,8,6,5" );
    128. /*49*/ test( ".6.xx64..5146x897231.x.21265392x9775", "19,17,19,20,17" );
    129. /*50*/ test( "334.85413.263314.x.6293921x3.6357647x", "14,14,12,16,10" );
    130. /*51*/ test( "4.1..9..513.266..5999769852.2.38x79.x7", "12,10,13,6,10" ); }
    131.  
    132. /**
    133. * @param args
    134. */
    135. public static void main(String[] args) {
    136. new Register().run();
    137. }
    138.  
    139. }