Code Kata - Galgenraten

  • Hi Leute,

    hier mal wieder, wie angekündigt, etwas für zwischendurch: Die "Galgenraten" Code Kata.

    💡 Ziel: Ist es einen Algorithmus bestehend aus einer oder mehreren Funktionen zu schreiben, der dich "Galgenraten" in der Konsole spielen lässt.

    • Galgenraten
      • Es wird ein Begriff (ein Wort) gesucht, welchen man versucht zu erraten. Dabei kann man entweder Buchstabe für Buchstabe eine Eingabe machen oder gleich versuchen das richtige Wort einzugeben und zu erraten.
      • Man hat n Versuche, das Wort zu erraten. Falls der jeweilige eingegebene Buchstabe, nicht im gesuchten Wort vorkommt, wird die Anzahl der verbleibenden Versuche reduziert.
      • Entweder man errät das Wort innerhalb seiner Versuche, dann gewinnt man, oder man verliert eben.


    🥈 Teil 1: Entwickle die Funktion(en) unter Beachtung der folgenden Vorgaben. Nutze InputBox() als Eingabe1 der Buchstaben/des Wortes und die Console als Output.

    • Vorgaben
      • Verwende die Wörterliste word-list.au3 #include "word-list.au3" => _WordList() im Anhang, welche einfach nur ein Array mit Wörtern zurück gibt.
      • Es soll möglich sein, einen Buchstabe einzugeben (InputBox()) oder auch gleich ein Wort.
      • Jeder falsche Buchstabe der nicht im Wort vorkommt reduziert die Versuche.
      • Die Anzahl der Versuche richtet sich nach dem zufällig ausgewähltem Wort.
        • Angenommen es wird das Wort Tauchen gesucht, welches 7 Buchstaben hat, dann soll die Versuchsanzahl 14 betragen (also doppelt so viele Versuche wie das jeweilige Wort Buchstaben hat).
      • Der Begrüßungstext2 des Spiels, in der Console, soll wie folgt aussehen (siehe Spoiler unten).
        • Wichtig hierbei ist die Darstellung der gesuchten Buchstaben als Unterstriche mit Leerzeichen dazwischen 😈 🤭 .
          Also aus tauchen wird _ _ _ _ _ _ _.
      • Wenn ein falscher3 Buchstabe geraten wurde, sieht es so aus (siehe Spoiler unten).
      • Wenn ein richtiger4 Buchstabe geraten wurde, sieht es so aus (siehe Spoiler unten).
      • Wenn gewonnen5 wurde, sieht es so aus (siehe Spoiler unten).
      • Wenn verloren6 wurde, sieht es so aus (siehe Spoiler unten).
    1: Eingabe

    2: Begrüßungstext
    Code
    +---------------+
    |--GALGENRATEN--|
    +---------------+
    
    💡 Errate ein Wort mit 4 Buchstaben _ _ _ _ , aus der Kategorie Software Entwicklung.
    Du hast 8 Versuche 🤹‍♂️ , jeder falsche Buchstabe reduziert deine Versuche.
    3: falscher Buchstabe
    Code
    +---------------+
    |--GALGENRATEN--|
    +---------------+
    
    💡 Errate ein Wort mit 4 Buchstaben _ _ _ _ , aus der Kategorie Software Entwicklung.
    Du hast 8 Versuche 🤹‍♂️ , jeder falsche Buchstabe reduziert deine Versuche.
    
    Wort: _ _ _ _ (7 Versuche noch)
    Wort: _ _ _ _ (6 Versuche noch)
    4: richtiger Buchstabe
    Code
    +---------------+
    |--GALGENRATEN--|
    +---------------+
    
    💡 Errate ein Wort mit 4 Buchstaben _ _ _ _ , aus der Kategorie Software Entwicklung.
    Du hast 8 Versuche 🤹‍♂️ , jeder falsche Buchstabe reduziert deine Versuche.
    
    Wort: _ _ _ _ (7 Versuche noch)
    Wort: _ _ _ _ (6 Versuche noch)
    Wort: _ u _ _ (6 Versuche noch)
    5: gewonnen
    6: verloren


    🥇 Teil 2 (optional): Erweitere den Ansatz um die Möglichkeit, die Eingabe entweder direkt in der Console tätigen zu können (anstatt über InputBox() wie im Teil 1) oder überlege dir eine andere Möglichkeit (GUI, file system, what ever).


    ⚡ Rahmenbedingungen:

    • Versuche es möglichst komplett ohne Hilfsmittel und ohne Google Suche.
    • Zeitliche Vorstellung für diese Challenge ist um die 50 - 90 min (für Teil 1, Teil 2 muss nicht, kann jedoch gemacht werden 😄).
    • Wenn du eine Lösung hast und diese hier postest, dann bitte den Code in Spoiler einbinden, damit jeder selbst entscheiden kann ob er die Lösungsvariante der Anderen sehen möchte oder nicht 😉 .

    Ich bin gespannt auf eure Lösungen und wünsche happy coding 👍 .

    Viele Grüße
    Sven

    ---------------------

    Update: Hier noch ein Video um besser die Aufgabenstellung zu verstehen 😅 .

    ⚠ Disclaimer: Das folgende Video hat den Zweck (Bildungszweck), des aufbauens und teilen von Wissen. Es dient in keinster Weise dem Autor (mir) in Bezug auf Youtube, Wachstum des Kanals oder einer Monetarisierung. Falls dies als Nebenprodukt entstehen sollte, ist dies unabhängig von der Intension des Bildungszweckes hier.

    ---------------------

    🎬 Code Kata Galgenraten (Aufgabenstellung)

    Externer Inhalt www.youtube.com
    Inhalte von externen Seiten werden ohne deine Zustimmung nicht automatisch geladen und angezeigt.
    Durch die Aktivierung der externen Inhalte erklärst du dich damit einverstanden, dass personenbezogene Daten an Drittplattformen übermittelt werden. Mehr Informationen dazu haben wir in unserer Datenschutzerklärung zur Verfügung gestellt.

    ⌚ Kapitel:
    00:00 Einleitung
    00:31 Vorgaben beim Spiel gewinnen
    02:26 Vorgaben beim Spiel verlieren
    03:03 CUI (Consolen App)
    04:20 Kontext für nicht Forum-Mitglieder
    04:47 Frage nach Lösungsvorschlägen

    📑 Inhalt:
    Kurzvorstellung der Code Kata "Galgenraten" und meiner Aufgabenstellung (Vorgaben) an diese Coding Challange.

    🎪 Zielgruppe:
    Für die Teilnehmer der Code Kata "Galgenraten" im AutoIt Forum.
    Mit der Fragestellung wie genau ist die Aufgabenstellung gemeint.

    🔇 Out of scope:
    Ich habe bewusst auf das Zeigen meines Codes, meiner Lösungsvariante verzichtet.
    Ebenfalls wurde der Mechanismus wie man von "InputBox()" zur "Consolen App" kommt, nicht erläutert.

    ---------------------

    💡 Eindrücke/Feedback ist natürlich erwünscht, Danke 🤝 .

  • Hi,

    Ich dachte mir ich hab grad nen moment und könnte auch mal wieder programmieren :)

    Nette Idee von dir.

    Hier meine Lösung (Teil 1&2) ca. 80min.:

    Spoiler anzeigen

    Bin schon gespannt, was noch für Lösungen kommen.

  • Hi Kanashius 👋 , vielen Dank fürs teilnehmen an dieser coding Challange.

    Auf Grund meiner vielleicht doch nicht ausreichend eindeutigen Aufgabenstellung (Vorgaben), kam es im Ablauf deiner Lösungsvariante zu Logik-Fehlern. Also ich habe mir es angeschaut, sowohl Teil 1, als auch Teil 2 funktionieren an sich, auch wenn sich das Spiel nicht ganz so verhält, wie ich meinte.

    Daher im Post#1 nun ein kurzes 🎬 Video dazu verlinkt, um den Interpretationsspielraum zu verkleinern 😅 .
    Vielleicht passt du deine Variante nochmal ein wenig an, nachdem du das Video gesehen hast und deinen Ablauf mal testest bitte.

    Ansonsten ist klar zu erkennen, das du weißt was du tust 😇 .
    Danke und bis später. Mal schauen was da noch von den Anderen kommt 🤞 .

    Viele Grüße
    Sven

  • Meine Lösung für Teil 1 (46 min.):

    Spoiler anzeigen

    Und doch noch die Erweiterung auf Teil 2 (+ 20 Minuten) um optional auf der Konsole zu spielen:

    Teil 2

    4 Mal editiert, zuletzt von AspirinJunkie (6. Februar 2024 um 08:24) aus folgendem Grund: GUI-Position entstatisiert

  • Hi AspirinJunkie 👋 ,

    nur ganz kurz, bin auf dem Sprung: Ich glaube es wäre gut wenn du GUICreate("Galgenraten", 227, 119, 4115, -62) bspw. zu GUICreate("Galgenraten", 227, 119) änderst, damit User die nicht deine Monitoraufteilung haben, die GUI auch angezeigt bekommen 😅 oder ist dies Absicht?

    Später mehr zum Code und Spielverhalten ... muss ab und an auch mal arbeiten 🤣 .
    Viele Grüße
    Sven

  • Das du im Backend ein absoluter Held 🦸‍♂️ bist (ist nicht ironisch), weiß man ja mittlerweile, doch das GUI Handling mit GuiOnEventMode ist doch nicht schlecht.
    So 'ne Kleinigkeit ist nicht der Rede wert. Wie gesagt, später mehr (Bewertung der Lösung) 🤝 .

  • Hier ist meine Variante für Teil 1 (ggf. etwas umständlich und 1-2 Sachen zusätzlich XD).

    Ca. 52 Min.

    Edit: Hatte die Version ohne die Konsolenausgabe für doppelte Buchstaben kopiert (die Prüfung darauf war bereits enthalten) XD hier mal nachgeliefert.

    Spoiler anzeigen

    2 Mal editiert, zuletzt von Moombas (6. Februar 2024 um 10:25)

  • so hier mein kurzer Ansatz. Hab Online-Schulung und es immer nebenbei gemacht. Zeitansatz kann ich nicht sagen ^^

    Spoiler anzeigen

    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 ! lauffähiges ! Script, 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. ;)

    2 Mal editiert, zuletzt von SOLVE-SMART (6. Februar 2024 um 14:04) aus folgendem Grund: Einrückungen mit Tidy setzen lassen (ist wohl beim Einfügen in den Spoiler verloren gegangen).

  • upps, ja danke hab ich nicht dran gedacht.

    Danke

    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 ! lauffähiges ! Script, 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. ;)

  • Hi liebe Leute 👋 ,

    Danke für eure Einsendungen 👍 . Allerdings darf ich auch bekannt geben, dass sich keines der Programme/Skripte bisher so verhält wie ich es "versucht habe" in den Vorgaben zu beschreiben/vorzugeben => mit anderen Worten: Macht die Glotzen oof beim lesen oder guggt mein Video dazu :rofl: .

    💡 Nein wirklich vielen Dank. Mir ist klar das ihr das mal zwischendurch gemacht habt und genau so war ja auch die Intension, etwas Abwechslung.
    ⚠ Ich versuche mal die Unterschiede etwas zu beleuchten/aufzulisten.

    Bisher kann ich sagen das ihr alle die Coding Challenge (erfolgreich) absolviert habt 👌 .
    Wenn es auch hier und da Unterschiede bei euren Lösungen gibt. Die programmatischen Hürden sind bisher keine für euch, eher die "hab' ich das nun wirklich richtig verstanden was der da von mir will 🤔" 🤭 .



    Also ich melde mich mit 'ner kleinen Auflistung von Abweichungen usw.
    Weiterhin einen angenehmen Tag euch allen noch.

    Viele Grüße
    Sven

  • Allerdings darf ich auch bekannt geben, dass sich keines der Programme/Skripte bisher so verhält wie ich es "versucht habe" in den Vorgaben zu beschreiben/vorzugeben

    Das war an 2 Stellen bei mir auch bewusst so gemacht.

    1. Die vorgebene Wortliste - gefiel mir einfach nicht, weswegen ich die Online-API genommen habe (damit ist aber auch die Kategorieangabe raus)
    2. Die Anzahl der Versuche richtet sich nach dem zufällig ausgewähltem Wort:
      Die Methodik der Verdopplung war für mich hierbei fachlich nicht nachvollziehbar.
      Denn: Wenn ein Wort 9 verschiedene Buchstaben hat, dann ist die Anzahl der maximalen Fehlversuche 18.
      Das bedeutet, dass man schlicht gar nicht mehr verlieren kann, da es mehr Fehlversuche gibt als mögliche Fehlbuchstaben.
      Daher schlage ich einen Ansatz vor, welcher versucht die Wahrscheinlichkeit, dass man in der vorgegebenen Anzahl an Ziehungen das Lösungswort zufällig richtig zieht, über alle Buchstabenanzahlen hinweg halbwegs konstant zu halten.
      Mein Vorschlag (mit nicht ganz trivialer Stochastik) zur Berechnung der Anzahl der Fehlversuche wäre daher hierzu folgender:
    Spoiler anzeigen

    3 Mal editiert, zuletzt von AspirinJunkie (7. Februar 2024 um 13:27)

  • da wir nicht an der Uni sind, würde ich meinen Versuch nochmal korrigiert abgeben wollen. Ich hatte das mit dem vollen Suchbegriff vergessen. ^^

    wenn diese Version nicht mehr in die Wertung geht alles gut.

    Spoiler anzeigen

    Ich stelle fest, dass ich eher fahrig bin. Jetzt hab ich umgestellt auf Sven seine 0-based Wortliste und den UBound vergessen.

    peinlich, peinlich

    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 ! lauffähiges ! Script, 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. ;)

    3 Mal editiert, zuletzt von Schnuffel (6. Februar 2024 um 16:01)

  • Oh wow, ihr macht mich fertig 😂 .

    AspirinJunkie ich gehe davon aus (hoffe es), dass du meinen Kommentar mit einem Schmunzeln aufgenommen hast und dich nicht zur Rechtfertig gedrängt gefühlt hast jetzt?! Ist doch alles ein Spaß und ein wenig Übung für nebenbei. Deinen Ansatz bzw. deine Erläuterung verstehe ich. Ehrlich gesagt hatte ich bei der Konzeption der Aufgabe nicht so detailiert darüber nachgedacht, was "fachlich" korrekt(er) wäre. Es stimmt aber einfach was du sagst 🤝 .

    Schnuffel alles gut auch auf meiner Seite. Gern nehme ich deinen neuen Code mit auf. Die Wertung ist auch keine Siegerehrung (leider 😅). Ist eher interessant zu sehen, wie verschiedene Leute an die Aufgabe herangehen usw. Da fällt mir ein, ich muss mein Code auch noch posten. Folgt noch.

    Wenn ich die Zeit finde mir das genauer anzuschauen AspirinJunkie, gebe ich dir gern Feedback.

    Viele Grüße
    Sven

  • Hmm, ich weiß nicht warum aber ich befürchte das auch meine Abweichungen bewusst gewählt wurden aber schauen wir mal auf deine Auflistung XD

    Ich weiß schon warum ich früher mit div. Lehrern aneinander gerasselt bin :rofl:

  • Ich weiß schon warum ich früher mit div. Lehrern aneinander gerasselt bin :rofl:

    Ein wenig Reibung ist völlig okay 🤭🙃😏 . Bin trotzdem froh das du teilgenommen hast 😅 .

  • So liebe Leute, hier nun mein "Wurf" für die Beschäftigungstherapie "Galgenraten" 😂 .

    Galgenraten (Teil1 und Teil2 (wenn compiled))

    Wie so oft, mein Code ist länger als der jedes Anderen bisher hier. Auch 'ne Art von Erkennungsmerkmal oder so 😅 .

    💡 Die Auswertung folgt. Mal sehen ob ich das heute noch schaffe oder erst morgen dann.

    Viele Grüße und guten Abend
    Sven

  • ich hab auch mal mein glück versucht mit dem Galgen

    Leider bekomme ich bei der Lösung immer Fehler aber schaut selbst.


    ^^^ich habe mir grad eben erst dein video angesehen hoffe :D dich stört die gui nicht^^.


    edit:

    Galgen.zip nochmal die Anzahl an versuchen angepasst. bei mir bis zu 16max damit der galgen wachsen kann.

  • Hier noch meine Variante mit GUI, wobei ich versucht habe so wenig wie möglich am ursprünglichen Code zu verändern (und ja, normalerweise würde ich start des Programms und GUI-Erstellung trennen, ka warum ich das diesmal anders gemacht habe^^):

    Spoiler anzeigen