Kombinationen aus Zahlen 1-16

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo und guten Tag,

ich möchte aus einer Zahlenkombination, Zahlen von 1-16. In vierer paaren.

x=1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16

Alle Kombination berechnen wo die gleiche Quersumme enthalten ist. Quersumme 34.
Ohne doppelte.
Z.b:

5 4 16 9
14 12 7 1
10 15 6 3
11 2 8 13

4 7 9 14
2 13 16 3
1 15 12 6
11 5 8 10

Weis jemand wie man das berechnen kann, oder nach was ich genau bei Google suchen muss.
Ich habe dort leider nichts gefunden. Gibt es ein Modul für sowas ?

Danke..
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo Leute,

ich habe schon etwas bei Google gefunden benötige keine Hilfe mehr...

danke...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Hallo Leute,

ich war wohl doch etwas voreilig.
Das Beispiel was ich bei Google gefunden hatte geht nicht.
Kann mir irgendjemand helfen ?

danke...
Benutzeravatar
Dennis89
User
Beiträge: 1156
Registriert: Freitag 11. Dezember 2020, 15:13

Hallo,

hast du denn irgendeine Idee oder schon etwas probierten Code, das man sieht an welcher Stelle du genau nicht weiter kommst?

Oder willst du die vollständige fertige Lösung?

Grüße
Dennis
"When I got the music, I got a place to go" [Rancid, 1993]
__deets__
User
Beiträge: 14544
Registriert: Mittwoch 14. Oktober 2015, 14:29

Die Funktion combinations sollte die Antwort sein: https://docs.python.org/3/library/itert ... mbinations
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

Dennis89 hat geschrieben: Sonntag 28. August 2022, 17:37 Hallo,

hast du denn irgendeine Idee oder schon etwas probierten

Oder willst du die vollständige fertige Lösung?

Grüße
Dennis
Hallo und guten Tag,

ich habe schon einiges versucht. Derzeit lasse ich die Quersummen per Zufall ermitteln.
Bei Zahlen von 1-16 und 4rer Paaren geht's schnell. Wenn die Zahlenliste aber größer ist und die Paare auch, dann weis ich eigentlich gar nicht wie lange ich die Schleife durchlaufen lassen soll. Da ich auch nicht weis wie viele Kombinationen es mit der selben Quersumme gibt. Per Zufall ist das halt ein Glücksspiel.
Rein Mathematisch kann es bestimmt berechnet werden, wie viele Kombinationen es gibt. Nur leider weis ich auch nicht was ich bei Google eintippen soll um etwas zu finden. Wenn ich wüste wie viele Kombinationen es gibt, dann könnte man das abfragen, und die schleife verlassen.


Bis dann...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

__deets__ hat geschrieben: Sonntag 28. August 2022, 18:00 Die Funktion combinations sollte die Antwort sein: https://docs.python.org/3/library/itert ... mbinations
Hallo und guten Tag,

das habe ich schon probiert ist nicht das was ich suche. Es werden hier alle möglichen Kombinationen zurückgegeben. Man könnte natürlich die Quersumme ausrechnen lassen. Bei kleinen Zahlenreihen und kleinen Paaren geht das. Bei größeren Zahlenlisten und großen Paaren kann man das vergessen es gibt dafür zu viele Kombinationen.

Bis dann...
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Was anderes, als alle Kombinationen durchzuprobieren, wird es nicht geben. Bei gegebener Quersumme kann man die Liste der durchzuprobierenden Tuple noch etwas einschränken, das geht mit combinations nicht mehr, aber diese Funktionalität selbst zu programmieren ist ja auch nicht all zu schwer. Da Du aber bisher wenig Initiative gezeigt hast, Dich auf das Forum hier einzulassen, habe ich aber keine Lust, das näher zu erklären-
So lange Zufallszahlen zu würfeln, bis man alle Kombinationen hatte, wird auf jeden Fall noch länger dauern.
Benutzeravatar
DeaD_EyE
User
Beiträge: 1021
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Dafür sind Generatoren ideal.

Code: Alles auswählen

from itertools import combinations, islice


def generator(value_range, row_size, qsum):
    for values in combinations(value_range, r=row_size):
        if sum(values) == qsum:
            yield values



value_range = range(1, 17)
row_size = 4
qsum = 34

