Skip to content
/ wmc__aufgabe0206 Public template

WMC - Aufgabe 02/06 - Store

Notifications You must be signed in to change notification settings

spg-puw/wmc__aufgabe0206

Repository files navigation

Aufgabe Store

Aufgabe by PUW. Die folgenden Aufgaben wurde aus dem Repository von Koll. Schletz übernommen und um Tests ergänzt.

Aufgabe 1

JSON Store

Die Datei stores.json ist eine JSON Datei, die - ähnlich wie Geizhals - verschiedene Shops speichert. Daneben gibt es eine Liste an Produkten. Die Produkte werden in Shops angeboten. Diese Angebote werden als Offer gespeichert.

Die Datei ist UTF-8 codiert (ohne Byte Order Mark).

Das folgende Diagramm zeigt die Struktur der Datei. Das oberste Objekt ist JsonRoot, es repräsentiert die oberste Ebene der Datei.

Bearbeite die Datei aufgabe1.mjs
Die Datei kann mit npm run aufgabe1 ausgeführt werden. Die Ausgabe muss der unten angezeigten Musterausgabe entsprechen.

Ausgabe

Muster: Wie viele Stores sind in der Datei?
  5
Muster: Produkte in der Kategorie Fantastic und EAN > 700000.
  ┌─────────┬────────┬─────────────────────────────┐
  │ (index) │  ean   │            name             │
  ├─────────┼────────┼─────────────────────────────┤
  │    0    │ 729534 │   'Unbranded Rubber Soap'   │
  │    1    │ 733796 │     'Tasty Steel Ball'      │
  │    2    │ 985142 │   'Handmade Wooden Bike'    │
  │    3    │ 739896 │ 'Handcrafted Plastic Pizza' │
  └─────────┴────────┴─────────────────────────────┘
(1) Stores in 1050 oder 1110 Wien.
  ┌─────────┬────────────────────────────────────────┬────────────────┬──────────────────────┬────────┬────────┐
  │ (index) │                  guid                  │      name      │       address        │  zip   │  city  │
  ├─────────┼────────────────────────────────────────┼────────────────┼──────────────────────┼────────┼────────┤
  │    0    │ '8e1bd9de-7cf5-be9b-f1e6-c8d4344317ec' │   'Ertl KG'    │     'Im Dorf 87'     │ '1050' │ 'Wien' │
  │    1    │ '02f18081-6afb-993b-5785-369331102393' │ 'Koszewski UG' │ 'Hallesche Str. 71c' │ '1110' │ 'Wien' │
  └─────────┴────────────────────────────────────────┴────────────────┴──────────────────────┴────────┴────────┘
(2) PLZ mit Stores.
  Set(5) { '1020', '1050', '1180', '1110', '1220' }
(3) Produkte, die vor dem 15. Februar 2021 hinzugefügt wurden.
  ┌─────────┬────────┬───────────────────────┬─────────────┐
  │ (index) │  ean   │         name          │  category   │
  ├─────────┼────────┼───────────────────────┼─────────────┤
  │    0    │ 283778 │  'Rustic Soft Shirt'  │ 'Fantastic' │
  │    1    │ 848527 │ 'Tasty Cotton Towels' │ 'Handmade'  │
  │    2    │ 881282 │ 'Licensed Fresh Hat'  │ 'Handmade'  │
  └─────────┴────────┴───────────────────────┴─────────────┘
(4) Preis des billigsten Angebotes des Produktes 246122 mit reduce
  361.67
(5) Preis des billigsten Angebotes des Produktes 246122 mit Math.min()
  361.67
(6) Maximaler und minimaler Preis der Produkte der Kategorie Handmade.
  ┌─────────┬────────┬────────────────────────────┬──────────┬──────────┐
  │ (index) │  ean   │            name            │ minPrice │ maxPrice │
  ├─────────┼────────┼────────────────────────────┼──────────┼──────────┤
  │    0    │ 952530 │ 'Tasty Concrete Computer'  │  324.8   │  921.91  │
  │    1    │ 848527 │   'Tasty Cotton Towels'    │  802.25  │  802.25  │
  │    2    │ 881282 │    'Licensed Fresh Hat'    │  121.35  │  890.91  │
  │    3    │ 964205 │ 'Practical Concrete Mouse' │  344.84  │  726.71  │
  │    4    │ 199829 │  'Fantastic Fresh Towels'  │  147.77  │  901.05  │
  └─────────┴────────┴────────────────────────────┴──────────┴──────────┘
