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

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

Viele Schalen

Zwölf Schalen, eine schwächelt: Batch-Lesen über viele Schalen, die −1 der leeren Schale beim Mittel und Minimum, und die schwächste Schale per Namenstabelle finden.

Lektion 20 Min. Woche 38

Das lernst du heute

  • lbns über viele Schalen
  • Mittel und Minimum
  • Schwächste Schale finden

Ein großes Gewächshaus hat zwölf Schalen. Eine davon kränkelt, und bis du sie findest, ist sie hin. Der Chip soll dir zwei Dinge sagen: wie es dem Gewächshaus im Mittel geht und welche Schale die schwächste ist.

Viele Schalen mit einem Namen

Gibst du allen Schalen denselben Namen, liest lbns sie mit einem Befehl:

lbns summe SCHALE HASH("Beet") 0 Health Sum
lbns zahl SCHALE HASH("Beet") 0 Occupied Sum
lbns minh SCHALE HASH("Beet") 0 Health Minimum   # Vorsicht: −1

Das ist schnell, hat aber zwei Haken:

  1. Leere Schalen zählen mit. Eine leere Schale liefert Health −1. Minimum meldet dann −1, obwohl alle Pflanzen gesund sind, und Average wird nach unten gezogen.
  2. Kein Name im Ergebnis. Minimum sagt dir den kleinsten Wert, aber nicht, welche Schale ihn hat.

Leere Schalen herausrechnen

Für den Mittelwert gibt es einen Rechentrick. Jede leere Schale steuert −1 zur Summe bei. Kennst du die Zahl der Schalen, kannst du das zurückrechnen:

  • bepflanzt = Summe von Occupied
  • leer = Schalen − bepflanzt
  • Mittel = (Summe von Health + leer) / bepflanzt

Das klappt, solange ANZAHL stimmt. Baust du eine Schale dazu, musst du das define anpassen.

Die schwächste Schale finden

Um zu wissen, welche Schale schwach ist, braucht jede einen eigenen Namen: „Beet1“ bis „Beet4“. Die Hashes der Namen legst du einmal beim Start in den Stack. Eine Schleife holt sie mit get … db und liest jede Schale einzeln:

poke 0 HASH("Beet1")
poke 1 HASH("Beet2")
start:
yield
move idx 0
schleife:
get name db idx
lbns wert SCHALE name 0 Health Average
bnan wert weiter
bltz wert weiter

Leere Schalen (−1) und fehlende (NaN) überspringt die Schleife mit bltz und bnan. Für den Rest merkt sie sich den kleinsten Wert und dessen Nummer.

Achtung

poke vor start: läuft nur einmal beim Start. Der Stack ist Arbeitsspeicher: Überschreibst du Adresse 0 bis 3 später mit push, sind die Namen weg. Halte sp aus diesem Bereich heraus oder lege die Tabelle weiter oben ab.

Tipp

Vier Schalen sind vier Durchläufe mit je etwa zehn Befehlen. Bei zwölf Schalen sind es 120 – das passt gerade noch in einen Takt.

Schaubild

Drei Messwerte, fünf Batchmodi Sensor „Raum“ 300 K Sensor „Raum“ 310 K Sensor „Raum“ 250 K lbn Average 286.67 Sum 860 Minimum 250 Maximum 310 Count 3 Sum bei Temperaturen: 860 K – die Heizung hält das für einen Brand.
Batch liest viele Schalen auf einmal, verrät aber nicht, welche den kleinsten Wert hat.

Übung

Aufgabe

Vier Hydrokultur-Geräte heißen „Beet1“ bis „Beet4“. Die Namen liegen schon im Stack. Schreibe die Schleife:

  • Anzeige „Schwach“: Nummer (1–4) der bepflanzten Schale mit dem kleinsten Health, 0 wenn keine bepflanzt ist
  • Anzeige „Mittel“: mittleres Health der bepflanzten Schalen in ganzen Prozent, −1 wenn keine bepflanzt ist
  • leere Schalen (−1) und fehlende Schalen (NaN) zählen nicht mit

Hinweise

Hinweis 1

get name db idx holt den Namen, lbns wert SCHALE name 0 Health Average liest die Schale.

Hinweis 2

bnan wert weiter und bltz wert weiter überspringen fehlende und leere Schalen.

Hinweis 3

Starte minh mit 2 – größer als jedes echte Health. Die Nummer ist idx + 1.

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