Lors de l'écriture de programmes de code-golf , je finis généralement par utiliser des constantes numériques. Je les mets toujours en décimal parce que c'est ce que je pense, mais je viens de réaliser que ma langue prend en charge d'autres formats numériques qui pourraient me permettre de raccourcir légèrement mon code.
Défi
Étant donné un entier non négatif inférieur à 2 ^ 53-1, décidez si cet entier a la représentation la plus courte dans:
- Décimal
- Hexadécimal
- Notation scientifique
Décimal
Comme il s'agit du format par défaut de ma langue, aucune notation supplémentaire n'est requise pour ce format. Chaque nombre est représenté comme d'habitude pour la décimale.
Hexadécimal
Mes langues utilisent le 0x
préfixe pour les constantes hexadécimales. Cela signifie que si un nombre a 4 chiffres hexadécimaux, il faudra 6 octets pour représenter ce nombre.
Notation scientifique
Ma langue utilise le format suivant pour la notation scientifique:
[Base réelle] e [Exposant entier de 10]
Par exemple, 700
serait représenté comme 7e3
, et 699
serait représenté comme 6.99e3
, car la base doit être comprise entre -10 et 10 (non inclus). Aux fins de ce défi, la base sera toujours au moins égale à 0, car le nombre entré n'est pas négatif.
Sortie
Vous devez renvoyer un moyen d'identifier le format le plus court (ie 0 pour décimal, 1 pour hex, 2 pour scientifique). Vous pouvez également générer la plus petite représentation du nombre lui-même.
Cas de 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
Notation
C'est du code-golf , donc la réponse dans les octets les plus courts pour chaque langue l'emporte.
la source
2^63-1
peut être difficile pour certaines langues. Envisagez de relâcher cela à une valeur inférieure telle que2^32-1
(de sorte que les valeurs tiennent dans un type de données à virgule flottante double)double
. Juste une suggestion; faites comme bon vous semble1000001000000
peut également être écrit comme1000001e6
si.Réponses:
05AB1E , 23 octets
Essayez-le en ligne!
-1 merci à Emigna .
0
pour hexadécimal,1
pour décimal,2
pour scientifique.la source
'.ìÁ0
.05AB1E , 27 octets
Essayez-le en ligne!
Explication
la source
len(hex(input)) + 2
, si cela aide.¹
au lieu deDs
:g¹hgÌ
Gelée , 28 octets
Un lien monadique retour
1
,2
ou3
pour hexadécimal, scientifique, ou décimal respectivement.Essayez-le en ligne! ou consultez une suite de tests .
Je pensais que ce serait plus court, mais je ne le vois pas, alors je poste.
Comment fonctionne cette monstruosité ...
la source
JavaScript (ES6), 90 octets
Renvoie 0 pour décimal, 1 pour hexadécimal, -1 pour scientifique.
Afficher l'extrait de code
Explication
log(n) / log(10)
: logarithme en base 10 den
; à peu près la longueur d'n
une décimale.log(n) / log(16) + 2
: logarithme en base 16 den
plus 2; à peu près la longueur d'n
un hexadécimal plus le préfixé0x
.n.toExponential().length - 1
:n.toExponential()
retourne une chaînen
au format scientifique (par exemple7e+3
) mais nous soustrayons 1 de sa longueur pour tenir compte de l’étranger+
.Maintenant que nous avons les longueurs de toutes les 3 représentations
D
,H
etS
, nous comparons:S<H?-(S<D):+(H<D)
JavaScript (ES6), 97 octets
Celui-ci sort le nombre dans le format avec la longueur la plus courte. Inspiré par la tentative supprimée de @ Shaggy .
Afficher l'extrait de code
la source
C #,
1069796143132 octetsEnnuyeusement en C # le
ulong.ToString
spécificateur de formate
perd sa précision sur les nombres plus élevés, donc j'ai dû le faire manuellement. Il y a probablement un moyen plus court de le faire, mais cela fonctionne pour l'instant. Il le formate également incorrectement pour ce défi, je devrais donc supprimer manuellement sa sortie de toute façon.Si je mets une chaîne à la valeur de
n
asvar s=n+"";
cela fonctionne plus longtemps à cause du retour explicite et des accolades supplémentaires.Il renvoie la valeur la plus courte du tableau de chaque valeur différente où
[0] = decimal, [1] = hexadecimal, [2] = scientific
.Version complète / formatée:
La bonne façon de calculer la production scientifique est:
Cependant, vu que
0
c'est plus court que0e0
je peux supprimer ce cas spécial.la source
Python 2,
8377 octetsGénère la plus petite représentation du nombre.
Essayez-le en ligne
Non golfé:
Le regex supprime les zéros de fin et le point décimal si nécessaire, ainsi que le signe plus et le zéro de tête de l'exposant s'il y en a un.
la source
L
grand nombre dans la plage d'entrée.str
éviterait cela.int
représentation de Python . Les longs commencent à peu près2**63
.+
caractères avecstr.replace
?+
pendant que j'y suis.Ohm , 35 octets
Essayez-le en ligne!
Sorties 0 pour décimal, 1 pour hex et 2 pour scientifique.
Explication:
la source
PHP , 90 octets
imprime 0 pour décimal, 1 pour hexadécimal et 2 pour scientifique
en cas d'égalité, le numéro le plus élevé sera imprimé
Essayez-le en ligne!
PHP , 91 octets
imprime 0 pour décimal, 1 pour hexadécimal et 2 pour scientifique
en cas d'égalité, le numéro le plus bas sera imprimé
Essayez-le en ligne!
PHP , 103 octets
imprime 0 pour décimal, 1 pour hexadécimal et 2 pour scientifique
en cas d'égalité tous les numéros seront imprimés
Essayez-le en ligne!
PHP , 109 octets
Produire un tableau avec les solutions les plus courtes
Essayez-le en ligne!
la source
C,
187185octetsDécompressé:
Imprime 0 pour décimal, 1 pour hex, 2 pour notation scientifique.
la source
TI-Basic, 130 octets
Ou bien:
Ou, en hex:
Imprime 0 pour décimal, 1 pour hex, 2 pour notation scientifique
la source