WPC13



  • TheTester schrieb:

    Steht so nicht drin, es kann in einem Raum mit Fallgrube wohnen, muss aber nicht.

    das impliziert aber noch lange nicht, daß das monster manchmal in räumen ist, wo keine grube ist.
    das framework ist konsistent mit der aufgabenstellung.



  • TGGC schrieb:

    Jester schrieb:

    volkard schrieb:

    darf ich annehmen, daß ++*reinterpret_cast<long*>(this); und andere zugriffe auf private-sachen der basisklasse strikt verboten sind?

    ja klar. Sowas hat afaik undefined behavior zur Folge und bewegt sich damit außerhalb der Grenzen von Standard-C++.

    Das behauptest du.

    Das definiert der C++ Standard (3.10/15) und damit ist das keine Behauptung sondern ein Fakt. In Ermangelung eines Membertemplates und ohne Änderung des Framework-Codes gibt es keine legale Möglichkeit auf die privaten Elemente der Framework-Klassen zuzugreifen.



  • Die Position des Monsters und des Goldes werden zufällig und gleichverteilt aus den Quadraten außer dem Startquadrat gezogen.
    Außerdem enthält jedes Quadrat außer dem Start mit Wahrscheinlichkeit 0.2 ein Loch.

    Jedes Quadrat außer dem Start (also auch dem des Monsters!) enthält mit 80% Wahrscheinlichkeit kein Loch. So steht es in der Aufgabe.

    Bye, TGGC (Wähle deine Helden)



  • HumeSikkins schrieb:

    TGGC schrieb:

    Jester schrieb:

    volkard schrieb:

    darf ich annehmen, daß ++*reinterpret_cast<long*>(this); und andere zugriffe auf private-sachen der basisklasse strikt verboten sind?

    ja klar. Sowas hat afaik undefined behavior zur Folge und bewegt sich damit außerhalb der Grenzen von Standard-C++.

    Das behauptest du.

    Das definiert der C++ Standard (3.10/15) und damit ist das keine Behauptung sondern ein Fakt. In Ermangelung eines Membertemplates und ohne Änderung des Framework-Codes gibt es keine legale Möglichkeit auf die privaten Elemente der Framework-Klassen zuzugreifen.

    Lösen wir uns von Volkards Beispiel, er sprach ja auch noch von anderen Sachen. Ich mache einfach ((char)0x12345678)= 1000; Was ist daran gegen den Standard? Und wenn dort zufällig die Punktzahl steht? Kann ja mal passieren.

    Bye, TGGC (Wähle deine Helden)



  • TGGC schrieb:

    Lösen wir uns von Volkards Beispiel, er sprach ja auch noch von anderen Sachen. Ich mache einfach ((char)0x12345678)= 1000; Was ist daran gegen den Standard? Und wenn dort zufällig die Punktzahl steht? Kann ja mal passieren.

    es geht auch nicht darum, sondern ganz einfach ums hacken. sowas wie beim letzten mal daß einer internas von vector<vool> nimmt, gehen am sinn der aufgabe vorbei, meine ich. und hier wäre es halt hacks, um sich punkte anzueignen. ich wollte, daß es offiziell ausgesprochen ist, daß das verboten ist.

    in der eile der aufgabenstellung mögen manche lücken passiert sein. ist ja nicht so schlimm, wenn die spieler höflich bleiben.

    hier eine unhöfliche sache: mein Agent legt sich in jedem zug 1000 welten an (welt-konstruktor ist public), davon nimmt er nur nur die, die auf [1,1] den schatz haben (getSensorInput ist public), mit den guten welten füttert er die eigene (der basisklasse) solve (auch public) und das solve gibt ihm 1000 punkte, wenn er nur klug genug ist, den schatz zu nehmen, wenn er draufsteht. also leetbot von tggc und mir und ein kleiner cheat.

    hier eine viel geilere: er legt ein static-feld mit 100 zahlen an und belegt die zufällig mit rand(). und wenn er verliert, belegt er sie nochmal zufällig mit rand(). wenn er aber gewinnt, merkt er sich, daß er gewonnen hat und läßt sich im konstruktor so lange rand() liefern, bis genau die 100 zahlen kamen. weil der zufallszahlengenerator zyklich ist, wird damit der seed auf den stand getan, der auch da war, als die welt das letzte mal gebaut wurde.



  • volkard schrieb:

    TGGC schrieb:

    Lösen wir uns von Volkards Beispiel, er sprach ja auch noch von anderen Sachen. Ich mache einfach ((char)0x12345678)= 1000; Was ist daran gegen den Standard? Und wenn dort zufällig die Punktzahl steht? Kann ja mal passieren.

    es geht auch nicht darum, sondern ganz einfach ums hacken. sowas wie beim letzten mal daß einer internas von vector<vool> nimmt, gehen am sinn der aufgabe vorbei, meine ich. und hier wäre es halt hacks, um sich punkte anzueignen. ich wollte, daß es offiziell ausgesprochen ist, daß das verboten ist.

    Doch es geht genau darum. Angeblich sind solche Tricks nämlich alle nicht Standard konform, und damit wäre Hacken bereits verboten. Ich allerdings glaube das nicht und wäre auch für eine Klarstellung der Regeln.

    Ausserdem sollte geklärt werden, wie das nun mit dem Moster ist, in der jetzigen Form kann man es ja auch ignorieren.

    Bye, TGGC (Wähle deine Helden)



  • Zum Schießen: Wenn du in eine Situation kommst, in der du dich nicht bewegen kannst, ohne ein Feld zu betreten, dass mglw. das Monster enthält, kannst du entweder auf Risiko spielen, aufgeben oder eins der Felder beschießen.



  • Umdrehen?



  • TGGC schrieb:

    Lösen wir uns von Volkards Beispiel, er sprach ja auch noch von anderen Sachen. Ich mache einfach ((char)0x12345678)= 1000; Was ist daran gegen den Standard? Und wenn dort zufällig die Punktzahl steht? Kann ja mal passieren.

    Du sagst es: "Zufällig". Der Standard definiert die Semantik eines Programms. Wenn die Semantik eines Ausdrucks nicht definiert ist, dann kann da natürlich auch was passieren. Normalerweise etwas, das von den speziellen Eigenschafter der Implementation, des Rechners, des Betriebssystems oder der Mondphase abhängt, aber es ist eben "undefiniertes Verhalten". Ein Programm ist standardkonform, wenn es nicht von undefiniertem Verhalten abhängt.

    u.a. Abschnitt 1.4§1



  • ness schrieb:

    Umdrehen?

    Ich sagte, wenn du dich nicht mehr bewegen kannst. Das umfasst u.a. auch, dass umdrehen und weglaufen nicht geht. Weil du z.B. auf dem Startfeld eingekeilt bist o.ä.



  • Ich glaube der Jester wird

    field_[x][y] = FieldState(field_[x][y] | 3);
    

    noch in

    field_[x][y] = FieldState(field_[x][y] | monster);
    

    ändern



  • ja, werde ich tun. Das war ein Fehler. 🙂
    Kommt davon wenn man den Code bis spät in die Nacht hackt. Es soll natürlich nicht immer in nem Loch wohnen.

    Danke für den Hinweis.



  • Bashar schrieb:

    TGGC schrieb:

    Lösen wir uns von Volkards Beispiel, er sprach ja auch noch von anderen Sachen. Ich mache einfach ((char)0x12345678)= 1000; Was ist daran gegen den Standard? Und wenn dort zufällig die Punktzahl steht? Kann ja mal passieren.

    Du sagst es: "Zufällig". Der Standard definiert die Semantik eines Programms. Wenn die Semantik eines Ausdrucks nicht definiert ist, dann kann da natürlich auch was passieren.

    Nun erzeugt dieser Ausdruck aber nicht per se undefiniertes Verhalten.

    Bye, TGGC (Wähle deine Helden)



  • TGGC schrieb:

    [((char)0x12345678)= 1000;]
    Nun erzeugt dieser Ausdruck aber nicht per se undefiniertes Verhalten.

    Nicht? Dann zeig die Stelle im Standard, wo das Verhalten definiert ist. BTW denke ich dass die Dikussion hier nicht hergehört.



  • So, ich habe jetzt das Framework upgedated.

    Die neue main und der eingebaut L33tBot stammen von TGGC: vielen Dank dafür.
    Außerdem habe ich volkards kürzere Version für die Befehlseingabe in den ManualAgent eingebaut (zusätzlich zur langen Variante).

    Vor allem aber habe ich diese strittige 3 durch ein monster ersetzt, sodaß das Monster jetzt nicht mehr "Monster in der Grube" spielen muß.

    Der Link zum download ist der gleiche geblieben!

    MfG Jester



  • Was ist eigentlich damit, dass das Feld (4,4) nie ein Loch oder Monster hat? 🙂



  • argh... ist der Code dafür auch falsch, ja. 🙂

    Ich schau's mir mal schnell an.
    Lösungsvorschläge?



  • okay, das wäre dann auch gefixed. 🙂



  • ich schlage als abgabeformat vor, daß jeder die folgenden vier funktionen anbietet:

    Agent* createAgent();
    void destroyAgent(Agent* agent);
    char const* getName();
    char const* getMail();
    

    dan muss jester nix inkludieren, sondern braucht nur die eingereichte *.cpp dazuzulinken und fertig.



  • Dann sollte aber bitte auch festgehlaten werden, ob für jede Runde createAgent aufgerufen wird.

    Bye, TGGC (Wähle deine Helden)


Anmelden zum Antworten