Übungen: Pattern Matching

Für den geneigten Leser hier einige Übungen zu Pattern Matching. Versucht alle Aufgaben möglichst mit dem „functional way“ zu lösen, d.h. verwendet unveränderliche Objekte. Schaut, dass ihr also anstelle von Schleifen die gute alte Rekursion benutzt, wenn möglich sogar Tail-Rekursion. U.u. könnt ihr auch mit der for-Expression auf eine Lösung kommen. Für die meisten Aufgaben gibt es eine entsprechende Methode in den Collections, versucht aber möglichst ohne diese auszukommen (ausgenommen sind davon die Methoden um Objekte zu einer Liste hinzuzufügen). Ihr könnt mit Hilfe der vorgefertigten Methoden aber eure eigene Lösungen vergleichen.

  1. Ermittle aus einer List[Int] die Anzahl der Elemente. (xs.size)
  2. Ermittle aus einer List[Int] die Summe aller Elemente. (xs.sum)
  3. Spiegle eine List[Int] so, dass ein Palindrom entsteht. Eine List(1, 2, 3) soll also List(1, 2, 3, 3, 2, 1) ergeben.
  4. Füge zwischen jedes Element aus einer List[String] einen weiteren String ein, was z.B. ein Trennzungszeichen sein kann. Eine List(„foo“, „bar“, „hello“, „world“) soll mit den Trennungszeichen “ : “ den String „foo : bar : hello : world“ ergeben. Beachte, dass keine Trennungszeichen am Anfang und zum Schluss kommen (xs mkString “ : „).
  5. Ebne verschachtelte Listen zu einer einzigen Liste. Aus dem Konstrukt „List(List(1, 2, 3), 4, 5, List(6), Nil, List(7, List(8, 9)))“ soll „List(1, 2, 3, 4, 5, 6, 7, 8, 9)“ entstehen (xs.flatten).
  6. Vervielfältige ein Element aus einer Liste eine bestimmte Anzahl mal. Aus „List(1, 5, 5, 3, 9)“ soll mit dem Multiplikator 3 die Liste „List(1, 1, 1, 5, 5, 5, 5, 5, 5, 3, 3, 3, 9, 9, 9)“ entstehen.
  7. Gruppiere die Elemente einer Liste zu Unterlisten. Eine Liste mit den Elementen 1 bis 14 und der Gruppengröße 4 soll  „List(List(1, 2, 3, 4), List(5, 6, 7, 8), List(9, 10, 11, 12), List(13, 14))“ ergeben. Falls die Elemente nicht aufgehen, werden sie einfach so zum Schluss hinzugefügt (xs grouped n).
  8. Lösche alle Duplikate aus einer Liste. Schaue, dass dabei die Reihenfolge der Element nicht vertauscht wird. Eine Liste mit den Elementen „1, 1, 1, 2, 4, 7, 2, 8, 3, 6, 2“ soll „List(1, 2, 4, 7, 8, 3, 6)“ ergeben.

Hier geht es zu den Lösungen.

Advertisements

No comments yet

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: