Definimos como a lista de potências distintas de que somam . Por exemplo, .2 x V ( 35 ) = [ 32 , 2 , 1 ]
Por convenção, os poderes são classificados aqui do mais alto para o mais baixo. Mas isso não afeta a lógica do desafio, nem as soluções esperadas.
Tarefa
Dado um semiprime , substitua cada termo em por outra lista de potências de que somarem a esse termo, de modo que a união de todas as sub-listas resultantes seja uma cobertura exata da matriz definida como:V ( N ) 2 M
onde e são os factores primários de .Q
Isso é muito mais fácil de entender com alguns exemplos.
Exemplo 1
Para , temos:
- e
- e
Para transformar em uma cobertura exata de , podemos dividir em e em , enquanto permanece inalterado. Portanto, uma saída possível é:M 16 8 + 4 + 4 4 2 + 2 1
Outra saída válida é:
Exemplo 2
Para , temos:
- e
- e
Uma saída possível é:
Regras
- Como fatorar não é a parte principal do desafio, você pode considerar e como entrada.P Q
- Quando existem várias soluções possíveis, você pode retornar apenas uma delas ou todas elas.
- Você pode retornar alternadamente os expoentes dos poderes (por exemplo, vez de ).[ [ 8 , 4 , 4 ] , [ 2 , 2 ] , [ 1 ] ]
- A ordem das sub-listas não importa, nem a ordem dos termos em cada sub-lista.
- Para alguns semiprimes, você não precisará dividir nenhum termo porque já é uma cobertura perfeita de (consulte A235040 ). Mas você ainda precisa retornar uma lista de listas (singleton) como para .M [ [ 8 ] , [ 4 ] , [ 2 ] , [ 1 ] ] N = 15
- Isso é código-golfe !
Casos de teste
Input | Possible output
-------+-----------------------------------------------------------------------------
9 | [ [ 4, 2, 2 ], [ 1 ] ]
15 | [ [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
21 | [ [ 8, 4, 4 ], [ 2, 2 ], [ 1 ] ]
51 | [ [ 32 ], [ 16 ], [ 2 ], [ 1 ] ]
129 | [ [ 64, 32, 16, 8, 4, 2, 2 ], [ 1 ] ]
159 | [ [ 64, 32, 32 ], [ 16 ], [ 8 ], [ 4 ], [ 2 ], [ 1 ] ]
161 | [ [ 64, 32, 16, 16 ], [ 8, 8, 4, 4, 4, 2, 2 ], [ 1 ] ]
201 | [ [ 128 ], [ 64 ], [ 4, 2, 2 ], [ 1 ] ]
403 | [ [ 128, 64, 64 ], [ 32, 32, 16, 16, 16, 8, 8 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
851 | [ [ 512 ], [ 128, 64, 64 ], [ 32, 16, 16 ], [ 8, 4, 4 ], [ 2 ], [ 1 ] ]
2307 | [ [ 1024, 512, 512 ], [ 256 ], [ 2 ], [ 1 ] ]
Respostas:
K (ngn / k) ,
6663 bytesExperimente online!
aceita (P; Q) em vez de N
algoritmo:
calcular A como as somas parciais de V (P * Q)
multiplique cada V (P) por cada V (Q), classifique os produtos em ordem decrescente (vamos chamá-lo de R) e calcule suas somas parciais B
encontre as posições desses elementos em B que também ocorrem em A; corte R logo após essas posições
fonte
Gelatina , 24 bytes
Um link monádico que aceita uma lista de dois números inteiros
[P, Q]
que gera uma lista possível de listas, conforme descrito na pergunta.Experimente online! (rodapé imprime uma representação de string para mostrar a lista como ela realmente é)
Ou veja a suíte de testes (tomando uma lista de N e reordenando os resultados para serem como os da pergunta)
Quão?
Nota: o código coleta todas (uma!) Dessas soluções em uma lista e, em seguida, obtém o resultado do cabeçalho (somente) - ou seja, o cabeçalho final é necessário, pois as partições não possuem todos os pedidos possíveis.
fonte
Python 2 ,
261233232231 bytesExperimente online!
1 byte de Jo King ; e outro byte devido a Kevin Cruijssen .
Toma como entrada
p,q
. Persegue o algoritmo ganancioso.fonte
-k-1
pode ser~k
.i,j
atribuição pode seri,j=[i+1,i,0,j+1][j+1<len(v)::2]
de -1 bytewhile v[j]>-m
pode serwhile-m<v[j]
Geléia , 41 bytes
Experimente online!
ÇIP$Ƈ
fonte
Geléia , 34 bytes
Experimente online!
Formato de entrada:
[P, Q]
(o link TIO acima não aceita isso, mas apenas um número, para ajudar nos casos de teste).Formato de saída: lista de todas as soluções (mostradas como representação em grade da lista 3D em TIO).
Velocidade: Tartaruga.
fonte
Pitão , 27 bytes
Experimente aqui!
fonte
Haskell,
281195 bytesfonte
(==)
, use em1>0
vez deTrue
e não usewhere
. Tambémn'
pode ser reduzido. Com isso, você pode economizar 72 bytes: Experimente online!