Matroids Matheplanet Forum Index
Moderiert von matroid
Informatik » Algorithmen / Datenstrukturen » Python Differenzencontainer
Autor
Schule Python Differenzencontainer
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2495
  Themenstart: 2021-07-23

Jetzt besteht folgende Aufgabe: was ist einfacher? hab ne liste: Freie 12 [2, 3, 5, 9, 12, 14, 17, 18, 20, 23, 24, 27] oder, dieselbe Menge, aufgeteilt in zwei Listen nach gerade und ungerade GK [2, 12, 14, 18, 20, 24] uGK [3, 5, 9, 17, 23, 27] Es sollen Differenzen gebildet werden, von jeder Zahl, wenn sie gerade ist, sollen die Ungeraden, wenn sie kleiner sind, alle abgezogen werden, und wenn sie ungerade ist, sollen die Geraden, wenn sie kleiner sind, alle abgezogen werden, so, dass nur ungerade Differenzen in den Sammelcontainer kommen. Es müssten also 6+5+4+3+2+1 mal 2 = 42 Differenzen in den Sammelkontainer kommen.... muß jetzt schnell Tomatensalat machen, leider .... was von den Ergebnissen nicht prim, kann gleich weg. Man könnte ja die Liste differenziert permutiren, was ich absichtlich nicht möchte, denn die Anzahlen an Differenzen steigen rasant...


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2969
  Beitrag No.1, eingetragen 2021-07-23

Es ist unverständlich a) was du willst. b) was das mit Python und Containern zu tun hat. Wenn du eine Liste von nur 42 Werten willst, rechne sie doch mit Papier und Bleistift aus. Das geht garantiert schneller als die Diskussion im Forum hier und wenn du es dann mit ein paar 1000 Werten wiederholen willst, hast du ein anschauliches Beispiel zur Demonstration dessen, um was es überhaupt geht.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2495
  Beitrag No.2, vom Themenstarter, eingetragen 2021-07-24

\quoteon(2021-07-23 19:02 - DerEinfaeltige in Beitrag No. 1) Es ist unverständlich a) was du willst. \quoteoff Er soll jetzt aus Liste uGK (ungerade Keys) die größte Zahl genommen werden, und dann sollen davon alle Zahlen aus GK abgezogen werden und die Ergebnisse in ein Ergebniscontainer gepackt werden. Dasselbe mit der zweitgrössten Zahl aus uGK... etc, etc. Dann dassselbe mit den GK (GeradenKeys) wovon die uGk abgezogen werden sollen. Davon erhalte ich einen Haufen Ergebnisse, die Doppelungen können alle raus.... \quoteon(2021-07-23 19:02 - DerEinfaeltige in Beitrag No. 1) Wenn du eine Liste von nur 42 Werten willst, rechne sie doch mit Papier und Bleistift aus. \quoteoff Ja, es geht nicht um 42. Das Programm soll noch perpetuert werden. Es geht um eine intelligente Abkürzung von Suchroutinen primordialer Anzahl. Also statt 3*5*7*11*13*15*17*23*29 nur 3*5*7... aber da sind wir noch nicht....


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2969
  Beitrag No.3, eingetragen 2021-07-24

Rechne doch einfach mal vor, was bei deinem kleinen Beispiel herauskommen soll. Dann versteht man vielleicht, was du willst und kann dir Tipps geben, wie man es implementieren, oder auch einfach direkt ausrechnen kann.


   Profil
Bekell
Aktiv Letzter Besuch: in der letzten Woche
Dabei seit: 05.09.2008
Mitteilungen: 2495
  Beitrag No.4, vom Themenstarter, eingetragen 2021-07-24

