Ile jest miejsc po przecinku, zanim muszę zaokrąglić?

10

Gdy zaokrąglasz cyfrę, jeśli następną cyfrą jest >= 5dodawanie 1. Na przykład:

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

Twoim wyzwaniem jest otrzymanie liczby całkowitej jako danych wejściowych i wyjściowych liczby miejsc dziesiętnych, przed którymi musiałbyś zaokrąglić pierwiastek kwadratowy z liczby - tj. Liczby miejsc dziesiętnych przed >= 5występującą liczbą cyfr .

Liczba całkowita będzie zawierać się w przedziale od 0 do 100 000 włącznie, więc w przypadku krawędzi 59752 musisz obsługiwać 17 miejsc po przecinku (aby sprawdzić 17).

Jeśli język programowania nie może zmienić liczby miejsc po przecinku, możesz wyświetlić „?” wiadomość do użytkownika.

Przykład:

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)

Rób, co chcesz, na idealnych kwadratach.

To jest więc wygrywa najkrótszy kod.


Dla każdego zainteresowanego liczba 310 617 jest największa poniżej 1 000 000 i ma 18, zanim dojdziesz do cyfry >= 5.

Tim
źródło
Ile miejsc po przecinku potrzebujemy maksymalnie obsłużyć? - Brak przechowywanych języków z nieskończoną precyzją.
Niebieski,
Nie wiem dlaczego, ale dostaję 17 cyfr dla SQRT (59752) (w dwóch różnych językach). Pozostałe wyniki wychodzą poprawnie.
Jonathan Leech-Pepin,
@ JonathanLeech-Pepin, czy z jakiegoś powodu dołączasz ostatnią cyfrę? lub twój program nie obsługuje wystarczającej liczby miejsc po przecinku.
Tim
Nigdy nie ma cyfry większej niż 5. Mój program na przykład zakończy działanie z -1
Blue
@muddyfish w porządku.
Tim

Odpowiedzi:

2

Pyth, 13 bajtów

f<5e@=*QC\d2Z

Zestaw testowy

Zacznij od Qrównej wartości wejściowej. Na każdym etapie pomnóż Qprzez 100, obliczone jako chr('d'). Weź pierwiastek kwadratowy. Weź ten mod 10. Jeśli wynik jest większy niż 5, zakończ. Wydrukuj liczbę iteracji potrzebnych do zakończenia, indeksowane 0.

Szczegółowo:

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
źródło
1

CJam, 29 26 28 bajtów

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

Wypróbuj online.

Umieszcza „?” jeśli liczba nie pojawia się, można ją zaokrąglić w górę (idealny kwadrat lub zbyt długi).

geokavel
źródło
1

Pyth, 22 bajty

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

Wyjaśnienie

                       - 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

Jestem absolutnie pewien, że można grać w golfa. Jeśli wejście nie ma cyfry wyższej niż 4, wydrukuje -1. Obsługuje 17dp.

niebieski
źródło
1

JavaScript, 59 bajtów

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

Zwraca ?59592, ponieważ JavaScript używa tylko podwójnej precyzji.

Neil
źródło
1

Powłoka Linux, 52 bajty

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

Próbowałem znaleźć czyste dcrozwiązanie, ale mi się nie udało. Precyzja jest regulowana (pierwsza liczba).

Jak PO uprzejmie określa, że ​​„możesz robić, co chcesz na idealnych kwadratach”, w tym przypadku to rozwiązanie daje dokładność + 1, w tym przypadku 35.

Félix Saparelli
źródło
1

Mathematica 60 bajtów

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

Przykład

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

16

DavidC
źródło
Możesz usunąć białe znaki wokół Apply.
LegionMammal978,
Dzięki. Liczba bajtów pozostaje taka sama, ponieważ nie policzyłem tych spacji.
DavidC,
-2

Ruby, 46 bajtów

Może to nie być poprawne, ponieważ mieści tylko 16 cyfr.

p (gets.to_i**0.5).to_s.split('.')[1]=~/[5-9]/
MegaTom
źródło
Jaka jest wydajność w 59752?
Tim
nil, ponieważ żadna cyfra po 4 nie jest w całym ciągu. Może to zależeć od wersji ruby.
MegaTom,
Musi obsługiwać 59752 - więc potrzebuje 17 dps
Tim