За даними Вікіпедії , сильно функція Дарбу є
той, для якого зображення кожного (не порожнього) відкритого інтервалу є цілою реальною лінією
Іншими словами, функція сильно Дарбу, якщо дано 3 довільні дійсні числа , і , завжди можна знайти між (різними) і такими, що .
Для цілей цього виклику ми розглянемо натомість функції Дарбу замість раціональних.
Ваше завдання полягає в тому, щоб написати програму або функцію, яка:
- дає раціональне число як вихід для кожного введення раціонального числа,
- завжди дає однаковий вихід для заданого вводу, і
- має сильно властиві Дарбу.
Вхід і вихід можуть бути будь-якими з таких:
- тип чисел з довільною точністю, якщо у вашій мові є (або є бібліотека для одного, наприклад, GMP).
- рядкове подання числа, яке, можливо, ви завжди будете містити з десятковою комою і принаймні одну цифру з обох сторін. Він може бути в будь-якій базі , але вхід і вихід повинні бути в одній базі. Ви можете використовувати будь-який набір символів для цифр і десяткових знаків (але знову ж таки, вони повинні відповідати вводу та виводу).
Вхід завжди матиме кінцеве розширення бази . Що стосується виходу, який може мати теоретично неперервне розширення бази залежно від вибору функції, ви можете вибрати будь-яке з наступного:
- вихідні цифри назавжди.
- візьміть додаткове ціле число як вхід і виведіть принаймні стільки цифр.
- вивести принаймні стільки цифр, скільки є на вході (який може містити проміжні нулі).
Зауважимо, що за характером цього виклику умова про те, що числа можна вважати представними стандартними типами чисел , не застосовується, за винятком другого вводу, описаного у варіанті 2 вище.
Щоб уникнути лазівки з функціями, визначеними лише на нестаціонарних раціоналах, ваше представлення повинне бути здатне виробляти вихід довільно, близький до потрібного значення на практиці . Формально, з огляду на раціональні числа , , та , у вибраному вами базі повинно бути раціональне число яке закінчується таким, що та .
Щоб дати вам декілька ідей, ось опис функції Conway base 13 :
- Перетворіть в базу 13 і видаліть десяткову точку.
- Якщо результат має вигляд , де [ y ] і [ z ] складаються лише з цифр від 0 до 9, тоді f ( x ) = [ y ] . [ z ] .
- Якщо результат має вигляд , де і складаються лише з цифр від 0 до 9, тоді .
- В іншому випадку .
Ця функція сильно Дарбу. Скажімо, наприклад, що ми хочемо знайти деякий між та таким, що . Базове значення задовольнило б цю вимогу.
Ваше подання може бути реалізацією цієї функції, хоча я підозрюю, що існують і інші сильні функції Дарбу, які набагато коротше реалізувати. :)