文字を使用して数字を短くする


9

チャレンジ

番号を取り、文字と数字を使用して4桁以下で出力します。例えば; 270,030に変わり270Kます。

キー

10億-> B

ミリオン-> M

千-> K

ルール

  • 小数点以下3桁ごとに区切るコンマを含む入力番号を受け入れるように選択できます(など123,456,789)。
  • 最も近い値に丸めます。
  • 数字はまでしか上がりません999,499,999,999。
  • 回答の仮数部は少なくとも1でなければなりません。
  • すべての文字は大文字で、上記で指定したとおりでなければなりません。
  • 出力は4桁以下でなければなりません。(例えば、文字を含むB、Kおよび、M)
  • 出力は、数学的にできるだけ正確でなければなりません。例:
    • 15,480- > 20K NOT OK
    • 15,480-> 15.5K 良い
  • 同じ数学的精度の出力が複数ある場合は、どちらか1つを返します。例:
    • 1000-> 1000 良い
    • 1000-> 1K 良い

例:

1,234,567-> 120万
999,500-> 100万
999,499-> 999K
102-> 102
1000-> 1K
1001-> 1001
100,000-> 10万
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]}

オンラインでお試しください!

(入力を数値として受け取ります)

最初の特殊なケースでは、ifの場合i < 1000、数値自体が常に最短の方法ではなくても、常に最短の方法の1つになります。

それ以外の場合は、1を超える有意な数値がなくなるまで1000で割り、分割数に基づいて接尾辞を選択します。


最後のケースは999.5Mであるか、ルーズスペックに基づいて不明である可能性があります。
— マジックタコの壷

最大1兆をサポートする必要があることを忘れないでください。
— GarethPW 2017

@GarethPW仕様(T -> trillionキーのNo )に従って、999,499,999,999を超える数値を表す方法はないため、これが上限であると想定しました。質問しますが、それ以外の場合は1バイトの損失です。
— Artyer 2017

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 '19 / 07/19

1
@JonathanAllan何もない。私の間違い。
— Artyer 2017

@rosslhその変更を行いましたが、999499-> 999Mバグを修正するときにそれを維持できませんでした。
— GarethPW 2017

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.