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.
| Zeile | Adresse Hash | Adresse Menge |
|---|---|---|
| 0 | 0 | 1 |
| 1 | 2 | 3 |
| 2 | 4 | 5 |
| 3 | 6 | 7 |
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.
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.
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
Ü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