Mik3e
Erfahrenes Mitglied
Hi zusammen,
Vorweg, dieser Post ist wahrscheinlich eher mathematisch als technisch ein Problem und sicher nicht sonderlich simpel zu lösen. Ich hab mir schon länger mit Kollegen mein Hirn zermattert, wir kommen aber zu keiner eleganten Lösung.
Aufgabenstellung:
Es gibt einen Sitzplan (in Form eines 2-dimensionalen Arrays). Davon sind gewisse Plätze verfügbar (auf der Beispielskizze grün), andere sind nicht buchbar (auf der Beispielskizze rot).
Der Kunde gibt dem System nur bekannt, welche Anzahl an Tickets er haben möchte, und das System soll ihm nach Möglichkeit zusammenhängede Plätze zurückliefern.
Dabei müssen folgende Regeln beachtet werden:
1. Der beste Platz ist links und oben (Skizze: Platz 1/1). Von dort soll die Berechnung beginnen.
2. Die zurückgelieferten Plätze müssen nach folgender Priorisierung zusammenhängend sein (wobei n die vom User gewünschte Platzanzahl repräsentiert):
a) Versuche n nebeneinanderliegende Plätze zu finden. Ist die Suche erfolglos,...
b) versuche n hintereinanderliegende Plätze oder eine Kombination aus nebeneinanderliegenden Plätzen und hinterinanderliegenden Plätzen zu finden. Ist auch diese Suche erfolglos...
c) versuche n diagonal verbundene Plätze zu finden. Ist auch das erfolglos
d) liefere n Plätze mit den geringsten Zwischenabständen zurück, die am besten positioniert sind.
Lösungsansatz & Beispiele:
Klingt recht kompliziert, ist es nach menschlichem "Hausverstand" aber eigentlich nicht.
Hier ein paar Beispiele, passend zu angefügter Skizze:
WICHTIG: Rot makierte Plätze auf der Skizze sind nicht verfügbar!
Beispiel 1: Der Kunde möchte 2 Plätze
Das System muss ihm Platz 1/1 und Platz 1/2 zurückliefern
Beispiel 2: Der Kunde möchte 3 Plätze
Das System muss ihm Platz 3/2, 3/3 und 3/4 zurückliefern. (da nebeneinander liegende Plätze höher priorisiert sind als diagonal oder vertikal verbundene).
Beispiel 3: Der Kunde möchte 4 Plätze
Das System muss ihm Platz 3/2, 3/3, 3/4 und 2/4 liefern (kombination aus horizontal und vertikal)
Beispiel 4: Der Kunde möchte 5 Plätze
Das System muss ihm Platz 2/4, 2/5, 3/2, 3/3 und 3/4 zurückliefern.
Beispiel 4: Der Kunde möchte 15 Plätze
Das System muss ihm FALSE zurückliefern (da nicht mehr 15 Plätze verfügbar sind).
Wie Ihr seht, ist es mit Hausverstand eigentlich eine recht simple sache, dass ganze aber in eine Array-Berechnung umzulegen, ist nicht einfach...
Vielleicht habt Ihr ein paar Ideen oder Denkanstöße, wäre toll.
Danke & LG
Mike
Vorweg, dieser Post ist wahrscheinlich eher mathematisch als technisch ein Problem und sicher nicht sonderlich simpel zu lösen. Ich hab mir schon länger mit Kollegen mein Hirn zermattert, wir kommen aber zu keiner eleganten Lösung.
Aufgabenstellung:
Es gibt einen Sitzplan (in Form eines 2-dimensionalen Arrays). Davon sind gewisse Plätze verfügbar (auf der Beispielskizze grün), andere sind nicht buchbar (auf der Beispielskizze rot).
Der Kunde gibt dem System nur bekannt, welche Anzahl an Tickets er haben möchte, und das System soll ihm nach Möglichkeit zusammenhängede Plätze zurückliefern.
Dabei müssen folgende Regeln beachtet werden:
1. Der beste Platz ist links und oben (Skizze: Platz 1/1). Von dort soll die Berechnung beginnen.
2. Die zurückgelieferten Plätze müssen nach folgender Priorisierung zusammenhängend sein (wobei n die vom User gewünschte Platzanzahl repräsentiert):
a) Versuche n nebeneinanderliegende Plätze zu finden. Ist die Suche erfolglos,...
b) versuche n hintereinanderliegende Plätze oder eine Kombination aus nebeneinanderliegenden Plätzen und hinterinanderliegenden Plätzen zu finden. Ist auch diese Suche erfolglos...
c) versuche n diagonal verbundene Plätze zu finden. Ist auch das erfolglos
d) liefere n Plätze mit den geringsten Zwischenabständen zurück, die am besten positioniert sind.
Lösungsansatz & Beispiele:
Klingt recht kompliziert, ist es nach menschlichem "Hausverstand" aber eigentlich nicht.
Hier ein paar Beispiele, passend zu angefügter Skizze:
WICHTIG: Rot makierte Plätze auf der Skizze sind nicht verfügbar!
Beispiel 1: Der Kunde möchte 2 Plätze
Das System muss ihm Platz 1/1 und Platz 1/2 zurückliefern
Beispiel 2: Der Kunde möchte 3 Plätze
Das System muss ihm Platz 3/2, 3/3 und 3/4 zurückliefern. (da nebeneinander liegende Plätze höher priorisiert sind als diagonal oder vertikal verbundene).
Beispiel 3: Der Kunde möchte 4 Plätze
Das System muss ihm Platz 3/2, 3/3, 3/4 und 2/4 liefern (kombination aus horizontal und vertikal)
Beispiel 4: Der Kunde möchte 5 Plätze
Das System muss ihm Platz 2/4, 2/5, 3/2, 3/3 und 3/4 zurückliefern.
Beispiel 4: Der Kunde möchte 15 Plätze
Das System muss ihm FALSE zurückliefern (da nicht mehr 15 Plätze verfügbar sind).
Wie Ihr seht, ist es mit Hausverstand eigentlich eine recht simple sache, dass ganze aber in eine Array-Berechnung umzulegen, ist nicht einfach...
Vielleicht habt Ihr ein paar Ideen oder Denkanstöße, wäre toll.
Danke & LG
Mike