Nous définissons comme la liste des puissances distinctes de qui totalisent . Par exemple, .2 x V ( 35 ) = [ 32 , 2 , 1 ]
Par convention, les pouvoirs sont classés ici du plus élevé au plus bas. Mais cela n'affecte pas la logique du défi, ni les solutions attendues.
Tâche
Étant donné un semi-premier , remplacer chaque terme dans par une autre liste de puissances de qui résument ce terme, de telle sorte que l'union de toutes les sous-listes résultantes soit une couverture exacte de la matrice définie comme:V ( N ) 2 M
où et sont les facteurs premiers de .Q N
C'est beaucoup plus facile à comprendre avec quelques exemples.
Exemple 1
Pour , nous avons:
- et
- et
Pour transformer en une couverture exacte de , nous pouvons diviser en et en , tandis que reste inchangé. Une sortie possible est donc:M 16 8 + 4 + 4 4 2 + 2 1
Une autre sortie valide est:
Exemple # 2
Pour , nous avons:
- et
- et
Une sortie possible est:
Règles
- Parce que la factorisation de n'est pas la partie principale du défi, vous pouvez alternativement prendre et en entrée.
- Lorsque plusieurs solutions possibles existent, vous pouvez soit renvoyer une seule d'entre elles, soit toutes.
- Vous pouvez alternativement renvoyer les exposants des pouvoirs (par exemple au lieu de ).
- L'ordre des sous-listes n'a pas d'importance, pas plus que l'ordre des termes dans chaque sous-liste.
- Pour certains semi-premiers, vous n'aurez pas à diviser un terme car est déjà une couverture parfaite de (voir A235040 ). Mais vous devez toujours renvoyer une liste de listes (singleton) telles que pour .M [ [ 8 ] , [ 4 ] , [ 2 ] , [ 1 ] ] N = 15
- C'est du code-golf !
Cas de test
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 ] ]
Réponses:
K (ngn / k) ,
6663 octetsEssayez-le en ligne!
accepte (P; Q) au lieu de N
algorithme:
calculer A comme les sommes partielles de V (P * Q)
multiplier chaque V (P) par chaque V (Q), trier les produits par ordre décroissant (appelons cela R) et calculer leurs sommes partielles B
trouver les positions de ces éléments dans B qui se produisent également dans A; couper R juste après ces positions
la source
Gelée , 24 octets
Un lien monadique acceptant une liste de deux entiers
[P, Q]
qui donne une liste possible de listes comme décrit dans la question.Essayez-le en ligne! (le pied de page imprime une représentation sous forme de chaîne pour afficher la liste telle qu'elle est réellement)
Ou voir la suite de tests (prendre une liste de N et réorganiser les résultats pour être comme ceux de la question)
Comment?
On peut toujours découper les éléments de du plus bas vers le haut, goulûment (soit il y a un 1 dans M soit on a une entrée de 4 , quand M = [ [ 4 ] ] ) afin de trouver une solution.M 1 M 4 M=[[4]]
Remarque: le code rassemble toutes (une!) Ces solutions dans une liste et prend ensuite le résultat de la tête (uniquement) - c'est-à-dire que la tête finale est nécessaire car les partitions ne sont pas de tous les ordres possibles.
la source
Python 2 ,
261233232231 octetsEssayez-le en ligne!
1 octet de Jo King ; et un autre octet dû à Kevin Cruijssen .
Prend en entrée
p,q
. Poursuit l'algorithme gourmand.la source
-k-1
peut être~k
.i,j
affectation peut êtrei,j=[i+1,i,0,j+1][j+1<len(v)::2]
de -1 octetwhile v[j]>-m
peut êtrewhile-m<v[j]
Gelée , 41 octets
Essayez-le en ligne!
ÇIP$Ƈ
la source
Gelée , 34 octets
Essayez-le en ligne!
Format d'entrée:
[P, Q]
(le lien TIO ci-dessus n'accepte pas cela, mais un seul numéro à la place, pour faciliter les cas de test).Format de sortie: Liste de toutes les solutions (représentée sous forme de représentation de grille de la liste 3D sur TIO).
Vitesse: tortue.
la source
Pyth , 27 octets
Essayez-le ici!
la source
Haskell,
281195octetsla source
(==)
, utilisez1>0
plutôtTrue
et n'utilisez paswhere
.n'
Peut également être raccourci .. Avec cela, vous pouvez économiser 72 octets: Essayez-le en ligne!