Wir definieren als die Liste der unterschiedlichen Potenzen von , die sich zu summieren . Zum Beispiel ist .
Gemäß der Konvention werden die Kräfte hier vom höchsten zum niedrigsten Wert sortiert. Dies hat jedoch keinen Einfluss auf die Logik der Herausforderung und die erwarteten Lösungen.
Aufgabe
Ersetzen Sie bei einem Semiprime jeden Term in durch eine andere Liste von Potenzen von , die sich zu diesem Term summieren, so dass die Vereinigung aller resultierenden Teillisten eine exakte Abdeckung der Matrix definiert ist als:
wobei und Q die Primfaktoren von N sind .
Dies ist anhand einiger Beispiele viel einfacher zu verstehen.
Beispiel 1
Für haben wir:
- und V ( P ) = [ 4 , 2 , 1 ]
- und V ( Q ) = [ 2 , 1 ]
Um in eine exakte Abdeckung von M zu verwandeln , können wir 16 in 8 + aufteilen und 4 in 2 + 2, während 1 unverändert bleibt. Eine mögliche Ausgabe ist also:
Eine andere gültige Ausgabe ist:
Beispiel # 2
Für haben wir:
- und V ( P ) = [ 32 , 4 , 1 ]
- und V ( Q ) = [ 16 , 4 , 2 , 1 ]
Eine mögliche Ausgabe ist:
Regeln
- Da das Faktorisieren von nicht der Hauptteil der Herausforderung ist, können Sie alternativ P und Q als Eingabe verwenden.
- Wenn mehrere mögliche Lösungen vorhanden sind, können Sie entweder nur eine oder alle zurückgeben.
- Sie können alternativ die Exponenten der Potenzen (z. B. anstelle von [ [ 8 , 4]) zurückgeben ).
- Die Reihenfolge der Unterlisten spielt keine Rolle, ebenso die Reihenfolge der Begriffe in jeder Unterliste.
- Für einige Semiprimes müssen Sie keinen Begriff teilen, da bereits eine perfekte Abdeckung von M ist (siehe A235040 ). Sie müssen jedoch noch eine Liste von (Singleton-) Listen zurückgeben, z. B. [ [ 8 ] , [ 4 ] , für N = 15 zurückgeben .
- Das ist Code-Golf !
Testfälle
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 ] ]
Antworten:
K (NGN / k) ,
6663 BytesProbieren Sie es online!
akzeptiert (P; Q) anstelle von N
Algorithmus:
berechne A als die Teilsummen von V (P * Q)
multiplizieren Sie jedes V (P) mit jedem V (Q), sortieren Sie die Produkte in absteigender Reihenfolge (nennen wir das R) und berechnen Sie ihre Teilsummen B
finde die Positionen der Elemente in B, die auch in A vorkommen; schneiden Sie R direkt nach diesen Positionen
quelle
Gelee , 24 Bytes
Ein monadischer Link, der eine Liste mit zwei ganzen Zahlen akzeptiert,
[P, Q]
was eine mögliche Liste von Listen ergibt, wie in der Frage beschrieben.Probieren Sie es online!(Die Fußzeile gibt eine Zeichenfolgendarstellung aus, um die Liste so anzuzeigen, wie sie wirklich ist.)
Oder schauen Sie sich die Testsuite an (eine Liste von N nehmen und die Ergebnisse neu anordnen, damit sie denen in der Frage entsprechen).
Wie?
Wir können die Elemente von von der niedrigsten bis zur gierigsten aufteilen (entweder gibt es eine 1 in M oder wir hatten eine Eingabe von 4 , wenn M = [ [ 4 ] ]M 1 M 4 M=[[4]] ), um eine Lösung zu finden.
Hinweis: Der Code fasst alle (eine!) Derartigen Lösungen in einer Liste zusammen und nimmt dann das (einzige) Kopfergebnis auf - dh der endgültige Kopf ist erforderlich, da die Partitionen nicht von allen möglichen Ordnungen sind.
quelle
Python 2 ,
261233232231 BytesProbieren Sie es online!
1 Byte von Jo King ; und ein weiteres Byte von Kevin Cruijssen .
Nimmt als Eingabe
p,q
. Verfolgt den gierigen Algorithmus.quelle
-k-1
kann sein~k
.i,j
Zuordnung kanni,j=[i+1,i,0,j+1][j+1<len(v)::2]
für -1 Bytewhile v[j]>-m
kann seinwhile-m<v[j]
Jelly , 41 Bytes
Probieren Sie es online!
ÇIP$Ƈ
quelle
Jelly , 34 Bytes
Probieren Sie es online!
Eingabeformat:
[P, Q]
(der TIO-Link oben akzeptiert dies nicht, sondern eine einzelne Zahl, um die Testfälle zu vereinfachen).Ausgabeformat: Liste aller Lösungen (als Rasterdarstellung der 3D-Liste über TIO dargestellt).
Geschwindigkeit: Schildkröte.
quelle
Pyth , 27 Bytes
Inspiriert von Jonathan Allans Zerkleinerung meiner Jelly-Lösung . NimmtN als Eingabe.
Probieren Sie es hier aus!
quelle
Haskell,
281195 Bytesquelle
(==)
,1>0
anstatt verwendenTrue
und nicht verwendenwhere
. Auchn'
kann verkürzt werden .. Mit diesem können Sie 72 Bytes speichern: Versuchen Sie es online!