Используйте буквы, чтобы сделать цифры короче

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,23M
999 500 -> 1 млн
999,499 -> 999K
102 -> 102
1000 -> 1K
1001 -> 1001
100 000 -> 100 000
12 345 678 912 -> 12,3 В
1 452 815 612 -> 1,45 В

Материалы

zoecarver
источник

Ответы:

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, и выберет суффикс, основанный на том, сколько делений было выполнено.

Artyer
источник
Последний случай должен быть 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

Попробуйте онлайн!

GarethPW
источник
немного короче: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]

Рик Хичкок
источник