# 10 ergebnisse
result = list(islice(generator(value_range, row_size, qsum), 0, 10))
Die Anzahl möglicher Kombinationen, kann man mit math.comb(n, k) berechnen.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
das habe ich schon probiert ist nicht das was ich suche. Es werden hier alle möglichen Kombinationen zurückgegeben.
Was schwebt dir denn vor? Der grandiose Vorteil ist, dass dir `combinations` garantiert kein doppelten 4er-Paare zurückliefert - was um Längen effizienter ist das dein Ansatz mit den Zufallszahlen, der definitiv keine vorhersehbare Laufzeit hat.

Und die Summe berechnen ist ja kein Akt. Und ja, eine längere Liste von Zahlen gibt halt mehr Kombination. Die Größe der Zahlen ist sekundär. Was definitiv hilft: eine CPU mit hoher Singlethreadperformance...

Was ist eigentlich das Ziel des ganzen? Lösen eines Rätsel eines Geocaches?

Gruß, noisefloor
Benutzeravatar
kbr
User
Beiträge: 1487
Registriert: Mittwoch 15. Oktober 2008, 09:27

PeterL hat geschrieben: Montag 29. August 2022, 09:12
__deets__ hat geschrieben: Sonntag 28. August 2022, 18:00 Die Funktion combinations sollte die Antwort sein: https://docs.python.org/3/library/itert ... mbinations
das habe ich schon probiert ist nicht das was ich suche. Es werden hier alle möglichen Kombinationen zurückgegeben. Man könnte natürlich die Quersumme ausrechnen lassen. Bei kleinen Zahlenreihen und kleinen Paaren geht das. Bei größeren Zahlenlisten und großen Paaren kann man das vergessen es gibt dafür zu viele Kombinationen.
Doch, das ist das, was Du suchst – oder Du hast nicht verständlich genug erklärt, was Du wirklich möchtest. Es sind auch nicht so furchtbar viele Kombinationen: in Deinem Fall ganze 86 (welche die Quersumme erfüllen). Wenn Du die Bedingung einer Quersumme hast, dann musst Du diese auch berechnen – unabhängig davon, ob nun wenige oder viele Kombinationen zu betrachten sind.
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

kbr hat geschrieben: Montag 29. August 2022, 11:04
PeterL hat geschrieben: Montag 29. August 2022, 09:12
__deets__ hat geschrieben: Sonntag 28. August 2022, 18:00 Die Funktion combinations sollte die Antwort sein: https://docs.python.org/3/library/itert ... mbinations


Doch, das ist das, was Du suchst – oder Du hast nicht verständlich genug erklärt, was Du wirklich möchtest. Es sind auch nicht so furchtbar viele Kombinationen:
Hallo und guten Tag,

wenn ich aus Zahlen von 1-100 alle Zahlenpaare mit 10 ermitteln lassen möchte sind das 17.310.309.456.440 Kombinationen.
Ich müsste dann bei jedem 10ner Parr die Quersumme errechnen. Die Kombinationen sind viel zu groß das dauert Jahre.
Ich möchte eigentlich nur aus den Zahlen von 1-100 , oder andere Zahlenfolgen die Quersumme der Zahlenpaare ermitteln,ohne alle Kombinationen durchrechnen zu müssen.

Bis dann...
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

was erwartest du denn? Das der Computer das automagisch macht, ohne zu rechnen? Sirius3 hat dir auch schon was gesagt zu Ausschlusskriterien, die du aber selber programmieren musst. Wenn z.B. die Quersumme gerade ist, musst du auch eine gerade Zahl von geraden und ungeraden Zahlen in der Folge haben (wenn die Folge eine gerade Anzahl Elemente hat) bzw eine ungerade Anzahl von geraden Zahlen (wenn die Folge eine ungerade Anzahl von Elementen hat).
Wenn du von 1-1000 gehtst, 10 Element in der Folge hast und die Quersumme 500 ist, dann können keine Zahlen >455 in der Folge auftauchen. Und so weiter.
Die Kombinationen sind viel zu groß das dauert Jahre.
Quatsch, alles eine Frage der richtigen Hardware.

