En esta tarea se le da un número impar de bolas blancas y el mismo número de bolas negras. La tarea es contar todas las formas de poner las bolas en contenedores para que en cada contenedor haya un número impar de cada color.
Por ejemplo, digamos que tenemos 3 bolas blancas. Las diferentes formas son:
(wwwbbb)
(wb)(wb)(wb)
por las dos posibilidades diferentes.
Si tenemos 5 bolas blancas, las diferentes formas son:
(wwwwwbbbbb)
(wwwbbb)(wb)(wb)
(wwwb)(wbbb)(wb)
(wb)(wb)(wb)(wb)(wb)
Puede tomar la entrada, que es un número entero único, de la forma que desee. La salida es solo un entero entero.
Su código debe ser lo suficientemente rápido para que lo haya visto completo para 11 bolas blancas.
Puede usar cualquier idioma o biblioteca que desee.
:)
Respuestas:
Pari / GP, 81 bytes
Para mayor eficiencia, reemplace
1+
con1+O(x^(n+1))+O(y^(n+1))+
(el primerO
término solo ya ayuda mucho).Pruébalo en línea! (versión anterior de 86 bytes con un par de parens innecesarios y sin la
p=
abreviatura)Versión anterior, 90 bytes
La informática
f(11)
necesita un tamaño de pila más grande, el mensaje de error le indicará cómo aumentarlo. Es más eficiente (pero menos golfoso) reemplazar los dosn
que aparecen como segundos argumentosprod
con(n-1)/2
.fuente
(n-1)/2
?Python 3, 108 bytes
Enumera recursivamente todos los conjuntos, asegurándose de no obtener duplicados generando siempre los conjuntos en orden. Razonablemente rápido cuando se memoriza usando
C = functoools.lru_cache(None)(C)
, pero esto no es necesarion = 11
.Llame
C(num_white, num_black)
para obtener su resultado. Primer par den
:Para generar los resultados:
Por ejemplo para (7, 7):
fuente
Python 3 ,
180172 bytesPruébalo en línea!
Implementación directa de la función generadora. Largo pero (algo) eficiente. O (n 4 ) tiempo, O (n 2 ) memoria.
La matriz resultante
a
contiene todos los resultados de todos los tamaños hastan
, aunque soloa[n][n]
se devuelve.fuente
Python 2 ,
168181 bytesPruébalo en línea!
fuente
n
contiene la entrada) Debe agregardef f(n):
on=input()
(para que sea una función / programa completo resp.)a
puede sereval(`[[0]*n]*n`)
(donde`
significarepr
).