(натхненний відповіддю Гелки на моє випадкове сполучення тегів "шахи" та "Фібоначчі" в чаті)
Фібоначчі
Ці числа Фібоначчі є одним з найбільш відомих послідовностей в математиці, де кожне число складається шляхом додавання двох попередніх чисел разом. Нижче - визначення нульової індексованої послідовності:
f(0) = 0
f(1) = 1
f(n) = f(n-1) + f(n-2)
Це призводить до послідовності 0, 1, 1, 2, 3, 5, 8, 13, 21, ...
( посилання OEIS ). У цьому виклику ми зосередимось лише на строго позитивних значеннях (так 1, 1, 2, 3, ...
), і ви можете вибрати нульову індексацію або одноіндексацію, але, будь ласка, зазначте, що у вашій заяві.
Числа Фібоначчі можуть бути використані для плитки площини, використовуючи квадрати, що мають послідовні f(n)
розміри, і вирівнюючи їх краї між собою. Черепиця робиться за годинниковою стрілкою, розміщуючи квадрати за схемою "вправо-вліво-вниз" від поточного квадрата. Приклад цього часткового облицювання для f(8)=21
, з початковим квадратом, виділеним синім кольором, є наступним:
Ви можете бачити , що в f(1)=1
якості вихідного квадрата (виділено синім кольором), на f(2)=1
площі вміщеній на право його, то f(3)=2
квадрат поміщається вгору від там, f(4)=3
квадрат , зроблені наліво і так далі. Наступний квадрат був би f(9)=21+13=34
і був би розміщений донизу. Це метод часткового облицювання, який ми будемо використовувати у цій проблемі.
Королеви
У грі в шахи найпотужнішою фігурою є королева, оскільки вона може переміщати будь-яку кількість пробілів по горизонталі, вертикалі чи по діагоналі. На нижній схемі дошки квадрати з чорним колом показують, куди може рухатися королева:
Ми визначимо термін покриття як
Відсоток квадратів, до яких королева може рухатись, порівняно із загальною кількістю квадратів, враховуючи особливу позицію королеви на порожній дошці та включаючи власне вихідне положення королеви.
Для прикладу, що рухається вище, покриття королеви таке 28/64 = 43.75%
. Якби королева була у правому верхньому h8
квадраті, покриття було б 22/64 = 34.375%
. Якби королева була e7
, покриття було б 24/64 = 37.5%
.
Змагання
Ми будемо використовувати плитку Фібоначчі, продемонстровану вище, як нашу шахівну дошку для цього завдання. Вам буде дано два позитивних цілих чисел в якості вхідних даних, n
і x
:
n
Представляє , наскільки великий замощення. Приклад плитки вгорі, з21
квадратом ліворуч, - це дошка розміромn = 8
зf(8) = 21
(коли нульова індексація).x
Являє який з квадратів Фібоначчі використовується для розміщення Королева (и), для розрахунку покриття. Цариці розміщуються по одному на кожному квадраті у цій конкретній квадратній плитці Фібоначчі, а загальне покриття - це підсумок індивідуального (унікального) покриття.
Наприклад, тут зображено зображення n = 8
(те саме плитка, що і вище) та x = 4
(відповідне f(4) = 3
квадрату, затінене синім кольором). Помістивши королеву по одному в кожен із цих дев'яти синіх квадратів, королеви можуть (комбіновано) покривати кожен квадрат, помаранчевий помаранчевим кольором. Таким чином, загальне покриття в цьому прикладі 309/714 = 43.28%
.
Цілком очевидно, що в будь-який час це n = x
буде покриття 100%
(наприклад, з n=8
і x=8
, ви можете бачити, що кожен квадрат на всій дошці буде покритий хоча б один раз). І навпаки, при відповідно великому n
і, x=1
або x=2
, покриття збирається наближатися (але ніколи не охоплюватиметься) 0%
(наприклад, з n=8
і x=1
, покриття є мізерним 88/714 = 12.32%
).
З огляду на два такі вхідні числа, ви повинні вивести відсоток покриття з точністю до двох знаків після коми. Вкажіть, будь ласка, як ваш код обробляє округлення.
Правила
- Введення та вихід можуть бути задані у будь-якому зручному форматі , але повинні бути точними до двох знаків після коми. Вкажіть, будь ласка, як ваш код обробляє округлення.
- Припустимо, що на дошці відсутні інші шматки або іншим чином не заважають рухам.
- Прийнятна або повна програма, або функція. Якщо функція, ви можете повернути вихід, а не надрукувати його.
- Якщо можливо, додайте посилання на онлайн-тестувальне середовище, щоб інші люди могли спробувати ваш код!
- Стандартні лазівки заборонені.
- Це код-гольф, тому застосовуються всі звичайні правила гольфу, і найкоротший код (у байтах) виграє.
Приклади
n = 8, x = 4
43.28
n = 8, x = 8
100 or 100.00
n = 8, x = 1
12.32
n = 4, x = 1
66.67
n = 4, x = 2
60 or 60.00
n = 5, x = 3
75 or 75.00
n = 5, x = 1
47.5 or 47.50