Jump to content

Lua: In zufälliges Gleis einer Drehscheibe einfahren


Empfohlene Beiträge

function shuffle(tbl)
  for i = #tbl, 2, -1 do
    local j = math.random(i)
    tbl[i], tbl[j] = tbl[j], tbl[i]
  end
  return tbl
end

for i = 1,26 do
  $("Drehscheibe").variables["tt_tbl"][i]=i
end
shuffle($("Drehscheibe").variables["tt_tbl"])

Da ich das gerade gebraucht habe:

Ziel: Zufällig in ein Gleis einer 26 Gleis Drehscheibe einfahren.
Ergebnis: Eine Tabelle, die man von vorne bis hinten durchgehen kann, bis man ein freies Gleis findet.

Im Codebeispiel wird nur die Tabelle mit Zufallszahlen erzeugt, wobei jede Zahl nur einmal vorkommen darf.

Gruß
Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

Kannitverstahn --- Keine Ahnung was das Thema bewirken soll.

ich halte mich zwar nicht für ganz blöd- aber ich passe hier bei dieser Darstellungsweise...

so  aus der Luft gegriffen wirkt das gescriptete Zeugs so, daß sich der selbstverliebte Verfasser einen "Ich weiss aber mehr als Ihr Doofis" - Raum zur Selbstdarstellung reservieren möchte ...

--- sorry --- so geht es nicht !!!!

Hier lesen viele User mit, die sich ob der Lua-Kopflastigkeit des Forums nicht angesprochen aber überfordert fühlen.

Schreib das bitte mal verständlich, im Bild, Wort und Beispiel. Wir möchten alle von Deinen Gedanken profitieren.

meint momental grummelnd

Henry

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 27 Minuten schrieb Henry:

Kannitverstahn

Hi Henry

Isnitsoschlimm......deswegen hatte ich ja schon um die demo gebeten. Da kann man es sich dann anschauen und die funktionsweise pruefen, ergruenden. Ich denke das hilft mehr als wenn jemand, am ende in fachlatain oda laienchinesisch, versucht das zu erklaeren.

Cheers

Tom

Bearbeitet von metallix
Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo Henry

Ich bin sehr verwundert, daß Du hier überhaupt in diesen Thread gekommen bist.
Daher hatte ich extra in der Überschrift gekennzeichnet, daß es hier um Lua geht.
So braucht doch niemand hier reinschauen, den es nicht interessiert.

Natürlich kann ich Lösungen, die vielleicht andere auch nutzen könnten, für mich behalten.
Soll ich?

Aber Lua, wie andere Programmiersprachen, kann Funktionen enthalten, die viele User an unterschiedlichsten
Stellen in ihren eigenen Programmcode einbauen können. Und da muß nicht jeder immer das Rad neu erfinden.

In diesem Beispiel die Funktion Shuffle() , die eine vorhandene Liste nimmt und die Elemente per Zufall neu anordnet.
Da braucht es auch kein Beispiel, denn das kann man auf jede beliebige eindimensionale Liste im MBS anwenden.

In diesem Fall ist es die Liste  "tt_tbl", die an der Drehscheibe als Variable hinterlegt ist und alle möglichen Weichenstellungen von 1 bis 26 enthält.

Also  (1,2,3,4,5,...,26)
Die gezeigte Funktion Shuffle macht daraus dann z.B. (10,2,13,20,4,8,17,...., 5)

Meine Anwendung:
Wenn man diesen Weichenstellungen nun Gleisobjekte zuordnet und diese auf belegt abfragt, kann man ein zufällig freies Gleis in einer Drehscheibe finden.

Man kann dies aber auch nutzen, um ein zufälliges Gleis in einem Schattenbahnhof zu ermitteln.

Gruß
Thomas

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 2 Stunden schrieb HaNNoveraNer:

kann man ein zufällig freies Gleis in einer Drehscheibe finden

