ในหนังสือที่ยอดเยี่ยมและน่าหลงใหลของDeepor in the Skyของ Vernor Vinge (ซึ่งฉันขอแนะนำอย่างยิ่ง1 ), Qeng Hoซึ่งเป็นวัฒนธรรมที่ครอบคลุมระบบดาวต่าง ๆ ไม่มีแนวคิดเรื่อง "วัน" "เดือน" ปี "ฯลฯ และด้วยเหตุนี้จึงมีระบบบอกเวลาที่เป็นเอกลักษณ์ที่วัดเวลาทั้งหมดในไม่กี่วินาที หน่วยที่ใช้บ่อยที่สุดคือKsec (kilosecond), Msec (megasecond) และGsec (gigasecond) นี่คือแผนภูมิที่มีประโยชน์จากสำเนาหนังสือของฉันเอง (เนื่องจากฉันไม่สามารถหาได้ออนไลน์):
คุณกำลังบินอยู่บนPham Nuwenและคุณเพิ่งได้รับข้อความจากดาวเคราะห์แปลกประหลาดที่ไม่รู้จักที่เรียกว่า " โลก " 2พวกเขาใช้หน่วยเวลาที่แตกต่างจากที่คุณทำและคอมพิวเตอร์ของคุณไม่รู้จักหน่วยเวลา ในฐานะโปรแกรมเมอร์ประจำถิ่นของเรืองานของคุณคือแก้ไขรหัสการจัดการเวลาเพื่อให้สามารถจดจำหน่วยเวลาของโลกได้
โดยธรรมชาติเนื่องจากคุณเพิ่งจะเป็นหวัดสำหรับ Ksecs อีกสองสามตัวคุณต้องการทำให้โค้ดของคุณสั้นที่สุดเท่าที่จะเป็นไปได้เพื่อให้สามารถเขียนได้อย่างรวดเร็ว โชคดีในฐานะที่เป็นวัฒนธรรมการค้าระหว่างดวงดาว Qeng Ho สามารถเข้าถึงภาษาการเขียนโปรแกรมทุกภาษาที่คิดค้นขึ้น
อินพุต
การป้อนข้อมูลจะเป็นสายเดียวที่มีหนึ่งหรือมากกว่าหนึ่งพื้นที่แยก
ส่วนประกอบ องค์ประกอบที่ถูกกำหนดให้เป็นเลขจำนวนเต็ม> 0 และ≤ 255 แล้วพื้นที่และจากนั้นหนึ่งsecond
, minute
, hour
, day
, week
, month
,
year
, decade
หรือcentury
อาจจะเป็นพหูพจน์ (ด้วยการเพิ่มs
หรือ
centuries
กรณีที่ผ่านมา)
นี่คือตัวอย่างอินพุตที่ถูกต้อง:
10 days 12 hours
1 year
184 centuries 1 second
9 weeks 6 days 2 hours 1 minute 20 seconds
คุณอาจสันนิษฐานต่อไปนี้เกี่ยวกับอินพุต:
การทำให้เป็นจำนวนมากของหน่วยจะเห็นด้วยกับหมายเลขที่เกี่ยวข้องเสมอ
หากมีหลายองค์ประกอบในอินพุตพวกเขาจะอยู่ในลำดับความยาวจากมากไปหาน้อย
นี่คือความหมายของหน่วยอินพุตต่างๆสำหรับวัตถุประสงค์ของการท้าทายนี้:
unit relative absolute
---------------------------------------
second 1 second 1 second
minute 60 seconds 60 seconds
hour 60 minutes 3600 seconds
day 24 hours 86400 seconds
week 7 days 604800 seconds
month 30 days 2592000 seconds
year 365 days 31536000 seconds
decade 10 years 315360000 seconds
century 10 decades 3153600000 seconds
เอาท์พุต
นี่คือหน่วย Qeng Ho ที่รหัสของคุณสนับสนุน:
unit relative absolute
----------------------------------------
second 1 second 1 second
Ksec 1000 seconds 1000 seconds
Msec 1000 Ksecs 1000000 seconds
Gsec 1000 Msecs 1000000000 seconds
ใช้อัลกอริทึมต่อไปนี้เพื่อกำหนดผลลัพธ์ของรหัสของคุณ:
ก่อนอื่นให้เพิ่มจำนวนเวลาทั้งหมดที่อินพุตแทน
ค้นหาหน่วย Qeng Ho ที่ใหญ่ที่สุดที่สั้นลงหรือใช้เวลาเท่ากันกับอินพุต - โดยพื้นฐานแล้วค้นหาหน่วยที่ใหญ่ที่สุดที่มีอย่างน้อยหนึ่งหน่วย
แปลงจำนวนเวลาทั้งหมดที่กำหนดในอินพุตเป็นหน่วยนี้และส่งออกผลลัพธ์ปัดเศษเป็นทศนิยมสามตำแหน่ง
คุณอาจเลือกวิธีการใช้วิธีใดวิธีหนึ่งต่อไปนี้: การปัดเศษขึ้นปัดเศษลงปัดเศษจากศูนย์หรือปัดเศษไปยัง∞หรือ-∞ หากผลลัพธ์ที่ปัดเศษสิ้นสุดลง0
คุณสามารถลบศูนย์ต่อท้ายหรือเก็บไว้ได้มากเท่าที่คุณต้องการ
หากผลกลมเป็นสิ่ง1.000
ที่คุณต้องใช้รูปเอกพจน์ ( second
, Ksec
, Msec
, Gsec
); มิฉะนั้นจะใช้รูปพหูพจน์ ( seconds
,
Ksecs
, Msecs
, Gsecs
)
ในบางกรณีคุณอาจกำลังใช้หน่วยของตัวอย่างเช่น Ksec แต่ได้ผลลัพธ์ที่ปัดเศษเป็น 1,000,000 Ksecs ในกรณีนี้คุณอาจเพียงแค่การส่งออก
แทน1000.000 Ksecs
1 Msec
คุณอาจสมมติว่าอินพุตอยู่ในลำดับจากมากไปน้อย (ศตวรรษ, ทศวรรษ, ปี, ฯลฯ ); นอกจากนี้ส่วนประกอบที่ตามหลังหน่วยที่กำหนดจะสั้นกว่าเสมอ (นั่นคือ1 decade 20 years
คืออินพุตที่ไม่ถูกต้อง)
กรณีทดสอบ
หมายเหตุ: ผลลัพธ์ที่มีเครื่องหมายดอกจัน ( *
) อาจแตกต่างกันไปตามจำนวนเล็กน้อยเนื่องจากความแตกต่างในการปัดเศษ
input output
-------------------------------------------------------------
1 hour 3.600 Ksecs
1 day 86.400 Ksecs
2 weeks 1.210 Msecs
1 year 31.536 Msecs
32 years 1.009 Gsecs *
1 second 1.000 second
1 century 6 decades 5.046 Gsecs *
255 centuries 804.168 Gsecs
2 weeks 6 days 1 hour 19 minutes 4 seconds 1.733 Msecs
1 week 3 days 3 hours 7 minutes 875.220 Ksecs
1 week 4 days 13 hours 46 minutes 40 seconds 1.000 Msec
2 months 2 hours 5.191 Msecs *
16 minutes 39 seconds 999.000 seconds
กฎระเบียบ
- นี่คือโค้ดกอล์ฟดังนั้นโค้ดที่สั้นที่สุดในหน่วยไบต์ชนะ
1: เฉพาะในกรณีที่คุณชอบ scifi ยากแน่นอน ในกรณีนี้ฉันขอแนะนำให้อ่านA Fire Upon the Deepก่อนซึ่งเป็นสิ่งที่ฉันคิดว่ายอดเยี่ยมมาก
2: ดีเทคนิค "Old Earth" ถูกกล่าวถึงหลายครั้งในA Deepness in the Skyแต่ ...
2 months 2 hours
ว่า "2 เดือน * 2 ชั่วโมง"