(7) Angebote der Kategorie Handmade.
  ┌─────────┬──────────┬────────────────────────────┬───────┐
  │ (index) │   ean    │            name            │ count │
  ├─────────┼──────────┼────────────────────────────┼───────┤
  │    0    │ '199829' │  'Fantastic Fresh Towels'  │   4   │
  │    1    │ '848527' │   'Tasty Cotton Towels'    │   1   │
  │    2    │ '881282' │    'Licensed Fresh Hat'    │   3   │
  │    3    │ '952530' │ 'Tasty Concrete Computer'  │   3   │
  │    4    │ '964205' │ 'Practical Concrete Mouse' │   3   │
  └─────────┴──────────┴────────────────────────────┴───────┘

Aufgabe 2

MinBy und MaxBy

In .NET 6 wurden 2 Funktionen eingeführt: MinBy() und MaxBy(). Sie ermitteln das Minimum bzw. das Maximum von Elementen einer Collection. Dabei werden 2 Dinge berücksichtigt:

  • Es wird eine Collection zurückgegeben, die alle minimalen bzw. maximalen Elemente enthält. Das ist notwendig, da z. B. das Array [3,2,1,3,1] zwei minimale Elemente ([1, 1]) und zwei maximale Elemente ([3, 3]) enthält.
  • Die Methoden besitzen einen Parameter, nämlich einen keySelector. Er ist eine Funktion, die aus einem Element den zu vergleichenden Wert zurückliefert. Dadurch können auch komplexe Elemente verglichen werden. Dadurch lassen sich die kleinsten Elemente des folgenden Arrays bestimmen: [{id: 1, temp: 2}, {id: 2, temp: 3}, {id: 3, temp: 2}]. Mit dem keySelector x => x.temp kann die Temperatur als Vergleichskriterium herangezogen werden. Das Ergebnis von MinBy wäre dann [{id: 1, temp: 2}, {id: 3, temp: 2}].

Das Problem lässt sich mit einem Statement - nämlich einer reduce() Funktion lösen. Füge deinen Code in die Musterdatei aufgabe2.mjs ein. Die Implementierung darf keine Abhängigkeiten vom Aufbau der Arrayelemente haben und muss auch für das oben beschriebene Beispiel funktionieren.

Ausgabe

results.minBy(r => r.points)
┌─────────┬────────────┬────────┬───────┐
│ (index) │    name    │ points │ grade │
├─────────┼────────────┼────────┼───────┤
│    0    │ 'Bernhard' │   13   │   2   │
│    1    │   'Nina'   │   13   │   2   │
└─────────┴────────────┴────────┴───────┘
results.maxBy(r => r.points)
┌─────────┬──────────┬────────┬───────┐  
│ (index) │   name   │ points │ grade │  
├─────────┼──────────┼────────┼───────┤  
│    0    │  'Max'   │   16   │   1   │  
│    1    │ 'Sophie' │   16   │   1   │  
└─────────┴──────────┴────────┴───────┘  
results.minBy(r => r.grade)
┌─────────┬──────────┬────────┬───────┐  
│ (index) │   name   │ points │ grade │
├─────────┼──────────┼────────┼───────┤
│    0    │  'Max'   │   16   │   1   │
│    1    │ 'Tobias' │   14   │   1   │
│    2    │ 'Sophie' │   16   │   1   │
│    3    │ 'Laura'  │   14   │   1   │
└─────────┴──────────┴────────┴───────┘
results.maxBy(r => r.grade)
┌─────────┬────────────┬────────┬───────┐
│ (index) │    name    │ points │ grade │
├─────────┼────────────┼────────┼───────┤
│    0    │ 'Bernhard' │   13   │   2   │
│    1    │   'Nina'   │   13   │   2   │
└─────────┴────────────┴────────┴───────┘

Testsetup

Es wird jest zum Testen verwendet. Das Setup erfolgt:

npm install

Das Programm selber kann mit folgendem Befehl gestartet werden:

npm run start

# für Aufgabe 1
npm run aufgabe1
node aufgabe1.mjs

# für Aufgabe 2
npm run aufgabe2
node aufgabe2.mjs

Anschließend können die Tests mit folgendem Befehl durchlaufen werden:

npm run test

Releases

No releases published

Packages