Warum weigerst du die eigentlich zu sagen, was du wirklich vorhast? Ist das irgendwas illegales, probierst du irgendwas mit brute force zu knacken?

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 13116
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@noisefloor: 1-1000, 10 Elemente pro Reihe, und Quersumme 500 ist ganz schnell ”berechnet”: das geht gar nicht, weil die Zahlen >455 nicht verwendet werden können. Da braucht mal also gar nicht erst anfangen. 🤓
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

DeaD_EyE hat geschrieben: Montag 29. August 2022, 10:02 Dafür sind Generatoren ideal.

Code: Alles auswählen

from itertools import combinations, islice


def generator(value_range, row_size, qsum):
    for values in combinations(value_range, r=row_size):
        if sum(values) == qsum:
            yield values



value_range = range(1, 17)
row_size = 4
qsum = 34

# 10 ergebnisse
result = list(islice(generator(value_range, row_size, qsum), 0, 10))
Die Anzahl möglicher Kombinationen, kann man mit math.comb(n, k) berechnen.
Hallo und guten Tag,

dein Script schein zu funktionieren danach hatte ich gesucht. Ich teste es mal ausgiebig.
danke dafür...
bis dann...
PeterL
User
Beiträge: 95
Registriert: Samstag 6. März 2021, 18:39

noisefloor hat geschrieben: Montag 29. August 2022, 10:03 Hallo,
Und die Summe berechnen ist ja kein Akt. Und ja, eine längere Liste von Zahlen gibt halt mehr Kombination. Die Größe der Zahlen ist sekundär. Was definitiv hilft: eine CPU mit hoher Singlethreadperformance...

Was ist eigentlich das Ziel des ganzen? Lösen eines Rätsel eines Geocaches?

Gruß, noisefloor
Hallo und guten Tag,

das Ziel des ganzen ist soll sein...
Ich beschäftige mich mit Magischen Quadraten. Ich versuche welche zu generieren. Auch mit größeren Zahlenreihen.

bis dann..
nezzcarth
User
Beiträge: 1635
Registriert: Samstag 16. April 2011, 12:47

PeterL hat geschrieben: Sonntag 28. August 2022, 15:33 Alle Kombination berechnen wo die gleiche Quersumme enthalten ist. Quersumme 34.
Ohne doppelte.
Z.b:

5 4 16 9
14 12 7 1
Den Begriff Quersumme finde ich hier etwas irreführend, da er nicht zu den gezeigten Beispielen passt. Die Quersumme ist die Summe der Ziffern. Aufgrund der Leerzeichen lässt sei sich streng genommen eigentlich nicht berechnen. Wenn man diese ignoriert, sind die Quersumme der beiden Zeilen 25 und 16. Um jeweils auf 34 zu kommen, muss man einfach nur die Summe der Zahlen bilden. Dafür gibt es in Python das Built-in "sum", das auch schon in ein vorherigen Post gezeigt wurde.
bb1898
User
Beiträge: 200
Registriert: Mittwoch 12. Juli 2006, 14:28

PeterL hat geschrieben: Montag 29. August 2022, 15:22 Hallo und guten Tag,

das Ziel des ganzen ist soll sein...
Ich beschäftige mich mit Magischen Quadraten. Ich versuche welche zu generieren. Auch mit größeren Zahlenreihen.

bis dann..
Ich habe den einschlägigen Wikipedia-Artikel jetzt nicht gründlich gelesen. Mir scheint aber doch ziemlich klar, dass die gängigen Konstruktionsverfahren für Magische Quadrate Deine Kombinations-Suche nicht brauchen. https://de.wikipedia.org/wiki/Magisches_Quadrat sieht mir aus wie ein guter Ausgangspunkt. Dann habe ich noch dies hier gefunden, das setzt sehr wenig Mathematik voraus: Ein magisches Quadrat lösen. Mit "lösen" ist hier schon das gemeint, was Du - m.E. richtiger - generieren nennst.

Übrigens: Du hättest wahrscheinlich von Anfang an passendere Antworten bekommen, wenn Du gleich gesagt hättest, dass es Dir darum geht. Am besten, wie immer, sofort im Betreff. Und wieso eigentlich niemand in dieser Diskussion gegen den Ausdruck "Paar" für Gruppen von mehr als zwei Zahlen protestiert hat, ist mir ein Rätsel.
Antworten