(вдохновленный ответом Хелки на мою случайную пару тегов "шахматы" и "Фибоначчи" в чате)
Фибоначчи
Эти числа Фибоначчи являются одним из наиболее известных последовательностей в математике, где каждое число состоит путем сложения двух предыдущих чисел вместе. Ниже приведено определение последовательности с нулевым индексом:
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
Ответы:
VB.NET, (.NET 4.5),
12381229 байт-9 байт благодаря @totallyhuman
Моделирование постановки задачи. Я начинаю с создания сетки, перебирая каждое новое число Фибоначчи, чтобы увеличить размер квадрата. Я храню индекс в каждой ячейке, чтобы на следующем шаге было легко определить, куда пойдут королевы.
Затем я нахожу каждую клетку, в которой должна быть королева, и помечаю каждую угрожаемую клетку нулем. Я пропускаю ячейки, где находятся королевы, чтобы мне не пришлось беспокоиться о возврате.
В конце я подсчитываю очищенные ячейки и ячейки с ферзями, а затем делю их на общее количество пробелов. Умножьте на 100, чтобы получить процент, и округлите до ближайших двух десятичных знаков.
источник
hits
более короткое имя переменной? Я не знаю VB.NET, но я предполагаю, что это переменная.Python 2 ,
524499 байтПопробуйте онлайн!
Определение функции, которая принимает как размер
n
листа и число квадрата Фибоначчиx
. Процент выходных данных округленно округляется до двух знаков после запятой (в нижнем колонтитуле, где происходит весь вывод).f
является двумерным массивом, содержащим информацию о плате, инициируемой в0
. Затем вычисляется шахматная доска Фибоначчи и заполняется ферзями, где должны быть королевы. Эти королевы затем перемещаются в каждое место, где они могут быть перемещены; все позиции подсчитываются и печатаются в процентах от всей доски.источник
Mathematica 11,1, 336 байт, 1 на основе
Использование:
k[n, x]
. Обратите внимание, что функция основана на 1. Округление достигаетсяRound[100x,0.01]
В основном,
p[i]
это функция определения положения каждого квадрата. А площадь рассчитывается верхнего уровня функции , такие какRegionIntersection
,RegionUnion
,RegionMeasure
источник