mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Sa 27.04.2024 03:10 Benutzername: Passwort: Auto-Login

Thema: Mechanismus um Pärchen zu bilden vom 08.11.2013


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> Mechanismus um Pärchen zu bilden
Seite: Zurück  1, 2, 3, 4, 5
Autor Nachricht
DEKONSTRUKTIV

Dabei seit: 22.06.2009
Ort: bln
Alter: -
Geschlecht: -
Verfasst Di 12.11.2013 12:44
Titel

Antworten mit Zitat Zum Seitenanfang

und das eine ungerade anzahl von menschen nich durch 2 teilbar is, liegt in der natur der sache.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
fyll

Dabei seit: 20.09.2003
Ort: Augsburg
Alter: 39
Geschlecht: Männlich
Verfasst Di 12.11.2013 13:17
Titel

Antworten mit Zitat Zum Seitenanfang

Viel ändert das aber auch nicht.
Angenommen, du hast so nen Array:
Code:
$leute = [
   'Klaus' => [],
   'Maria' => [],
   'Dörte' => [],
   'Fin' => [
      'Klaus',
      'Dörte'
   ],
   'John' => []
];

brauchst dann eine Funktion, die dir assocArrays shuffelt (gibts genug Ansätze in den Kommentaren auf php.net bei shuffle()).

Danach würde ich ne Funktion basteln, die dir die Paare ausgibt - oder eben false, falls eine der Bedingungen nicht passt. Die lässt mit while() so oft durchrennen, bis halt mal kein false zurückkommt... *bäh*
Code:
function paare($leute)
{
   $partner = $leute;
   $ausgabe = '';
   shuffle_assoc($partner);

   foreach ($leute as $derTyp => $magDieNicht) {
      $seinPartner = key($partner);

      if ($seinPartner === $derTyp || in_array($seinPartner, $magDieNicht)) {
         return false;
      }

      $ausgabe .= $derTyp . ' -> ' . $seinPartner . '<br>';
      unset($partner[$seinPartner]);
   }

   return $ausgabe;
}
(Achtung - ungetestet!)
  View user's profile Private Nachricht senden
Anzeige
Anzeige
top
Moderator

Dabei seit: 25.11.2003
Ort: Hedwig Holzbein
Alter: 52
Geschlecht: Männlich
Verfasst Di 12.11.2013 13:40
Titel

Antworten mit Zitat Zum Seitenanfang

So wie ich das Beispiel hier verstehe werden auch keine richtigen Pärchen gesucht:
Nimroy hat geschrieben:
...

Gewünschtes Ergebnis:
Klaus kümmert sich um John
Maria kümmert sich um Fin
Dörte kümmert sich um Klaus
Fin kümmert sich um Dörte
John kümmert sich um Maria


Im Prinzip also eine Zuweisung wie beim Wichteln bei dem jeder etwas schenkt und jeder beschenkt wird. (Und sich nicht selbst beschenken soll.)

Es müsste also reichen, wenn du deine Liste einmal mischt, (nach aufeinanderfolgenden Namen suchst die nicht nacheinander stehen sollen um die Liste so lange neu zu mischen bis es passt,) um dann jedem Eintrag den Eintrag darunter zuzuweisen.
(Der letzte Eintrag verweist dann wieder auf den ersten.)

Was halt nicht mehr passieren kann, ist die Möglichkeit, dass zufällig zwei Teilnehmer sich gegenseitig beschenken. Da musst du wissen ob das ein Nachteil ist. * Keine Ahnung... *

Also z. B. vor dem Mischen:

A(nton)
B(erta)
C(harli)
D(ora)
E(rna)
F(rida)
G(ünter)

Nach dem Mischen wird jeder darunter liegende Name als Zuweisungsziel definiert:

B(erta) -> D(ora)
D(ora) -> F(rida)
F(rida) -> C(harli)
C(harli) -> G(ünter)
G(ünter) -> A(nton)
A(nton) -> E(rna)
E(rna) -> B(erta)
  View user's profile Private Nachricht senden
pantonine

Dabei seit: 03.03.2011
Ort: gehen Sie bitte weiter…
Alter: -
Geschlecht: -
Verfasst Di 12.11.2013 13:56
Titel

Antworten mit Zitat Zum Seitenanfang

Zitat:
Gewünschtes Ergebnis:
Klaus kümmert sich um John
Maria kümmert sich um Fin
Dörte kümmert sich um Klaus
Fin kümmert sich um Dörte
John kümmert sich um Maria
Ist schon wieder ne komplett neue Anforderung. Man merkt dass DU kein Programmierer bist. Denn Pärchen sind das nicht. Im Prinzip ist das eine verkettete Liste.

Zitat:
(nach aufeinanderfolgenden Namen suchst die nicht nacheinander stehen sollen um die Liste so lange neu zu mischen bis es passt,)
Problematischerweise erschaffst Du im worst case so eine Endlosschleife. D.h. Terminiertheit ist nicht gegeben. Das kann zufällig passieren (Shuffle) oder dadurch, dass die Anforderungen (A darf nicht mit B) nicht erfüllbar sind. In dem Fall würfelt Dein Automat unendlich.

Zuletzt bearbeitet von pantonine am Di 12.11.2013 14:01, insgesamt 1-mal bearbeitet
  View user's profile Private Nachricht senden
Nimroy
Community Manager
Threadersteller

Dabei seit: 26.05.2004
Ort: zwischen Köln und D'dorf
Alter: 46
Geschlecht: Männlich
Verfasst Di 12.11.2013 14:48
Titel

Antworten mit Zitat Zum Seitenanfang

okay, dann war das ein Misverständnis. Aber mit dem Beispiel des gewünschten Ergebnisses ist das jetzt aus der Welt geräumt, oder?

Die Endlosschleife sehe ich auch als Möglichkeit. Automat läuft durch, jeder hat einen bedingungsgemäßen Partner, der letzte (Z) wird dem ersten (A) zugewiesen, was jetzt dummerweise nicht sein darf als Bedingung. Dann müsste man die Paarungen verwerfen und neu zuweisen. Damit das nicht endlos läuft einen Counter setzen, der die Gesamtzahl der Durchläufe zählt und ab einer definierten Anzahl abbricht. Hab zur Zeit kein Gefühl, wie sich solche Abbrüche im Verhältnis zur Listenlänge verhalten.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
 
Ähnliche Themen [C4D] Diamanten zufällig ein Wort bilden lassen
Neues Thema eröffnen   Neue Antwort erstellen Seite: Zurück  1, 2, 3, 4, 5
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.