Random List

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Muttonhead
Beiträge: 20
Registriert: 25.06.2017 14:06
Computerausstattung: I7

Random List

Beitrag von Muttonhead »

Hallo @all:
Ich probier mal wieder ein wenig herum und habe eine Frage zu Listen.
Es gibt eine gut funktionierende Sortier-Funktion in PB für Listen.
Obwohl ich ein eigenes Listenhandling (so mit Adressengedööns, previous,next oder parent,child usw.) bevorzuge. Also wenn man was fasch machen kann, dann auch richtig:)

Zurück zur eigentlichen Frage meinerseits: Hat jemand schon mal ne Art "RandomList"-Prozedur für PB-native Listen realisiert?
oder hilft dabei einfach *RTFM*?

Mutton
PureBasic 5.62 (Windows 10 Home - x64) | i7 7700HQ | 32GB | HD Graphics 630 / GeForce GTX 1060 Max-Q
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Random List

Beitrag von RSBasic »

Hallo Muttonhead,

vielleicht hilft dir dieser Thread: viewtopic.php?f=16&t=23928
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 6999
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: Random List

Beitrag von STARGÅTE »

Dafür gibt es nativ: RandomizeList()
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
Benutzeravatar
Muttonhead
Beiträge: 20
Registriert: 25.06.2017 14:06
Computerausstattung: I7

Re: Random List:solved

Beitrag von Muttonhead »

vielen Dank euch beiden...
@STARG...((whatAE0).. ich bekomms grad nicht hin :) ) : genau nach sowas hab ich gesucht... in der Hilfe ist bei List nicht verlinkt

@RSBASIC: als Inspiration für ein ordentlich geschütteltes Index-Array als Jumplist. Finde ich iwie reizvoll.

Wie gesagt, dank euch beiden... solved!

Mutton
PureBasic 5.62 (Windows 10 Home - x64) | i7 7700HQ | 32GB | HD Graphics 630 / GeForce GTX 1060 Max-Q
Benutzeravatar
mk-soft
Beiträge: 3700
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: Random List

Beitrag von mk-soft »

STARGÅTE hat geschrieben:Dafür gibt es nativ: RandomizeList()
Es gibt Sachen in Purebasic die ich noch gesehen habe...

Wofür braucht man den sowas?
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
Muttonhead
Beiträge: 20
Registriert: 25.06.2017 14:06
Computerausstattung: I7

Re: Random List

Beitrag von Muttonhead »

@mk: keine ahnung, derzeit versuch ich mich grad an einem Versuchsträger für einem Bin-Packing Problem.
Ich will einfach mal via BruteForce + Zeitlimiter versuchen, ein Optimum zu erreichen, dafür benötige ich so eine Random-Funktion. Ich weiß, andere haben darüber ne Doktorarbeit geschrieben.

Mutton
Zuletzt geändert von Muttonhead am 03.08.2019 08:30, insgesamt 2-mal geändert.
PureBasic 5.62 (Windows 10 Home - x64) | i7 7700HQ | 32GB | HD Graphics 630 / GeForce GTX 1060 Max-Q
Derren
Beiträge: 557
Registriert: 23.07.2011 02:08

Re: Random List

Beitrag von Derren »

mk-soft hat geschrieben:
STARGÅTE hat geschrieben:Dafür gibt es nativ: RandomizeList()
Es gibt Sachen in Purebasic die ich noch gesehen habe...

Wofür braucht man den sowas?

Dito :D

kA. vielleicht für Spiele. Kartenspiele z.B. Oder eine Shuffle-Funktion für einen Player
Signatur und so
Nino
Beiträge: 1300
Registriert: 13.05.2010 09:26
Wohnort: Berlin

Re: Random List:solved

Beitrag von Nino »

Muttonhead hat geschrieben:genau nach sowas hab ich gesucht... in der Hilfe ist bei List nicht verlinkt
Aber sicher ist das in der Hilfe zu Listen verlinkt: https://www.purebasic.com/german/docume ... index.html
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Random List

Beitrag von diceman »

Eine Möglichkeit ist es natürlich, die Liste zu randomisieren, und dann einfach mit FirstElement(myList()) das erste Element auszuwählen. Alternativ, wenn du dir ein zufälliges Element aus einer Liste herauspicken möchtest (meine bevorzugte Methode), geht das so:

Code: Alles auswählen

SelectElement(myList(), Random(ListSize(myList())-1))
Die -1 ist wichtig, da SelectElement() das erste Element mit 0 beziffert, ListSize() aber nur eine 0 zurückgibt, sofern die Liste leer ist); das heißt, wenn du bei einer Liste mit 5 Elementen mittels SelectElement() "Das fünfte Element" auswählen würdest, hätte dieses den Index 4, aber ListSize() würde bei einer Abfrage der Listengröße natürlich weiterhin eine 5 zurückgeben.
Ich habe mir für diese Zwecke ein Macro gebastelt (sehr hilfreich für pcg a.k.a. procedural content generation):

Code: Alles auswählen

Macro _SelectRandomElement(thisList)
    SelectElement(thisList, Random(ListSize(thisList)-1))
EndMacro
Eine strukturierte Liste nach der Größe eines bestimmten Attributes zu sortieren (im nachfolgenden Beispiel in aufsteigender Reihenfolge), müßte folgendermaßen gehen:

Code: Alles auswählen

Structure MY_STRUCT
    index.i
    someAttribute.i
EndStructure
NewList myList.MY_STRUCT()

For a = 1 to 10
    AddElement(myList())
    myList()\index = a
    myList()\someAttribute = Random(100,1)
Next 

SortStructuredList(myList(), #PB_Sort_Ascending, OffsetOf(MY_STRUCT\someAttribute), TypeOf(MY_STRUCT\someAttribute))

ForEach myList()
    Debug "" + myList()\index + ". " + myList()\someAttribute
Next
Zuletzt geändert von diceman am 05.08.2019 17:06, insgesamt 3-mal geändert.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Benutzeravatar
diceman
Beiträge: 347
Registriert: 06.07.2017 12:24
Kontaktdaten:

Re: Random List

Beitrag von diceman »

//EDIT:
Ey, ich bin blöd.
Warum sagt mir keiner, daß das da oben im Code NewList myList.MY_STRUCT() heißen muß, und nicht Define myList.MY_STRUCT() ... :roll: :wink:
Sorry, habe den Code oben von der Arbeit aus verfasst, ohne aktive PureBasic-Umgebung, in der ich das hätte testen können.
Sollte jetzt alles stimmen.
Now these points of data make a beautiful line,
And we're out of Beta, we're releasing on time.
Antworten