เมื่อเขียนโปรแกรมรหัสกอล์ฟฉันมักจะลงเอยด้วยค่าคงที่ตัวเลข ฉันใส่มันเป็นทศนิยมเสมอเพราะนั่นคือสิ่งที่ฉันคิด แต่ฉันเพิ่งรู้ว่าภาษาของฉันรองรับรูปแบบตัวเลขอื่น ๆ ที่อาจทำให้ฉันย่อรหัสของฉันลงเล็กน้อย
ท้าทาย
รับจำนวนเต็มที่ไม่เป็นลบน้อยกว่า 2 ^ 53-1 ตัดสินใจว่าจำนวนเต็มนั้นมีการแทนค่าสั้นที่สุดใน:
- ทศนิยม
- เลขฐานสิบหก
- สัญกรณ์วิทยาศาสตร์
ทศนิยม
เนื่องจากนี่เป็นรูปแบบเริ่มต้นของภาษาของฉันจึงไม่จำเป็นต้องมีเครื่องหมายพิเศษสำหรับรูปแบบนี้ ทุกหมายเลขจะแสดงตามปกติสำหรับทศนิยม
เลขฐานสิบหก
ภาษาของฉันใช้0x
คำนำหน้าสำหรับค่าคงที่เลขฐานสิบหก ซึ่งหมายความว่าหากตัวเลขมีเลขฐานสิบหก 4 หลักจะใช้เวลา 6 ไบต์เพื่อแสดงตัวเลขนั้น
สัญกรณ์วิทยาศาสตร์
ภาษาของฉันใช้รูปแบบต่อไปนี้สำหรับสัญกรณ์ทางวิทยาศาสตร์:
[ฐานจริง] e [เลขชี้กำลังจำนวนเต็มของ 10]
ตัวอย่างเช่น700
จะแสดงเป็น7e3
และ699
จะแสดงเป็น6.99e3
เพราะฐานจะต้องอยู่ระหว่าง -10 ถึง 10 (ไม่รวม) สำหรับจุดประสงค์ของการท้าทายฐานจะมีค่าอย่างน้อย 0 เสมอเนื่องจากจำนวนที่ป้อนนั้นไม่เป็นลบ
เอาท์พุต
คุณควรกลับวิธีระบุรูปแบบที่สั้นที่สุด (เช่น 0 สำหรับทศนิยม, 1 สำหรับ hex, 2 สำหรับวิทยาศาสตร์) อีกทางหนึ่งคุณอาจส่งออกการแสดงตัวเลขที่น้อยที่สุดของตัวเอง
กรณีทดสอบ
Decimal | Hexadecimal | Scientific | Winner
--------------|--------------|-------------------|-------------
0 | 0x0 | 0e0 | Decimal
15 | 0xF | 1.5e1 | Decimal
6999 | 0x1B57 | 6.999e3 | Decimal
7000 | 0x1B58 | 7e3 | Scientific
1000000000000 | 0xE8D4A51000 | 1e12 | Scientific
1000000000001 | 0xE8D4A51001 | 1.000000000001e12 | Hexadecimal
1000000001000 | 0xE8D4A513E8 | 1.000000001e12 | Hexadecimal
1000001000000 | 0xE8D4B45240 | 1.000001e12 | Scientific
เกณฑ์การให้คะแนน
นี่คือโค้ดกอล์ฟดังนั้นคำตอบในจำนวนไบต์ที่สั้นที่สุดสำหรับแต่ละภาษาจะชนะ
double
ที่เหมาะกับยังคงอยู่ใน เพียงข้อเสนอแนะ; ทำตามที่เห็นสมควร
1000001000000
สามารถเขียนได้ราวกับ1000001e6
ว่า
2^63-1
อาจเป็นเรื่องยากสำหรับบางภาษา พิจารณาการผ่อนคลายด้วยค่าที่ต่ำกว่าเช่น2^32-1
(ดังนั้นค่าจึงเหมาะกับประเภทข้อมูลจุดลอยตัวสองเท่า)