risiko-problem mit 42 ländern[alter name: Ojeee - Zahlen...]
risiko-problem mit 42 ländern[alter name: Ojeee - Zahlen...]
Ich habe zahlen von 1 - 42, jede einmal.
Nun möchte ich jede mögliche Reihenfolge ohne doppelte zu haben, um damit einige tests (die zahlen sind nämlich arrayindizen) anzustellen, etwa so wie das hier mit 3 zahlen:
123
132
321
312
213
231
Das 0-element der arrays muss aber bei 0 bleiben, weil ich es für die verwaltung der anderen 42 vergewaltigt habe!!!
Wie geht das möglichst schnell?
Nun möchte ich jede mögliche Reihenfolge ohne doppelte zu haben, um damit einige tests (die zahlen sind nämlich arrayindizen) anzustellen, etwa so wie das hier mit 3 zahlen:
123
132
321
312
213
231
Das 0-element der arrays muss aber bei 0 bleiben, weil ich es für die verwaltung der anderen 42 vergewaltigt habe!!!
Wie geht das möglichst schnell?
Zuletzt geändert von DarkSoul am 12.02.2007 18:00, insgesamt 1-mal geändert.

öö..
schätze, gar nicht
bei einer PermutationsReihe mit vielen bis allen Möglichkeiten komm ich
im Kopf schon auf ca 3 Hoch 49 verschiedene Möglichkeiten .. wie sowas
schnell gehen soll, weiß ich nicht
ps: Auf den Ausdruck der Zahlen bin ich gespannt
schätze, gar nicht
bei einer PermutationsReihe mit vielen bis allen Möglichkeiten komm ich
im Kopf schon auf ca 3 Hoch 49 verschiedene Möglichkeiten .. wie sowas
schnell gehen soll, weiß ich nicht

ps: Auf den Ausdruck der Zahlen bin ich gespannt

pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Korrekterweise sind es nicht 3^49 Möglichkeiten, sondern 42! (Fakultät) Möglichkeiten. Sind aber schon sehr viele 
Für was genau brauchst Du das denn? Vielleicht läßt sich Dein eigentliches Problem ja letztendlich auch anders lösen...

Für was genau brauchst Du das denn? Vielleicht läßt sich Dein eigentliches Problem ja letztendlich auch anders lösen...


ZeHa hat bisher kein Danke erhalten.
Klicke hier, wenn Du wissen möchtest, woran ihm das vorbeigeht.
1,4050061177528798985431426062445 * 10^51
um genau zu sein
also ist die auflistung aller Zahlen UNMÖGLICH
Zum Vergleich um eine LONG zu speichern braucht man 4 Byte
man kann also mit einer 1 TByte (1024GByte) Festplatte
nur 2,74877906944 * 10^11 Zahlen speichern
Was du machen kannst ist :
Du lässt von einer Zufallsprocedure eine zufällige Kombination ausrechnen:
In Feld 1 bis 42 sind dann zufällig die Zahlen 1 bis 42 verteilt , natürlich ohne mehrfachnennung.
um genau zu sein

also ist die auflistung aller Zahlen UNMÖGLICH
Zum Vergleich um eine LONG zu speichern braucht man 4 Byte
man kann also mit einer 1 TByte (1024GByte) Festplatte
nur 2,74877906944 * 10^11 Zahlen speichern
Was du machen kannst ist :
Du lässt von einer Zufallsprocedure eine zufällige Kombination ausrechnen:
Code: Alles auswählen
Dim Zahlen.l(42)
Procedure FuelleMitZahlen()
For n = 1 To 42 :
Zahlen(n) = 0
Next n
n = 1
Repeat
Repeat
FEHLER = 0
Zahl = Random(41)+1
For i = 1 To n-1
If Zahlen(i) = Zahl : FEHLER = 1 : EndIf
Next i
Until FEHLER = 0
Zahlen(n) = Zahl
n + 1
Until n = 43
EndProcedure
FuelleMitZahlen()
For n = 1 To 42 :
Debug Zahlen(n)
Next n
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
bastle gerade ein risikospiel zusammen, eigentlich fertig, aber was fehlt ist, eine truppe ins andere land, wo noch ein paar länder gleicher truppenfarbe zwischen sind, zu schieben, ohne sie von land z land zu schieben zu müssen. Dabei ist drauf zu achten, dass man keine gegnerischen ländern durchmarschieren kann.
Ich hoffe, das verwirrt jet nicht zu sehr:
Die länder sind unsere erdländer in paint gezeichnet. Nun wollte ich mit de zahlen folgende Ländergruppen rausfinden:

Derzeit sind nur blau und pink möglich. Es soll aber grün, also direkt mit einem zug möglich sein aber es dürfen keine andersfarbigen armeen übersprungen werden (also roter pfeil darf nicht möglich sein!) und durchs wasser laufen is nich!
Die direkten Ländergrenzen hab ich folgt gemacht:
Ich habe jedem Land ein Stringarray gegen, das seinen Namen enthält und ein weiteres Stringarray, das die namen der angrenzenden Länder enthält. Dann habe ich noch ein bytearray, das die Farbe, die gerade drauf ist, enthält.
So prüfe ich beim zug einfach das hier:
Ich hoffe, das verwirrt jet nicht zu sehr:
Die länder sind unsere erdländer in paint gezeichnet. Nun wollte ich mit de zahlen folgende Ländergruppen rausfinden:

Derzeit sind nur blau und pink möglich. Es soll aber grün, also direkt mit einem zug möglich sein aber es dürfen keine andersfarbigen armeen übersprungen werden (also roter pfeil darf nicht möglich sein!) und durchs wasser laufen is nich!
Die direkten Ländergrenzen hab ich folgt gemacht:
Ich habe jedem Land ein Stringarray gegen, das seinen Namen enthält und ein weiteres Stringarray, das die namen der angrenzenden Länder enthält. Dann habe ich noch ein bytearray, das die Farbe, die gerade drauf ist, enthält.
So prüfe ich beim zug einfach das hier:
Code: Alles auswählen
Dim Besitzer.b(42)
Dim LandName.s(42)
Dim Grenzen.s(42)
;currentland hat die nummer des landes, von dem gezogen wurde und ziellandname$ den namen des landes, wo die maus draufzeigt.
If FindString(Grenzen(CurrentLand),0,Ziellandname$)
;gültig
else
;ungültig
endif

Etwas effizienter dürfte das hier sein...STARGÅTE hat geschrieben:1,4050061177528798985431426062445 * 10^51
um genau zu sein
also ist die auflistung aller Zahlen UNMÖGLICH
Zum Vergleich um eine LONG zu speichern braucht man 4 Byte
man kann also mit einer 1 TByte (1024GByte) Festplatte
nur 2,74877906944 * 10^11 Zahlen speichern
Was du machen kannst ist :
Du lässt von einer Zufallsprocedure eine zufällige Kombination ausrechnen:
In Feld 1 bis 42 sind dann zufällig die Zahlen 1 bis 42 verteilt , natürlich ohne mehrfachnennung.Code: Alles auswählen
Dim Zahlen.l(42) Procedure FuelleMitZahlen() For n = 1 To 42 : Zahlen(n) = 0 Next n n = 1 Repeat Repeat FEHLER = 0 Zahl = Random(41)+1 For i = 1 To n-1 If Zahlen(i) = Zahl : FEHLER = 1 : EndIf Next i Until FEHLER = 0 Zahlen(n) = Zahl n + 1 Until n = 43 EndProcedure FuelleMitZahlen() For n = 1 To 42 : Debug Zahlen(n) Next n
Code: Alles auswählen
EnableExplicit
Define Dimension.l = 42
Global Dim Zahlen.l(Dimension-1) ;Indizes 0 bis Dimension-1
Declare FuelleMitZahlen(Dimension.l)
;-----------------------------------------------------------
FuelleMitZahlen(Dimension)
Define n.l
For n = 0 To Dimension-1
Debug Zahlen(n)
Next n
End
;-----------------------------------------------------------
Procedure FuelleMitZahlen(Dimension.l)
Define n.l
For n = 0 To Dimension-1
Zahlen(n) = n+1
Next n
Define Index.l = Dimension-1, ZufallsIndex.l
While Index > 0 ;das erste Element muss nicht mit sich selbst gefüllt werden...
ZufallsIndex = Random(Index)
Swap Zahlen(Index), Zahlen(ZufallsIndex)
index - 1
Wend
EndProcedure

Hm, da brauchst ne Wegfindungs-Routine ... (Pathfind)
Du müsstest wissen, von welchem Land man zu welchem Land kommt,
mit diesen Daten kann man dann den Computer schauen lassen, ob es
einen weg von a nach b gibt. Ist das der Fall, kannste deine Figuren
bewegen. Aber leichter gesagt, als getan ...
Du könntest hier im Board dannach suchen, der A*-Algo wäre für dich
eine gute wahl, fals du das Bewegen von a nach z über b, c, d, e, f, ...
visual darstellen möchtest. Aber der wäre auch so ganz gut, da du mit ein
zwei mehr abfragen direkt nach finden einer Route aus der Schleife
rausspringen könntest.
Wikipedia erklärt den Algo natürlich auch: http://de.wikipedia.org/wiki/A*
(Link kopieren ... das Board mag keine * in der URL -.-)
MFG PMV

Du müsstest wissen, von welchem Land man zu welchem Land kommt,
mit diesen Daten kann man dann den Computer schauen lassen, ob es
einen weg von a nach b gibt. Ist das der Fall, kannste deine Figuren
bewegen. Aber leichter gesagt, als getan ...
Du könntest hier im Board dannach suchen, der A*-Algo wäre für dich
eine gute wahl, fals du das Bewegen von a nach z über b, c, d, e, f, ...
visual darstellen möchtest. Aber der wäre auch so ganz gut, da du mit ein
zwei mehr abfragen direkt nach finden einer Route aus der Schleife
rausspringen könntest.
Wikipedia erklärt den Algo natürlich auch: http://de.wikipedia.org/wiki/A*
(Link kopieren ... das Board mag keine * in der URL -.-)
MFG PMV
Das wird mit so unregelmäßigen Feldern schwer
vllt kannst du ja die Karte für die Berechnungen in ein 2D Array packen und dann dort ne keine Wegfindungsprocedure anwenden.
@code2nil : OK deins wäre das klassische Karten mischen ^^
[EDIT] Verdammt bin schon wieder 1min zu spät, ich schreibe eifach zu langsam

vllt kannst du ja die Karte für die Berechnungen in ein 2D Array packen und dann dort ne keine Wegfindungsprocedure anwenden.
@code2nil : OK deins wäre das klassische Karten mischen ^^
[EDIT] Verdammt bin schon wieder 1min zu spät, ich schreibe eifach zu langsam

PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr