Скільки десяткових знаків є, перш ніж мені потрібно буде додати 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
Синій

@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

Піт, 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

Математика 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. Це може залежати від рубінової версії.
MegaTom

Їй потрібно підтримувати 59752 - значить, потрібно 17 к / с
Тім
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.