Warum soll man dafür die gesamte Liste umsortieren? Das ist meines Erachtens total überflüssig, da man die Zufallszahl auch direkt auf ein Gleis anwenden kann. Ist das Gleis besetzt wiederholt man die Prozedur. Je nach Verkehrsaufkommen hat man wahrscheinlich nach zwei bis drei Iterationen ein freies Gleis erwischt. Da ist dein Tool noch am sortieren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 23 Minuten schrieb Timba:

Warum soll man dafür die gesamte Liste umsortieren?

Weil man auf diese Weise garantieren kann, dass man kein Element doppelt erwischt.

Wenn du eine Liste zufällig sortierst, dann kannst du anschließend z.B. für eine Lotto-Ziehung die ersten sechs Elemente entnehmen und dabei garantieren, dass du sechs Zufallstreffer und keine Doppelten hast.

Oder der HaNNoveraNer kann anschließend alle Elemente vom ersten bis zum letzten der Reihe nach entnehmen und dabei garantieren, dass er alle Positionen in zufälliger Reihenfolge anfährt bis am Ende alle Stände belegt sind.

Link zu diesem Kommentar
Auf anderen Seiten teilen

9 hours ago, Henry said:

Kannitverstahn --- Keine Ahnung was das Thema bewirken soll.

ich halte mich zwar nicht für ganz blöd- aber ich passe hier bei dieser Darstellungsweise...

so  aus der Luft gegriffen wirkt das gescriptete Zeugs so, daß sich der selbstverliebte Verfasser einen "Ich weiss aber mehr als Ihr Doofis" - Raum zur Selbstdarstellung reservieren möchte ...

--- sorry --- so geht es nicht !!!!

Hier lesen viele User mit, die sich ob der Lua-Kopflastigkeit des Forums nicht angesprochen aber überfordert fühlen.

Schreib das bitte mal verständlich, im Bild, Wort und Beispiel. Wir möchten alle von Deinen Gedanken profitieren.

meint momental grummelnd

Henry

Forum inhalte sollten nicht auf das kleinste gemeinsame vielfache reduziert werden. Solche posts verhindern dass man ueberhaupt etwas posted was ueber 1+1 hinausgeht.  Wenn du nicht einverstanden bist dann sende eine PN und poste so etwas nicht oeffentlich, macht dich nicht gerade sympathisch, wenn dir daran ueberhaupt etwas liegt.

gruss

Gmd

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 46 Minuten schrieb Goetz:

Wenn du eine Liste zufällig sortierst, dann kannst du anschließend z.B. für eine Lotto-Ziehung die ersten sechs Elemente entnehmen und dabei garantieren, dass du sechs Zufallstreffer und keine Doppelten hast. 

Warum sechs Elemente wenn man nur eins braucht? Eine Lok/ein Zug braucht nicht sechs Gleise gleichzeitig.

vor 47 Minuten schrieb Goetz:

Oder der HaNNoveraNer kann anschließend alle Elemente vom ersten bis zum letzten der Reihe nach entnehmen und dabei garantieren, dass er alle Positionen in zufälliger Reihenfolge anfährt bis am Ende alle Stände belegt sind.

Das ist auch der Fall, wenn ich per Zufallszahl ein Element aus einer sortierten Liste nehme. Da die Funktion solange wiederholt werden muss bis das gewählte Element ein freies ist, sind am Ende ebenfalls alle Stände belegt. Außer wenn sie zwischendurch wieder verlassen werden. Dann kann es natürlich vorkommen, dass ein Element bereits zum zweiten Mal gewählt wird, während ein anderes noch gar nicht gewählt wurde. Aber genau das ist ein Wesensmerkmal des Zufalls.

Aber ist mir auch egal, vielleicht habe ich auch Spielereien in meinem Projekt, die völlig überflüssig sind und merke es nicht. Bei dieser Listensortierung per Zufall will mir jedenfalls der Sinn nicht einleuchten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Just now, Timba said:

