Einführung:
Wie Twitter und Instagram und andere wollte ich Zahlen wie 1.2K
und 3.8 M
anstelle von 1,222
oder anzeigen 3,823,456
.
Aber das ist nicht alles! Wie wir alle wissen, könnte es einige Menschen geben, die diese Abkürzungen zweifellos nicht mögen und versuchen werden, sie umzukehren. Also 1.2k
wird 1,200
und 3.8 M
wird 3,800,000
.
Die Aufgabe:
- Ihre Aufgabe ist es, ein Programm oder eine Funktion zu schreiben, die eine Liste von Zahlen ( die als Zeichenfolgen angegeben werden ) in ihre Abkürzungspaare konvertiert und umgekehrt.
Wenn beispielsweise die Eingabeliste (oder eine beliebige STDIN
) vorhanden war ['1.4k', '1,234,567', '7.99M']
, sollten Sie Folgendes ausgeben:
['1,400', '1.2M', '7,990,000']
Sie können dem nächsten Schema für Abkürzungen folgen:
- 10 3 -> ein Kilo -> K.
- 10 6 -> eine Million -> M.
- 10 9 -> eine Milliarde -> B.
Ihr Code kann für die Eingabe nur Kleinbuchstaben, Großbuchstaben, Misch- oder undefinierte Groß- und Kleinschreibung annehmen und diese für die Ausgabe verwenden, sollte jedoch konsistent sein.
Regeln und Einschränkungen:
- Sie können ein Programm oder eine Funktion schreiben, indem Sie Eingaben über
STDIN
(oder die nächstgelegene Alternative), ein Befehlszeilenargument oder ein Funktionsargument vornehmen und das Ergebnis überSTDOUT
(oder die nächstgelegene Alternative), den Funktionsrückgabewert oder den Funktionsparameter (out) ausgeben . - Die Eingabe kann in einem beliebigen Listen- oder Zeichenfolgenformat erfolgen. Sie können davon ausgehen, dass die Werte kleiner als die einzelnen sind und dass die Liste mindestens ein Element enthält.
ai
231
- Jede abgekürzte Nummer enthält nur eine,
.
während eine normale Nummer so viele,
wie nötig enthält (Sie können davon ausgehen, dass diese Nummern nicht geändert werden). - Sie dürfen keine Nummer als eingeben
'123456'
, sondern123,456
- Es gelten die Standardregeln für Code-Golf .
Testfälle:
Input: ['1.5M', '77.6k', '123,456,789'] Output: ['1,500,000', '77,600', '123.4M']
Input: ['3,000,000,000', '581k', '2b'] Output: ['3B', '581,000', '2,000,000,000']
Input: ['0.1k'] Output: ['100']
Input: ['888', '33'] Output: ['0.888k', '0.033k']
Erläuterungen:
- Für Zahlen <1000 nach dem Dezimalpunkt in der Abkürzungsausgabe sollten Sie so viele Ziffern wie erforderlich haben, um das richtige Ergebnis zu erhalten. (zB:
2
-> wird0.002k
) - das bedeutet höchstens 3 Dezimalstellen ; Für Zahlen> 1000 können Sie maximal 1 Dezimalstelle verwenden . - Die Abkürzung kann sowohl in Klein- als auch in Großbuchstaben angegeben werden
- Ich habe die eingebaute Einschränkung entfernt, wie in den Kommentaren vorgeschlagen
Der kürzeste Code in Bytes gewinnt!
'123,456,789' -> '123.4M'
? Dies verdeutlicht auch nicht, wie viele Dezimalstellen verwendet werden sollen. Sicherlich sollte alles unter 1000 sowieso nicht abgekürzt werden müssen.["k", "M", "G"]
. Was bedeutet "während eine normale Zahl so viele wie nötig enthält ", dass es in meinem Land ein Fehler wäre, eine zu verwenden.Antworten:
PHP,
234224213201205 Bytes6 Bytes, die von insertusernamehere gespeichert wurden, 4 Bytes, die davon inspiriert wurden.
-r
-2 Bytes, wenn der Unterstrich als Trennzeichen in Ordnung ist: Ersetzen
" "
durch_
.-1 Byte, wenn die korrekte Rundung in Ordnung ist: Ersetzen
($y*10|0)/10
durchround($y,1)
.-17 Bytes für PHP 7.1: Ersetzen
substr($x,strlen($x)-1)
durch$x[-1]
.80 (63) Bytes zum Erweitern nur eines Arguments:
Datei speichern, dann auszuführen (oder ersetzen
<?=
mitecho
+ Raum und läuft mit-r
.quelle
for($j=1;$x=$argv[$j++];)
- anstelle vonforeach($argv as$i=>$x)if($i)
kmb[$i]
- statt"kmb"[$i]
.JavaScript,
545524522518514508504498494214 BytesVielen Dank an @ETHproductions für die Einsparung von 180 Bytes!
So rufen Sie die Funktion auf:
Ausgaben als
alert
, wobei jedealert
ein anderes Element der Eingabe enthältLesbare Version:
Zusammenfassung der Änderungen: Konvertierte Funktion in eine Pfeilfunktion
var
|0
anstelle von Boden.reverse().join''
quelle