Al escribir programas de código de golf , generalmente termino usando algunas constantes numéricas. Siempre los pongo en decimal porque así es como pienso, pero me di cuenta de que mi idioma admite otros formatos de números que podrían permitirme acortar un poco mi código.
Reto
Dado un entero no negativo menor que 2 ^ 53-1, decida si ese entero tiene la representación más corta en:
- Decimal
- Hexadecimal
- Notación cientifica
Decimal
Dado que este es el formato predeterminado de mi idioma, no se necesita una notación adicional para este formato. Cada número se representa como de costumbre para el decimal.
Hexadecimal
Mis idiomas usan el 0x
prefijo para constantes hexadecimales. Esto significa que si un número tiene 4 dígitos hexadecimales, se necesitarán 6 bytes para representar ese número.
Notación cientifica
Mi lenguaje usa el siguiente formato para notación científica:
[Base real] e [Exponente entero de 10]
Por ejemplo, 700
se representaría como 7e3
, y 699
se representaría como 6.99e3
, porque la base debe estar entre -10 y 10 (no incluido). Para los propósitos de este desafío, la base siempre será al menos 0, ya que el número ingresado no es negativo.
Salida
Debe devolver una forma de identificar qué formato es más corto (es decir, 0 para decimal, 1 para hexadecimal, 2 para científico). Alternativamente, puede generar la representación más pequeña del número mismo.
Casos de prueba
Decimal | Hexadecimal | Scientific | Winner
--------------|--------------|-------------------|-------------
0 | 0x0 | 0e0 | Decimal
15 | 0xF | 1.5e1 | Decimal
6999 | 0x1B57 | 6.999e3 | Decimal
7000 | 0x1B58 | 7e3 | Scientific
1000000000000 | 0xE8D4A51000 | 1e12 | Scientific
1000000000001 | 0xE8D4A51001 | 1.000000000001e12 | Hexadecimal
1000000001000 | 0xE8D4A513E8 | 1.000000001e12 | Hexadecimal
1000001000000 | 0xE8D4B45240 | 1.000001e12 | Scientific
Tanteo
Este es el código de golf , por lo que gana la respuesta en los bytes más cortos para cada idioma.
fuente
2^63-1
puede ser difícil para algunos idiomas. Considere relajar eso a un valor más bajo como2^32-1
(para que los valores quepan en un tipo de datos de coma flotante doble)double
. Sólo una sugerencia; Haz lo que quieras1000001000000
También se puede escribir como1000001e6
si.Respuestas:
05AB1E , 23 bytes
Pruébalo en línea!
-1 gracias a Emigna .
0
para hexadecimal,1
para decimal,2
para científico.fuente
'.ìÁ0
.05AB1E , 27 bytes
Pruébalo en línea!
Explicación
fuente
len(hex(input)) + 2
, si eso ayuda.¹
lugar deDs
:g¹hgÌ
Jalea , 28 bytes
Un enlace monádico regresar
1
,2
o3
para hexadecimal, científico o decimal, respectivamente.Pruébalo en línea! o ver un conjunto de pruebas .
Pensé que esto sería más corto, pero no puedo verlo, así que estoy publicando.
Cómo funciona esta monstruosidad ...
fuente
JavaScript (ES6), 90 bytes
Devuelve 0 para decimal, 1 para hexadecimal, -1 para científico.
Mostrar fragmento de código
Explicación
log(n) / log(10)
: base-10 logaritmo den
; aproximadamente la longitud den
como un decimal.log(n) / log(16) + 2
: base-16 logaritmo den
más 2; aproximadamente la longitud den
un hexadecimal más el antepuesto0x
.n.toExponential().length - 1
:n.toExponential()
devuelve una cadena conn
formato científico (p7e+3
. ej. ) pero restamos 1 de su longitud para tener en cuenta lo extraño+
.Ahora que tenemos las longitudes de las 3 representaciones
D
,H
yS
, podemos comparar:S<H?-(S<D):+(H<D)
JavaScript (ES6), 97 bytes
Éste genera el número en el formato con la longitud más corta. Inspirado por el intento eliminado de @ Shaggy .
Mostrar fragmento de código
fuente
C #,
1069796143132 bytesMolesto en C #, el
ulong.ToString
especificador de formatoe
pierde precisión en los números más altos, así que tuve que hacerlo manualmente. Probablemente haya una forma más corta de hacerlo, pero esto funciona por ahora. También lo formatea incorrectamente para este desafío, por lo que tendría que eliminar manualmente su salida de todos modos.Si configuro una cadena al valor de
n
yavar s=n+"";
que funciona más tiempo debido al retorno explícito y las llaves extra.Devuelve el valor más corto de la matriz de cada valor diferente donde
[0] = decimal, [1] = hexadecimal, [2] = scientific
.Versión completa / formateada:
La forma correcta de calcular la producción científica es:
Sin embargo, ya que
0
es más corto de lo0e0
que puedo eliminar ese caso especial.fuente
Python 2,
8377 bytesEmite la representación más pequeña del número.
Pruébalo en línea
Sin golf:
La expresión regular elimina los ceros finales y el punto decimal si es necesario, así como el signo más y el cero inicial del exponente si hay uno.
fuente
L
a números grandes dentro del rango de entrada.str
Lo evitaría.int
representación de Python . Los largos comienzan más o menos2**63
.+
personajes constr.replace
?+
mientras estoy en ello.Ohm , 35 bytes
Pruébalo en línea!
Salidas 0 para decimal, 1 para hexadecimal y 2 para científico.
Explicación:
fuente
PHP , 90 bytes
imprime 0 para decimal, 1 para hexadecimal y 2 para científico
en caso de empate se imprimirá el número más alto
Pruébalo en línea!
PHP , 91 bytes
imprime 0 para decimal, 1 para hexadecimal y 2 para científico
en caso de empate se imprimirá el número más bajo
Pruébalo en línea!
PHP , 103 bytes
imprime 0 para decimal, 1 para hexadecimal y 2 para científico
en caso de empate se imprimirán todos los números
Pruébalo en línea!
PHP , 109 bytes
Produzca una matriz con las soluciones más cortas.
Pruébalo en línea!
fuente
C,
187185 bytesDescomprimido:
Imprime 0 para decimal, 1 para hexadecimal, 2 para notación científica.
fuente
TI-Basic, 130 bytes
O alternativamente:
O, en hexadecimal:
Imprime 0 para decimal, 1 para hexadecimal, 2 para notación científica
fuente