Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi time biểu diễn thời gian dạng "HH:MM". Hàm phải tạo thời gian tiếp theo gần nhất bằng cách tái sử dụng các chữ số hiện tại. Không giới hạn số lần tái sử dụng chữ số.
Ví dụ, nếu đầu vào là:
Đầu vào
const time = '19:34';
Đầu ra
const output = '19:39';
Giải thích
Thời gian gần nhất tiếp theo từ các chữ số 1,9,3,4 là 19:39, xảy ra sau 5 phút. Không phải 19:33 vì đó là 23h59p sau.
Ví dụ
Dưới đây là mã thực hiện:
const time = '19:34';
const findClosestTime = (time = '') => {
const [a, b, c, d] = [time[0], time[1], time[3], time[4]].map(x => Number(x));
const sorted = [a, b, c, d].sort((x, y) => x - y);
const d2 = sorted.find(x => x > d);
if (d2 > d) {
return `${a}${b}:${c}${d2}`;
}
const c2 = sorted.find(x => x > c && x <= 5);
const min = Math.min(a, b, c, d);
if (c2 > c) {
return `${a}${b}:${c2}${min}`;
}
const b2 = sorted.find(x => x > b && a * 10 + x <= 24);
if (b2 > b) {
return `${a}${b2}:${min}${min}`;
}
const a2 = sorted.find(x => x > a && x <= 2);
if (a2 > a) {
return `${a2}${min}:${min}${min}`;
}
return `${min}${min}:${min}${min}`;
};
console.log(findClosestTime(time));
Kết quả
19:39