Giới thiệu
Thời gian thật khó hiểu. Sáu mươi giây đến một phút, sáu mươi phút đến một giờ, hai mươi bốn giờ đến một ngày (và không đề cập đến đó là sáng / chiều!).
Ngày nay không có chỗ cho sự điên cuồng như vậy, vì vậy chúng tôi đã quyết định áp dụng phương án thay thế hợp lý duy nhất: ngày thập phân! Điều đó có nghĩa là, mỗi ngày được coi là 1 đơn vị, và bất cứ điều gì ngắn hơn được viết dưới dạng một phần thập phân của ngày đó. Vì vậy, ví dụ: "12:00:00" sẽ được viết là "0,5" và "01:23:45" có thể được viết là "0,058159".
Bởi vì sẽ mất thời gian để làm quen với hệ thống mới, bạn có nhiệm vụ viết một chương trình có thể chuyển đổi giữa chúng theo cả hai hướng.
Thử thách
Viết chương trình bằng ngôn ngữ bạn chọn, trong thời gian hiện đại ở định dạng ISO-8601 là "hh: mm: ss", sẽ trả về đơn vị phân số thập phân tương đương. Tương tự, với một phần thập phân, chương trình sẽ trả về thời gian ở định dạng hiện đại được chỉ định ban đầu.
Bạn có thể đưa ra các giả định sau:
- Đầu vào và đầu ra thời gian hiện đại có thể dao động từ "00:00:00" đến "24:00:00"
- Đầu vào và đầu ra thời gian thập phân có thể nằm trong khoảng từ "0" đến "1" và có thể chấp nhận / đầu ra tối thiểu 5 vị trí thập phân (chẳng hạn như "0.12345"). Độ chính xác cao hơn là chấp nhận được
- Chương trình sẽ có thể biết hướng chuyển đổi nào sẽ thực hiện dựa trên đầu vào
- Bạn không thể sử dụng các chức năng / thư viện liên quan đến thời gian
Người chiến thắng sẽ được xác định bởi mã ngắn nhất hoàn thành các tiêu chí. Chúng sẽ được chọn trong ít nhất 7 đơn vị ngày thập phân hoặc nếu / khi đã có đủ số lần gửi.
Ví dụ
Đây là một đoạn mã JavaScript được viết kém (cố ý) được sử dụng làm ví dụ:
function decimalDay(hms) {
var x, h, m, s;
if (typeof hms === 'string' && hms.indexOf(':') > -1) {
x = hms.split(':');
return (x[0] * 3600 + x[1] * 60 + x[2] * 1) / 86400;
}
h = Math.floor(hms * 24) % 24;
m = Math.floor(hms * 1440) % 60;
s = Math.floor(hms * 86400) % 60;
return (h > 9 ? '' : '0') + h + ':' + (m > 9 ? '' : '0') + m + ':' + (s > 9 ? '' : '0') + s;
}
decimalDay('02:57:46'); // 0.12344907407407407
decimalDay('23:42:12'); // 0.9876388888888888
decimalDay(0.5); // 12:00:00
decimalDay(0.05816); // 01:23:45
n
nơi n
là 2 ^ n giây. Vì vậy, giá trị '6' có chỉ số TTL khoảng 1 phút. Giá trị '12' có TTL khoảng 1 giờ. "15" là khoảng 8 giờ và cứ thế. Nó cho phép một byte để xác định thời gian chờ và cung cấp cho bạn đủ quyền kiểm soát trong thời gian ngắn hoặc dài.