Denksport: Radialer Bestplatz-Algorithmus

Hi,

ich hab mal eben in Flash was zusammengestoppelt (siehe Anhang). Scheint halbwegs Deinen Anforderungen zu entsprechen, ist (was den Code anbelangt) aber weit davon entfernt, optimiert und gut lesbar zu sein. ( ;) ) - Bei Interesse optimier ich's Dir aber gerne (im Moment fehlt mir die Zeit) und schicke es Dir als Pseudocode zu.

Gruß

P.S.: Anzahl in das Textfeld eingeben und "GO" drücken.
.
 

Anhänge

Vorweg: Sorry, musste gestern abend schon weg (daher keine Rückmeldung mehr) :)

@Irgendjemand_1:
Nein, so leicht ist das leider nicht...
Klar werden die Plätze normalerweise links oben begonnen (ist auf dem Beispiel vielleicht etwas schlecht abgebildet.

Zu einzelnen Plätzen kommt es zum Beispiel bei folgender Situation:
Kunde 1 bestellt 3 Plätze -> Bekommt 1/1, 1/2 und 1/3
Kunde 2 bestellt ebenfalls 3 Plätze -> muss 2/1, 2/2, 2/3 bekommen (da in der ersten Reihe nur noch 2 nebeneinanderliegende Plätze verfügbar sind.

Und.. Tataa.. es sind in der ersten Reihe schon zwei "alleinstehende" Plätze vorhanden.
Und genau durch diesen Ablauf, kann es zu unterschiedlichsten Belegungen kommen.

@Datic:
Dein Flash werde ich mir gleich reinziehen.. Hab auch schom mit einem Test-Array in PHP begonnen :)

@Alle:
Ich mach das nicht zum Spass, sonder weil ich es für eine Applikation brauche (Bestplatzreservierung) :)

Ciao,
Mike
 
Aber bei welchem Einsatzgebiet bekommt man eigentlich als "bestmöglichen Platz" einen Sitz in der Ecke? Ich kann mir grad nichts vorstellen, wo nicht ein Platz in der Mitte höherwertiger ist als am Rand.
 
Mhm du brauchst das also richtig.
Was war denn schon dein Ansatz? Du hast dann ja sicher schon was - wenigtens - versucht?
Ich stell mir das nicht allzu schwer vor. Ein paar Rehnungen, mehr sollte das auch nicht sein.
 
Eine "Teilung" der Plätze kann auch dann auftreten, wenn zb. in einer reihe gewisse Plätze gesperrt sind (nicht für den Verkauf freigegeben).

Das der Beste Platz links oben ist, habe ich nur hier für das Beispiel angenommen (um die Sache nicht zusätzlich zu verkomplizieren). In der richtigen Applikation kann der Systemadministrator dann festlegen, wo der Verkauf begonnen werden soll (insgesamt 8 Punkte -> An jeder ecke sowie auf den Verbindungsgeraden zwischen den Ecken).

Mein Ansatz wäre gewesen, die Abfrage in mehrere Funktionen zu gliedern:

1.Funktion -> Finde n nebeneinanderliegende Plätze
wenn 1. Funktion == false gehe zu Funktion 2
2. Funktion - Finde n hintereinanderliegende Plätze
usw..

Das Problem hierbei ist eigentlich, dass bereits bei Funktion 2 eine Kombination aus nebeneinander und hintereinanderliegenden Plätzen besser wäre (3 Plätze hintereinander und einer dahinter ist zu 99% besser als 4 hintereinanderliegende).

LG
Mike
 
Du meintest 3 Plätze nebeneinander und 1 dahinter?
Hast dich wohl verschrieben ;)

Sicher ist das besser.
Wenn die 1. Funktion false zurückgibt, dann kommt ja die 2., wenn ich das richtig verstehe.
Dann teilst du die Zahl so auf, dass es, wenn es
a) eine ungerade Zahl ist: So aufteilst, dass die 2 Zahlen fast gleichgroß sind (z.B 7 = 3 und 4)
b) eine gerade Zahl ist: So aufteilst, dass beide gleichgroß sind.

Dann rufst du die 1. Funktion auf, ob beide (! Vielleicht solltest du einen optionalen Paremeter einbauen, der erlaubt 2 Zahlen zu "testen") Zahlen "reinpassen".
Wenn nicht kommst du wieder mit beiden Zahlen zu der 2. Funktion, allerdings kommt da schon das Problem, dass du jetzt mehrere optionale Parameter in Funktion 1 brauchst.
Naja aufjedenfall um es zu Ende zu führen: Wenn Funktion 2 eine der Zahlen nicht mehr teilen kann --> Summe ausrechnen und weiter in Funktion 3.

Also so vielleicht irgendwie :P
Wenn ich nacher mal Lust+Zeit hab, versuch ich das vielleicht sogar mal.
 
Im Prinzip braucht man ja nicht n-Parameter sondern einen einzigen, an den man einen Array an gesuchten Plätzen übergibt.

Geht Funtkion 1 nicht auf wird der zweidimensionale Array auf zwei reihen gesplittet.
Geht es damit noch immer nicht, wird er auf drei Reihen aufgeteilt.

Also zu Beginn (wenn der Kunde 3 Plätze haben möchte):
$testarray[0]=reihe1
$testarray[1]=reihe1
$testarray[2]=reihe1

Findet er nicht 3 nebeneinanderliegende in einer einzigen Reihe, muss der Array wie folgt umgebaut werden:
$testarray[0]=reihe1
$testarray[1]=reihe1
$testarray[2]=reihe2

Aber auch das ist nicht wirklich schön.. vor allem ist das ein Performancefresser hoch 3...
Es wird doch Algorithmen geben (so wie der angesprochene Floodfill Algorithmus), der so ähnlich ist wie zb Bubble-Search...

Eine bestimmte Anzahl an verbunden Elementen in einem Array finden ist ja vermutlich doch nicht eine sooo ausgefallene Anforderung :)
 
@Datic:
Echt genial! Ich hab mir zwar den Source noch nicht angesehen (weil ich Flash nicht installiert habe :), aber das SWF funktioniert toll..

Kannst Du mir vielleicht mal die Funktionen (Methoden) posten
Damit wäre mir sehr geholfen..

Danke & Ciao,
Mike
 
Hm Arrays sind schonmal ein guter Ansatz.
Dann hat man kein Parameter-Problem. Ich würd's aber so machen wie ich vorgeschlagen habe, nur auf Arrays umgebaut. Damit man dann anstatt 2 Parameter einfach 2 Elemente hat (beim aufteilen der Zahlen)
 
Sieh dir mal das SWF von Datic an..
Das kann genau das, was ich brauche (Vorausgesetzt es ist kein Fake-Code dahinter :)

Nur ein paar Feinheiten müssten dann noch gemacht werden, aber sonst sieht das sehr brauchbar aus...

Ich hoffe er ist bald wieder mal online und kann mir den Source posten :))
 
Zurück