\sourceon Python (unelegant - BekellsProg) \numberson from sympy.ntheory import isprime Länge=29 # länge mydic={} # enthält die Version Stelle als Key und Belegung (liste) als value version={} FreieZellen=[] BelegteZellen=[] GeradeKeys=[] UnGeradeKeys=[] Entfernungen=[] for key in range(1,Länge+1): mydic[key]=[0] for key in mydic: if key%3==1: mydic[key].append(3)# hier macht er eine 3 in die Valueliste if key%5==1: mydic[key].append(5)# hier macht er eine 5 in die Valueliste if key%7==1: mydic[key].append(7)# hier macht er eine 7 in die Valueliste print("Bestückung der Zeilen",mydic) FreieZellen = [key for key in mydic if len(mydic[key])==1] BelegteZellen = [key for key in mydic if len(mydic[key])>1] print("Belegte",len(BelegteZellen),"",BelegteZellen) print("Freie",len(FreieZellen),"",FreieZellen) for x in FreieZellen: if x%2==0: GeradeKeys.append(x) UnGeradeKeys= [k for k in FreieZellen if k%2!=0] print("GeradeKeys",GeradeKeys) print("UngeradeKeysGK",UnGeradeKeys) for x in GeradeKeys: for i in UnGeradeKeys: if x>i and isprime(x-i): Entfernungen.append(x-i) for x in UnGeradeKeys: for i in GeradeKeys: if x>i and isprime(x-i): Entfernungen.append(x-i) print("Entfernungen",Entfernungen) list(set(Entfernungen)) print("Entfernungen",[i for i in set(Entfernungen) if Entfernungen.count(i)<10]) # Entfernung Duplikate, eigentlich sollen 3,5,7 hier auch raus.... \sourceoff Das tut es! Die ganzen Kontrollprints werden später auskommentiert.... Die Information für mich: Man kriegt bei dieser Anordnung der PZ als Primteiler auf n=29 mit 17 belegten Zellen die PZ 23 nicht mehr 2 x untergebracht. Jetzt soll es perpetuiert werden, d. h. alle 105 Belegungsmuster von 3,5 und 7 sollen durchgetestet werden, und bei denen, die allein 17 durch 3,5,7 belegte Zellen haben, wird nachgesehen, ob alle anderen PZ bis 23 auch mit 2 Exemplaren untergebracht werden können. 1. Beispiel gibt es garantiert, die Frage ist, ob es mehr gibt. Die Version, erkenntlich an der Stellung von 3,5,7 (hier liegt 1,1,1, vor, weil alle 3 PZ auf Key ), hab ich noch nicht programmiert.


   Profil
DerEinfaeltige
Senior Letzter Besuch: in der letzten Woche
Dabei seit: 11.02.2015
Mitteilungen: 2969
  Beitrag No.5, eingetragen 2021-07-24

Das Gleiche etwas kürzer und vor allem lesbarer: \sourceon Python \numberson from sympy.ntheory import isprime Laenge = 29 mydic = {key: [div for div in (3,5,7) if key%div==1] for key in range(1,Laenge+1)} FreieZellen = [key for key in mydic if len(mydic[key])==0] BelegteZellen = [key for key in mydic if len(mydic[key])>0] print(f"{len(BelegteZellen)} belegte Zellen:\t{BelegteZellen}") print(f"{len(FreieZellen)} freie Zellen:\t{FreieZellen}") GeradeKeys = [key for key in mydic if key%2==0 and len(mydic[key])==0] UngeradeKeys = [key for key in mydic if key%2!=0 and len(mydic[key])==0] print(f"GeradeKeys:\t{GeradeKeys}") print(f"UngeradeKeys:\t{UngeradeKeys}") Entfernungen = \ [u-g for u in UngeradeKeys for g in GeradeKeys if u>g and isprime(u-g)] + \ [g-u for u in UngeradeKeys for g in GeradeKeys if g>u and isprime(g-u)] print(f"Entfernungen als Liste:\t{Entfernungen}") print(f"Entfernungen als Menge:\t{set(Entfernungen)}") \sourceoff


   Profil
Bekell hat die Antworten auf ihre/seine Frage gesehen.
Bekell wird per Mail über neue Antworten informiert.

Wechsel in ein anderes Forum:
 Suchen    
 
All logos and trademarks in this site are property of their respective owner. The comments are property of their posters, all the rest © 2001-2021 by Matroids Matheplanet
This web site was originally made with PHP-Nuke, a former web portal system written in PHP that seems no longer to be maintained nor supported. PHP-Nuke is Free Software released under the GNU/GPL license.
Ich distanziere mich von rechtswidrigen oder anstößigen Inhalten, die sich trotz aufmerksamer Prüfung hinter hier verwendeten Links verbergen mögen.
Lesen Sie die Nutzungsbedingungen, die Distanzierung, die Datenschutzerklärung und das Impressum.
[Seitenanfang]