Використовуйте літери, щоб скоротити цифри


9

Виклик

Візьміть число і виведіть його з 4 цифр або менше, використовуючи букви та цифри. Наприклад; 270,030перетворився б на 270K.

Ключ

Мільярд -> B

Мільйон -> M

Тисяча -> K

Правила

  • Ви можете прийняти цифри введення, що містять коми, що розмежовують кожні три десяткових знаки (наприклад, 123,456,789).
  • Круглий до найближчого, наполовину.
  • Числа збільшаться лише до 999,499,999,999.
  • Частина відповіді мантіси повинна бути не менше 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 -> 999К
102 -> 102
1000 -> 1К
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, саме число завжди є одним із найкоротших шляхів, якщо не єдиним, то найкоротшим.

В іншому випадку він ділить його на 1000, поки ділення не зробить значущих цифр вище 1, і вибере суфікс залежно від кількості поділів.


Останній випадок повинен бути 999,5 млн., А може і ні, не впевнений на основі сипучих характеристик.
Чарівна восьминога урна

Пам’ятайте, що вам потрібно підтримати до трильйона.
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
@JonathanAllan Нічого. Моя помилка.
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]

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.