Tenemos 40 palos del mismo ancho pero diferentes alturas. ¿Cuántos arreglos hay posibles para ponerlos uno al lado del otro para que cuando miremos desde la derecha veamos 10 palos y cuando miremos desde la izquierda volvamos a ver exactamente 10 palos?
Por ejemplo, tal orden es:
Los palos negros están ocultos, los palos rojos son los que puedes ver cuando miras desde la izquierda, los palos azules son los que puedes ver cuando miras desde la derecha y el morado (es decir, el más largo) es el que se puede ver visto de ambos lados.
Como casos de prueba:
- Si tuviéramos 3 palos, el número de pedidos para ver 2 desde la izquierda y 2 desde la derecha es 2
- Si tuviéramos 5 palos, el número de pedidos para ver 3 desde la izquierda y 3 desde la derecha es 6
- Si tuviéramos 10 palos, el número de pedidos para ver 4 desde la izquierda y 4 desde la derecha es 90720
code-golf
combinatorics
permutations
compañero
fuente
fuente
10!/40 = 90720
... ¿es una coincidencia?Respuestas:
PARI / GP, 80
El número de palos visibles también se llama Skyscraper Numbers , después del juego de lápiz / cuadrícula. Este código se basa en (solo ligeramente alterado) la fórmula de OEIS A218531 . No sé mucho PARI, pero realmente no creo que haya mucho para jugar golf aquí.
Los casos de prueba se muestran en ideone.com . El resultado para
f(40,10)
es:fuente
v
palos visibles a la izquierda es el número de Stirlings(n,v)
. Si el palo más alto está en posiciónk
, los palos visibles a la izquierda son ese palo y los palos visibles a la izquierda en la subpermutación a la izquierda de losk-1
valores a la izquierda de la posiciónk
. Entonces, para tenerv
palos visibles a la izquierda y palos visibles a lav
derecha, uno tienes(k,v-1)
opciones para permutar la mitad izquierda,s(n-k-1,v-1)
para permutar la mitad derecha ybinomial(n-1,k)
opciones para dividir los palos en las dos mitades.f(n,v,s=stirling)=abs(sum(k=1,n--,binomial(n,k)*s(k,v-1)*s(n-k,v-1)))
. Esto guardasterling
en una variable para su reutilización, deja de lado su último argumento, ya que 1 es el valor predeterminado y resta 1 de n una vez en lugar de tres veces.Python 3, 259 bytes
No muy contento con esto.
Ejemplo de entrada y salida:
Genera todas las combinaciones posibles del rango proporcionado, y luego las recorre, verificando cada número en ellas para ver si es igual al máximo de los números anteriores. Luego hace lo mismo al revés, y si el conteo hacia adelante (t) = el conteo hacia atrás (d) = el número de vista dado (k) es válido. Agrega esto a un contador (c) e imprime eso al final.
fuente
R, 104
Des golf un poco:
fuente
Pyth -
3836 bytesBásicamente un puerto de la respuesta R. Bastante lento, ni siquiera se puede completar en
10, 4
línea.Las únicas cosas que Pyth no tiene son cummax y los
==
vectores over, pero esos solo tomaron unos pocos bytes para implementar.Explicación y más golf próximamente.
Pruébalo aquí en línea .
fuente