Um diagrama Young é um arranjo de caixas em linhas justificadas à esquerda e colunas justificadas na parte superior. Para cada caixa, todos os espaços acima e à esquerda estão ocupados.
XXXXX
XXX
XXX
X
O comprimento do gancho de uma caixa é o número de caixas à sua direita na linha e abaixo da coluna, também contando uma vez. Por exemplo, a segunda caixa tem um comprimento de gancho de 6:
X****
X*X
X*X
X
Aqui estão todos os comprimentos de gancho:
86521
532
421
1
Seu objetivo é calcular o produto dos comprimentos do gancho, aqui 8*6*5*2*1*5*3*2*4*2*1*1 = 115200
.
(Leia sobre a fórmula do comprimento do gancho, se você estiver interessado em saber por que essa expressão é importante.)
Entrada: Uma coleção de tamanhos de linha como números como [5,3,3,1]
ou como um símbolo unário repetido como [[1,1,1,1,1], [1,1,1], [1,1,1], [1]]
ou "XXXXX XXX XXX X"
. Você pode esperar que a lista seja classificada crescente ou decrescente, conforme desejar. A lista não ficará vazia e conterá apenas números inteiros positivos.
Saída: o produto do comprimento do gancho, que é um número inteiro positivo. Não se preocupe com estouros de número inteiro ou tempo de execução.
Built-ins que lidam especificamente com diagramas Young ou partições inteiras não são permitidos.
Casos de teste:
[1] 1
[2] 2
[1, 1] 2
[5] 120
[2, 1] 3
[5, 4, 3, 2, 1] 4465125
[5, 3, 3, 1] 115200
[10, 5] 798336000
{ee::+W%}_q~%z%:+:*
(19 bytes) Formato de entrada:[[1][1 1 1][1 1 1][1 1 1 1 1]]
%
: PJ, 24 bytes
25 bytes (com explicação):
Recebe a entrada como lista de listas ascendentes de dígitos unários semelhantes ao exemplo
[[1], [1,1,1], [1,1,1], [1,1,1,1,1]]
.Uso:
Método
Resultados intermediários mostrados na entrada
1 1 1 1 1;1 1 1;1 1 1;1 (5,3,3,1 in unary)
( isto é para uma versão anterior com comprimentos descendentes, mas usando o mesmo método ):Versão explícita do mesmo comprimento:
Experimente online aqui.
fonte
Pitão - 21 bytes
Estou perdendo muitos bytes no cálculo vertical. Vamos focar no golfe.
Toma entrada como
[5, 3, 3, 1]
.Experimente aqui online .
fonte
Pitão, 18 bytes
Recebe entrada em ordem crescente, como
[1, 3, 3, 5]
.Demonstração.
Solução alternativa, 19 bytes
fonte
Python 2,
8988 bytes(Graças a @xnor por um byte insano, salve combinando
p
ej
)o
d.get
parece um pouco suspeito para mim, mas caso contrário, eu sou relativamente feliz com isso. Tentei algumas outras abordagens, como recursão e fechamento, mas essa é a única que consegui obter abaixo dos 100.Recebe a entrada do STDIN como uma lista em ordem crescente, por exemplo
[1, 3, 3, 5]
.fonte
Haskell, 68 bytes
Exemplo de uso:
p [5,4,3,2,1]
->4465125
f
varre da esquerda para a direita multiplicando o comprimento do gancho mais externo com uma chamada recursiva para si mesma, onde cada elemento da lista de entrada é reduzido1
(deixando-o cair ao alcançá-lo0
).p
digitaliza de cima para baixo multiplicandof
a lista inteira porp
da cauda.fonte
R, 174 bytes
Então ... Esta solução é bastante longa e provavelmente poderia ser mais golfe. Vou pensar sobre isso !
Ungolfed:
fonte
Python 2,
135128 bytesIsso pega uma lista de tipos Python do stdin:
Essa é uma implementação muito canônica, mas ainda não cheguei a algo muito mais inteligente. Tenho a sensação de que haverá soluções muito mais curtas, mesmo com linguagens de programação "reais".
Nós obtemos o número de caixas em cada linha como entrada. Essa solução conta primeiro o número de caixas em cada coluna, as quais são armazenadas
c
(na verdade, é a contagem menos 1 para simplificar seu uso no cálculo posterior). Em seguida, itera sobre todas as caixas e multiplica os comprimentos do gancho. O comprimento do gancho em si é trivial para calcular depois de ter a contagem de caixas em cada linha e coluna.fonte
m
?JavaScript ( ES6 ) 69
Uma função que recebe uma matriz de números inteiros em ordem crescente ordem .
Execute o trecho para testar (apenas Firefox)
fonte
Python,
9591 bytesEsta é uma implementação em Python da resposta Haskell de nimi . Sugestões de golfe são bem-vindas.
fonte
z and _ or 1
comoz==[]or _
quandoz
é uma lista, usando o fato de queTrue==1
. As declarações de função do Python são mais elaboradas do que Haskell, por isso geralmente oferece uma boa recompensa para definir uma única função recursiva que executa os loops recursivos interno e externo, embora eu não saiba o quão viável isso é aqui.