Eine zyklische Differenzmenge ist eine Menge positiver Ganzzahlen mit einer eindeutigen Eigenschaft:
- Sei
n
die größte Ganzzahl in der Menge. - Sei
r
eine ganze Zahl (nicht unbedingt in der Menge) größer als 0, aber kleiner oder gleichn/2
. - Geben Sie
k
die Anzahl der Lösungen an,(b - a) % n = r
für diea
und fürb
die Sie Mitglieder der Gruppe sind. Jede Lösung ist ein geordnetes Paar(a,b)
. (Beachten Sie auch, dass diese Version von modulo negative Zahlen positiv macht, indem sie hinzugefügtn
wird, im Gegensatz zu den Implementierungen in vielen Sprachen.) - Wenn dies eine zyklische Differenzmenge ist,
k
hängt der Wert von nicht von Ihrer Wahl von abr
. Das heißt, alle Werte vonr
geben die gleiche Anzahl von Lösungen für die obige Kongruenz an.
Dies kann anhand des folgenden Beispiels veranschaulicht werden:
Cyclic difference set: {4,5,6,8,9,11}
0 < r <= 11/2, so r = 1,2,3,4,5
r=1: (4,5) (5,6) (8,9)
r=2: (4,6) (6,8) (9,11)
r=3: (5,8) (6,9) (8,11)
r=4: (4,8) (5,9) (11,4) since (4-11)%11=(-7)%11=4
r=5: (4,9) (6,11) (11,5)
Jeder Wert von r
hat die gleiche Anzahl von Lösungen, in diesem Fall 3, so dass dies eine zyklische Differenzmenge ist.
Eingang
Die Eingabe ist eine Liste positiver Ganzzahlen. Da es sich um eine Set-Eigenschaft handelt, wird davon ausgegangen, dass die Eingabe nicht sortiert ist. Sie können davon ausgehen , dass n
zumindest 2
, wenn auch k
Null sein kann.
Ausgabe
Ihr Programm / Ihre Funktion sollte einen Wahrheitswert ausgeben, wenn es sich bei dem Satz um einen zyklischen Differenzsatz handelt, oder einen Falschwert, wenn dies nicht der Fall ist.
Testfälle
Gültige zyklische Differenzmengen:
10,12,17,18,21
7,5,4
57,1,5,7,17,35,38,49
1,24,35,38,40,53,86,108,114,118,135,144,185,210,254,266,273
16,3,19,4,8,10,15,5,6
8,23,11,12,15,2,3,5,7,17,1
( Datenquelle , obwohl ihre Konvention unterschiedlich ist)
Ungültige zyklische Differenzsätze:
1,2,3,4,20
57,3,5,7,17,35,38,49
3,4,5,9
14,10,8
quelle
a
undb
darf das gleiche Mitglied sein (nicht unbedingta ≠ b
)?b
unda
sind die gleiche Zahl,(b-a)%n = 0
aber 0 ist nicht einer der Werte, für die Sie nach Lösungen suchen. Es gibt also kein ausdrückliches Verbot, dass sie dieselbe Anzahl haben, aber sie werden es niemals sein.7 7 7
ungültige Eingabe war. Ein Satz wiederholt keine Werte7 7 7
wurde von einem anderen Benutzer angefordert, aber ich habe es entfernt, weil es kein Satz ist.r
durch0 < r <= max(input)/2
, sondern0 < r < max(input)
weil wir erhaltenr > max(input)/2
durch einfaches Umdrehen der Subtraktion in Fällen ,r <= max(input)/2
Fällen.Antworten:
Jelly ,
147 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Schale , 13 Bytes
Probieren Sie es online!
Die drei hochgestellten 1s scheinen verschwenderisch ...
Erläuterung
quelle
Wolfram Language (Mathematica) ,
5352 BytesProbieren Sie es online!
Beachten Sie , wir nicht das max Element durch zwei aufgrund der Symmetrie teilen müssen (wir Zählungen aller modulos überprüfen kann
1
zumax(input) - 1
).Erläuterung
Nehmen Sie alle Länge-2-Permutationen der Eingabe.
Finde die Unterschiede von jedem
Modifiziere das Ergebnis um das maximale Element der Eingabe.
Finden Sie die Frequenzen jedes Elements.
Gibt zurück, ob alle Zahlen gleich sind.
quelle
Python 3 ,
868481 Bytes-3 Bytes danke an JungHwan min
Probieren Sie es online!
quelle
JavaScript (ES6), 87 Byte
Gibt 0 oder 1 zurück .
Testfälle
Code-Snippet anzeigen
quelle
Perl,
686766 BytesEnthält
+2
fürap
quelle
Python 3 , 74 Bytes
Probieren Sie es online!
quelle
Ruby , 81 Bytes
Probieren Sie es online!
Ungolfed:
quelle
Haskell, 84 Bytes
l ist die Funktion, die die Prüfung durchführt. Es werden nur alle Unterschiede und Zählungen berechnet.
quelle
let
in einem Pattern Guard stattwhere
ein Byte zu speichern: Probieren Sie es online!