stationeers.de Mod-Werkstatt · Dominik1199
EN Anmelden
  1. Start
  2. IC10-Akademie
  3. Tag 248

Tag 248 von 365 · Profi · Monat 9: Logistik und Gewächshaus

Inventar im Stack

Eine Bestandstabelle im Stack: Hash und Menge paarweise ablegen, jedes Fach eines Spinds einsortieren und nach einem Hash suchen.

Lektion 25 Min. Woche 36

Das lernst du heute

  • Bestände je Item
  • Tabelle mit Hash und Menge
  • Suche

„Wie viel Kupfer haben wir?“ Im Barrenspind liegt Kupfer in drei verschiedenen Fächern, dazwischen Eisen und Stahl. Statt jedes Mal alle 30 Fächer nach Kupfer abzusuchen, baut der Chip eine Tabelle: eine Zeile pro Sorte, Hash und Menge.

Bestände je Item

Jede Zeile hat zwei Plätze im Stack: auf der geraden Adresse den Prefab-Hash, auf der ungeraden dahinter die Menge.

ZeileAdresse HashAdresse Menge
001
123
245
367

Die Hashes legt der Chip einmal vor dem Start-Label ab:

poke 0 EISEN
poke 2 KUPFER

Die Tabelle füllen

Jeden Durchlauf setzt der Chip alle Mengen auf 0 und geht dann die Fächer des Spinds durch. Für jedes Fach sucht er die passende Zeile und addiert die Menge:

zeile:
mul adr j 2
get tmp db adr
beq tmp art treffer
add j j 1
blt j ZEILEN zeile

Leere Fächer haben den Hash 0, der in keiner Zeile steht – sie fallen einfach durch. Sorten, die nicht in der Tabelle sind, ebenso.

Suche

Die Suche geht die Tabelle einmal durch und liefert die Menge zur gesuchten Sorte. Nicht gefunden heißt −1. Den gesuchten Hash schreibt jemand in einen Logik-Speicher „Suche“ – ein Spieler über eine Konsole oder ein anderer Chip.

Tipp

30 Fächer mal bis zu vier Zeilen sind gut 900 Befehle – der Chip braucht etwa acht Takte für einen ganzen Durchlauf. Die Anzeige springt deshalb nicht im selben Takt, in dem ein Barren dazukommt. Für ein Lager reicht das völlig.

Achtung

Mitten im Durchlauf stehen in der Tabelle halbe Summen. Wer die Tabelle von außen mit get liest, etwa ein zweiter Chip, sieht dann falsche Zahlen. Lies sie nur am Ende des Durchlaufs – oder schreibe die fertigen Werte in einen zweiten Bereich.

Schaubild

Der Stack mit Stapelzeiger Platz 0 10 Platz 1 20 Platz 2 30 Platz 3 Platz 4 sp = 3 nächster freier Platz push 40 pop r0 r0 = 30 zuletzt rein, zuerst raus
Gerade Adressen halten den Hash, die ungerade dahinter die Menge. Zeile j liegt bei 2 · j.

Übung

Aufgabe

Die Tabelle steht in den Adressen 0–7 (Eisen, Kupfer, Stahl, Silizium). Setze jeden Durchlauf die Mengen auf 0, sortiere alle 30 Fächer des Spinds „Barren“ ein und zeige auf „Bestand“ die Menge zum Hash im Logik-Speicher „Suche“: −1, wenn die Sorte nicht in der Tabelle steht, −2, wenn der Spind fehlt.

Hinweise

Hinweis 1

Mengen leeren: Adresse 2 · j + 1 mit poke … 0.

Hinweis 2

Je Fach: Zeile suchen mit get tmp db adr und beq tmp art treffer, dann Menge dazuaddieren.

Hinweis 3

Suche: menge erst −1, bei Treffer get menge db adr; zum Schluss fehlender Spind mit −2.

Quiz

4 Fragen. Ab 60 % ist das Quiz bestanden – die Auswertung macht der Server.

Tag abschließen

  • Übung im Simulator bestanden
  • Quiz mit mindestens 60 % bestanden

Ohne Konto wird der Fortschritt nur in diesem Browser gespeichert.

Fehler in dieser Lektion melden

Zum Melden bitte anmelden. Anmelden

Esc
↑ ↓ wählenEnter öffnen/ öffnet die Suche überall