Temos 40 varas da mesma largura, mas com alturas diferentes. Quantos arranjos são possíveis para colocá-los um ao lado do outro, de modo que, quando olhamos da direita, vemos 10 paus e quando olhamos da esquerda, vemos novamente exatamente 10 paus?
Por exemplo, esse pedido é:
Paus pretos estão escondidos, paus vermelhos são os que você pode ver quando olha da esquerda, os paus azuis são os que você vê quando olha da direita e da roxa (ou seja, a mais longa) é a que pode ser vista. de ambos os lados.
Como casos de teste:
- Se tivéssemos 3 varas, o número de pedidos para ver 2 da esquerda e 2 da direita é 2
- Se tivéssemos 5 varas, o número de pedidos para ver 3 da esquerda e 3 da direita é 6
- Se tivéssemos 10 varas, o número de pedidos para ver 4 da esquerda e 4 da direita é 90720
code-golf
combinatorics
permutations
camarada
fonte
fonte
10!/40 = 90720
... isso é coincidência?Respostas:
PARI / GP, 80
O número de paus visíveis também é chamado de Números de arranha-céu , depois do jogo de lápis / grade. Este código é baseado (apenas ligeiramente alterado) na fórmula do OEIS A218531 . Não conheço muito PARI, mas acho que não há muito para jogar aqui.
Os casos de teste são todos mostrados em ideone.com . O resultado para
f(40,10)
é:fonte
v
manípulos visíveis à esquerda é o número de Stirlings(n,v)
. Se o manípulo mais alto estiver na posiçãok
, os manípulos visíveis à esquerda são o manípulo e os manípulos visíveis à esquerda na sub permutação à esquerda dosk-1
valores à esquerda da posiçãok
. Portanto, para terv
paus visíveis à esquerda e paus visíveis àv
direita , temoss(k,v-1)
opções para permutar a metade esquerda,s(n-k-1,v-1)
permutar a metade direita ebinomial(n-1,k)
opções para dividir os paus nas duas metades.f(n,v,s=stirling)=abs(sum(k=1,n--,binomial(n,k)*s(k,v-1)*s(n-k,v-1)))
. Isso salvasterling
em uma variável para reutilização, deixa de fora seu último argumento, já que 1 é o padrão e subtrai 1 de n uma vez em vez de três vezes.Python 3, 259 bytes
Não estou muito feliz com isso.
Exemplo de entrada e saída:
Ele gera todas as combinações possíveis do intervalo fornecido e os percorre, verificando cada número neles para ver se é igual ao máximo dos números anteriores. Em seguida, ele faz o mesmo ao contrário, e se a contagem para a frente (t) = a contagem para trás (d) = o número de exibição fornecido (k), é válido. Adiciona isso a um contador (c) e imprime isso no final.
fonte
R, 104
De-golfe um pouco:
fonte
Pitão -
3836 bytesBasicamente, uma porta da resposta R. Muito lento, nem pode ser concluído
10, 4
online.As únicas coisas que Pyth não possui são cummax e os
==
vetores over, mas esses precisaram de apenas alguns bytes para serem implementados.Explicação e mais golfe em breve.
Experimente aqui online .
fonte