Quando scrivo programmi di code-golf , di solito finisco per usare alcune costanti numeriche. Li metto sempre in decimale perché è così che penso, ma mi sono appena reso conto che la mia lingua supporta altri formati numerici che potrebbero permettermi di abbreviare leggermente il mio codice.
Sfida
Dato un numero intero non negativo inferiore a 2 ^ 53-1, decidi se quel numero intero ha la rappresentazione più breve in:
- Decimale
- esadecimale
- Notazione scientifica
Decimale
Poiché questo è il formato predefinito della mia lingua, per questo formato non è necessaria alcuna notazione aggiuntiva. Ogni numero è rappresentato come al solito per i decimali.
esadecimale
Le mie lingue usano il 0x
prefisso per le costanti esadecimali. Ciò significa che se un numero ha 4 cifre esadecimali, saranno necessari 6 byte per rappresentare quel numero.
Notazione scientifica
La mia lingua utilizza il seguente formato per la notazione scientifica:
[Base reale] e [esponente intero di 10]
Ad esempio, 700
sarebbe rappresentato come 7e3
e 699
sarebbe rappresentato come 6.99e3
, poiché la base deve essere compresa tra -10 e 10 (non inclusivo). Ai fini di questa sfida, la base sarà sempre almeno 0, poiché il numero immesso non è negativo.
Produzione
Dovresti restituire un modo per identificare quale formato è il più breve (ovvero 0 per i decimali, 1 per esadecimale, 2 per scientifici). In alternativa, è possibile produrre la più piccola rappresentazione del numero stesso.
Casi test
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
punteggio
Questo è code-golf , quindi vince la risposta nei byte più brevi per ogni lingua.
double
. Solo un suggerimento; fai come ritieni opportuno
1000001000000
può anche essere scritto come 1000001e6
se.
2^63-1
può essere difficile per alcune lingue. Considera di ridurlo a un valore inferiore come2^32-1
(quindi i valori si adattano a un doppio tipo di dati in virgola mobile)