Advertisement
Guest User

Untitled

a guest
Apr 25th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.33 KB | None | 0 0
  1. /**
  2. * @param {string} n
  3. * @return {string}
  4. */
  5.  
  6. var reverseStr = function(str) {
  7. var rStr = '';
  8. for (var i = str.length - 1; i >= 0; i--) {
  9. rStr = rStr + str[i];
  10. }
  11. return rStr;
  12. };
  13. var getDistance = function(a,b) {
  14. /*var difflength = a.length - b.length;
  15. difflength = difflength < 0 ? -1*difflength : difflength;
  16. if (difflength > 0) {
  17. var zero = '';
  18. for (var i = 0; i < difflength; i++) {
  19. zero = zero + '0';
  20. }
  21. if (a.length > b.length) {
  22. b = zero + b;
  23. } else {
  24. a = zero + a;
  25. }
  26. }
  27. var str = '';
  28. for (var i = 0; i < a.length; i++) {
  29. var dif = parseInt(a[i]) - parseInt(b[i]);
  30. dif = dif < 0 ? -1*dif : dif;
  31. str = str + dif;
  32. }*/
  33. return parseInt(a) > parseInt(b) ? a - b : b - a;
  34. };
  35. var getPalin = function(firstHalf) {
  36. reverseHalf = reverseStr(firstHalf);
  37. return firstHalf + reverseHalf;
  38. }
  39. var updateSolution = function(distance, palin, solution) {
  40. if (distance < solution.min_dis) {
  41. solution.palin = palin;
  42. solution.min_dis = distance;
  43. } else if (distance === solution.min_dis && parseInt(palin) < parseInt(solution.palin)) {
  44. solution.palin = palin;
  45. }
  46. }
  47. var updateOdd = function(firstHalf, solution, n) {
  48. var reverseHalf = reverseStr(firstHalf);
  49.  
  50. for (var i = 0; i < 10; i++) {
  51. var palin = firstHalf + i + reverseHalf;
  52. if (palin !== n) {
  53. updateSolution(getDistance(palin, n), palin, solution);
  54. }
  55. }
  56. }
  57. var nearestPalindromic = function(n) {
  58. var solution = {};
  59. solution.min_dis = Math.pow(10,18);
  60. solution.palin = '';
  61. var firstHalf;
  62. var palin;
  63.  
  64. if (parseInt(n) <= 10) {
  65. return (n - 1).toString();
  66. }
  67.  
  68. if (n.length % 2 === 0) {
  69. half = n.length/2;
  70. firstHalf = n.slice(0, half);
  71. palin = getPalin(firstHalf);
  72. if (palin !== n) {
  73. updateSolution(getDistance(palin, n), palin, solution);
  74. }
  75.  
  76. // plus 1
  77. firstHalf = (parseInt(n.slice(0, half)) + 1).toString();
  78.  
  79. if (firstHalf.length !== half) { // 0
  80. // go with odd number
  81. updateOdd(firstHalf.slice(0, firstHalf.length - 1), solution, n);
  82. } else {
  83. palin = getPalin(firstHalf);
  84. updateSolution(getDistance(palin, n), palin, solution);
  85. }
  86.  
  87. // minus 1
  88. firstHalf = (parseInt(n.slice(0, half)) - 1).toString();
  89. if (firstHalf === '0') {
  90. updateSolution(getDistance('9', n), '9', solution);
  91. }
  92. if (firstHalf.length !== half) { // 0
  93. // go with odd number
  94. updateOdd(firstHalf, solution, n);
  95. } else {
  96. palin = getPalin(firstHalf);
  97. updateSolution(getDistance(palin, n), palin, solution);
  98. }
  99. } else {
  100. half = (n.length - 1)/2;
  101. firstHalf = n.slice(0, half);
  102. updateOdd(firstHalf, solution, n);
  103.  
  104. if (firstHalf[firstHalf.length - 1] === '0') { // go with even
  105. firstHalf = (parseInt(n.slice(0, half + 1)) - 1).toString();
  106. palin = getPalin(firstHalf);
  107. updateSolution(getDistance(palin, n), palin, solution);
  108. }
  109.  
  110. // plus 1
  111. firstHalf = (parseInt(n.slice(0, half)) + 1).toString();
  112. if (firstHalf.length !== half) { // 0
  113. // go with even number
  114. palin = getPalin(firstHalf);
  115. updateSolution(getDistance(palin, n), palin, solution);
  116. } else {
  117. updateOdd(firstHalf, solution, n);
  118. }
  119. // minus 1
  120. firstHalf = (parseInt(n.slice(0, half)) - 1).toString();
  121. if (firstHalf[firstHalf.length - 1] === '0') { // go with even
  122. firstHalf = (parseInt(n.slice(0, half + 1)) - 1).toString();
  123. palin = getPalin(firstHalf);
  124. updateSolution(getDistance(palin, n), palin, solution);
  125. }
  126.  
  127. if (firstHalf.length !== half) { // 0
  128. // go with even number
  129. palin = getPalin(firstHalf);
  130. updateSolution(getDistance(palin, n), palin, solution);
  131. } else {
  132. updateOdd(firstHalf, solution, n);
  133. }
  134. }
  135.  
  136.  
  137. return solution.palin;
  138. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement