AutoIt-Hackathon #2 CypherEnigma

  • Hallo und herzlich willkommen zum zweiten AutoIt-Hackathon

    Alles was ihr zur Teilnahme braucht, ist das Script, das unterhalb im Code-Block eingefügt ist.
    Diesmal gibt es das Script ausschließlich im Code-Block um Differenzen zu vermeiden. ;)
    Kopiert es vollständig in euren Editor und lest euch die Anleitung genau durch.

    Vielleicht nicht in diesem, aber möglicherweise in einem der nächsten Hackathon's ist zuweilen die genaue Lesart der Aufgabe entscheidend.

    Diesmal gewinnt derjenige, dessen Script die Tests zu 100% bewältigt und am schnellsten ist.
    Ich weiß das mit der Geschwindigkeit ist so eine Sache in AutoIt. Daher bitte ich Andy (sofern er wieder mitmacht) nicht in Assembler zu proggen. ^^

    Ihr könnt eigene Funktionen erstellen, Globale Variablen deklarieren usw ...

    Postet eure Lösung hier in diesen Thread. (den markierten Code-Block im Script)

    Klinkt euch gerne auf Discord mit ein (am Besten mit Audio, so könnt ihr weiter coden und wir können euch schwitzen hören):rofl:

    Ich wünsche allen Teilnehmern
    happy coding :party:

    PS: ab Dienstag abend 20:00 Uhr gibt es hier meine Lösung der Aufgabe und dann werte ich die Lösungen der Teilnehmer aus.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

    Einmal editiert, zuletzt von Schnuffel (19. April 2025 um 16:41) aus folgendem Grund: Steuerzeichen und die ASCII Zeichen jenseits von Dec 126 werden 1:1 übernommen fälschlicherweise wurden Zahlen hier auch erwähnt. sry

  • Beitrag von Mars (18. April 2025 um 21:39)

    Dieser Beitrag wurde vom Autor gelöscht (18. April 2025 um 21:39).
  • Nachdem ich vom aufmerksam lesenden chesstiger auf einen Fehler in der Aufgabenstellung hingewiesen wurde,

    möchte ich diesen hier für alle klarstellen.

    Der letzte Satz der Aufgabenstellung lautete bisher:
    Steuerzeichen, Zahlen und die ASCII Zeichen jenseits von Dec 126 werden 1:1 übernommen

    Dies ist so sachlich falsch und muss lauten:
    Steuerzeichen und die ASCII Zeichen jenseits von Dec 126 werden 1:1 übernommen

    Ich bitte etwaige Unannehmlichkeiten bei der Lösungsfindung zu entschuldigen.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Das hört sich gut an zum "beobachten".

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    k3mrwmIBHejryPvylQSFieDF5f3VOnk6iLAVBGVhKQegrFuWr3iraNIblLweSW4WgqI0SrRbS7U5jI3sn50R4a15Cthu1bEr

  • Schnuffel So, beim Extra part scheine ich meinen Denkfehler nicht zu finden, da sämtliche (Ergebnis) Prüfungen dementsprechen was ich ich erwarten würde, in deiner Prüfung aber auf Fehler laufen XD
    Und da mir nur eine limitierte Zeit zur Verfügung steht, muss ich leider passen :(, diesmal aber scheinbar eher vom Verständnis (obwohl ich finde das du es oben gut erklärt hast).

    Ggf. wenn es hier vorbei ist, poste ich mein bisheriges dann hier, möchte doch gerne wissen wo ich meinen Denkfehler habe^^

  • mach aus der Gruppe der Sonderzeichen (Asc 32 - Asc 126) (inkl. Zahlen ohne Groß- Kleinbuchstaben) eine gedankliche Gruppe und verschiebe jedes Zeichen aus dieser Gruppe "nur" in dieser Gruppe

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • yep, betrachte die als 1 Gruppe und verschiebe dann

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Ok, dann war es einfach wirklich mein denkfehler ;)

    Danke Schnuffel

  • Dann poste ich auch meine Version:

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

  • Gut, wenn's alle machen. ^^

    Kanashius Wir hatten dieselbe Basisidee, die Lücke in der Special-Gruppe einfach "rauszunormalisieren".

  • Ich danke allen Teilnehmern, dass sie sich so für diese Runde
    des Hackathon-Wettbewerb begeistert haben. :rock:

    Es zeigt, dass hier sehr helle Köpfe am Werk sind.

    und nun zum Testverfahren:
    getestet wurde auf einer HP Z440 Workstation ohne Netzwerk
    Intel(R) Xeon(R) CPU E5-1620 v4 @ 3.50GHz mit 64 GB RAM

    Die eingereichten Funktionen wurden jeweils 10 * mit 2000 Durchläufen getestet (32-bit und 64-bit, auf Anregung von UEZ ;-)),
    und die Ergebnisse gemittelt. Während der Tests wurde der PC nicht verwendet oder sonst irgendwie CPU-technisch belastet.

    Testergebnis:
    Anzahl Teilnehmer: 8 (alphabetisch sortiert)
    Anzahl gewerteter Lösungen: 7

    Teilnehmer32-bit Ergebnis in Sekunden64-bit Ergebnis in Sekunden
    AspirinJunkey5.71898385.32926829
    chesstiger6.749411816.48062599
    Eukalyptus7.181518556.42435041
    Kanashius6.936774366.46164125
    Mars5.8313455.41359282
    Moombasabgebrochen, da 10*2000 Durchläufe ca. 2,7 Std. gedauert hätten
    Schnuffel27.2353469625.91358436
    UEZ6.677574666.2812514

    Daraus ergibt sich:

    1. AsprinJunkey
    2. Mars
    3. UEZ
    4. chesstiger
    5. Kanashius
    6. Eukalyptus
    7. Schnuffel
    8. Moombas (aufgrund der extremen Laufzeit aus der Wertung genommen)

    Hier die eingereichten Lösungen und wie ich getestet habe:

    Es gab Teilnehmer, die Ihre Lösung während der Laufzeit des Wettbewerbes "optimiert" und erneut abgebenen haben.
    Dies ist kein Regelverstoß sondern in meinen Augen maximales Inetresse an der Aufgabe. ;)
    Es wurde ja auch nicht untersagt.
    Demzufolge werte ich von jedem Teilnehmer seine letzte abgegebene Lösung.

    Resumee:
    Soweit ich das überhaupt beurteilen kann, hatte die Aufgabe ein paar kleine "Stolpersteine".
    1. Ich erwähnte die Nutzung von Arrays (dies war zwar mein Ansatz, aber bei weitem nicht der effizienteste ;) )
    2. die Zusammenführung der Sonderzeichen Asc 32 - Asc 126 zu einer Gruppe und der Verschiebung darin
    3. die Extra-Verschiebung die anscheinend die 1er-Hürde war (die aber jeder bestanden hat )

    summa summarum:
    Ein klarer Beweis dafür, dass die "alten Hasen" und die "jungen Hasen" hier alle wissen was sie tun.
    Die zehntel-Sekunden sind vll. eher einer Schwäche der Prüfungsumgebung zuzuordnen als einer Klassifizierung der Teilnehmer.

    Daher beglückwünsche ich euch alle, dass ihr diese Aufgabe angenommen und bravourös gemeistert habt. :klatschen:

    Die Betrachtung der einzelnen Skripte finde ich höchst interessant. In gewisser Weise spiegeln sie doch wieder,
    was für ein Geist das Skript geschrieben hat und welche Prioritäten er gesetzt hat.

    PS:
    Bei Teilnehmern, die Ihre Lösung auf mehrere Wegen verbreitet haben, gehe ich davon aus, dass diese Lösungen identisch sind.
    Die Prüfung, ob einer abgeschrieben hat, überlasse ich Euch. ^^

    Ich hoffe mir fallen noch weitere Aufgaben ein, die euch herausfordern und in der Lösungsfindung Spaß machen.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ausführbares Script ("as is"), dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

    Man möge mir verzeihen, wenn ich nicht perfekten und ideal lesbaren Code zur Verfügung stelle.
    Ich möchte Hilfe zur Selbsthilfe leisten und denke dass eine gewisse Transferleistung erwartet werden kann.

  • Nicht immer liegt in der Kürze die Würze.

    Glückwunsch an AspirinJunkie :thumbup: Sehr clever Look-up Table und Maps zu benutzen! :thumbup: auch an Mars - liegt knapp dahinter. Man könnte fast von einem Unentschieden sprechen...

    Auch am Arsch geht ein Weg vorbei...

    ¯\_(ツ)_/¯

    3 Mal editiert, zuletzt von UEZ (22. April 2025 um 20:50)

  • Juchhe!

    Aus meiner Sicht war es schwer für die Aufgabe grundlegende Ansätze zum Optimieren zu finden.
    Grob war eigentlich das Grundgerüst ziemlich fest und nur an ein paar Feinheiten konnte man schrauben.
    Sieht man auch schön daran wie sehr alle beeinander waren zeitlich.
    Mein Skript wird wohl nur deshalb paar Prozente vorn gelegen haben weil ich den Sonderfall mit $nExtra=0 extra behandelt habe (wie Eukalyptus).
    Würde man die Skripte nur mit Beispielen testen wo $nExtra<>0 ist, dann könnte sich die Reihenfolge schnell ändern.

    Ich hatte zig Varianten durchexerziert, welche alle nach logischen dafürhalten schneller sein müssten. Die Modulooperationen komplett durch +- und If ersetzt, komplette Lookup-Tables für alle Fälle erstellt usw. Am Ende war dennoch diese - nunja "profane" Lösung die schnellste. Das zeigt einmal mehr, dass man in AutoIt anders optimieren muss. Eher das Hauptaugenmerk auf die Entlastung des Interpreters legen anstatt Operationen nach teuer und günstig einzuteilen und darauf hin zu optimieren.

    Wäre sicherlich mal interessant in einer der nächsten Discord-Gespräche wenn jeder seine Lösung mal erklärt und vor allem: wie diese entstanden ist.

    Sehr clever Look-up Table [...] zu benutzen!

    Hast du doch genauso verwendet ;)

    Ich danke wieder einmal(!) Schnuffel für die tolle Ausarbeitung und Durchführung des Hackathons.
    Dies ist für die Belebung des Forenlebens nicht hoch genug zu bewerten!
    Ich denke es ist Zeit, dass wir uns in irgendeiner Weise mal revanchieren.