Antecedentes
La tarea es simple pero cada programador la ha implementado al menos una vez. Stackoverflow tiene muchas muestras, pero ¿son lo suficientemente cortas como para ganar?
Historia del problema
Eres un programador gruñón al que se le asignó la tarea de implementar la entrada de tamaño de archivo para los usuarios. Como los usuarios no usan bytes, todos ingresarán "1M", "1K", "3G", "3.14M", ¡pero necesita bytes! Entonces escribes un programa para hacer la conversión.
Luego, su gerente le entrega docenas de informes de usuarios con quejas sobre grandes números extraños en la entrada de tamaño de archivo. Parece que también necesitarás codificar la conversión inversa.
¿Qué es lo que hay que hacer?
Aquí está el truco: debe implementar la conversión bidireccional en una sola pieza de código. ¿Se utilizan dos funciones separadas según sea necesario? No, eso es demasiado simple: ¡hagamos uno corto!
Para los propósitos de este desafío, "kilobyte" significa 1024 bytes, "megabyte" significa 1024 * 1024 = 1048576 bytes y "gigabytle" significa 1024 * 1024 * 1024 = 1073741824 bytes.
Datos de prueba
Input -> Output
5 -> 5
1023 -> 1023
1024 -> 1K
1K -> 1024
1.5K -> 1536
1536 -> 1.5K
1048576 -> 1M
1M -> 1048576
Reglas
- El valor de la prueba no excederá 2 * 1024 * 1024 * 1024 o 2G
- Los usuarios utilizan los siguientes postfixes: K para kilobytes, M para megabytes, G para gigabytes
- No se requiere código para trabajar con números negativos
- No utilice bibliotecas externas (por ejemplo,
BCMathen PHP) además de las agrupadas (por ejemplomath.h) - Las lagunas estándar no están permitidas
- El código no debe producir nada en stderr
- Su programa puede tomar entradas y producir salidas usando métodos estándar