Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 24:00
- 23:59
- ...
- 20:59
- 19:59
- ...
- 10:59
- 09:59
- ...
- 00:01
- */
- /*
- options:
- ab:cd
- a = 0, 1, 2 |
- b = (a=0-1, b=0-9), (a=2, b=0-3) |
- c = 0-5 |
- d = 0-9 |
- */
- const allDigits = [0,1,2,3,4,5,6,7,8,9];
- function getMaxTime(numbers){
- if(!areValidNumbers(numbers)){
- return 'Invalid values!';
- }
- const a = getBestFirstDigit(numbers);
- const b = getBestSecondDigit(a, numbers);
- const c = getBestThirdDigit(numbers);
- const d = numbers[0];
- return `${a}${b}:${c}${d}`
- return '{a}{b}:{c}{d}'
- .replace('{a}', a)
- .replace('{b}', b)
- .replace('{c}', c)
- .replace('{d}', d);
- }
- function getBestFirstDigit(numbers){
- numbers.sort();
- const [a, b, c, d] = numbers;
- switch(true){
- case a === 2: numbers.splice(0,1); return a;
- case b === 2: numbers.splice(1,1); return b;
- case c === 2: numbers.splice(2,1); return c;
- case d === 2: numbers.splice(3,1); return d;
- case a === 1: numbers.splice(0,1); return a;
- case b === 1: numbers.splice(1,1); return b;
- case c === 1: numbers.splice(2,1); return c;
- case d === 1: numbers.splice(3,1); return d;
- default: numbers.splice(0,1); return a;
- }
- }
- function getBestSecondDigit(first, numbers){
- const secondAllowedByFirstIsTwo = [3,2,1,0];
- const secondAllowedByFirstIsElse = [9,8,7,6,5,4,3,2,1,0];
- const list = first === 2 ? secondAllowedByFirstIsTwo : secondAllowedByFirstIsElse;
- const temp = numbers.filter(n => list.includes(n));
- const max = Math.max(...temp);
- const i = numbers.indexOf(max);
- numbers.splice(i, 1);
- return max;
- }
- function getBestThirdDigit(numbers){
- const list = [5,4,3,2,1,0];
- const temp = numbers.filter(n => list.includes(n));
- const max = Math.max(...temp);
- const i = numbers.indexOf(max);
- numbers.splice(i, 1);
- return max;
- }
- function areValidNumbers(numbers){
- if(!numbers || !Array.isArray(numbers) || numbers.length > 4 || numbers.filter(n => typeof n === 'number').length !== 4){
- return false;
- }
- numbers.sort();
- const [a, b, c, d] = numbers;
- const valid_a = [0,1,2].includes(a);
- const valid_b = ([0,1].includes(a) && allDigits.includes(b)) || (a === 2 && [0,1,2,3].includes(b));
- const valid_bc = ([0,1].includes(a) && allDigits.includes(c)) || (a === 2 && [0,1,2,3].includes(c));
- const valid_c = [0,1,2,3,4,5].includes(c);
- const valid_cb = [0,1,2,3,4,5].includes(b);
- const valid_d = allDigits.includes(d);
- return valid_a && ((valid_b && valid_c) || (valid_bc && valid_cb)) && valid_d;
- }
- module.exports = getMaxTime;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement