Random letter

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Karl
Beiträge: 520
Registriert: 21.07.2005 13:57
Wohnort: zu Hause

Beitrag von Karl »

Nein, ich meine es so:

Gut, Array passt nicht wirklich so richtig, besser ist wohl "Bereich". Also denke dir eine Stichprobe von sagen wir 500.

Je nachdem wie die Buchstaben verteilt sind (z. B. 30x N, 20x E etc.) legst du jetzt (gedanklich) einen Bereich an, z. B. für A:-> index von 0 bis 5 etc.

Dann die Zufallszahl bestimmen und prüfen, innerhalb welches Bereiches sie sich befindet, das wäre dann der Buchstabe unter Berücksichtigung der Verteilung. Geht deswegen, weil Random() gleichverteilt ist und demnach die Anordnung der Buchstaben keine Rolle spielt.

Gruß Karl
The Kopyright Liberation Front also known as the justified ancients of Mumu!
PB 5.X
Benutzeravatar
remi_meier
Beiträge: 1078
Registriert: 29.08.2004 20:11
Wohnort: Schweiz

Beitrag von remi_meier »

Code: Alles auswählen

Procedure InitRandom(Vert.l(1))
  Shared _Sum.l
  For z = 0 To PeekL(@Vert() - 8) - 1
    _Sum + Vert(z)
  Next
EndProcedure

Procedure.l VertRandom(Vert.l(1))
  Shared _Sum
  Protected Rand.l, Index.l
  Rand = Random(_Sum - 1) + 1
  
  Index = 0
  
  If Rand
    While Rand > 0
      Rand - Vert(Index)
      Index + 1
    Wend
    
    Index - 1
  Else
    Index = 0
  EndIf
  
  ProcedureReturn Index
EndProcedure




DataSection
verteilung:
Data.l 2, 5, 10, 4, 1
EndDataSection
Dim Vert.l(4)
CopyMemory(?verteilung, @Vert(), 5 * SizeOf(Long))

InitRandom(Vert())
Dim res.l(4)
For z = 0 To 1000
  a = VertRandom(Vert())
  res(a) + 1
Next

Debug res(0)
Debug res(1)
Debug res(2)
Debug res(3)
Debug res(4)
und PB Bug, wenn man
res(VertRandom(Vert())) + 1
schreibt :freak:
Zuletzt geändert von remi_meier am 05.10.2006 14:15, insgesamt 2-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

@Karl

ah, jetzt verstehe ich, cool. :allright:

es wäre zwar immer noch eine tabelle, die man mitliefern müsste,
aber dafür ein verfahren, das auf jede beliebige diskrete verteilung
anwendbar ist, und keine formel, die immer wieder neu gebacken
werden müsste.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
zweiger
Beiträge: 1
Registriert: 17.10.2006 13:58

Beitrag von zweiger »

Ausgezeichnete Lösung!
Antworten