소개
시간이 혼란 스럽다. 60 초에서 1 분, 60 분에서 1 시간, 24 시간에서 하루 (그리고 성가신 am / pm은 말할 것도 없습니다!).
요즘에는 그런 어리 석음의 여지가 없으므로 우리는 유일하게 합리적인 대안을 채택하기로 결정했습니다. 즉, 매일은 전체 단위 1 개로 간주되며 더 짧은 것은 해당 날짜의 소수로 표시됩니다. 예를 들어 "12:00:00"은 "0.5"로, "01:23:45"는 "0.058159"로 작성 될 수 있습니다.
새로운 시스템에 익숙해지는 데 시간이 걸리므로, 양방향으로 변환 할 수있는 프로그램을 작성해야합니다.
도전
"hh : mm : ss"의 ISO-8601 형식으로 현대에 제공 한 경우 선택한 언어로 프로그램을 작성하면 동등한 10 진수 분수 단위가 반환됩니다. 마찬가지로 소수 부분이 주어지면 프로그램은 처음 지정된 현대 형식으로 시간을 반환해야합니다.
다음과 같은 가정을 할 수 있습니다.
- 최신 입력 및 출력 범위는 "00:00:00"에서 "24:00:00"까지입니다.
- 소수점 시간 입력 및 출력의 범위는 "0"에서 "1"까지 가능하며 소수점 이하 5 자리 (예 : "0.12345")까지 허용 / 출력 할 수 있어야합니다. 더 정밀한 것이 허용됩니다
- 프로그램은 입력을 기반으로 수행 할 변환 방향을 알 수 있어야합니다.
- 시간 관련 기능 / 라이브러리를 사용할 수 없습니다
당첨자는 기준을 달성하는 가장 짧은 코드로 결정됩니다. 그들은 적어도 7 개의 십진 일 단위로, 또는 충분한 제출이 있었을 때 / 때에 선택 될 것입니다.
예
여기에 의도적으로 잘못 작성된 JavaScript 코드가 예제로 사용됩니다.
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