Advertisement
Guest User

Untitled

a guest
Jul 22nd, 2017
58
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 1.00 KB | None | 0 0
  1. val n = 16
  2. val kinder = (0 until n).toList
  3.  
  4. def findeMöglichkeiten(plätze: Map[Int, Int], kinder: List[Int]): Set[Map[Int, Int]] = {
  5.   if(kinder.isEmpty)
  6.     Set(plätze) // Wenn keine kinder mehr zuzuordnen sind, dann gib die Platzzuordnung zurück.
  7.   else {
  8.     val kind = kinder.head
  9.     val möglichkeiten = Seq((if(kind == 0) n - 1 else kind - 1), kind, (kind +1) % n)
  10.     val neuePlätze = (Set[Map[Int, Int]]() /: möglichkeiten) {
  11.       (menge, möglichkeit) =>
  12.         if(plätze.contains(möglichkeit)) // Wenn Platz bereits belegt ist,
  13.           menge                          // einfach bisherige Menge zurückgeben
  14.         else      // Sonst füge die neue Zuordnung (möglichkeit -> kind) hinzu.
  15.           menge + (plätze + (möglichkeit -> kind))
  16.     }
  17.     neuePlätze.flatMap { // Kombiniere alle Möglichkeiten der Rekursiven Aufrufe
  18.       findeMöglichkeiten(_, kinder.tail)
  19.     }
  20.   }
  21. }
  22.  
  23. val alleMöglichkeiten = findeMöglichkeiten(Map(), kinder).map(_.swap)
  24. alleMöglichkeiten.size
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement