Lua-Aufgaben (inspiriert von CodingBat)

!!! Please ensure, that your contribution or question is placed into the relevant section !!!
Questions about rolling stock, for example, do not belong in "Questions about the Forum". Following is perhaps the right area where your question will be better looked after:
General questions to EEP , Splines, rolling stock, Structures in EEP, landscape elements, Signalling system and controlling, designers, Europe-wide EEP meetings , Gossip
Your cooperation to keep the forum clear is appreciated.
  • Vor einer Weile habe ich im Netz eine exzellente Sammlung kleiner Programmier-Übungen gefunden.


    Die Seite heißt CodingBat und bietet Aufgaben für Java und Python.

    Für Lua kenne ich nichts vergleichbares.

    Deshalb übersetze ich die Aufgabenstellungen von CodingBat hier im Forum erstens in Lua und zweitens in Deutsch.


    Für jede Aufgabe starte ich einen neuen Thread, damit man Aufgabe und Lösungen immer richtig zuordnen kann.


    Im Kern sind die Aufgaben alle identisch. Es geht immer darum, eine Funktion zu schreiben, die mit Argumenten aufgerufen wird und den Vorgaben entsprechend etwas zurück gibt. Das ist in der Programmierung ein sehr nützliches Prinzip, welches ich im folgenden Beispiel erkläre:

    LUA Source Code
    1. function Beispiel( zahl )
    2. ergebnis = zahl * zahl
    3. return ergebnis
    4. end

    Dieses Beispiel ist eine Funktion, welche das Quadrat von zahl zurückgibt.

    In der ersten Zeile steht in den Klammern hinter dem Funktionsnamen ein Platzhalter. Mann nennt ihn ein "Argument". Das ist nichts anderes als eine Variable. Es bekommt einen Namen und diesen Namen kann man im weiteren Verlauf als Platzhalter einsetzen. In meinem Beispiel habe ich den Namen zahl gewählt.

    Mit diesem Platzhalter definieren die nächsten zwei Zeilen ein Prinzip.

    In Zeile 2 steht: Nimm die Zahl, welche du anstelle von zahl bekommst, multipliziere sie mit sich selbst und lege das Resultat der Berechnung anstelle der Variable ergebnis ab .

    In Zeile 3 steht: Gib die Zahl, welche anstelle der Variable ergebnis steht, dort aus, wo die Funktion aufgerufen wurde.

    Das end in Zeile 4 kennzeichnet das Ende der Funktion Beispiel().


    Wenn man die obige Funktion definiert hat, dann kann man sie an anderer Stelle aufrufen um das Quadrat einer Zahl zurückzubekommen.

    Beim Aufruf schreibt man in die Klammern diejenige Zahl, von der man das Quadrat bilden möchte.


    print("Das Quadrat von 2 ist: ",Beispiel(2)) gibt den folgenden Text aus:

    Das Quadrat von 2 ist: 4


    Lua erkennt also bei der Ausführung der print() Funktion, dass am Ende ein Funktionsaufruf steht. Deshalb führt es zuerst diese Funktion Beispiel() mit der Zahl 2 als Argument aus. Das, was diese Funktion zurückgibt, setzt Lua dann im print() genau dort ein, wo die Funktion steht. Dann wird der komplette Text ausgegeben.


    Sinn solcher Funktionen ist, dass man sie später mehrfach mit verschiedenen Werten aufrufen kann.


    Bei den CodingBat Aufgaben geht es immer darum, jeweils eine Funktion zu schreiben, die eine ganz bestimmte Aufgabe erfüllt. Der Funktionsname ist vorgegeben, die Anzahl und Reihenfolge der Argumente ebenfalls. Die Argumente haben Namen, die man theoretisch ändern könnte weil sie nur innerhalb der Funktion benutzt werden. Behaltet die Namen der Argumente trotzdem bei, damit alle später leichter ihre Lösungen vergleichen können.


    Für das obige Beispiel würde die Aufgabenstellung so lauten:

    Schreibe eine Funktion Beispiel(zahl), welche das Quadrat von zahl zurückgibt.


    Und es gibt viele Wege um das Ziel zu erreichen. Einen habe ich oben gezeigt.

    Ein zweiter, umständlicher Weg wäre, den Wert zahl genau zahl mal zu addieren.

    Eine weitere Variante wäre, dass man das Ergebnis der Multiplikation in der selben Variable zahl speichert, statt eine neue Variable dafür anzulegen.

    Oder man gibt das Ergebnis gleich zurück, ohne es zuvor in einer Variablen zu speichern.


    Je mehr Varianten man sieht und versteht, desto mehr Möglichkeiten stehen einem offen. Und desto besser versteht man Programmieren ansich. Deshalb ist es meines Erachtens interessant, den eigenen Lösungsweg mit anderen zu vergleichen.


    Jeder, der mag, darf seinen Lösungsweg posten. Auch dann, wenn es schon andere und vielleicht bessere Wege gibt. Es ist kein Wettstreit, wer den besten Weg findet. Sondern es geht darum, den eigenen Versuch mit dem anderer zu vergleichen und daraus mehr über das Programmieren zu lernen.


    Folgende Lua-Aufgaben stehen bisher zur Verfügung

    1. Ausschlafen
    2. Affentheater
    3. Doppelte Summe
    4. Differenz21
    5. Papagei-Terror
    6. Macht10
    7. nahe Hundert
    8. positiv / negativ
    9. kein Ding
    10. fehlender Buchstabe
    11. Vorne <-> Hinten
    12. Vorne 3
    13. hinten rum
    14. glatte Teiler
    15. vorne2 hinten2
    16. sag hi
    17. Eis und Dampf
    18. zwischen 10 und 20
    19. jugendlich
    20. einsamer Teenager
    21. Entferne
    22. mixStart
    23. Start Oz
    24. drei Max
    25. nahe 10
    26. zwei Wertebereiche
    27. der größere im Rahmen
    28. drei E
    29. letzte Ziffer
    30. drei Große
    31. gleicher Abstand
    32. String mal
    33. vorne mal
    34. zähle xx
    35. DoppelX
    36. jeder Zweite
    37. String Explosion
    38. die letzten zwei
    39. zähle die 9
    40. eine 9 unter den ersten 4
    41. Folge123
    42. Stringvergleich
    43. x entfernen
    44. abwechselnde Paare
    45. armes yak
    46. Reihe 667
    47. kein Drilling
    48. fünf drüber eins drunter


    Zum Abschluss noch ein passendes Zitat, welches ich auf der WebSite von Nick Parlante, dem Autor der CodingBat Seite, gefunden habe:

    "Experience is what you get when you didn't get what you wanted."

    "what's the downside to eating a clock?"

    - Joel -

    The post was edited 20 times, last by Goetz: Links zu den Aufgaben hinzugefügt. ().

  • Servus miteinander,


    und ein herzliches Dankeschön an Götz für die hübschen Aufgaben. Wer diese nicht in EEP lösen oder ohne hin und her zwischen Editor und Interpreter arbeiten will, dem kann ich Lua:demo empfehlen. Das ist ein online-Dienst mit zwei Fenstern. Ins obere schreibt Ihr Euren Lua-Script und nach Klick auf [run] erscheint das untere Fenster mit dem Ergebnis.

    Hier der Link, den Ihr Euch auch (so wie ich) als Verknüpfung auf den Desktop legen könnt: https://www.lua.org/cgi-bin/demo


    Viele Grüße aus Dresden


    Dieter


    So eine Arbeit wird eigentlich nie fertig, man muss sie für fertig erklären, wenn man nach Zeit und Umständen das Mögliche getan hat.

    Johann Wolfgang von Goethe


    PC: Intel Core i7-4790K CPU @ 4.00GHz, 16 GB RAM, GeForce GTX 980 mit 4095 MB, 256 GB SSD, 2 x 2,0 TB HDD / Win 10 Home (1909) / 2 Monitore
    EEP 7 ►9►X►11►12►13►14.1 Expert (x64), Patch 2


    železničář ist tschechisch und heißt Eisenbahner

  • Hallo zeleznicar,

    Wer diese nicht in EEP lösen oder ohne hin und her zwischen Editor und Interpreter arbeiten will,

    Ich nutze dafür Notepad++. Da gibt es ja eine Console wo das Code Ergebnis angezeigt wird. Ist auch sehr hilfreich.

    mfg Micha :aq_1:


    Taichi X399, AMD X1950 3,40 Ghz, 64GB Ram, Geforce GTX 1080 8GB

    16.2 Plugin 1,2 :as_1:

    Windows 10 Pro, Version 1903, BSBuild 18362.476


    "Geduld ist das Schwerste und das Einzige, was zu lernen sich lohnt. Alle Natur, alles Wachstum, aller Friede, alles Gedeihen und Schöne in der Welt beruht auf Geduld, braucht Zeit, braucht Stille, braucht Vertrauen."

    Hermann Hesse

  • Hallo,


    ich möchte mich nicht unbeliebt machen, wahrscheinlich bin ich es jetzt,

    aber... was haben alle diese Aufgaben mit EEP zu tun?


    Die Frage formuliere ich deshalb so hart und unverblümt, weil ich ein Typ bin der

    nicht um des Wissens wegen lernt, sondern der, der das Gelernte als

    Werkzeug für die (Text)Aufgabe im Allgemeinen und hier für EEP im Besonderen versteht.


    Für meinen Lernprozess sollten bei all diesen Aufgaben Beispiele zur Anwendung in EEP folgen.

    Vielleicht ist das ja gar nicht das Anliegen, das sollte es m.E. aber hier sein.


    Ein (großer?) Anteil der EEP-User hier können mit dieser Sprache und der darin enthaltenen Logik nichts anfangen, und werden es auch nicht, wenn man ihnen nicht hilft diese Sprach zu verstehen, als ihnen die Grammatik einer unverstandenen Sprache vorzusetzten.


    viele Grüße Max

    (der sich jetzt schon ärgert das geschrieben zu haben, mögen die dislikes über mich kommen.)

  • was haben alle diese Aufgaben mit EEP zu tun?

    Sehr viel, Max. Sozusagen alles.


    Weil man erst das Handwerkszeug lernen muss, bevor man es anwenden kann.

    Weil man gehen lernen muss, bevor man den Hürdenlauf angeht.

    Weil man einzelne Buchstaben und Worte lernen muss, bevor man das Lesen ganzer Sätze lernt.


    Diese Aufgaben vermitteln die absoluten Grundlagen welche man verstehen muss, um eine Programmiersprache - egal welche - einzusetzen. Wenn du anhand dieser Aufgaben das Programmieren im Kern begriffen hast, dann kannst du EEP mit Lua steuern.



    Deine Frage verärgert mich nicht und hat auch kein Dislike verdient.

    Solange man diese Dinge nicht durchschaut ist es wirklich schwer, den Zusammenhang zu erkennen.


    Aber sobald du die ersten Lichtblicke hast wird dir klar werden, was das mit EEP zu tun hat. Wenn du zum Beispiel die Buchstaben hi in einem String erkennen kannst, dann kannst du auch das Zeichen # am Anfang eines Zugnamens erkennen. Und du verstehst zugleich, dass es sich auch beim Zugnamen um einen String handelt. Du lernst mit diesen kleinen Übungen, was ein String ist, wie man ihn liest und wie man ihn verändert.


    Und weil die Übungen so winzig klein sind, kann man sich bei jeder Aufgabe auf genau einen Aspekt konzentrieren.

  • was haben alle diese Aufgaben mit EEP zu tun?

    Es sind Fingerübungen, ganz wie Tonleitern beim Musizieren. Es gehr darum, dass Du in die Lage kommst, beliebige Fragestellungen mit Lua zu lösen, ohne irgendwelche Skripte von anderen zu kopieren.


    Diese ganze Stringakrobatik kann z.B. für die Ansteuerung von Zugzielanzeigern interessant sein.



    ...sondern der, der das Gelernte als

    Werkzeug für die (Text)Aufgabe im Allgemeinen und hier für EEP im Besonderen versteht.

    Bevor Du eine Textaufgabe lösen kannst, musst du ersteinmal die Grundrechenarten lernen. Das kleine Einmaleins hilft auch dabei.

  • Hi mpillip


    die Beispiele, die hier für LUA gegeben sind haben schon was für sich. So kann man lernen, wie man mit solchen Scripts umgehen kann.

    Natürlich sind diese Dinge nur für jene interpretierbar, welche sich mit dieser Fremdsprache herumschlagen wollen. Einige werden dankbar sein solche Hinweise zu lesen...


    Ich, für meinen Teil habe nicht wirklich Freude an den Luas-Scripts - scheint mir diese Sprache doch nicht gerade das Gelbe vom Ei.

    Diese Meinung habe ich, da mir nun C doch viel lieber ist und es mir langsam überdrüssig wird, beständig sich mit neuen Scriptsprachen ohne anständigen Debugger (ähnlich C, Basic, Pascal, Java, HTML & wie auch immer) herumschlagen zu müssen.

    Ich wundere mich einfach immer nur, dass jedes neue Tool auch gleich mit neuen Scripts einhergehen muss. Das ist so ähnlich wie bei den Bahnen. Jede Nation muss ja eigene Signale, Kupplungen, Stromart, Spurweite und weiss der Geier welche Vorschriften hochhalten. => es lebe der Nationalismus

    - oder in diesem Fall => hoch der Erfindergeist der Programmscripts und gegen jede Normierung, welche es den Programm-erfahrenen ohne

    zusätzliche Bildung möglich macht diese richtig anzuwenden...

    EEP 15.1 [x64] Patch 2

    hat ein klein wenig Ahnung von System-Programmierung :bn_1:

    https://abload.de/img/zglbrckqhkzh.jpg

    Windows 10 Pro 64-Bit

    HP Compaq 8100 Elite CMT PC / Intel(R) Core(TM) i5 CPU 760 @ 2.93GHz RAM 12GB

    GeForce GTX 1050 Ti / LCD Monitor 2*HDMI 3440 * 1440

    HP Z230 - CPU Intel® Xenon® E3-1225 v3 3.2GHz 64Bit (Win10 & Debian 10.3)

  • mögen die dislikes über mich kommen

    Nö.


    Die Frage formuliere ich deshalb so hart und unverblümt

    Die Antwort formuliere ich ebenso hart und unverblümt.


    Ich habe das schon hundertmal geschrieben und schreibe es zum dritten mal. :ad_1:


    Ein Steuerkreis ist Programmierung. :bn_1:

    Nur ist es sehr viel schwieriger, eine komplexe Schaltung aus Steuerkreisen zu durchschauen.


    Nix glauben?

    Guck Dir eine Schaltung von André, oder eine Grosskopf Anlage an.

    Wenn Du die verstehst fresse ich eine Lua Codeseite (auf Maispapier). :ae_1:


    :aq_1:Gruss Jürg

    Samsung Series 9 Laptop / Lenovo Z50 - 70 Laptop
    Intel i5 1.7 Ghz / Intel i7 2.0 Ghz
    4 Gb Speicher / 8 Gb Speicher
    Intel HD Graphics 4000 / NVIDIA Geforce 840M
    Windows 10 64 /Windows 10 64
    EEP15, EEP16 / EEP14, EEP15
    AnlagenBau / AnlagenLaufLass

    _____________________________________________________________________

    UF1

  • Ein kleiner Hinweis an alle, welche die Übungen der Reihe nach machen:


    Ich habe nach Aufgabe 24 noch drei weitere eingefügt. Damit haben sich alle nachfolgenden Nummern bis 39 (ursprünglich 36) verschoben.


    Diese drei Aufgaben hatte ich bei CodingBat übersehen und ich möchte gerne die Reihenfolge so beibehalten, wie sie bei CodingBat auch ist.


    Die neuen Aufgaben haben die Nummern 25, 26 und 27.

    Anschließend wird es mit Aufgabe 40 weitergehen.