Immerhin hat seine Kritik bereits ein paar Likes generiert, was deiner Annahme widerspricht. Mal sehen wie viele Likes deine Erwiderung bekommt. ;)

could not care less about likes, ist nur eine facebook krankheit dass man sowas braucht. 

Ich war einfach nur hoeflich, haette das auch anders ausdruecken koennen. 

 

gruss

gmd

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 4 Minuten schrieb Timba:

Da die Funktion solange wiederholt werden muss bis das gewählte Element ein freies ist, sind am Ende ebenfalls alle Stände belegt.

Aber je mehr Stände belegt sind, desto mehr Wiederholungen sind notwendig, bis du einen Glückstreffer landest.

Die Liste muss man nur einmal zufällig sortieren und kann sich dann daraus bedienen, bis sie komplett abgefrühstückt ist. Jetzt sortiert man sie per Zufallsgenerator wieder einmal neu. Die Stände an der Drehscheibe sind nicht das ideale Beispiel für den Sinn dieser Methode. Deshalb hatte ich versucht dir anhand der Lottozahlen zu demonstrieren, wozu diese Methode dienen kann.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 40 Minuten schrieb Goetz:

Aber je mehr Stände belegt sind, desto mehr Wiederholungen sind notwendig, bis du einen Glückstreffer landest.

Dem kann ich nicht widersprechen. Das könnte man reduzieren indem nur freie Stände in den Pool kommen. Dann braucht man immer noch keine Zufallssortierung.

vor 42 Minuten schrieb Goetz:

Die Stände an der Drehscheibe sind nicht das ideale Beispiel für den Sinn dieser Methode.

Wohl wahr. Ich habe mir für meine Bahnhöfe auch etwas in der Art ausgedacht. Meine Vorstellung war, dass alle vorhandenen Gleise gleichermaßen genutzt werden, dies aber in völlig chaotischer Folge. Das geschieht durch die Freigleisliste selbst. Ein einfahrender Zug erhält das erste Gleis der Liste und nach Verlassen des Bahnhofs wird das Gleis unten angefügt. Da die Züge unterschiedlich lange halten ist nach ein paar Runden die Liste von ganz alleine durchmischt. Die Liste ist als Variable abgelegt und wird so mit abgespeichert, d.h. bei jedem Neustart nimmt sie die Reihenfolge wieder auf, mit der das Programm beendet wurde. Eine Zufallssortierung ist somit absolut überflüssig. Aber wie ich bereits sagte, jeder wie er mag.

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 7 Stunden schrieb gmd:

...... reduziert werden. Solche posts verhindern dass man ueberhaupt etwas posted was ueber 1+1 hinausgeht.  Wenn du nicht einverstanden bist dann sende eine PN und poste so etwas nicht oeffentlich, macht dich nicht gerade sympathisch, wenn dir daran ueberhaupt etwas liegt.

Vielleicht befolgst du besser deine eigenen Lehren. Mit der feststellung betreffend sympathy liegst du richtig.........dich betreffend (n).

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

vor 12 Stunden schrieb HaNNoveraNer:

Da braucht es auch kein Beispiel

Hi Thomas

Doch! Es waere, gerade fuer Lua unbedarfte, erheblich einfacher wenn sie deine, nun ausfuehrlich in verstaendlicher sprache gemachten erleuterungen (y), eben auch an deiner demo betrachten und testen koennen. Waehrend du so einen script mit verbundenen augen im dunkeln hinter deinem ruecken fehlerfrei ins keyboard haemmerst koennen andere selbst unter grellem scheinwerferlicht mit dem keyboard direkt vor den augen noch fehleingaben produzieren. Dann funzt es nicht und daran ist dann wieda Lua schuld.

Cheers

Tom

Link zu diesem Kommentar
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto besitzen, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen.

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden
×
×
  • Neu erstellen...