Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.69 KB | None | 0 0
  1. public class Advent4_1 {
  2.  
  3. int cached = -1;
  4.  
  5. public static void main(String[] args) {
  6. int possiblePassCount = 0;
  7. System.out.println(hasAdjacentNums(233222));
  8.  
  9. for (int i = 128888; i < 640000; i++) {
  10. if (hasAdjacentNums(i) && increasing(i))
  11. possiblePassCount++;
  12. }
  13. System.out.println("Answer: " + possiblePassCount);
  14. }
  15.  
  16. private static boolean increasing(int i) {
  17. String s = Integer.toString(i);
  18. int[] digits = new int[6];
  19. for (int j = 0; j < 6; j++) {
  20. digits[j] = s.charAt(j) - '0';
  21. }
  22. if (digits[0] <= digits[1] && digits[1] <= digits[2] && digits[2] <= digits[3] && digits[3] <= digits[4]
  23. && digits[4] <= digits[5])
  24. return true;
  25. return false;
  26. }
  27.  
  28. private static boolean hasAdjacentNums(int i) {
  29.  
  30. String s = Integer.toString(i);
  31. int[] digits = new int[6];
  32. for (int j = 0; j < 6; j++) {
  33. digits[j] = s.charAt(j) - '0';
  34. }
  35. int[][] test = removeLargeGroups(digits);
  36. return checkForDoubles(test[0]) && checkForDoubles(test[1]);
  37. }
  38.  
  39. private static boolean checkForDoubles(int[] digits) {
  40. if(digits.length < 2)
  41. return false;
  42. boolean ret = false;
  43. for(int i = 0; i < digits.length-1; i ++) {
  44. ret = digits[i] == digits[i+1] || ret;
  45. }
  46. return ret;
  47. }
  48.  
  49. private static int[][] removeLargeGroups(int[] digits) {
  50. if(isTwoTriples(digits))
  51. return new int[][] {new int[] {}, new int[] {}};
  52. int cache = digits[0];
  53. int startLoc = 0;
  54. int endLoc = 0;
  55. int count = 0;
  56. boolean found = false;
  57. for(int i = 1; i < digits.length; i ++) {
  58. if(digits[i] == cache) {
  59. count +=1;
  60. if(i-2 >= 0 && digits[i-2] != digits[i]) {
  61. count += 1;
  62. }
  63. } else {
  64. if(!found) {
  65. endLoc = startLoc = i;
  66. }
  67. count = 0;
  68. cache = digits[i];
  69. continue;
  70. }
  71. if(count == 3) {
  72. found = true;
  73. endLoc = startLoc + 3;
  74. } else if(count > 3) {
  75. endLoc ++;
  76. }
  77. }
  78. if(endLoc - startLoc == 0) {
  79. return new int[][] {(int[]) digits, digits};
  80. }
  81. int[][] ret = new int[][] {new int[startLoc], new int[digits.length-endLoc]};
  82. int j = 0;
  83. for(int i = 0; i < digits.length; i ++) {
  84. if(i < startLoc) {
  85. ret[0][j] = digits[i];
  86. j ++;
  87. }
  88. }
  89. for(int i = 0; i < digits.length; i ++) {
  90. if(i > endLoc) {
  91. ret[1][j] = digits[i];
  92. j ++;
  93. }
  94. }
  95.  
  96. return ret;
  97. }
  98. public static boolean isTwoTriples(int[] ints) {
  99. if(ints[0] == ints[1] && ints[0] == ints[2] && ints[3] == ints[4] && ints[3] == ints[5]) {
  100. return true;
  101. }
  102. return false;
  103. }
  104.  
  105.  
  106. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement