Сколько десятичных знаков есть, прежде чем мне нужно будет добавить 1 при округлении?


10

Когда вы округляете число, если следующая цифра, >= 5вы добавляете 1. Например:

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

Ваша задача состоит в том, чтобы получить целое число в качестве входных данных и вывести число десятичных разрядов, перед которыми вам нужно будет округлить квадратный корень из числа, то есть количество десятичных разрядов перед цифрой числа, которая >= 5встречается.

Целое число будет в диапазоне от 0 до 100 000 включительно, поэтому для граничного случая 59752 необходимо поддерживать 17 десятичных знаков (для проверки 17-го числа).

Если ваш язык программирования не может изменить количество десятичных знаков, вы можете отобразить «?» сообщение пользователю.

Пример:

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)

Делай что хочешь на идеальных площадях.

Это поэтому выигрывает самый короткий код.


Для всех, кто интересуется, число 310 617 является наибольшим до 1 000 000 и имеет 18, прежде чем вы достигнете цифры >= 5.


Сколько десятичных знаков нам нужно поддерживать максимально? - Нет языков хранить в бесконечной точности.
Синий

Не знаю почему, но я получаю 17 цифр для SQRT (59752) (на двух разных языках). Другие результаты получаются правильно.
Джонатан Лич-Пепин

@ JonathanLeech-Pepin, ты почему-то включил последнюю цифру? или ваша программа не поддерживает достаточно десятичных знаков.
Тим

У него никогда не будет цифры больше 5. Например, моя программа выйдет с -1
Blue

@muddyfish это нормально.
Тим

Ответы:



2

Pyth, 13 байт

f<5e@=*QC\d2Z

Тестирование

Начните с Qравного ввода. На каждом временном шаге умножьте Qна 100, рассчитав как chr('d'). Возьми его квадратный корень. Возьми этот мод 10. Если результат больше чем 5, прекратить. Выведите количество итераций, которое потребовалось для завершения, с 0 индексами.

В деталях:

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 <


1

Pyth, 22 байта

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

объяснение

                       - 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

Я абсолютно уверен, что это можно сыграть в гольф. Если на входе нет цифры выше 4, будет напечатано -1. Поддерживает 17dp.


1

Javascript, 59 байт

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

Возвращает ?для 59752, потому что JavaScript использует только двойную точность.


1

Оболочка Linux, 52 байта

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

Я пытался найти чистое dcрешение, но не смог. Точность регулируется (первое число).

Поскольку ОП любезно указывает, что «вы можете делать то, что вы хотите на идеальных квадратах», в этом случае это решение выдает точность + 1, в данном случае 35.


1

Mathematica 60 байтов

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

пример

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

16


Вы можете удалить пробелы вокруг Apply.
LegionMammal978

Спасибо. Количество байтов остается неизменным, потому что я не посчитал эти пробелы.
DavidC

-2

Рубин, 46 байт

Это может быть недопустимо, так как оно соответствует только 16 цифрам.

p (gets.to_i**0.5).to_s.split('.')[1]=~/[5-9]/

Какой вывод на 59752?
Тим

nil, поскольку ни одна цифра после 4 не находится во всей строке. Это может зависеть от версии ruby.
MegaTom

Он должен поддерживать 59752 - поэтому ему нужно 17 дпс
Тим
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.