(вдохновленный ответом Хелки на мою случайную пару тегов "шахматы" и "Фибоначчи" в чате)
Фибоначчи
Эти числа Фибоначчи являются одним из наиболее известных последовательностей в математике, где каждое число состоит путем сложения двух предыдущих чисел вместе. Ниже приведено определение последовательности с нулевым индексом:
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