Hintergrund
Die Aufgabe ist einfach, aber jeder Programmierer hat sie mindestens einmal implementiert. Stackoverflow hat viele Samples, aber sind sie kurz genug, um zu gewinnen?
Problemgeschichte
Sie sind ein mürrischer Programmierer, der die Aufgabe erhalten hat, die Eingabe der Dateigröße für die Benutzer zu implementieren. Da Benutzer keine Bytes verwenden, geben alle nur "1M", "1K", "3G", "3.14M" ein - aber Sie benötigen Bytes! Sie schreiben also ein Programm für die Konvertierung.
Dann übergibt Ihnen Ihr Manager Dutzende von Benutzerberichten mit Beschwerden über seltsam große Zahlen bei der Eingabe der Dateigröße. Es scheint, dass Sie auch die umgekehrte Konvertierung codieren müssen.
Was musst du tun?
Hier ist der Trick: Sie sollten die bidirektionale Konvertierung in einem einzigen Code implementieren. Zwei separate Funktionen nach Bedarf verwendet? Nein, das ist zu einfach - machen wir eins, kurz!
Für die Zwecke dieser Herausforderung bedeutet "Kilobyte" 1024 Bytes, "Megabyte" 1024 * 1024 = 1048576 Bytes und "Gigabyte" 1024 * 1024 * 1024 = 1073741824 Bytes.
Testdaten
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Regeln
- Der Testwert wird 2 * 1024 * 1024 * 1024 oder 2G nicht überschreiten
- Die folgenden Postfixes werden von Benutzern verwendet: K für Kilobyte, M für Megabyte, G für Gigabyte
- Code ist nicht erforderlich, um mit negativen Zahlen zu arbeiten
- Verwenden Sie keine externen Bibliotheken (zB
BCMath
in PHP) neben gebündelt diejenigen (zBmath.h
) - Standardlücken sind nicht zulässig
- Code sollte auf stderr nichts erzeugen
- Ihr Programm kann nehmen Eingabe und erzeugen Ausgang mit Standardmethoden
Antworten:
Python 2,
204190 BytesDies ist mein erster Codegolf.
quelle
Pip, 60 Bytes
Übernimmt Eingaben über die Befehlszeile (der
a
Variablen zugewiesen ) und gibt sie an stdout aus.Ungolfed Version:
Algorithmus:
i
von 1 bis 3:a >= 1024
dies ein Bytewert ist, der in eine größere Einheit konvertiert werden muss:a
durch 1024x
den aktuellen Wert ein, dera
mit der aktuellen Einheit verknüpft istx
im vorherigen Schritt festgelegt wurde, geben Sie es aus. Ansonstena
war weniger als 1024 (mit einem möglichen Einheitensuffix), also:a
wennKMG
am Ende eine der folgenden steht: Übersetzen Sie den Buchstaben in die entsprechende Potenz von 1024 und multiplizieren Sie die Zahl mit dem Ergebnis.quelle
JavaScript,
144106 BytesDies kann definitiv verkürzt werden und wird es später tun. Ich wollte nur etwas Hässliches da draußen haben;)
quelle
Python2 199 Bytes
Das ist albern, aber es funktioniert (ohne die Frage nach der Dezimalgenauigkeit), solange Sie Dutzende Gigabyte RAM haben. Führen Sie es nicht anders aus, da Ihr Computer möglicherweise einfriert und abstürzt. Als erstes wird ein 2-Gigabyte-Array von Ganzzahlen zugewiesen.
quelle
C.
206183 BytesIch habe so viel wie möglich losgeworden.
Ausgabe
Erläuterung
quelle