Advertisement
Guest User

Untitled

a guest
Nov 13th, 2019
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.72 KB | None | 0 0
  1. /*
  2. 24:00
  3. 23:59
  4. ...
  5. 20:59
  6. 19:59
  7. ...
  8. 10:59
  9. 09:59
  10. ...
  11. 00:01
  12. */
  13. /*
  14. options:
  15. ab:cd
  16. a = 0, 1, 2 |
  17. b = (a=0-1, b=0-9), (a=2, b=0-3) |
  18. c = 0-5 |
  19. d = 0-9 |
  20. */
  21.  
  22. const allDigits = [0,1,2,3,4,5,6,7,8,9];
  23.  
  24. function getMaxTime(numbers){
  25. if(!areValidNumbers(numbers)){
  26. return 'Invalid values!';
  27. }
  28.  
  29. const a = getBestFirstDigit(numbers);
  30. const b = getBestSecondDigit(a, numbers);
  31. const c = getBestThirdDigit(numbers);
  32. const d = numbers[0];
  33. return `${a}${b}:${c}${d}`
  34. return '{a}{b}:{c}{d}'
  35. .replace('{a}', a)
  36. .replace('{b}', b)
  37. .replace('{c}', c)
  38. .replace('{d}', d);
  39. }
  40.  
  41. function getBestFirstDigit(numbers){
  42. numbers.sort();
  43. const [a, b, c, d] = numbers;
  44. switch(true){
  45. case a === 2: numbers.splice(0,1); return a;
  46. case b === 2: numbers.splice(1,1); return b;
  47. case c === 2: numbers.splice(2,1); return c;
  48. case d === 2: numbers.splice(3,1); return d;
  49. case a === 1: numbers.splice(0,1); return a;
  50. case b === 1: numbers.splice(1,1); return b;
  51. case c === 1: numbers.splice(2,1); return c;
  52. case d === 1: numbers.splice(3,1); return d;
  53. default: numbers.splice(0,1); return a;
  54. }
  55. }
  56.  
  57. function getBestSecondDigit(first, numbers){
  58. const secondAllowedByFirstIsTwo = [3,2,1,0];
  59. const secondAllowedByFirstIsElse = [9,8,7,6,5,4,3,2,1,0];
  60. const list = first === 2 ? secondAllowedByFirstIsTwo : secondAllowedByFirstIsElse;
  61. const temp = numbers.filter(n => list.includes(n));
  62. const max = Math.max(...temp);
  63. const i = numbers.indexOf(max);
  64. numbers.splice(i, 1);
  65. return max;
  66. }
  67.  
  68. function getBestThirdDigit(numbers){
  69. const list = [5,4,3,2,1,0];
  70. const temp = numbers.filter(n => list.includes(n));
  71. const max = Math.max(...temp);
  72. const i = numbers.indexOf(max);
  73. numbers.splice(i, 1);
  74. return max;
  75. }
  76.  
  77. function areValidNumbers(numbers){
  78. if(!numbers || !Array.isArray(numbers) || numbers.length > 4 || numbers.filter(n => typeof n === 'number').length !== 4){
  79. return false;
  80. }
  81. numbers.sort();
  82. const [a, b, c, d] = numbers;
  83. const valid_a = [0,1,2].includes(a);
  84. const valid_b = ([0,1].includes(a) && allDigits.includes(b)) || (a === 2 && [0,1,2,3].includes(b));
  85. const valid_bc = ([0,1].includes(a) && allDigits.includes(c)) || (a === 2 && [0,1,2,3].includes(c));
  86. const valid_c = [0,1,2,3,4,5].includes(c);
  87. const valid_cb = [0,1,2,3,4,5].includes(b);
  88. const valid_d = allDigits.includes(d);
  89.  
  90. return valid_a && ((valid_b && valid_c) || (valid_bc && valid_cb)) && valid_d;
  91. }
  92.  
  93. module.exports = getMaxTime;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement