Funktion für nur Zahlen und nur Buchstaben



  • MFK schrieb:

    Man kann deinem Code ansehen, dass er ohne bewusste Hirntätigkeit entstanden ist.

    Ich fasse das Kompliment auf! Danke! 🙂

    Nee, im Ernst, es hat Vor- und Nachteile. Nachteil ist: Wenn mir nix einfaellt, hab ich ein Problem. Vorteil ist: Nahezu fehlerfreie Software ohne nachzudenken hinzubekommen kann nicht jeder.

    Meine ehem. Arbeitgeber haben sich regelmaessig darauf verlassen, dass ich immer sofort eine Loesung fuer auch noch so komplexe Probleme gefunden habe. Einmal hab ich z.B. ein Projekt realisiert, bei dem vorher ein Gutachten gemacht worden war, dass es technisch unmoeglich sei. Mein Chef sagte mir das, und fragte mich, ob ich es machen wolle. Und ich sagte ja, und dann machte ich es. Der Kunde war sehr zufrieden mit dem Endprodukt.

    In der betreffenden Firma machte ich immer die Sachen, die niemand anders machen wollte oder konnte.

    Ich bin sozusagen einer der Muellmaenner der Softwareindustrie! Ich mach alles! 😃



  • Power Off schrieb:

    Nee, im Ernst, es hat Vor- und Nachteile. Nachteil ist: Wenn mir nix einfaellt, hab ich ein Problem. Vorteil ist: Nahezu fehlerfreie Software ohne nachzudenken hinzubekommen kann nicht jeder.

    Wenn das für dich so passt, ist das in Ordnung. Aber dann würde ich dich bitten, darauf zu verzichten, den Anfängern hier solchen Code als Lösung oder Beispiel anzubieten. Ich finde, dass du damit eine Menge Schaden anrichtest. Geh einfach mal davon aus, dass der überwiegende Teil der Leute, die hier Fragen stellen, nicht so begnadet ist wie du (nicht ironisch), und deshalb mit solchem Code nicht klarkommt.



  • Power Off schrieb:

    Nee, im Ernst, es hat Vor- und Nachteile. Nachteil ist: Wenn mir nix einfaellt, hab ich ein Problem. Vorteil ist: Nahezu fehlerfreie Software ohne nachzudenken hinzubekommen kann nicht jeder.

    programmieren ohne nachzudenken hat nachteile: dein code ist kacke. außerdem geht das natürlich nur in domänen, wo du zu hause bist.
    vorteile: keine.
    natürlich kann ich auch in etlichen domänen code einfach so runterschreiben und bis auf ein paar tippfehler, die der compiler schnell sieht (vor allem retrun statt return), ist der code clean. nur ich schaue immer danach nochmal drüber, ob es was zu verbessern gibt. und meistens ist da nix mehr, weil ich auch auf anheb den weg einschalge, wo es nix mehr zu verbessern gibt.
    zeitersparnis sehe ich bei deinem code nicht, denn ich lese code mindestens 20-mal häufiger, als ich ihn schreibe. also muß nur das lesen optimiert werden. selbst wenn ich vor so einer funktion eine sekunde pausieren würde, um nachzudenken, welche schleife paßt und danach nochmal 2 sekunden, um zu schauen, ob es sich hübsch anfühlt, hab ich die 3 sekunden doch schon ganz bald wieder drin, sobald ich den ersten fehler suche und anläßlich dessen den code mehrmals lese.
    gerade bei arbeitgebern wie du sie beschreibst, die ganz mächtig zeitdruck machen und auch nicht gestatten, daß man nachher noch ein wenig pflegt, ist die große kathastrophe doch immer dann, wenn der kunde nach 2 jahren noch ein feature dazu will. dreht man hier was, reißt woanders ein bug auf und die sucherei geht los.



  • volkardus schrieb:

    natürlich kann ich auch in etlichen domänen code einfach so runterschreiben und bis auf ein paar tippfehler, die der compiler schnell sieht (vor allem retrun statt return), ist der code clean. nur ich schaue immer danach nochmal drüber, ob es was zu verbessern gibt. und meistens ist da nix mehr, weil ich auch auf anheb den weg einschalge, wo es nix mehr zu verbessern gibt.

    Das ist bei mir genauso. 🙂

    (bleibende Tippfehler mach allerdings auch sehr wenige, da ich beim Schreiben den Blick immer auf dem Cursor habe und meist sofort korrigiere, wenn ich es sehe; allerdings mach ich als weniger offensichtliche Tippfehler, z.B. "==" statt "!=" usw., oder falsche Bezeichner, aber die find ich immer beim nochmal durchlesen, compilieren oder testen)

    Die Methode, den Code solange zu durchzulesen, bis man davon ueberzeugt ist, ist gut. Meist werfe ich den Compiler nicht eher an, bis ein Modul testbereit ist.

    volkardus schrieb:

    gerade bei arbeitgebern wie du sie beschreibst, die ganz mächtig zeitdruck machen und auch nicht gestatten, daß man nachher noch ein wenig pflegt, ist die große kathastrophe doch immer dann, wenn der kunde nach 2 jahren noch ein feature dazu will. dreht man hier was, reißt woanders ein bug auf und die sucherei geht los.

    Ich schreibe die Programme meist von vornherein so, dass man sie erweitern kann, und dass durch eine Aenderung nirgendwo "bugs aufreissen" koennen.

    Es gibt ein paar einfache Techniken, z.B. Black-Boxing (aber auch White-Boxing), mit denen man solche Probleme vermeiden kann.

    Jede Funktion hat eine klare Aufgabe und eine klare Schnittstelle. Klassen z.B. duerfen keine nicht-hierarchischen Abhaengigkeiten haben.

    Code muss geordnet sein wie eine Julia-Menge, z.B.: man kann rein- und rauszoomen, aber die Zusammenhaenge sind stets klar.



  • Power Off schrieb:

    Wenn ich zur Zeit einen Job haette

    kann das mit deinem kacke code zusammenhaengen?



  • MFK schrieb:

    Aber dann würde ich dich bitten, darauf zu verzichten, den Anfängern hier solchen Code als Lösung oder Beispiel anzubieten. Ich finde, dass du damit eine Menge Schaden anrichtest.

    Meinst Du nicht, dass Du ein wenig uebertreibst?

    Mit "solcher Code" bezieht Du Dich auf folgende gueltige C Konstruktion:

    for(;;) {
       if ( /* Wiederholbedingung */ ) continue;
       if ( /* Abbruchbedingung */ ) break;
    }
    

    Dies ist ein gaengiges Konstrukt. Ich nehme es immer, wenn die Abbruchbedingung zu Beginn unklar ist. Dann kann ich spaeter nach Belieben Abbruch- oder Wiederholbedingungen eingeben.

    Man kann auch "goto" dafuer verwenden, aber ich finde "for" dafuer bequemer.

    Jeder Anfaenger wird frueher oder spaeter sowas lesen muessen, da wird er nicht drum rum kommen.

    Und meine readnum() Funktion is auch sehr leicht zu lesen.

    Als ich C Anfaenger war, vor 19 Jahren, hab ich ja schon sowas lesen koennen (aber da konnte ich schon BASIC und Assembler).

    Irgendwie hab ich das Gefuehl, ihr wollt mich bloss verscheissern. 🙄



  • --linuxuser-- schrieb:

    kann das mit deinem (...) code zusammenhaengen?

    Nein. Ich hatte bloss bei meinem letzten Arbeitgeber zuviel Stress, und hab selber gekuendigt, weil ich nicht mehr arbeiten konnte. Jetzt nach 2-3 Monaten kann ich wieder ein bisschen programmieren.

    Ich wuensch Dir das auch mal.



  • Power Off schrieb:

    Meinst Du nicht, dass Du ein wenig uebertreibst?

    Nein. Du solltst doch bemerkt haben, dass eine große Anzahl qualifizierter Boardbenutzer deinen Stil furchtbar bis entsetzlich findet.

    Mit "solcher Code" bezieht Du Dich auf folgende gueltige C Konstruktion:

    Es geht hier nicht um gültig, es geht um Stil. Mag sein, dass das für dich persönlich nicht relevant ist. Gegenüber denen, die sich an so etwas stören, verhältst du dich aber äußerst rücksichtslos.

    Jeder Anfaenger wird frueher oder spaeter sowas lesen muessen, da wird er nicht drum rum kommen.

    Anfängern geht es hier aber selten darum, Code zu lesen. Die wollen schreiben, und du lieferst stilistisch schlechte Beispiele. Das muss nicht sein.

    Als ich C Anfaenger war, vor 19 Jahren, hab ich ja schon sowas lesen koennen (aber da konnte ich schon BASIC und Assembler).

    Wie gesagt, schön, das du so begabt bist, aber viele, die hier Fragen stellen, sind es nun mal nicht. Und darauf nimmst du keine Rücksicht.

    Irgendwie hab ich das Gefuehl, ihr wollt mich bloss verscheissern. 🙄

    Mir zumindest ist es durchaus Ernst mit meinem Appell: Halt dich von den Anfängern fern, du versaust ihnen durch deinen Code den Stil. Ich fände es gut, wenn du Anfängern deine Fähigkeiten im Lesen von schlechtem Code beibringen könntest. Aber du bringst ihnen nur bei, wie man schlechten Code schreibt.



  • Power Off schrieb:

    --linuxuser-- schrieb:

    kann das mit deinem (...) code zusammenhaengen?

    Nein. Ich hatte bloss bei meinem letzten Arbeitgeber zuviel Stress

    warum nur??



  • MFK schrieb:

    Mir zumindest ist es durchaus Ernst mit meinem Appell: Halt dich von den Anfängern fern, du versaust ihnen durch deinen Code den Stil. Ich fände es gut, wenn du Anfängern deine Fähigkeiten im Lesen von schlechtem Code beibringen könntest. Aber du bringst ihnen nur bei, wie man schlechten Code schreibt.

    Anstatt immer nur dasselbe zu wiederholen, nenn doch mal konkret die Stellen, die Dich stoeren, und schreib zu, warum. Damit dieser Thread fuer einen Anfaenger auch noch einen Wert bekommt. Und fuer mich auch.

    Ich halte meinen Stil fuer sehr gut, und jeder, fuer den ich gearbeitet habe, auch. Also, begruende mal Deine Aussagen.

    Das ein "while" in dem Fall gereicht haette ist klar, aber warum soll die "for"-Konstruktion "schlechter Code" sein?

    Warum rechtfertig das eine Serie persoenlicher Beleidigungen?



  • --linuxuser-- schrieb:

    warum nur??

    Das hatte mehrere Gruende, aber es lag hauptsaechlich daran, dass ich ein Riesenprojekt allein machen musste.



  • Power Off schrieb:

    Anstatt immer nur dasselbe zu wiederholen, nenn doch mal konkret die Stellen, die Dich stoeren, und schreib zu, warum. Damit dieser Thread fuer einen Anfaenger auch noch einen Wert bekommt. Und fuer mich auch.

    Mehrere Leute haben dir an mehreren Stellen gesagt, was sie an deinem Code stört. In diesem und auch in anderen Threads. Du verstehst die Argumente nicht.

    Ich halte meinen Stil fuer sehr gut, und jeder, fuer den ich gearbeitet habe, auch. Also, begruende mal Deine Aussagen.

    Warum soll ich nochmals wiederholen, was dir viele Benutzer hier schon mehrfach gesagt haben, und was du bisher nicht verstanden hast? Du hältst deinen Code für stilistisch in Ordnung, sehr viele kompetente Leute hier finden, dass er grottenschlecht ist.

    Ich glaube, wir können dich nicht davon überzeugen, dass dein Code schlecht ist. Genausowenig wirst du uns überzeugen können, dass er gut ist. Könnstest du nicht einfach akzeptieren, dass dein Code von vielen in dieser Community für schlecht gehalten wird und dich um des Friedens willen gegenüber Anfängern zurückhalten?

    Warum rechtfertig das eine Serie persoenlicher Beleidigungen?

    Das tut es nicht. Aber wenn jemand sich derart uneinsichtig zeigt wie du, dann verlagert man schon mal die Argumente auf eine unsachliche Ebene. Ich nehme mich da nicht aus. Du hast wieder und wieder gezeigt, dass du sachliche Argumente gar nicht wahrnimmst. Das einzige, was du anscheinend als stilistisches Merkmal gelten lässt, ist, ob der Code läuft oder nicht. Die Bewertungskriterien Anderer akzeptierst du nicht. Damit bist du unbelehrbar.

    In Anlehnung an den alten Geisterfahrerwitz:
    "Im Forum gibt es einen, der echt seltsame Ansichten über guten Code-Stil hat."
    "Einen? Hunderte!"



  • Power Off schrieb:

    Die Methode, den Code solange zu durchzulesen, bis man davon ueberzeugt ist, ist gut. Meist werfe ich den Compiler nicht eher an, bis ein Modul testbereit ist.

    ich compiliere da aber viel, viel mehr.

    Ich schreibe die Programme meist von vornherein so, dass man sie erweitern kann, und dass durch eine Aenderung nirgendwo "bugs aufreissen" koennen.

    hört, hört.
    manchmal hat man "by design" bestimmte sonderwünsche ausgeschlossen. natürlich in absprache mit dem kunden. und genau die will er dann doch haben.

    das geht dann beim vogelsimulator so:
    P: "ok, normale vögel wie adler stellen konzeptionell kein problem dar. und vögel, die auf dem biden bleiben, weil sie nicht fliegen können, da behaupten wir einfach, daß sie nicht fligen wollen. wie isses mit pinguinen?"
    K: "das programm wird ganz sicher nur die mitteleuropäische vogelwelt abbilden sollen. laßt pinguine weg".
    und 2 jahre später hätte er gerne eine pinguin-"erweiterung". daß dabei ganz zentrale klassen angetatscht werden und das eher einem kompletten redesign gleichkommt, ist ein problem.

    oder bei deinen parsern, wir haben eine zeilenorientierte sprache und es ist in der DIN dazu definiert, daß jede zeile mit \n angeschlossen ist. insbesondere ist das letzte zeichen jeder gültigen quellcodedatei ein \n. ich benutze die info von anfang an und schreibe sogar so code wie du. also keine getline() und dann die zeilen verarbeiten, sondern mitten im parser drin immer getch() und tests.
    den code, gegen die explizite spezifikation vorher schon so zu schreiben, daß EOF gültiges zeilenende wäre, ist falsch, denn der user hat sich damals gewünscht, daß alle falschen programme auch mit fehlermeldung bestraft werden.
    nach 2 jahren kommt der kunde und will auch EOF als das letzte zeilenende erlauben, weil er inzwischen vermehrt einen editor einsetzt, der das letzte \n auch mal wegschmeißt. ich müßte im ganzen programm jede einleseschleife anpassen. oh, graus!

    Jede Funktion hat eine klare Aufgabe und eine klare Schnittstelle. Klassen z.B. duerfen keine nicht-hierarchischen Abhaengigkeiten haben.

    du meinst kene zyklischen abhängigkeiten? äh, das kommt aber schon mal vor. warum die forderung?

    aber ich hab ne andere: jede funktion erfüllt nur einen zweck. dein monster liest whitespaces davor weg und danach, kümmert sich ums vorzeichen und liest die ziffernfolge selbst ein. das wäre für mich mindestens 4 funktionen, für jeden einfachen zweck eine und eine, die alles zusammenpappt.

    Code muss geordnet sein wie eine Julia-Menge, z.B.: man kann rein- und rauszoomen, aber die Zusammenhaenge sind stets klar.

    julia-mengen sind nicht in jedem zoom-faktor klar, sondern sie sind in jedem zummfaktor jedem anderen zoomfaktor ähnlich.
    wäre code wie julia-mengen, wäre er sich stets ähnlich, egal wohin man zoomt. also im detail schlecht und im großen schlecht, zum beispiel.

    sagen wir mal, code soll in jedem zoo-faktor klar sein. ist das nicht genaial einfach zu erreichen, daß in jedem zoom-faktor nur winzige funktionen gebaut werden?
    hab jetzt keinen lese-code für ints da. nur schreib-code, aber es sollte klar werden, was ich meine.

    template<typename T>
    void printSignedImpl(T x,Writer& out){
    	if(x<0){
    		x=-x;
    		out<<'-';
    	}
    	printUnsignedImpl(toUnsigned(x),out);
    }
    

    den leser stelle ich mir ähnlich vor. daß ich dann kein MUL mehr brauche, sondern nur ein unäres minus, ist netter nebeneffekt.



  • MFK schrieb:

    Mehrere Leute haben dir an mehreren Stellen gesagt, was sie an deinem Code stört. In diesem und auch in anderen Threads. Du verstehst die Argumente nicht.

    Du kannst Dich nach Deinen Aussagen nicht einfach auf die auf die Aussagen anderer berufen.

    Gib mir konkrete Beispiele und Begruendungen, dann reden wir weiter.



  • volkardus schrieb:

    manchmal hat man "by design" bestimmte sonderwünsche ausgeschlossen. natürlich in absprache mit dem kunden. und genau die will er dann doch haben.

    Das ist Unsinn. Man kann Programme so schreiben, dass sie von vornherein in jede Richtung erweiterbar sind.

    Nur uebelster Spaghetti-Code laesst sich nicht erweitern. Du willst doch nicht behaupten, dass Du das machst?

    Deine Beispiele sind etwas aus der Luft gegriffen, uebrigens.

    volkardus schrieb:

    du meinst kene zyklischen abhängigkeiten? äh, das kommt aber schon mal vor. warum die forderung?

    Nein, in gutem Code kommt das nicht vor. Das ist Spaghetti-Code (also verworrener Code).

    Wenn es aus Design-Gruenden so erscheint, als ob es nicht anders geht, sollte man sobald moeglich, das Design entsprechend anpassen.

    volkardus schrieb:

    aber ich hab ne andere: jede funktion erfüllt nur einen zweck. dein monster liest whitespaces davor weg und danach, kümmert sich ums vorzeichen und liest die ziffernfolge selbst ein. das wäre für mich mindestens 4 funktionen, für jeden einfachen zweck eine und eine, die alles zusammenpappt.

    Die Funktion erfuellt den Zweck, dass sie eine Zahl aus einer Zeile liest.

    Man kann's mit dem Aufbrechen von Funktionalitaet auch uebertreiben.



  • Gib mir konkrete Beispiele und Begruendungen, dann reden wir weiter.

    Das bringt bei dir nichts. Du bist in deinen Ansichten anscheinend so festgefahren, dass davon bei dir nichts ankommt.

    Lass dir eine Merkbefreiung ausstellen.



  • Power Off schrieb:

    Das ist Unsinn. Man kann Programme so schreiben, dass sie von vornherein in jede Richtung erweiterbar sind.

    man kann nicht alle programme so schreiben. schon die sprachauswahl setzt einem sehr enge grenzen.

    Nur uebelster Spaghetti-Code laesst sich nicht erweitern. Du willst doch nicht behaupten, dass Du das machst?

    "spaghetti-code" ist ein schlagwort aus alter zeit. das wort benutze ich gar nicht, weil man keinen spaghetti-code baut. seit jahrzehnten nicht mehr. bisher ist dein code am dichtesten dran, aber er ist noch "strukturiert", das muß man zugeben.

    volkardus schrieb:

    du meinst keine zyklischen abhängigkeiten? äh, das kommt aber schon mal vor. warum die forderung?

    Nein, in gutem Code kommt das nicht vor. Das ist Spaghetti-Code (also verworrener Code).

    es ging um klassen. haste schonmal forward-deklaraionen machen müssen?

    Wenn es aus Design-Gruenden so erscheint, als ob es nicht anders geht, sollte man sobald moeglich, das Design entsprechend anpassen.

    das paradebeispiel für zyklische abhängigkeiten von funktionen geschieht doch regelmäßig beim rekursiven abstiegscompiler. und du bist doch compilerbauprofi? wie kann dir das nicht sofort einfallen?

    Die Funktion erfuellt den Zweck, dass sie eine Zahl aus einer Zeile liest.

    sie macht viele verschiedenen dinge NACHEINANDER. gut mit namen benennbare dinge, die sogar unabhängig voneinander funktionieren. also wer die nicht trennt, hat echt die letzten 20 jahre nix dazugelernt. früher war es in der tat üblich, so zu programmieren. da war es ja auch schneller, denn es gar beim inline. aber das hat sich total geändert, daß muß ich dir mal sagen. schau doch am besten mal auch in die enschlägigen newsgroups und die anderen foren (villeicht nicht gerade nicht zfx oder heise) und schau, was die so machen.

    Man kann's mit dem Aufbrechen von Funktionalitaet auch uebertreiben.

    eigentlich nicht.
    aber sagmal, isdigit und RANGE kannste doch einsehen?
    warum nicht wenigstens noch eatwhite?



  • volkard schrieb:

    man kann nicht alle programme so schreiben. schon die sprachauswahl setzt einem sehr enge grenzen.

    Wovon sprichst Du?

    Man kann so gut wie in jeder Sprache so gut wie alles programmieren.

    Dass man in Java z.B. keine hochperformanten, hardwarenahen Programme schreiben kann ist klar, aber dafuer gibt's ja JNI.

    In C oder C++ bin ich noch auf kein unmoegliches Problem gestossen. Ausser es war zur der Zeit tatsaechlich technisch voellig unmoeglich (z.B. sowas wie "Bagger, der in der Luft schwebt und das Raum-Zeit-Kontinuum verzerrt" 😉 ).

    volkard schrieb:

    "spaghetti-code" ist ein schlagwort aus alter zeit. das wort benutze ich gar nicht, weil man keinen spaghetti-code baut. seit jahrzehnten nicht mehr. bisher ist dein code am dichtesten dran, aber er ist noch "strukturiert", das muß man zugeben.

    Nach dem bisschen Code, was Du von mir gesehen hast, kannst Du das wohl kaum behaupten. Und rein objektiv gesehen, ist er sauber, strukturiert, und hat keine zyklischen Abhaengigkeiten.

    Das Schlagwort "Spaghetti-Code" ist immer aktuell, wenn's ums programmieren geht.

    Auch bei objektorientierten Sprachen (gerade dort, wo viel Quark fabriziert wird).

    volkard schrieb:

    haste schonmal forward-deklaraionen machen müssen?

    Klar, z.B. fuer Rekursionen und Listen.

    Aber bei Klassen z.B. koennen zyklische Abhaengigkeiten "toedlich" sein.

    volkard schrieb:

    das paradebeispiel für zyklische abhängigkeiten von funktionen geschieht doch regelmäßig beim rekursiven abstiegscompiler. und du bist doch compilerbauprofi? wie kann dir das nicht sofort einfallen?

    Weil bei Rekursionen die Abhaengigkeiten vorgegeben sind. Bei einem Compiler mit rekursivem Abstieg geht das ja gar nicht anders. Bei einem Compiler sind auch alle Abhaengigkeiten z.B. eines Syntax-Analyzers in der EBNF dokumentiert. D.h. der Syntax-Analyzer implementiert die EBNF 1:1.

    Ich spreche eigentlich von zyklischen Abhaengigkeiten auf hoeherer Ebene, also z.B. "Komponente X erstellt Komponente Y. Komponente Y modifiziert Komponente X. Komponenten X und Y modifizieren sich gegenseitig. Thread T modifiziert Komponente X. Thread U modifiziert Komponente Y und X. Thread V ruft Code aus Thread T und U auf. Thread V modifiziert manchmal Komponente Y und manchmal X. Thread U beendet Thread V. Thread V beendet manchmal Thread T. Thread T erstellt manchmal Thread W, der auf Thread V wartet."

    So was in der Art.

    volkard schrieb:

    warum nicht wenigstens noch eatwhite?

    Weil readnum() nicht nur white-space ueberliest. Vielleicht solltest Du vor ausfuehrlicher Kritik den Code nochmal genau ansehen.



  • Power Off schrieb:

    volkard schrieb:

    man kann nicht alle programme so schreiben. schon die sprachauswahl setzt einem sehr enge grenzen.

    Wovon sprichst Du?

    symbolisch differenzieren geht mit lisp in ein paar zeilen. in c wirste alt dabei.
    haste nen interpreter drunter kannste dir unter umständen einen mathematischen parser schenken.
    haste keine lokalen variablen, wirds mit komplexeren programmen nicht gerade leicht.

    Man kann so gut wie in jeder Sprache so gut wie alles programmieren.

    halt mit mehr oder weniger aufwand.

    anläßlich eines programmierwettbewerbs, bei dem alle sprachen erlaubt waren, leistete ich mir den spaß, die aufgabe, nach dem gregorianischen kalnender aus tag, monat, jahr, die der user zuerst einzugeben hatte, den wochenzag zu berechnen, in brainfuck zu erstellen. zum testen nimm http://koti.mbnet.fi/villes/php/bf.php
    und natürlich muß ich betonen, daß der code klar und einfach ist. und wer den nicht kapiert oder nicht lesen mag, hat natürlich keine ahnung von brainfuck. ich such dir gerne einen link mit der sprachbeschreibung raus. oder ich zeig die ne kommentierte version.

    >++++[->++++<]>[-<++++>]<+++++.>++[->++++<]>[-<++++>]<[-<+>]<++++.+++++.-------.
    ------.+.+++.>++[->++++<]>[-<++++>]<.[-]<++++.++++.>++[->++++<]>[-<++++>]<.[-]++
    [->++++<]>[-<++++>]<[-<->]<-------.>++[->++++<]>[-<++++>]<[-<+>]<+++++++++.+++.-
    ----.------------.+++++++++++++++++++.>++[->++++<]>[-<++++>]<.[-]<[-]+++[->++++<
    ]>[-<++++>]<.+++++.-----.++++++++.-------.++++++++.--.-.++++.>++[->++++<]>[-<+++
    +>]<.[-]>>,>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++<]>[-<++
    ++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>+++[->++++
    <]>[-<++++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++++>],>++
    +[->++++<]>[-<++++>]<[-<->]<[-<+>],>+++[->++++<]>[-<++++>]<[-<->]<[->++<]>[-<+++
    ++>],>+++[->++++<]>[-<++++>]<[-<->]<[-<+>]<[->>+>+<<<]>>>[-<<<+>>>]++++[->>+>+<<
    <]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]
    >>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]+<[[-]>-<]>[-<+>]<[-<+>]<<[->>+>+<<<
    ]>>>[-<<<+>>>]+<[[-]>-<]>[-<+>]<[-<->]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]++++[->>+>
    +<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<
    <<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<
    [-<+>]+<[[-]>-<]>[-<+>]<[-<+>]<<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]<<<[->>>+>+<<<<]>>
    >>[-<<<<+>>>>]<[-<+>]+<[[-]>-<]>[-<+>]<[-<<<<<<<+>>>>>>>]<<<<[->>>>>+>+<<<<<<]>>
    >>>>[-<<<<<<+>>>>>>]<[->+>+<<]>>[-<<+>>]<[[-]<->++++[-<<++++++++>>]<<->>]<[->+>+
    <<]>>[-<<+>>]<[[-]<-><<--->><<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[-<<<+>>>]<]<[
    ->+>+<<]>>[-<<+>>]<[[-]<-><<+++>><<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[-<<<->>>
    ]<]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<
    ]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<]>>[-<<+>>]<
    [[-]<->]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->
    +>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+>>]<[->+>+<<]>>[-<<
    +>>]<[[-]<-><<[-]>>]<[-]<[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<<<<<<<+>>>>>
    >>>]<<<<<<[->>>>>>+>+<<<<<<<]>>>>>>>[-<<<<<<<+>>>>>>>]<[<[->>+>+<<<]>>>[-<<<+>>>
    ]+<[[-]>-<]>[-<+>]<[[-]<<+>><<<<<<<<<+>>>>>>>>>]<<->-]<[-]<[-]+<<<[->>>>+>+<<<<<
    ]>>>>>[-<<<<<+>>>>>]<[-[-[-<->[-]]]]<[[-]<[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[
    [-]<++++++++++[->++<]>[-<+++++>]<<->>]<->]<[->+>+<<]>>[-<<+>>]+++++++[->>+>+<<<]
    >>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>
    >[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<[->+>+<<]>>[-<<+>>]+++
    +[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[
    ->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-<<+>>]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>
    ]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]
    <-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<<[->>+>+<<<]>>>[-<<<+>>>]+++++++[-
    >>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>
    +>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+++++>>>>>]+++++++[-<
    <<<<+>>>>>]<<[->>+>+<<<]>>>[-<<<+>>>]++++[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+
    <<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-]<[-
    <<+>>]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>
    [-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>
    >>>>]<<<[->>>>+>+<<<<<]>>>>>[-<<<<<+>>>>>]<[->+>+<<]>>[-<<+>>]<[[-]<->]<[->+>+<<
    ]>>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<->>]<[->+>+<<]>>[-<<+>>
    ]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]>>[-<<+>>]<[[-]<->
    <<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<+++>>]<
    [->+>+<<]>>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[->+>+<<]
    >>[-<<+>>]<[[-]<-><<+++>>]<[->+>+<<]>>[-<<+>>]<[[-]<-><<++>>]<[-]+++++++[->>+>+<
    <<]>>>[-<<<+>>>]<-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<
    ]>>>[-<<<+>>>]]<-<<<-]>>>[-<<->>]<[-]<-[-<+>]<[-<<<<<+>>>>>]<<<<[->>>>+>+<<<<<]>
    >>>>[-<<<<<+>>>>>]<[-<<<<<+>>>>>]<[-]<[-]<[-]<[-]+++++++[->>+>+<<<]>>>[-<<<+>>>]
    <-<<<[>>>[->+>+<<]>>[-<<+>>]+<[[-]>-<]>[-<+>]<[[-]<<+<[->>+>+<<<]>>>[-<<<+>>>]]<
    -<<<-]>>>[-<<->>]<[-]<-[-<+>]<[->+<]<[->+<]>>[-<<+>>]<[[-]<[-]+++++++>]+[->+>+<<
    ]>>[-<<+>>]<[[-]<<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->+++
    +<]>[-<++++>]<+++++++++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<----.-..++++++.-
    ------------------.++++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<
    <<]>>>>[-<<<<+>>>>]<>+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++++++++++
    +.>++[->++++<]>[-<++++>]<[-<+>]<++.-.++++++.-------------------.++++++.[-]<<<->>
    ]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>
    ]<[[-]>++++[->++++<]>[-<++++>]<++++.>++[->++++<]>[-<++++>]<[-<+>]<+++++.----.+++
    ++++++.+++++.+.-------------------.++++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<
    <->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>
    ]<+++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<----.+++++++++++..+++.--------.---
    ---------.+++++.[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<
    <<<+>>>>]+<[[-]>-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++.>++[->++++<]>[-<+++
    +>]<[-<+>]<+++++++++++.-..---------.+++++++++++++.+.+.-------------------.++++++
    .[-]<<<->>]<]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]
    >-<]>[-<+>]<[[-]>++++[->++++<]>[-<++++>]<++++++.>++[->++++<]>[-<++++>]<[-<+>]<++
    ++++++++++.-------------.++++.+++++++++++.-------------------.++++++.[-]<<<->>]<
    ]<[->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<
    [[-]>++++[->++++<]>[-<++++>]<+++++++++++++++++++.>++[->++++<]>[-<++++>]<[-<+>]<-
    -----------------.++++++++++++.++++++.+.-------------------.++++++.[-]<<<->>]<]<
    [->+>+<<]>>[-<<+>>]<[[-]<<->><<[->>>+>+<<<<]>>>>[-<<<<+>>>>]+<[[-]>-<]>[-<+>]<[[
    -]>++++[->++++<]>[-<++++>]<++++++.>++[->++++<]>[-<++++>]<[-<+>]<-.+++.++++.-----
    --.+++++++++++++.[-]<<<->>]<]<[-]<[-]++++++++++.[-]<
    

    ok, das programm ist gut. es ist sogar vorbildlich, würde ich sagen. es ist auch noch wartbar. für brainfuck-verhältnisse optimal. es gibt aber andere sprachen, in denen kalenderprogramme besser wartbar sind.

    edit: der oben genannte interpreter schafft's nicht, weil er nur 30 sek laufzeit erlaubt.
    http://justice.loyola.edu/~mcoffey/pr/5k/i.html ist besser.



  • volkard schrieb:

    anläßlich eines programmierwettbewerbs, bei dem alle sprachen erlaubt waren, leistete ich mir den spaß, die aufgabe, nach dem gregorianischen kalnender aus tag, monat, jahr, die der user zuerst einzugeben hatte, den wochenzag zu berechnen, in brainfuck zu erstellen. zum testen nimm http://koti.mbnet.fi/villes/php/bf.php
    und natürlich muß ich betonen, daß der code klar und einfach ist. und wer den nicht kapiert, hat natürlich keine ahnung von brainfuck. ich such dir gerne einen link mit der sprachbeschreibung raus. oder ich zeig die ne kommentierte version.

    edit: der oben genannte interpreter schafft's nicht, weil er nur 30 sek laufzeit erlaubt.
    http://justice.loyola.edu/~mcoffey/pr/5k/i.html ist besser.

    Cool! 🙂

    Aber fuer jemanden, der Brainfuck kann, ist das doch kein Problem zu lesen, oder?

    Hier ist z.B. der Output eines Lexical Analyzers, den ich neulich geschrieben habe:

    #2:$2:c$8:I5:Alpha$E:{
    #4:$5:f$E:I7:beeswax$L:($N:I5:omega$S:,$U:I5:delta$a:)$b:;
    #6:$2:}$3:;
    #8:$2:M$C:I5:Alpha$H:.$I:I7:beeswax$Q:{
    #9:$5:I4:redo$9:4
    #A:$5:F$8:I5:omega$E:=$G:I5:delta$M:{
    #B:$8:I5:omega$E:A$H:I5:omega$N:/$P:N2:$Q:;
    #C:$8:I5:delta$E:A$H:I5:delta$N:+$P:N1:$Q:;
    #D:$8:J$D:I4:redo$H:;
    #E:$5:}
    #F:z
    #G:$8:y$D:{
    #H:$B:w$G:I1:i$H:;
    #I:$B:I1:i$D:A$G:N1:$H:;
    #J:$8:}
    #K:Y$I:I1:i$K:<$M:N5:
    #L:$8:d$B:{
    #M:k$G:I8:printnum$P:I1:i$Q:;
    #N:$8:}
    #O:$2:}
    #Q:c$8:I5:Alpha$E:I1:a$F:;
    #R:$2:k$7:I1:a$8:.$9:I7:beeswax$G:($I:N5:$J:,$L:N7:$N:)$O:;
    

    Fuer mich ist das kein Problem, zu lesen.

    Also Lesbarkeit ist immer relativ. 😉


Anmelden zum Antworten