Combien de décimales y a-t-il avant d'avoir besoin d'ajouter 1 lors de l'arrondi?

10

Lorsque vous arrondissez un nombre, si le chiffre suivant est >= 5vous ajoutez 1. Par exemple:

3.1415926535 rounded to 1dp is 3.1
3.1415926535 rounded to 4dp is 3.1416    <-- Note the 5 changed to 6
3.1415926535 rounded to 5dp is 3.14159

3.1415926535 rounded to 9dp is 3.141592654  <-- Note the 3 changed to 4

Votre défi consiste à recevoir un entier en entrée et à sortir le nombre de décimales devant lequel vous devrez arrondir la racine carrée du nombre - c'est-à-dire le nombre de décimales avant un chiffre qui se >= 5produit.

L'entier sera compris entre 0 et 100 000 inclus, donc pour le cas de bord de 59752, vous devez prendre en charge 17 décimales (pour vérifier le 17).

Si votre langage de programmation ne peut pas modifier le nombre de décimales, vous pouvez afficher un "?" message à l'utilisateur.

Exemple:

Input    Root                     Output

    5 -> 2.23 606797749979     -> 2
   41 -> 6.40312423 743284     -> 8      (Largest gap under 100)
  596 -> 24.4131112314 674     -> 10     (Largest gap under 1000)
59752 -> 244.44222221212112029 -> 16     (Largest gap under 100000)

Faites ce que vous voulez sur des carrés parfaits.

C'est le donc le code le plus court gagne.


Pour toute personne intéressée, le nombre 310 617 est le plus grand de moins de 1 000 000 et en a 18 avant d'atteindre un chiffre >= 5.

Tim
la source
Combien de décimales faut-il prendre en charge au maximum? - Aucune langue ne stocke avec une précision infinie.
Blue
Je ne sais pas pourquoi, mais je reçois 17 chiffres pour SQRT (59752) (dans deux langues différentes). Les autres résultats sortent correctement.
Jonathan Leech-Pepin
@ JonathanLeech-Pepin incluez-vous le dernier chiffre pour une raison quelconque? ou votre programme ne prend-il pas en charge suffisamment de décimales.
Tim
Il n'a jamais un chiffre supérieur à 5. Mon programme par exemple sortira avec -1
Blue
@muddyfish c'est bien.
Tim

Réponses:

2

Pyth, 13 octets

f<5e@=*QC\d2Z

Suite de tests

Commencez par Qégal à l'entrée. À chaque pas de temps, multipliez Qpar 100, calculé comme chr('d'). Prenez sa racine carrée. Prenez ce mod 10. Si le résultat est supérieur à 5, terminez. Affiche le nombre d'itérations nécessaires pour terminer, indexé 0.

En détail:

f<5e@=*QC\d2Z
                   Q = eval(input())
f           Z      Filter for the first truthy result over the infinite sequence
                   starting at Z (= 0)
     =*Q           Q *=
        C\d             chr('d') (= 100)
                   ---------------------
    @  Q   2          Q ^ (1/2)
   e                            % 10
 <5               5 <
isaacg
la source
1

CJam, 29 26 28 octets

rimqs_'.+'.#)>{'5<}%0#]W'?er

Essayez-le en ligne.

Met un "?" si le nombre n'apparaît pas, il peut être arrondi (carré parfait ou trop long).

geokavel
la source
1

Pyth, 22 octets

J`%@Q2 1x.e<\4@Jbr2lJ1

Explication

                       - Autoassign Q to evaluated input
   @Q2                 - Get the square root of Q
J`%    1               - Get the stuff after the decimal point and put it in a string. Store in J
         .e      r2lJ  - Create a range between 2 and the length of the string (forget about the 0. bit) and enumerate over it
              @Jb      - Get the current decimal place
           <\4         - Is it bigger than 4
        x            1 - Find the position of the first True value

Je suis absolument certain que cela peut être joué au golf. Si l'entrée n'a pas un chiffre supérieur à 4, elle imprimera -1. Prend en charge 17dp.

Bleu
la source
1

Javascript, 59 octets

f=a=>(a=/\.(.*?)[5-9]/.exec(Math.sqrt(a)),a?a[1].length:'?')

Renvoie ?59752 car JavaScript n'utilise que la double précision.

Neil
la source
1

Shell Linux, 52 octets

dc -e'34k?vp'|cut -d. -f2|sed 's/.[5-9\s].*//'|wc -m

J'ai essayé une dcsolution pure , mais j'ai échoué. La précision est réglable (premier chiffre).

Comme l'OP spécifie aimablement que "vous pouvez faire ce que vous voulez sur des carrés parfaits", dans ce cas, cette solution génère la précision + 1, dans ce cas 35.

Félix Saparelli
la source
1

Mathematica 60 octets

(Position[Drop@@RealDigits[N[Sqrt@#,99]],x_/;x>4][[1,1]]-1)&

Exemple

(Position[Drop@@RealDigits[N[Sqrt@#, 99]], x_ /; x > 4][[1, 1]] - 1) &[59752]

16

DavidC
la source
Vous pouvez supprimer les espaces autour du Apply.
LegionMammal978
Merci. Le nombre d'octets reste le même car je n'avais pas compté ces espaces.
DavidC
-2

Rubis, 46 octets

Cela peut ne pas être valide, car il ne peut contenir que 16 chiffres.

p (gets.to_i**0.5).to_s.split('.')[1]=~/[5-9]/
MegaTom
la source
Quelle est la sortie sur 59752?
Tim
nil, car aucun chiffre au-delà de 4 n'est dans la chaîne entière. Cela peut dépendre de la version rubis.
MegaTom
Il doit prendre en charge 59752 - a donc besoin de 17 dps
Tim