ใช้ตัวอักษรที่จะทำให้ตัวเลขสั้น


9

ท้าทาย

ใช้ตัวเลขและเอาท์พุทด้วยตัวเลข 4 หลักหรือน้อยกว่าโดยใช้ตัวอักษรและตัวเลข ตัวอย่างเช่น; จะกลายเป็น270,030270K

สำคัญ

พันล้าน -> B

ล้าน -> M

พัน -> K

กฎระเบียบ

  • คุณอาจเลือกที่จะยอมรับหมายเลขอินพุตที่มีเครื่องหมายจุลภาคคั่นทศนิยมสามตำแหน่ง (เช่น123,456,789)
  • ปัดเศษเป็นครึ่งหนึ่งที่ใกล้ที่สุด
  • ตัวเลขจะขึ้นไป999,499,999,999เท่านั้น
  • ส่วน mantissa ของคำตอบควรมีอย่างน้อย 1
  • ตัวอักษรทั้งหมดจะต้องเป็นตัวพิมพ์ใหญ่และตามที่ระบุไว้ข้างต้น
  • ผลลัพธ์ต้องเป็นตัวเลข 4 หลักหรือน้อยกว่า (รวมทั้งตัวอักษรเช่นB, KและM)
  • ผลลัพธ์จะต้องมีความแม่นยำทางคณิตศาสตร์มากที่สุด ตัวอย่าง:
    • 15,480-> 20K ไม่ตกลง
    • 15,480-> 15.5K ดีมาก
  • หากมีเอาต์พุตจำนวนมากที่มีความแม่นยำทางคณิตศาสตร์เหมือนกันให้ส่งคืนหนึ่งรายการ ตัวอย่าง:
    • 1000-> 1000 ดีมาก
    • 1000-> 1K ดีมาก

ตัวอย่าง:

1,234,567 -> 1.23 ล
999,500 -> 1 ล
999,499 -> 999K
102 -> 102
1,000 -> 1K
1001 -> 1001
100,000 -> 100K
12,345,678,912 -> 12.3B
1,452,815,612 -> 1.45B

การส่ง

คำตอบ:


2

JavaScript, 84 79 ไบต์

i=>{I=i;for(x=-1;i>=999.5;x++)i/=1e3;return I<1e4?I:+i.toPrecision(3)+'KMB'[x]}

ลองออนไลน์!

(รับอินพุตเป็นตัวเลข)

กรณีพิเศษคืออันแรกที่ถ้าi < 1000จำนวนตัวเองเป็นหนึ่งในวิธีที่สั้นที่สุดเสมอหากไม่ใช่วิธีที่สั้นที่สุดเท่านั้น

มิฉะนั้นจะหารด้วย 1,000 จนกว่าจะหารมันจะทำให้ไม่มีตัวเลขที่มีนัยสำคัญเหนือ 1 และเลือกคำต่อท้ายตามจำนวนหน่วยงานที่ทำ


กรณีสุดท้ายควรเป็น 999.5M หรืออาจจะไม่แน่ใจว่าไม่ได้ตามสเป็คหลวม
Magic Octopus Urn

จำไว้ว่าคุณต้องการการสนับสนุนมากถึงล้านล้าน
GarethPW

@GarethPW ไม่มีวิธีใดที่จะแสดงตัวเลขที่สูงกว่า 999,499,999,999 ตามสเป็ค (ไม่มีT -> trillionในคีย์) ดังนั้นฉันคิดว่านี่เป็นขีด จำกัด บน ฉันจะถาม แต่มันเป็นการสูญเสียหนึ่งไบต์
Artyer

1

Python 3 , 127 ไบต์

def f(n):s=str(n);l=len(s)-4;return f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[l//3+(int(s[3])>4)]if n>9999else n

ลองออนไลน์!


สั้นกว่าเล็กน้อย:def f(n):l=len(str(n))-4;return[n,f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[-~l//3]][n>9999]
wrymug

1
@JanathanAllan ไม่มีอะไร ความผิดพลาดของฉัน.
Artyer

@rosslh ฉันทำการเปลี่ยนแปลงนั้น แต่ไม่สามารถเก็บได้เมื่อแก้ไขข้อผิดพลาด 999499 -> 999M
GarethPW

1

JavaScript (ES7), 74 ไบต์

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*10**(c%3)+' KMB'[c/3|0]

JavaScript (ES6), 80 ไบต์

n=>n<1e4?n:(c=n.toExponential(2).split`e`).shift()*[1,10,100][c%3]+' KMB'[c/3|0]

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.