Die Steenrod-Algebra ist eine wichtige Algebra in der algebraischen Topologie. Die Steenrod-Algebra wird von Operatoren erzeugt, die "Steenrod-Quadrate" genannt werden. Für jede positive ganze Zahl i existiert eine. Es gibt eine Grundlage für die Steenrod-Algebra, die aus "zulässigen Monomen" in den Quadrierungsoperationen besteht. Es ist unser Ziel, diese Basis zu schaffen.
Eine Folge positiver Ganzzahlen heißt zulässig, wenn jede Ganzzahl mindestens doppelt so groß ist wie die nächste. So ist zum Beispiel und[7,2,1]
zulässig . Ist dagegen nicht zulässig, da . (In der Topologie schreiben wir für die Sequenz ).[3,2]
[7,2,1]
Der Grad einer Sequenz ist die Summe ihrer Einträge. So zum Beispiel für den Grad [7,2,1]
ist . Der Überschuss einer zulässigen Folge ist das erste Element abzüglich der Summe der verbleibenden Elemente, hat also den Überschuss .7 - 2 - 1 = 4[7,2,1]
Aufgabe
Schreiben Sie ein Programm, das ein Paar positiver Ganzzahlen verwendet (d,e)
und die Menge aller zulässigen Folgen von Grad d
und Exzess kleiner oder gleich ausgibt e
. Die Ausgabe ist eine Menge, sodass die Reihenfolge der zulässigen Sequenzen keine Rolle spielt.
Beispiele:
Input: 3,1
Output: [[2,1]]
Hier suchen wir nach zulässigen Folgen mit insgesamt 3. Es gibt zwei Möglichkeiten, [3]
und [2,1]
. ( [1,1,1]
und [1,2]
haben die Summe 3, sind aber nicht zulässig). Der Überschuss von [3]
ist 3 und der Überschuss von [2,1]
ist . Somit ist die einzige Folge mit überschüssigem ist .[2,1]
Input: 6, 6
Output: [[6], [5, 1], [4, 2]] (or any reordering, e.g., [[5,1],[4,2],[6]])
Da der Überschuss immer kleiner oder gleich dem Grad ist, haben wir keine Überschussbedingung. So versuchen wir einfach alle zulässigen Sequenzen von Grad 6. Die Optionen zu finden sind [6]
, [5, 1]
und [4, 2]
. (Diese haben einen Überschuss von , und )
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Die zulässigen Folgen des Grades 10 sind:
[[10], [9,1], [8,2], [7,3], [7,2,1], [6,3,1]]
Diese haben überschüssige , , , , 7 - 2 - 1 = 4 und 6 - 3 - 1 = 2 sind, so dass die letzten drei funktionieren.
Wertung
Das ist Codegolf: Kürzeste Lösung in Bytes gewinnt.
Testfälle:
Jede Neuordnung der Ausgabe ist gleichermaßen gut, also für Eingaben (3, 3)
, Ausgaben [[3],[2,1]]
oder [[2,1],[3]]
sind gleichermaßen akzeptabel (ist es aber [[1,2],[3]]
nicht).
Input: 1, 1
Output: [[1]]
Input: 3, 3
Output: [[2,1], [3]]
Input: 3, 1
Output: [[2,1]]
Input: 6, 6
Output: [[6], [5, 1], [4, 2]]
Input: 6, 4
Output: [[5,1], [4,2]]
Input: 6, 1
Output: []
Input: 7, 7
Output: [[7], [6,1], [4,2,1], [5,2]]
Input: 7,1
Output: [[4,2,1]]
Input: 10, 10
Output: [[10], [9,1], [7,2,1], [6,3,1], [8,2], [7,3]]
Input: 10, 5
Output: [[7,3], [7,2,1], [6,3,1]]
Input: 26, 4
Output: [15, 7, 3, 1]
Input: 26, 6
Output: [[16, 7, 2, 1], [16, 6, 3, 1], [15, 7, 3, 1], [16, 8, 2], [16, 7, 3]]
quelle
Antworten:
05AB1E ,
1612 Bytes4 Bytes dank Grimy gespart
Probieren Sie es online!
Erläuterung
quelle
ćsO-
ist das eingebauteÆ
.À@¨
kann¦@
.Wolfram Language (Mathematica) ,
6762 BytesProbieren Sie es online!
-4 Bytes von @attinat
IntegerPartitions@d
: Erhalte alle Listen von ganzen Zahlen, die zu summieren sindd
Cases[,...]
: Nach folgender Bedingung filtern:2#& @@# - d <= e &&
: Zweimal das erste Element minus die Summe ist kleiner alse
, und ...Max@Ratios@#<=.5
: Alle Verhältnisse aufeinanderfolgender Elemente der Liste sind kleiner als 1/2.Weil
e
kleiner als 0,5 ist, können wir daraus eine verkettete Ungleichung machen.Für ein paar zusätzliche Bytes ist dies erheblich schneller: Probieren Sie es online aus!
quelle
Jelly ,
1615 Bytes-1 dank Erik the Outgolfer (eine kluge Anpassung der Prüfung, die einen einzelnen Filter erlaubt)
Eine dyadische Verknüpfung
d
, die links eine positive Ganzzahl unde
rechts eine positive Ganzzahl akzeptiert und eine Liste mit Listen positiver Ganzzahlen liefert.Probieren Sie es online! (In der Fußzeile werden die Ergebnisse formatiert, um zu vermeiden, dass die implizite Listenformatierung, die Jelly als vollständiges Programm ausführt, angezeigt wird.)
Wie?
quelle
Haskell ,
595854 BytesDank nimi 1 Byte gespart
4 Bytes gespart dank xnor
Probieren Sie es online!
quelle
#
direkt definieren : Probieren Sie es online aus!JavaScript (V8) ,
88 8781 BytesÜbernimmt die Eingabe als
(e)(d)
. Druckt die Sequenzen nach STDOUT.Probieren Sie es online!
Kommentiert
quelle
Pyth , 23 Bytes
Probieren Sie es online!
quelle
Python 3 ,
213 BytesRiesenlistenverständnis. Höchstwahrscheinlich nicht der beste Weg, dies zu tun, aber ich kann nicht herausfinden, wie die if-Anweisungen übersprungen werden
Python 3 , 172 Bytes
Probieren Sie es online!
Nach Angaben von @Jonas Ausevicius
quelle
all
können einen Generator nehmen , so dass Sie nur tun können ,all(...)
stattall([...])
. Da es sich bei Ihrer Einreichung um eine vollständig anonyme Funktion handelt, werden Sie für die Zuweisung (f=
) nicht bestraft und können sie daher von Ihrer Punktzahl (-2 Byte) abziehen.[*(...)]
der inlist(...)
der Regel ein Byte gespeichert wird , in Ihrem Fall jedoch 2, da Sie damit auch ein Leerzeichen entfernen können.[*filter(...)]
. Auch willkommen :)Holzkohle , 42 Bytes
Probieren Sie es online! Link ist eine ausführliche Version des Codes. Erläuterung:
Erstellen Sie zunächst eine Liste von Listen aus
[1]..[d]
.Erstellen Sie für jede Liste neue Listen, indem Sie allen Nummern von der doppelten ersten Nummer bis das
d
Präfix voranstellen und diese Listen an die Liste der zu verarbeitenden Listen anhängen. Dies stellt sicher, dass alle zulässigen Folgen, die Zahlen enthalten, die nicht größer alsd
sind, erstellt werden.Geben Sie nur die Listen aus, deren Grad
d
und Überschuss nicht größer als iste
. (Die Summe aus Grad und Selbstbeteiligung entspricht dem Doppelten der ersten Nummer der Liste.)quelle
Python 3 , 156 Bytes
nimmt
d,e
als Eingabe; gibt eine Liste von Tupeln ausÄhnlich wie bei @OrangeCherries antworten und helfen Kommentare; aber mehr Bytes gespeichert
Probieren Sie es online!
quelle
Jelly , 18 Bytes
Probieren Sie es online!
quelle
Ruby , 78 Bytes
Probieren Sie es online!
quelle