Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.
Aufgabe 12.4 SnakeSort
Bei der d) bekomme ich es einfach nicht ohne Hilfsfunktion hin:
… .dropWhile((Matrix, Matrix) => Boolean = x => x._1 != x._2) …
liefert Wrong number of Arguments expectet 1
und
… .dropWhile(((Matrix, Matrix)) => Boolean = x => x._1 != x._2) …
liefert not a formal legal paramenter
es funktioniert allerdings:
def isNotEqual: ((Matrix, Matrix)) => Boolean = x => x._1 != x._2
… .dropWhile(isNotEqual) …
meine Frage: Dürfen wir uns eigentlich Hilfsfunktionen schreiben?
2te Frage müssen wir bei der a) aufwendiger parallelisieren als einfach nur ein .par anzuhängen?
Denn wenn ich das tue sortiert er bei mir manchmal nicht richtig.
Ja.
Wenn .par Sinn macht, würde ichs verwenden :-P. Wenn nicht, dann nicht.
Okay es läuft jetzt parallel ich hatte vergessen das .toList noch einzufügen. Wozu braucht man das .toList eigentlich in Verbindung mit .par habe dazu keine Erklärung in den Folien gefunden.
Die Fehlermeldung wenn man .toList weglässt lautet:
type mismatch:
found scala.collection.parallel.immutable.ParSeq[Int]
required: SnakeSortSkeleton.Row
(which expands to) List[Int]
WAaaaghtze
was soll passieren, wenn m_1 == m_2 != m_3 gilt?? Beispiel: eingabe einer Zeilenweise Sortierten Matrix
List(List(1,2), List(3,4))
Ein Sequenz ist nun mal keine Liste.
scala.collection.parallel.immutable.ParSeq[Int] != scala.collection.immutable.List[Int]
In Java sind Objekte auch nicht einfach identisch wenn sie einen anderen Typ haben.
Auf Folie 13-4 steht übrigens, dass sich der Typ durch par ändert.
Da du freundlicherweise hier gerade die Lösung der Aufgabe erklärt hast,
haben wir beschlossen, auf die 12.4. a) keine Punkte zu geben <_<.
Die Punkte werden auf die anderen Teilaufgaben verteilt.
Edit:
Wenn ich dich richtig verstehe, wäre in deinem Beispiel m_1 != m_2, da zuerst nach der Zeile sortiert wird.
List(List(1,2), List(3,4)) → List(List(1,2), List(4,3))
Eine Eingabe der Form List(List(1,2), List(4,3)) wird in der Aufgabenstellung ausgeschlossen ;).
ok, mein fehler:
ich meinte eig. sowas wie die abbgebildete Matrix m_1 im beispiel der aufgaben stellung, die währe ja nach dem zeilensortieren identisch → würde abbrechen.
von ausschluss steht in der aufgabenstellung eig. nix (zumindest hab ich nix gefunden)
heißst unsortiert jetzt,
dass wir davon ausgehen können, dass sowohl spalten als auch zeilen jeweils unsortiert sind
Die Zeilen sind unsortiert, die Spalten spielen keine Rolle. Es geht auch nur um die Eingabematrix.
ok, danke
Dieser Hinweis führt dazu, dass auf jeden Fall mindestens ein Schritt ausgeführt wird und damit die Implementierung leichter wird, da man keine Startprüfung machen muss, ob die Eingangsmatrix nicht schon sortiert ist.
Frage zur b)
Was heißt abwechselnd zeilenweise auf- bzw. absteigend? Heißt das, beim ersten Aufruf von von [m]sortRows(m)[/m] wird aufsteigend sortiert, beim zweiten Aufruf absteigend?
Dann müsste man sich ja einen Zähler speichern, was zu einem Seiteneffekt führt…
Das geht über den Listenindex. Evtl. hat ja die API eine Funktion die dir den Wert und den Index zurückgibt
Ja, dass soll es heißen. Es darf zur Lösung auf keinen Fall ein Seiteneffekt mittels eines veränderbaren Objektes (mutable) oder var erzeugt werden.
Man kann es rein funktional lösen…
Ah, jetzt habe ich die Frage erst verstanden: innerhalb von sortRows(m) sollen alle Zeilen der Matrix m sortiert werden und zwar so wie beschrieben, immer abwechselnd auf- bzw. absteigend. Es soll sich kein Zustand außerhalb von sortRows gemerkt werden. sortRows soll sich bei gleichem Eingabeparameter immer gleich verhalten.
Hallo,
wie kann man denn hier seine Implementierung testen, beziehungsweise: ist das überhaupt möglich, bei SnakeSort???
Indem man sich eine beliebige Matrix erstellt und schaut, ob das richtige herauskommt. Z.B. kann man die Beispielmatrix aus der Angabe verwenden.
Genau das ist ja mein Problem, irgendwie kann ich keine Matrix erstellen
Kann man auch irgendwie sehen, ob ausreichend parallelisiert ist???
val m = List[List[Int]](List[Int](6,3,7), List[Int](1,9,5), List[Int](2,8,4))
Parallelisierung theo an der cpu auslastung aber dazu ist das beispiel zu klein.
Hi
wollt mal wissen was passiert wenn der scala code sich bei einer abgabe sich nicht laden lässt? 0 Punkte?
Weil mein Problem ist, dass das import irgnedwie nicht funktioniert. Wenn ich zuerst das skeleton lade und dann das SnakeSort läuft mein code und sortiert brav.
Wenn ich aber in SnakeSort das Skeleton importiere dann bekomme ich ca. 15 Fehler und der erste ist
not found: value SnakeSortSkeleton
ich hab auch sicher keinen Tippfehler oder sowas (hab’s extra mit copy-paste rein damit das nicht sein kann).