Skip to content

Exercise 17 - Strings and Objects

/*
* Die Weihnachtsvorbereitungen starten dieses Jahr sehr früh.
* Da der Weihnachtsmann den Stress kurz vor Weihnachten
* verringern will, startet er bereits jetzt mit der Auswertung
* von Wunschzetteln, damit die Geschenke frühzeitig besorgt werden können.
*
* Die Elfen haben ihm geholfen und alle bereits bekannten Wünsche
* in eine Textdatei zusammengefügt.
* Der Text hat das Format:
*
* Vorname Nachmname:
* - Wunsch 1
* - Wunsch 2
* - ...
* Vorname2 Nachname2:
* - Wunsch 3
* - Wunsch 4
* - ...
* ...
*
* Um dem Weihnachtsmann zu helfen die Übersicht zu behalten,
* wollen sie ein JavaScript Programm schreiben, das die Wunschliste
* einliest und für den Weihnachtsmann besser durchsuchbar macht.
*
* Dafür bekommen Sie einen Auszug der Textdatei in der Variable wishlist:
*/
let wishlist = `Maria Schmidt:
- Kamera
- Socken
Johann Müller:
- Kopfhörer
- Buch
- Einkaufsgutschein
Sophie Wagner:
- Puzzle
Maximilian Becker:
- Fußball
- Handyhülle
Laura Zimmermann:
- Kochbuch
- Einkaufsgutschein
Felix Schneider:
- Lautsprecher
Lea Hofmann:
- Mantel
- Buch
Jonas Meier:
- Zeichenstifte
- Streaming-Abonnement
Hannah Schulz:
- Einkaufsgutschein
David Richter:
- Fernglas
Lena Berger:
- Gemälde
Elias Keller:
- Fahrradschloss
- Powerbank
Sarah Schäfer:
- Kochkurs
Julia Koch:
- Zeitschrift
Simon Fischer:
- Tee
Sophia Wolf:
- Tagebuch
- Roman
Paula Braun:
- Einkaufsgutschein
Nico Herrmann:
- Trikot
Leonie Schmitz:
- Yoga-Kurs
- Buch
Tom Vogt:
- Survival-Kurs
Lisa Hartmann:
- Schmuck
Tim Bauer:
- Einkaufsgutschein
Emily Kaiser:
- E-Reader
Matthias Dietrich:
- Whisky
Anna Lehmann:
- Buntstifte
- Malbuch
Christian Wolff:
- Schach
Marie Schuster:
- Massage
Philipp Kaiser:
- Auto
Mia Brandt:
- Basteln
Finn Schulze:
- Film
Luisa Hofmann:
- Pasta
Jonas Vogel:
- Segeltour
Amelie Krüger:
- Inlineskates
Julian Weiß:
- Fernglas
Laura Sommer:
- Einkaufsgutschein
Benjamin Werner:
- Sudoku
Sophie Schreiber:
- Fallschirmsprung
Maximilian Neumann:
- Lautsprecher
Emily Schmidt:
- Garten
- Einkaufsgutschein
Antonia Meyer:
- Fotoalbum
- Dinner
Paul Winter:
- Kompass
- Survival-Kurs
Sarah Müller:
- Notizbuch
- Städtereise
David Richter:
- Kochzeitschrift`;
/*
* Schreiben Sie eine Funktion readWishlist(text).
* Der Parameter Text ist die bereits eingelesene Wunschliste als String.
* Die Funktion liest den gesamten Text ein und speichert die Daten
* in einem Array von Objekten.
* Jedes Element in dem Array enthält den Namen der Person und wiederum
* ein Array aller Wünsche der jeweiligen Person.
*
* Beispiel:
* Für diesen eingelesenen Text
*
* Sarah Müller:
* - Notizbuch
* - Städtereise
*
* wird diese Datenstruktur ermittelt
*
* [ {name: "Sarah Müller", wishes: ["Notizbuch", "Städtereise"]} ]
*/
function readWishlist(text) {}
let people = readWishlist(wishlist);
/*
* Um die Personen in dieser Liste nun besser suchen zu können,
* schreiben Sie eine Funktion findPerson(personName, people)
*
* Der erste Parameter - personName - ist der Name der gesuchten Person als String.
* Der zweite Parameter - people - ist das von Ihnen mit der Funktion readWishlist
* eingelesene Array aus Objekten.
*
* findPerson liefert das gesamte Objekt - inklusive Name und aller Wünsche -
* der gesuchten Person zurück.
*
* Beispiel:
* let p = findPerson("Sarah Müller", people);
* console.log(p.name, p.wishes); // Sarah Müller [ 'Notizbuch', 'Städtereise' ]
*/
function findPerson(personName, people) {}
console.log("Exercise 1");
console.log("----------");
let n1 = "Emily Schmidt";
let p1 = findPerson(n1, people);
console.log(n1, p1.wishes);
let n2 = "Johann Müller";
let p2 = findPerson(n2, people);
console.log(n2, p2.wishes);
console.log();
/*
* Mit den Funktionen von oben haben Sie dem Weihnachtsmann bereits
* stark geholfen einen besseren Überblick zu bewahren.
*
* Nachdem der Weihnachtsmann die Funktion ein wenig getestet hat kommt
* er mit einem Feature-Request auf Sie zu.
*
* Die bisherige Datenstruktur erlaubt es dem Weihnachtsmann sehr gut
* nach bestimmten Personen zu suchen und deren Wünsche zu sehen.
* Für die Beschaffung der Geschenke ist das aber nicht optimal.
* Da der Weihnachtsmann wissen möchte wie viele Exemplare der jeweiligen
* Geschenke beschafft werden müssen wünscht er sich, dass sie die Wunschliste
* in eine andere Datenstruktur einlesen.
* Der Weihnachtsmann hätte gerne eine Map, wobei das Geschenk selbst der
* Schlüssel der Map ist und der Wert ein Objekt, das angibt welche Personen
* sich das Geschenk gewünscht haben und eine Gesamtanzahl der zu besorgenden Exemplare
* angibt.
*
* Beispiel:
*
* Sarah Müller:
* - Baldur's Gate 3
* Norbert Winkler:
* - Baldur's Gate 3
*
* let wishlist = {};
* wishlist["Baldur's Gate 3"] = {
* people: ["Sarah Müller", "Norbert Winkler"],
* count: 2
* };
*
* Erstellen Sie die Funktion readWishes(text) die die Wunschliste
* nun in die neue Struktur einliest.
*/
function readWishes(text) {}
let wishes = readWishes(wishlist);
console.log("Exercise 2");
console.log("----------");
let w1 = "Einkaufsgutschein";
let l1 = wishes[w1];
console.log(w1, l1.people, l1.count);
let w2 = "Kopfhörer";
let l2 = wishes[w2];
console.log(w2, l2.people, l2.count);
console.log();
/*
* Die Elfen kommen ganz aufgeregt zum Weihnachtsmann.
* Da sie immer wieder Fälle haben, wo sich Kinder
* mehr als ein Exemplar desselben Geschenks wünschen
* haben sie das Format der Textdatei eigenständig angepasst.
*
* Es ist jetzt möglich optional hinter einem Wunsch
* anzugeben, wie oft man sich das jeweilige Geschenk wünscht.
*
* zB
* - Socken 2x
*
* Sie bekommen wieder einen neuen Auszug der Datei:
*/
let wishlistExtended = `Maria Schmidt:
- Kamera
- Socken 2x
Johann Müller:
- Kopfhörer
- Buch
- Einkaufsgutschein
Sophie Wagner:
- Puzzle 3x
Maximilian Becker:
- Fußball
- Handyhülle 3x
Laura Zimmermann:
- Kochbuch 5x
- Einkaufsgutschein
Felix Schneider:
- Lautsprecher
Lea Hofmann:
- Mantel
- Buch
Jonas Meier:
- Zeichenstifte 64x
- Streaming-Abonnement
Hannah Schulz:
- Einkaufsgutschein
David Richter:
- Fernglas
Lena Berger:
- Gemälde
Elias Keller:
- Fahrradschloss
- Powerbank 2x
Sarah Schäfer:
- Kochkurs
Julia Koch:
- Zeitschrift
Simon Fischer:
- Tee 365x
Sophia Wolf:
- Tagebuch
- Roman 3x
Paula Braun:
- Einkaufsgutschein
Nico Herrmann:
- Trikot 5x
Leonie Schmitz:
- Yoga-Kurs
- Buch 2x
- Socken 7x
Tom Vogt:
- Survival-Kurs
Lisa Hartmann:
- Schmuck 3x
Tim Bauer:
- Einkaufsgutschein
Emily Kaiser:
- E-Reader
Matthias Dietrich:
- Whisky 4x
Anna Lehmann:
- Buntstifte 23x
- Malbuch
Christian Wolff:
- Schach
Marie Schuster:
- Massage 7x
Philipp Kaiser:
- Auto
Mia Brandt:
- Basteln
Finn Schulze:
- Film
Luisa Hofmann:
- Pasta
Jonas Vogel:
- Segeltour
Amelie Krüger:
- Inlineskates
Julian Weiß:
- Fernglas
Laura Sommer:
- Einkaufsgutschein
Benjamin Werner:
- Sudoku 30x
Sophie Schreiber:
- Fallschirmsprung
Maximilian Neumann:
- Lautsprecher
Emily Schmidt:
- Garten
- Einkaufsgutschein
Antonia Meyer:
- Fotoalbum 3x
- Dinner
Paul Winter:
- Kompass
- Survival-Kurs
Sarah Müller:
- Notizbuch 3x
- Städtereise
David Richter:
- Kochzeitschrift 4x`;
/*
* Schreiben Sie eine neue Funkiton readWishesExtended(text)
* die das neue Textformat nun einliest.
*
* Passen Sie dabei auch die Datenstruktur an, sodass auch nachvollziehbar
* ist, von wem wie viele der gewünschten Exemplare gewünscht wurden.
*
* Beispiel:
* Maria Schmidt:
* - Socken 2x
* Leonie Schmitz:
* - Socken 7x
*
* let wishlist = {};
* wishlist["Socken"] = {
* people: [
* {
* name: "Maria Schmidt",
* count: 2
* }, {
* name: "Leonie Schmitz",
* count: 7
* }
* ],
* count: 9
* };
*/
function readWishesExtended(text) {}
let wishesExtended = readWishesExtended(wishlistExtended);
console.log("Exercise 3");
console.log("----------");
let wx1 = "Zeichenstifte";
let lx1 = wishesExtended[wx1];
console.log(wx1, lx1.people, lx1.count);
let wx2 = "Socken";
let lx2 = wishesExtended[wx2];
console.log(wx2, lx2.people, lx2.count);