บทนำ
เวลากำลังสับสน หกสิบวินาทีถึงหนึ่งนาที, หกสิบนาทีถึงหนึ่งชั่วโมง, ยี่สิบสี่ชั่วโมงต่อวัน (และไม่ต้องพูดถึงที่น่ารำคาญ am / pm!)
ทุกวันนี้ไม่มีที่ว่างเหลืออยู่สำหรับความงี่เง่าดังนั้นเราจึงตัดสินใจเลือกทางเลือกที่เหมาะสมเพียงอย่างเดียวคือวันทศนิยม! กล่าวคือในแต่ละวันจะถือว่า 1 หน่วยทั้งหมดและสิ่งที่สั้นกว่านั้นเขียนเป็นเศษส่วนทศนิยมของวันนั้น ตัวอย่างเช่น: "12:00:00" จะถูกเขียนเป็น "0.5" และ "01:23:45" อาจถูกเขียนเป็น "0.058159"
เนื่องจากต้องใช้เวลาในการทำความคุ้นเคยกับระบบใหม่คุณจึงได้รับมอบหมายให้เขียนโปรแกรมที่สามารถแปลงระหว่างทั้งสองได้
ท้าทาย
เขียนโปรแกรมในภาษาที่คุณเลือกซึ่งกำหนดเวลาที่ทันสมัยในรูปแบบ ISO-8601 ของ "hh: mm: ss" จะส่งคืนหน่วยเศษทศนิยมที่เทียบเท่า ในทำนองเดียวกันเมื่อได้รับเศษทศนิยมโปรแกรมควรส่งคืนเวลาในรูปแบบทันสมัยที่ระบุไว้ในตอนแรก
คุณสามารถกำหนดสมมติฐานต่อไปนี้:
- อินพุตและเอาต์พุตเวลาที่ทันสมัยสามารถอยู่ในช่วง "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