В этом задании вам дается нечетное количество белых шаров и столько же черных шаров. Задача состоит в том, чтобы подсчитать все способы помещения шаров в лотки так, чтобы в каждом лотке было нечетное число каждого цвета.
Например, скажем, у нас есть 3 белых шара. Различные способы:
(wwwbbb)
(wb)(wb)(wb)
для двух разных возможностей.
Если у нас есть 5 белых шаров, то есть разные способы:
(wwwwwbbbbb)
(wwwbbb)(wb)(wb)
(wwwb)(wbbb)(wb)
(wb)(wb)(wb)(wb)(wb)
Вы можете взять ввод, который представляет собой одно целое число, любым способом, который вам нравится. Выходные данные представляют собой одно целое число.
Ваш код должен быть достаточно быстрым, чтобы вы видели его завершенным для 11 белых шаров.
Вы можете использовать любой язык или библиотеку, которая вам нравится.
:)
Ответы:
Par / GP, 81 байт
Для большей эффективности замените
1+
на1+O(x^(n+1))+O(y^(n+1))+
(первыйO
термин уже очень помогает).Попробуйте онлайн!(более ранняя 86-байтовая версия с парой ненужных паренов и без
p=
аббревиатуры)Старая версия, 90 байт
Для вычислений
f(11)
требуется больший размер стека, в сообщении об ошибке будет указано, как его увеличить. Это более эффективно (но менее golfy) , чтобы заменить два ,n
которые появляются в качестве второго аргументовprod
с(n-1)/2
.источник
(n-1)/2
?Python 3, 108 байт
Рекурсивно перечисляет все наборы, стараясь не получать дубликаты, всегда генерируя наборы по порядку. Разумно быстро, когда запоминается с помощью
C = functoools.lru_cache(None)(C)
, но это не обязательно дляn = 11
.Позвоните,
C(num_white, num_black)
чтобы получить свой результат. Первая параn
:Для генерации результатов:
Например, для (7, 7):
источник
Python 3 ,
180172 байтаПопробуйте онлайн!
Простая реализация производящей функции. Долго, но (несколько) эффективно. O (n 4 ) время, O (n 2 ) память.
Результирующий массив
a
содержит все результаты всех размеров, вплоть доn
, хотяa[n][n]
возвращается только .источник
Python 2 ,
168181 байтПопробуйте онлайн!
источник
n
содержит входные данные). Вы должны либо добавить,def f(n):
либоn=input()
(чтобы сделать его функцией / полной программой, соответственно)a
Может бытьeval(`[[0]*n]*n`)
(где`
обозначаетrepr
).