Défi
Donc, euh, il semble que, bien que nous ayons beaucoup de défis qui fonctionnent avec des nombres carrés ou des nombres d'autres formes, nous n'en avons pas qui demande simplement:
Étant donné un entier n
(où n>=0
) en entrée, retourne une valeur de vérité si n
est un carré parfait ou une valeur de Falsey sinon.
Règles
- Vous pouvez prendre des entrées par tout moyen raisonnable et pratique, dans la mesure où cela est autorisé par les règles d'E / S standard .
- Vous n'avez pas besoin de gérer des entrées supérieures à celles que votre langue choisie peut gérer de manière native, ni qui pourraient conduire à des inexactitudes en virgule flottante.
- La sortie devrait être l’une des deux valeurs de vérité / falsey cohérentes (par exemple,
true
oufalse
,1
ou0
) - vérité si l’entrée est un carré parfait, falsey si ce n’est pas le cas. - C'est le code-golf, donc le plus petit nombre d'octets gagne.
Cas de test
Input: 0
Output: true
Input: 1
Output: true
Input: 64
Output: true
Input: 88
Output: false
Input: 2147483647
Output: false
2**54-2
est toujours plus gros qu'un double ne peut le gérer en toute sécurité, du moins en JavaScript18014398509481982 > 9007199254740991
2**54-2
dans une console JS et comparez ce que vous obtenez avec 18014398509481982
(la valeur exacte). JS fournit la valeur exacte et peut donc 2**54-2
être représenté avec un double. Si cela ne vous convainc toujours pas, prenez les données binaires 0100001101001111111111111111111111111111111111111111111111111111
, interprétez-les comme un flottant double précision IEEE-754 et voyez quelle valeur vous obtenez.
18014398509481982
(2**54-2
), qui est représentable avec un double et provoque l'sqrt
échec des réponses que vous utilisez .