Ao escrever programas de código-golfe , geralmente acabo usando algumas constantes numéricas. Eu sempre os coloco em decimal, porque é assim que penso, mas acabei de perceber que meu idioma suporta outros formatos de números que podem me permitir diminuir um pouco meu código.
Desafio
Dado um número inteiro não negativo menor que 2 ^ 53-1, decida se esse número inteiro tem a menor representação em:
- Decimal
- Hexadecimal
- Notação científica
Decimal
Como esse é o formato padrão do meu idioma, não há notação extra necessária para esse formato. Cada número é representado como de costume para decimal.
Hexadecimal
Meus idiomas usa o 0x
prefixo para constantes hexadecimais. Isso significa que, se um número tiver 4 dígitos hexadecimais, serão necessários 6 bytes para representar esse número.
Notação científica
Meu idioma usa o seguinte formato para notação científica:
[Base real] e [Expoente inteiro de 10]
Por exemplo, 700
seria representado como 7e3
e 699
seria representado como 6.99e3
, porque a base deve estar entre -10 e 10 (não inclusivo). Para os propósitos deste desafio, a base sempre será pelo menos 0, pois o número inserido não é negativo.
Saída
Você deve retornar uma maneira de identificar qual formato é mais curto (ou seja, 0 para decimal, 1 para hexadecimal, 2 para científico). Como alternativa, você pode gerar a menor representação do número em si.
Casos de teste
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
Pontuação
Isso é código-golfe , então a resposta nos bytes mais curtos para cada idioma vence.
fonte
2^63-1
pode ser difícil para alguns idiomas. Considere relaxante que para um valor inferior, tal como2^32-1
(de modo que os valores se encaixam em um tipo de dados de ponto flutuante duplo)double
. Apenas uma sugestão; Faça o que achar melhor1000001000000
Também pode ser escrito como1000001e6
se.Respostas:
05AB1E , 23 bytes
Experimente online!
-1 graças a Emigna .
0
para hexadecimal,1
para decimal,2
para científico.fonte
'.ìÁ0
.05AB1E , 27 bytes
Experimente online!
Explicação
fonte
len(hex(input)) + 2
, se isso ajuda.¹
vez deDs
:g¹hgÌ
Gelatina , 28 bytes
Um link monádico retornando
1
,2
ou3
hexadecimal, científico ou decimal, respectivamente.Experimente online! ou veja uma suíte de testes .
Eu pensei que isso seria mais curto, mas não posso vê-lo, então estou postando.
Como essa monstruosidade funciona ...
fonte
JavaScript (ES6), 90 bytes
Retorna 0 para decimal, 1 para hexadecimal, -1 para científico.
Mostrar snippet de código
Explicação
log(n) / log(10)
: logaritmo de base 10 den
; aproximadamente o comprimento den
como decimal.log(n) / log(16) + 2
: logaritmo da base 16 den
mais 2; aproximadamente o comprimento den
um hexadecimal mais o precedido0x
.n.toExponential().length - 1
:n.toExponential()
retorna uma stringn
no formato científico (por exemplo7e+3
), mas subtraímos 1 do seu comprimento para explicar o que é estranho+
.Agora que temos os comprimentos de todos os 3 representações
D
,H
eS
, comparamos:S<H?-(S<D):+(H<D)
JavaScript (ES6), 97 bytes
Este gera o número no formato com o menor comprimento. Inspirado pela tentativa excluída de @ Shaggy .
Mostrar snippet de código
fonte
C #,
1069796143132 bytesIrritantemente em C #, o
ulong.ToString
especificador de formatoe
perde precisão nos números mais altos, então tive que fazer isso manualmente. Provavelmente existe uma maneira mais curta de fazer isso, mas isso funciona por enquanto. Ele também o formata incorretamente para esse desafio, então eu teria que retirar manualmente sua saída de qualquer maneira.Se eu definir uma string para o valor de
n
,var s=n+"";
pois funciona mais por causa do retorno explícito e de chaves extras.Retorna o menor valor da matriz de cada valor diferente em que
[0] = decimal, [1] = hexadecimal, [2] = scientific
.Versão completa / formatada:
A maneira correta de calcular a produção científica é:
No entanto, vendo como
0
é mais curto do que0e0
eu posso remover esse caso especial.fonte
Python 2,
8377 bytesProduz a menor representação do número.
Experimente online
Ungolfed:
A regex remove zeros à direita e o ponto decimal, se necessário, além do sinal de mais e zero à esquerda do expoente, se houver um.
fonte
L
número grande ao intervalo de entrada.str
evitaria isso.int
representação do Python . Os longos começam aproximadamente2**63
.+
caracteres comstr.replace
?+
tempo em que estou nela.Ohm , 35 bytes
Experimente online!
Saídas 0 para decimal, 1 para hexadecimal e 2 para científico.
Explicação:
fonte
PHP , 90 bytes
imprime 0 para decimal, 1 para hexadecimal e 2 para científico
em caso de empate, o número mais alto será impresso
Experimente online!
PHP , 91 bytes
imprime 0 para decimal, 1 para hexadecimal e 2 para científico
em caso de empate, o número mais baixo será impresso
Experimente online!
PHP , 103 bytes
imprime 0 para decimal, 1 para hexadecimal e 2 para científico
em caso de empate, todos os números serão impressos
Experimente online!
PHP , 109 bytes
Saída de uma matriz com as soluções mais curtas
Experimente online!
fonte
C,
187185 bytesDescomprimido:
Imprime 0 para decimal, 1 para hexadecimal, 2 para notação científica.
fonte
TI-Basic, 130 bytes
Ou alternativamente:
Ou, em hexadecimal:
Imprime 0 para decimal, 1 para hexadecimal, 2 para notação científica
fonte