Kinder füttern :-)



  • Hallo Zusammen,

    ich denke schon einige Zeit über ein Problem nach, daß ich lösen muss und komme auf keinen grünen Zweig. Vielleicht hat mit jemand einen guten Tipp.

    Ich habe in einem Kindergarten sehr viele umher tollende Kinder, für die ich Freßpakete erhalte. Immer wenn ich ein Freßpaket erhalte, gehe ich zum jeweiligen Kind, für das das Freßpaket bestimmt ist, und fütter es.
    Nun kann es passieren, daß ich für vereinzelte Kinder kein Freßpaket mehr erhalte und wenn ein Kind eine bestimmte Zeit nicht gefüttert wurde, stirbt es. Tote Kinder muss ich aus dem Kindergarten entfernen.

    Mein Problem ist nun, das ich nicht die Zeit habe, von Kind zu Kind zu gehen und zu kucken, ob es noch lebendig ist. Bei mir treffen nämlich ständig Freßpakete ein, die verteilt werden wollen. Und da die Kinder umhertollen, kann ich nicht sagen, ich stelle gefütterte Kinder an das Ende einer Schlange, so das tote Kinder vorne liegen würden. Ich würde gerne wissen, welches Kind tot ist, bzw wann welches Kind zum letztes mal gegessen hat. Dann könnte ich gezielt die toten Kinder entfernen, ohne aufwendig nach ihnen suchen zu müssen, denn ich weiß wie lange ein Kind ohne ohne gefüttert zu werden lebt.

    Vielen Dank für jeden Tipp,
    Max



  • Mach ne Tabelle/Strichliste, welchem Kind Du wann ein Paket gibst.
    Oder wie meinst Du das?



  • Hallo,

    das mit der Tabelle verlagert das Problen nur, ich muss dann nämlich den Eintrag aus der Tabelle suchen. Und zum suchen habe ich nicht die Zeit.

    Grüße Max



  • BlackPepper schrieb:

    das mit der Tabelle verlagert das Problen nur, ich muss dann nämlich den Eintrag aus der Tabelle suchen. Und zum suchen habe ich nicht die Zeit.

    Ach komm, wenn du schon in einem Kindergarten arbeitest, dann solltest du dir auch etwas Zeit für die Kinder nehmen! 😃



  • Bring den Kindern bei, dass sie Schreien wenn sie kurz vor dem Verhungern sind. 💡



  • Mein Problem ist nun, das ich nicht die Zeit habe, von Kind zu Kind zu gehen und zu kucken, ob es noch lebendig ist.

    Bin ich der einzige der das seltsam findet?



  • Kuldren schrieb:

    Mein Problem ist nun, das ich nicht die Zeit habe, von Kind zu Kind zu gehen und zu kucken, ob es noch lebendig ist.

    Bin ich der einzige der das seltsam findet?



  • Und wie soll ich den Kindern beibringen zu schreien? Mit nem Timer hab ich mir das auch schon überlegt, aber was sagt ein Betriebssystem, wenn ich tausende von timern anlege? Und wenn mehrere hundert auf einmal auslösen? Ich denke das ist nicht praktikabel.

    Grüße Max



  • Mit nem Timer hab ich mir das auch schon überlegt, aber was sagt ein Betriebssystem, wenn ich tausende von timern anlege

    Wieviele Kinder sind denn das?

    Du könntest einfach einen Zähler einbauen...
    Entweder einen der einfach runterzählt, oder du speicherst die Zeit zu Beginn und vergleichst sie dann mit der aktuellen...

    MfG Kuldren



  • Naja,

    entweder Du suchst die toten Kinder oder lässt die Kinder sich beschweren.

    Wäre eventuell eine priority_queue die als Priorität ein timestamp/counter verwendet ? Dann könnte man das erste tote Kind suchen und alles ab diesem Punkt umweltgerecht entsorgen, denn alles was nach dem ersten toten Kind kommt müsste ebenfalls tot sein.

    (Oder eine multimap ? Irgendwas, was nach dem Timestamp sortiert, ich glaub bei der queue müsste man die Kinder raus werfen und neu einsetzen was man sich bei der map sparen könnte.)

    Wenn also mal ein wenig Luft herrscht, such nach den Laichen oder nach einer längeren Zeit zwangsweise, damit es nicht anfängt zu stinken. Du sarst Dir dann damit das suchen jeder einzelnen Laiche, weil Du diese stapelst und die Umerziehung der Kinder sparst.



  • Nö, nur einen Timer und bei jedem Step zählst Du bei allen Kindern den Zähler runter. Ist einer nahe null schreit das Kind.
    Wie hast Du denn den Kindergarten angelegt? Vector?



  • Dann bleibt aber immer noch das Problem, die Kinder mit einem Timestamp zu markieren, denn ich besuche nur die Kinder, die ein Freßpaket erhalten. Diese kann ich dann auch markieren.

    Das mit der Priority Queue hab ich nicht so ganz verstanden. Wären markierte Kinder automatisch an einem Ender der Schlange? Dann bräuchte ich mir ja nur das andere Ende anzusehen und dort tote Kinder entfernen solange es welche gibt.

    Grüße, Max



  • ich hab mit der prio queue noch nicht gearbeitet. Ebentuell wäre die multimap (ggf. mit eigenen compare dingens) sinvoller.

    Die Idee war folgende:

    Das Kind wird bei der Geburt in die Queue eingetragen. Bei jedem Besuch setzt Du den Timespamp auf aktuell. Wenn Luft herrscht, schaust Du einfach nach der ersten Laiche (weil ja nach Timestamp sortiert) und entfernst alles bis zum Ende.

    Du musst also dem Geburtshelfer das eintragen beibringen und ab und an mal nach einer Laiche suchen, was z.B. bei einer multimap durch den binärenbaum schnell gehen sollte (wobei Du hier untersuchen solltest ob das entfernen dann schnell genug geht.)

    Ich hab leider zu wenig mit den STL Containern gemacht um dem Ansatz den passenden zu geben.

    Ich denke jedoch, das schnell sortiert werden muss wärend man verhältnismässig selten die Laichen entfernt.

    Bei dem Ansaz musst Du sogar nur das erste tote Kind finden und musst nicht alle untersuchen bis das erste Lebt und kannst die Kinder kinder sein lassen.



  • Einen Timestamp brauchst du gar nicht.

    Nimm mal an jedes Kind kann 100 (extra ohne Einheit) überleben, ohne was zu essen.
    Dann ordnest du jedem Kind einen Wert zu, der am Anfang mit 100 initialisiert wird.
    Nun zählst du in deinem Programm bei jeder Iteration (oder sekunde, oder wie immer du das realisierst) bei jedem Kind den Wert um eins runter. Dann kannst du dir sogar Intervalle einrichten (zum Beispiel bei Wert < 10 schon mal vorsorglich nen Sarg bestellen).
    Wenn du die Kinder jetzt noch in einer geeigneten Datenstruktur verwaltest, die nach dem Wert jedes Kindes sortiert, hast du immer schön an einem Ende die kerngesunden, am anderen Ende jene, die wahrscheinlich nicht sehr alt werden.



  • Es geht beim timestamp darum nicht jedes Kind anfassen zu müssen.

    Für einen Zähler muss ich jedes Kind besuchen, bei einem timestamp nicht.



  • 1310-Logik schrieb:

    Nö, nur einen Timer und bei jedem Step zählst Du bei allen Kindern den Zähler runter. Ist einer nahe null schreit das Kind.
    Wie hast Du denn den Kindergarten angelegt? Vector?

    Die Kinder liegen in einer map und es sind mehrere tausen. Das Problem sind die permanten eintreffenden Freßpakete, weshalb ich nicht viel Zeit für die Suche nach toten Kindern habe. Der Rest ist nicht das Problem, das läuft in der map bereits schnell genug.

    Grüße Max



  • Dann machs mit der priority_queue.
    Mach nen Zähler für die Pakete, die die eins kriegen erhöhst du um sagen wir 100.
    Wenn Du etwas Zeit hast, schaust Du nach, wieviel Zeit vergangen ist und wieviel die Kids gegessen haben müssten in der Zeit. Alle die weniger bekommen haben, sind tot.
    Das nachschauen und entfernen könntest Du mit lower_bound() und erase() machen, sollte effizient genug sein.



  • Deswegen ja der Timestamp.

    Du trägst jedes Kind bei der Geburt mit Timestamp ein und aktualisierst diesen wenn ein Fresspacket da ist.

    Da Du weisst wie lange ein Kind ohne Frspacket lebt, musst Du nur suchen, welches Kind innerhalb der Grenze liegt. Den rest kannst Du ungesehen entsorgen da es ja sortiert ist.



  • BlackPepper schrieb:

    Vielleicht hat mit jemand einen guten Tipp.

    du könntest ja mal einen tag im kindergarten mitmachen.
    aber vorher schön viel futtern, damit du nicht aus versehen verhungerst...



  • 1310-Logik schrieb:

    Dann machs mit der priority_queue.
    Mach nen Zähler für die Pakete, die die eins kriegen erhöhst du um sagen wir 100.
    Wenn Du etwas Zeit hast, schaust Du nach, wieviel Zeit vergangen ist und wieviel die Kids gegessen haben müssten in der Zeit. Alle die weniger bekommen haben, sind tot.

    Wenn ich jedem Kind einen Zähler gebe und die Priority Queue nach diesem Zähler sortieren lasse, stehen dann an einem Ende die Kinder die gerade gegessen haben und am anderen Ende die Kinder, die schon länger nicht mehr gegessen haben. Dann kann ich nämlich zu einem bestimmten Zeitpunkt ans anderen Ende sehen und muss nicht suchen, weil sich verhungerte Kinder dort befinden, ohne das ich was tuen muss. Lebt das Kind am anderen Ender der Priority Queue auch, kann ich sofort weiter Freßpakete verteilen, weil dann alle Kinder leben.

    Grüße Max



  • Sagte schonmal jemand, dass das sehr makaber tönt?
    Wofür züchtest du die Kinder denn? Internethandel? 😮


Anmelden zum Antworten