Sử dụng các chữ cái để làm cho số ngắn hơn


9

Thử thách

Lấy một số và xuất nó với 4 chữ số hoặc ít hơn bằng cách sử dụng các chữ cái và số. Ví dụ; 270,030sẽ biến thành 270K.

Chìa khóa

Tỷ -> B

Triệu -> M

Ngàn -> K

Quy tắc

  • Bạn có thể chọn chấp nhận các số đầu vào bao gồm dấu phẩy phân cách mỗi ba vị trí thập phân (chẳng hạn như 123,456,789).
  • Vòng đến gần nhất, nửa lên.
  • Số sẽ chỉ đi lên 999,499,999,999.
  • Phần mantissa của câu trả lời nên có ít nhất 1.
  • Tất cả các chữ cái phải được viết hoa và như được chỉ định ở trên.
  • Đầu ra phải có 4 chữ số trở xuống. (bao gồm cả chữ như B, KM)
  • Đầu ra phải chính xác về mặt toán học càng tốt. Thí dụ:
    • 15,480-> 20K KHÔNG OK
    • 15,480-> 15.5K TỐT
  • Nếu có nhiều đầu ra có cùng độ chính xác toán học, trả về một trong hai đầu ra. Thí dụ:
    • 1000-> 1000 TỐT
    • 1000-> 1K TỐT

Ví dụ:

1,234,567 -> 1,23M
999.500 -> 1 triệu
999,499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100.000 -> 100K
12.345.678.912 -> 12.3B
1.452.815.612 -> 1.45B

Đệ trình

Câu trả lời:


2

JavaScript, 84 79 byte

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

Hãy thử trực tuyến!

(Lấy đầu vào dưới dạng số)

Trường hợp đặc biệt là trường hợp đầu tiên trong đó, nếu i < 1000bản thân con số luôn là một trong những cách ngắn nhất, nếu không phải là cách ngắn nhất.

Mặt khác, nó chia cho 1000 cho đến khi chia nó sẽ làm cho nó không có số liệu đáng kể nào trên 1 và chọn hậu tố dựa trên số lần chia.


Trường hợp cuối cùng phải là 999,5M, hoặc có thể không, không chắc chắn dựa trên thông số kỹ thuật lỏng lẻo.
Bạch tuộc ma thuật Urn

Hãy nhớ rằng bạn cần hỗ trợ lên tới một nghìn tỷ.
GarethPW

@GarethPW Không có cách nào để biểu thị các số trên 999,499.999.999 theo thông số kỹ thuật (Không có T -> trilliontrong khóa), vì vậy tôi cho rằng đây là giới hạn trên. Tôi sẽ hỏi, nhưng đó là mất một byte.
Artyer

1

Python 3 , 127 byte

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

Hãy thử trực tuyến!


ngắn hơn một chút:def f(n):l=len(str(n))-4;return[n,f"{round(n,~l):,}"[:4].replace(*",.").rstrip('.')+"KMBT"[-~l//3]][n>9999]
wrymug

1
@Jonathan Allan Không có gì. Lỗi của tôi.
Artyer

@rosslh Tôi đã thực hiện thay đổi đó nhưng không thể giữ nó khi sửa lỗi 999499 -> 999M.
GarethPW

1

JavaScript (ES7), 74 byte

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

JavaScript (ES6), 80 byte

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

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.