prinz martin: Quersumme

0 58

Quersumme

prinz martin
  • javascript
  1. 0
    Struppi
    1. 0
      Der Martin
      1. 0
        derletztekick
        1. 0
          Prinz Martin
          1. 0
            Prinz Martin
            1. 1
              Struppi
      2. 0
        Struppi
        1. 0
          Struppi
          1. 0
            Vinzenz Mai
          2. 0
            derletztekick
            1. 0
              Struppi
              1. 0
                derletztekick
                1. 0
                  Struppi
                  1. 0
                    derletztekick
                    1. 0
                      Gunnar Bittersmann
                  2. 0
                    Der Martin
                    1. 0
                      Struppi
                      1. 0
                        Der Martin
                        1. 0
                          Struppi
                      2. 0

                        der zaunpfahl

                        seth
                        • software
                        1. 0
                          Struppi
            2. 0
              Struppi
              1. 0
                derletztekick
              2. 0
                Gunnar Bittersmann
                1. 0
                  Struppi
                  1. 0
                    Gunnar Bittersmann
                  2. 0
                    derletztekick
                    1. 0
                      Struppi
                      1. 0
                        derletztekick
                        1. 0
                          Gunnar Bittersmann
                2. 0

                  loesung von Gunnars aufgabe

                  seth
                  • sonstiges
                  1. 0
                    Gunnar Bittersmann
                    1. 0
                      Ashura
                      • menschelei
                      1. 0
                        Gunnar Bittersmann
                        1. 0
                          seth
                3. 0
                  Christian Seiler
                  1. 0
                    seth_not@home
                    • programmiertechnik
                    1. 0
                      Ashura
                      1. 0
                        seth
                        1. 0
                          Ashura
                          1. 0
                            seth
                            1. 0
                              Ashura
                              1. 0
                                seth
                          2. 0
                            Jörg Lorenz
                            1. 0
                              seth
                              1. 0
                                Jörg Lorenz
                                1. 0

                                  rot13

                                  seth
                                  • sonstiges
                                  1. 0
                                    Jörg Lorenz
                          3. -1
                            at
                      2. 0
                        Ashura
                        • menschelei
                        1. 0
                          seth
              3. 0
                Gernot Back
          3. 0
            Daniel Thoma
            1. 0
              Struppi
              1. 0
                Daniel Thoma
                1. 0
                  Struppi
                  1. 0
                    Gunnar Bittersmann

hallo

ich bin dabei einen quersummen berechner zu schreiben.
naja ich brauche diese quersumme in einem script.

ich habe also eine while schleife die gestartet wird.
dann soll die quersumme ausgerechnet werden:

quer = 0;
minimum = eingabe1;
maximum = eingabe2;

function pruefen2()
  {
  while(minimum < maximum)
    {
      if(n==0)  ////////beginn der qersummenberechnung
        {
         while(a<minimum.length)
              {
               zwischenergebnis = minimum.slice(a, b);
               a ++
               b ++
               quer = (1*quer)+(1*zwischenergebnis);
               alert(quer);
              }
              a = 0;
              b = 0;
       }

.
.
.
.
.
.
minimum ++
}

so jetzt habe ich folgendes problem:

wenn ich a<minimum.length in die wihile prüfung schreibe, funzt alles allerdings nur beim ersten durchlauf der while schleife, von da an wird diese quersummenberechnung komplett übersprungen.

wenn ich statt minimum.length einfach z.b. 5 schreibe, dann trifft das auch auf jeden fall zu, aber er wiederholt die while schleife irgendwie nicht.

woran kann das liegen? danke schon mal im vorraus

mfg
Prinz

  1. ich bin dabei einen quersummen berechner zu schreiben.
    naja ich brauche diese quersumme in einem script.

    ich habe also eine while schleife die gestartet wird.
    dann soll die quersumme ausgerechnet werden:

    Ixhweiß nicht genau was du machst und ob meine Vorstellung der quersumme eine andere ist als deine, ich würd's so machen:

      
    Number.prototype.quersumme = function()  
    {  
        var x = this.toString();  
        var z = x.split('');  
        var quer = 0;  
        for(var i = 0; i < z.length; i++) quer += Number(z[i]);  
        return quer;  
    }  
      
    var test = 123;  
    alert( test.quersumme() );  
    
    

    Struppi.

    --
    Javascript ist toll (Perl auch!)
    1. n'Abend!

      ~~~javascript

      var x = this.toString();

      var z = x.split('');
          var quer = 0;
          for(var i = 0; i < z.length; i++) quer += Number(z[i]);
          return quer;

        
      Oder noch etwas kürzer und damit übersichtlicher:  
        
             ~~~javascript
      var z = this.toString().split('');  
             for (var i=0, var quer=0; i<z.length; quer+=Number(z[i++]));  
             return (quer);
      

      Schönen Abend noch,
       Martin

      --
      You say, it cannot be love if it isn't for ever.
      But let me tell you: Sometimes, a single scene can be more to remember than the whole play.
      1. Hallo,

        Oder noch etwas kürzer und damit übersichtlicher:

        Kürzer ja, übersichtlicher finde ich es aber nicht.

        Ich hätte statt split() einfach charAt() auf den String angewendet.

        Mit freundlichem Gruß
        Micha

        --
        LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
        1. zu meiner vorgehensweise, ich habe einfach jede stelle der zahl genommen und zu dem zwischenergebnis addiert. aber ich seh schon eure lösungen sind deutlich schönder

          danke und guats nächtle

          1. sorry für den doppelpost aber eine stelle verstehe ich nich.

            ich hab

            Number.prototype.quersumme = function()
                     {
                     var x = this.toString();
                     var z = x.split('');
                     var quer = 0;
                     for(var i = 0; i < z.length; i++) quer += Number(z[i]);
                     return quer;
                     }

            diese version genommen, da ich davon noch das meiste verstehe^^

            naja eigentlich verstehe ich alles außer dem Number.prototype.quersumme = function()

            ich hab auch mal gesucht aber bei der objektreferenz zu number findet man nix.

            "quersumme" scheint ja der name der function zu sein.

            nur was sagt Number.prototype? und auf was bezieht sich das "this" bei dem toString? bezieht sich das immer auf den wert der in deinem beispiel test hat? also der wert der der function mitgeliefert wird?

            1. naja eigentlich verstehe ich alles außer dem Number.prototype.quersumme = function()

              Das sind die Tiefen der Objektorientierten Programmierung in JS.
              Mit dem Wort protoype sagst du, dass jetzt alle Objekte, in diesem Fall, Number die Funktion quersumme erhalten.

              D.h. jedesmal wenn du eine Variabel hast, die eine Zahl ist, kannst du die Funktion quersumme() aufrufen.

              Wenn du einen String hast, z.b. aus einem Inputfeld, musst du diesen in eine Zahl umwandeln, z.b. mit Number( string )

              ein Beispiel:

              var t = '12345';
              alert( Number(t).quersumme() );

              Verstanden?

              Struppi.

              --
              Javascript ist toll (Perl auch!)
      2. Oder noch etwas kürzer und damit übersichtlicher:

        ~~~javascript

        var z = this.toString().split('');

        for (var i=0, var quer=0; i<z.length; quer+=Number(z[i++]));
               return (quer);

          
        Sehr gut und die Klammer um das quer können wir uns auch noch sparen und statt Number -0 verwenden. ausserdem ist ein var zuviel.  
          
        Damit wären wir bei folgender Erweiterung für Number:  
        ~~~javascript
          
        Number.prototype.quersumme = function()  
        {  
           var z = this.toString().split('');  
           for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);  
           return quer;  
        }
        

        Schönen Abend noch,
        Martin

        Struppi.

        --
        Javascript ist toll (Perl auch!)
        1. Damit wären wir bei folgender Erweiterung für Number:

          Number.prototype.quersumme = function()
          {
             var z = this.toString().split('');
             for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);
             return quer;
          }

            
          Ich bin ja blöd, ist die Quersumme nicht immer einstellig, d.h. hier muss eine rekursive Funktion aufgerufen werden.  
            
          also so:  
          ~~~javascript
            
          Number.prototype.quersumme = function()  
          {  
             var z = this.toString().split('');  
             for (var i=0, quer=0; i < z.length; quer+=z[i++]-0);  
             if(quer > 10 ) quer = quer.quersumme();  
             return quer;  
          }  
          
          

          Struppi.

          --
          Javascript ist toll (Perl auch!)
          1. Hallo Struppi,

            Ich bin ja blöd,

            nein.

            ist die Quersumme nicht immer einstellig,

            Nein.

            d.h. hier muss eine rekursive Funktion aufgerufen werden.

            Nicht in jedem Fall :-)

            Freundliche Grüße

            Vinzenz, der nicht der Ansicht ist, dass kürzer unbedingt übersichtlicher ist und der lieber ein Klammernpaar mehr setzt als weglässt.

          2. Hallo Struppi,

            ist die Quersumme nicht immer einstellig

            Nö: 888 = 24

              
            for (var i=0, q=0; i<z.length; q+=parseInt(z.charAt(i++)));  
            return(q);  
            
            

            Mit freundlichem Gruß
            Micha

            --
            LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
            1. for (var i=0, q=0; i<z.length; q+=parseInt(z.charAt(i++)));
              return(q);

                
              warum macht ihr eigentlich immer die Klammer um den Rückgabewert einer Funktion?  
                
              Struppi.
              
              -- 
              [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
              
              1. Hallo Struppi,

                warum macht ihr eigentlich immer die Klammer um den Rückgabewert einer Funktion?

                Wer ist "ihr"?

                Ich mache es, weil ich es übersichtlich(er) finde.

                Mit freundlichem Gruß
                Micha

                --
                LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
                1. warum macht ihr eigentlich immer die Klammer um den Rückgabewert einer Funktion?

                  Wer ist "ihr"?

                  Naja, Der Martin auch

                  Ich mache es, weil ich es übersichtlich(er) finde.

                  Hmm? zwei überflüssige Zeichen machen den Code übersichtlich?
                  Du benutzt keinen Editor mit Syntaxhighlighting?

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Hallo Struppi,

                    Wer ist "ihr"?

                    Naja, Der Martin auch

                    Ich habe nun gesehen, wen Du noch meinst - war wohl schon spät gestern ;-)

                    Ich mache es, weil ich es übersichtlich(er) finde.

                    Hmm? zwei überflüssige Zeichen machen den Code übersichtlich?

                    Ja, das finde ich. Nimm eine längere Formel oder etwas in der Art. Hier halte ich sowas: (a*b)/c auch für überschaubar.
                    Auch den Typ einer Variablen oder Objekt frage ich idR mit typeof(foo) ab.

                    Ich mache auch nach der letzten Anweisung noch ein Semikolon auch wenn das auch überflüssig ist.

                    Die zwei Byte habe ich dann auch noch ;-)

                    Du benutzt keinen Editor mit Syntaxhighlighting?

                    Warum nicht oder anders gefragt, wie kommst Du darauf? Ist das setzen von Klammern ein Indiz für so eine Vermutung?

                    Notepad++ ist es seit einiger Zeit, davor war es die schlanke Version Notepad2.

                    Schönes Wochenende
                    Micha

                    --
                    LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
                    1. Hello out there!

                      Ich mache auch nach der letzten Anweisung noch ein Semikolon auch wenn das auch überflüssig ist.

                      BTW, in JavaScript sind Semikolons nach allen Anweisungen überflüssig, wenn danach ein Zeilenumbruch kommt. (Ich setze sie trotzdem.)

                      See ya up the road,
                      Gunnar

                      --
                      “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                  2. Moin allerseits!

                    warum macht ihr eigentlich immer die Klammer um den Rückgabewert einer Funktion?
                    Wer ist "ihr"?

                    Ich zähle mich in dem Fall bewusst zu "ihr".

                    Ich mache es, weil ich es übersichtlich(er) finde.

                    Ich hätte jetzt nicht den Begriff "übersichtlicher" gewählt. Aber ich finde es auf jeden Fall konsequent. Gut, ein return ist kein Funktionsaufruf. Aber für die meisten Sprachkonstrukte ist es vorgeschrieben, dass das "Argument" in Klammern steht, etwa bei if, while, switch oder try. Ich sehe also nicht ein, dass man nun in ein paar wenigen Sonderfällen, etwa bei return oder typeof, aus dieser Regel ausbrechen sollte.
                    Zumal ich Micha durchaus zustimme. Das Programmierer-Auge ist einfach an eine bestimmte Struktur gewöhnt: Funktionsname oder Schlüsselwort, Klammer auf, Argument(e), Klammer zu. Was aus diesem Schema rausfällt, irritiert beim Lesen erst einmal.

                    Du benutzt keinen Editor mit Syntaxhighlighting?

                    Nö. Die bunte Darstellung nervt mich mehr, als dass sie mir hilft. Etwas subtilere Hilfen, z.B. die Hervorhebung zusammengehörender Klammernpaare oder eine (halb)automatische Einrückung weiß ich dagegen wohl zu schätzen.

                    Schönen Tag noch,
                     Martin

                    --
                    Wenn du beim Kochen etwas heißes Wasser übrig hast, friere es ein.
                    Heißes Wasser kann man immer gebrauchen.
                    1. Ich mache es, weil ich es übersichtlich(er) finde.

                      Ich hätte jetzt nicht den Begriff "übersichtlicher" gewählt. Aber ich finde es auf jeden Fall konsequent. Gut, ein return ist kein Funktionsaufruf. Aber für die meisten Sprachkonstrukte ist es vorgeschrieben, dass das "Argument" in Klammern steht, etwa bei if, while, switch oder try. Ich sehe also nicht ein, dass man nun in ein paar wenigen Sonderfällen, etwa bei return oder typeof, aus dieser Regel ausbrechen sollte.

                      Naja, ich programmiere ja viel mit Perl und da ist die Klammer ein Zeichen einer Liste. Wie z.b. die Parameter eines Funktionsaufrufs. D.h. immer wenn ich eine Klammer sehe, weiß ich jetzt kommt eine Liste. return, typeof und Zuweisungen erwarten aber keine Listen.

                      Zumal die Klammern ja auch noch war anderes bedeuten, verwirren mich zuviele Klammern. Zumal leider Proton keine Paare finden kann.

                      Zumal ich Micha durchaus zustimme. Das Programmierer-Auge ist einfach an eine bestimmte Struktur gewöhnt: Funktionsname oder Schlüsselwort, Klammer auf, Argument(e), Klammer zu. Was aus diesem Schema rausfällt, irritiert beim Lesen erst einmal.

                      Ohje dann müßtet ihr ja bei meinen Codes schnell verwirrt werden, dieses Schema gibt es bei mir nicht.

                      Du benutzt keinen Editor mit Syntaxhighlighting?

                      Nö. Die bunte Darstellung nervt mich mehr, als dass sie mir hilft. Etwas subtilere Hilfen, z.B. die Hervorhebung zusammengehörender Klammernpaare oder eine (halb)automatische Einrückung weiß ich dagegen wohl zu schätzen.

                      Du bist schon ein Kauz ;-)

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. Hi,

                        Naja, ich programmiere ja viel mit Perl und da ist die Klammer ein Zeichen einer Liste. Wie z.b. die Parameter eines Funktionsaufrufs. D.h. immer wenn ich eine Klammer sehe, weiß ich jetzt kommt eine Liste. return, typeof und Zuweisungen erwarten aber keine Listen.

                        das ist soweit nachvollziehbar - aber wie ist dann in Perl das Klammern von Teilausdrücken geregelt? Das ist doch dann nicht auch automatisch eine Liste mit nur einem Element?
                        Denn in allen mir bekannten Programmiersprachen kann ich jederzeit, wenn ich das für angemessen halte, einen Teilausdruck in Klammern setzen. Und auch eine Konstante ist in diesem Sinn ein Teilausdruck. So würde der JS-Interpreter mein 'return (r);' also als return mit einem eingeklammerten Teilausdruck verstehen, was aber für die korrekte Funktion nicht relevant ist.

                        Zumal leider Proton keine Paare finden kann.

                        So ein Pech aber auch ... ;-)

                        [...]
                        Ohje dann müßtet ihr ja bei meinen Codes schnell verwirrt werden, dieses Schema gibt es bei mir nicht.

                        Naja, in Assembler kann ich das auch nicht mehr einhalten. Aber da ist die Struktur sowieso eine völlig andere als in Hochsprachen.

                        Du bist schon ein Kauz ;-)

                        Mit dem Titel könnte ich leben. *fg*

                        Schönes Wochenende,
                         Martin

                        --
                        Auf jeden Menschen auf der ganzen Welt entfallen statistisch gesehen etwa 3000 Spinnen, wie Wissenschaftler jetzt festgestellt haben.
                        Wer will meine haben? Denn ich will sie bstimmt nicht.
                        1. Naja, ich programmiere ja viel mit Perl und da ist die Klammer ein Zeichen einer Liste. Wie z.b. die Parameter eines Funktionsaufrufs. D.h. immer wenn ich eine Klammer sehe, weiß ich jetzt kommt eine Liste. return, typeof und Zuweisungen erwarten aber keine Listen.

                          das ist soweit nachvollziehbar - aber wie ist dann in Perl das Klammern von Teilausdrücken geregelt? Das ist doch dann nicht auch automatisch eine Liste mit nur einem Element?

                          Nee, Perl findet immer den Kontext. In dem Falle, wenn du einem Skalar eine Liste vorsetzt kriegt der Skalar das letzte Element.

                          [per lang=perl]
                          sub test
                          {
                              return (1,2,3,4,5);
                          }
                          my $x = test();
                          my @x = test();
                          [/code]

                          --> gibt im 1. Fall 5 im 2.Fall hast du ein Array.
                          Aber dieses Konzept ist wohl eher Perl spezifisch.

                          Denn in allen mir bekannten Programmiersprachen kann ich jederzeit, wenn ich das für angemessen halte, einen Teilausdruck in Klammern setzen. Und auch eine Konstante ist in diesem Sinn ein Teilausdruck. So würde der JS-Interpreter mein 'return (r);' also als return mit einem eingeklammerten Teilausdruck verstehen, was aber für die korrekte Funktion nicht relevant ist.

                          Das stimmt, aber eben deshalb finde ich diese Schreibweise verwirrend, ich mache die Klammer, dann wenn ich es für nötig halte, weil ich etwas erreichen will. D.h. sobal ich eine Klammer in einen Audruck sehe, will ich normalerweise damit eine bestimmte Reihenfolge erzwingen.

                          Zumal leider Proton keine Paare finden kann.

                          So ein Pech aber auch ... ;-)

                          Ab und an benutze ich auch ConText, aber irgendwie gefällt mir Proton besser, bis auf diese eine Sache.

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
                      2. gudn tach!

                        Zumal leider Proton keine Paare finden kann.

                        also ich habe ja jahrelang mit proton gearbeitet und bin dann irgendwann direkt auf vim umgestiegen, was mir uebrigens leichter gefallen ist, als ich vorher befuerchtete.

                        proton ist geil, aber hat ein paar nachteile gegenueber vim:
                        vim kann klammernpaare anzeigen. ;-)
                        vim kann regulaere ausdruecke (proton nur so ein kleines bisschen).
                        bei vim muss man nicht immer so grosse spruenge mit <c-right> bzw. <c-left> machen. man kann sich das nach belieben einstellen.
                        vim kennt mehr sprachen und das syntax-highlighting funzt besser.
                        vim kann unicode.
                        vim ist open-source und laeuft unter windows, linux, dos, ...
                        vim wird weiterentwickelt. uebrigens ist vor kurzem gerade version 7 herausgekommen.
                        wenn man sich seine vim-config-datei irgendwo hochlaedt, kann man ohne probleme ueberall mit seinen lieblingseinstellungen vim bedienen, ohne etwaige vorhandene config-files ueberschreiben.
                        naja, und so kleinigkeiten wie: scrollen (wie mit dem maus-rad, also ohne dass man den cursur ganz nach oben oder unten im fenster bewegen muss) ist moeglich <c-e> bzw. <c-y>.

                        http://www.vim.org

                        prost
                        seth

                        1. vim kann ..

                          http://www.vim.org

                          Ich hab irgendwann so um 99 mir vim mal angeschaut (da hatte ich mich schon proton gewöhnt) und bin einfach nicht damit zurecht gekommen. Ich werd's nochmal probieren ;-)

                          Struppi.

                          --
                          Javascript ist toll (Perl auch!)
            2. ist die Quersumme nicht immer einstellig
              Nö: 888 = 24

              Naja, auf dem Wikipedia Artikel stehen eine Menge Quersummen, ich kan mich aber auch erinnern, das wir Quersummen in der Schule immer auf eine Stelle berechnet haben.
              aber da reicht ja dann eine zusätzlich Zeile:
              if(quer > 10 ) quer = quer.quersumme();

              for (var i=0, q=0; i<z.length; q+=parseInt(z.charAt(i++)));
              return(q);

                
              Diese Version ist im FF ungefähr 3-4 mal so langsam wie meine im IE sind es nur noch 50%  
                
              ~~~javascript
                
              Number.prototype.quersumme = function()  
              {  
                 var z = this.toString().split('');  
                 for (var i=0, q=0; i < z.length; q +=z[i++]-0);  
                 return q;  
              }  
              Number.prototype.quersumme2 = function()  
              {  
                  var z = this.toString();  
                  for (var i=0, q=0; i<z.length; q+=parseInt(z.charAt(i++)) );  
                  return (q);  
              }  
              var test = 1233767867348;  
              var c = 7000;  
                
              var t1 = new Date();  
              for(var i = 0; i < c; i++)  
              {  
                 var tmp = test.quersumme();  
              }  
              var t2 = new Date();  
              for(var i = 0; i < c; i++)  
              {  
                 var tmp = test.quersumme2();  
              }  
              var t3 = new Date();  
                
                
              alert(  
              'quersumme:' + ( t2 - t1 ) + '\n'  
              + 'quersumme2:' + ( t3 - t2 ) + '\n'  
              );  
              
              

              Da ham'wer jetzt aber alles rausgeholt, was ging ;-)

              Struppi.

              --
              Javascript ist toll (Perl auch!)
              1. Hallo Struppi,

                Diese Version ist im FF ungefähr 3-4 mal so langsam wie meine im IE sind es nur noch 50%

                Ja? Meine Gecko sagt 1/2mal langsamer, wobei das Script gegen sich selbst keine identischen Werte erzeugt. Nun wollen wir nicht auf ein paar 10tel oder 100tel schauen, da der "Abstand" zu Deiner Version deutlich größer ist.

                Noch zur Info:
                Opera 301:407 für Dich ;-)

                Ich fand es nur etwas unschön, ein String mit split() zu zerlegen, da es ja im Prinzip bereits ein Array aus Charakterzeichen ist, so daß meine erste Idee eben charAt() ist bzw war. Das es "deutlich" mehr Zeit in Anspruch nimmt, hätte ich so nicht erwartet.

                Da ham'wer jetzt aber alles rausgeholt, was ging ;-)

                Scheint so ;-)

                Mit freundlichem Gruß
                Micha

                --
                LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
              2. Hello out there!

                Naja, auf dem Wikipedia Artikel stehen eine Menge Quersummen,

                _Die_ Quersumme ist einfach die Summe aller Ziffern.

                ich kan mich aber auch erinnern, das wir Quersummen in der Schule immer auf eine Stelle berechnet haben.

                Den Namen „einstellige Quersumme“ dafür kannte ich noch nicht.

                Mal eine kleine Knobelaufgabe zum Wochenende: Was ist die einstellige Quersumme der Zahl [latex]42^{42}[/latex]?

                See ya up the road,
                Gunnar

                --
                “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                1. Naja, auf dem Wikipedia Artikel stehen eine Menge Quersummen,

                  _Die_ Quersumme ist einfach die Summe aller Ziffern.

                  OK.

                  Mal eine kleine Knobelaufgabe zum Wochenende: Was ist die einstellige Quersumme der Zahl [latex]42^{42}[/latex]?

                  Zum Knobeln hab ich gar keine Zeit. (Aber wahrscheinlich ist es ganz einfach!? evtl. 42? DIE Antwort. )

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Hello out there!

                    Aber wahrscheinlich ist es ganz einfach!?

                    Ja, ist es.

                    evtl. 42? DIE Antwort.

                    :-) Nein, das war tatsächlich als mathematische Knobelei, nicht als Scherzfrage gedacht.

                    See ya up the road,
                    Gunnar

                    --
                    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                  2. Hallo Struppi,

                    evtl. 42? DIE Antwort.

                    _einstellige_ Quersumme...

                    9

                    Mit freundlichem Gruß
                    Micha

                    --
                    LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
                    1. evtl. 42? DIE Antwort.
                      _einstellige_ Quersumme...

                      9

                      gut das einige Zeit zum Knobeln hatten (ich hab natürlich auch den Beitrag von seth gelesen http://rot13.de/ existiert)

                      Struppi.

                      --
                      Javascript ist toll (Perl auch!)
                      1. Hallo Struppi,

                        »» »» »» evtl. 42? DIE Antwort.

                        _einstellige_ Quersumme...

                        9

                        gut das einige Zeit zum Knobeln hatten (ich hab natürlich auch den Beitrag von seth gelesen http://rot13.de/ existiert)

                        Ich habe die eine kleine JAVA Klasse geschrieben, das ging schneller ;-)

                        Mit freundlichem Gruß
                        Micha

                        --
                        LeagueEditor JavaScript :: simple Ligaverwaltung auf der Basis von JavaScript
                        1. Hello out there!

                          http://rot13.de/ existiert

                          Ich habe die eine kleine JAVA Klasse geschrieben, das ging schneller ;-)

                          Ich habe das Antwortfeld und die Vorschau benutzt, das ging am schnellsten. ;-)

                          See ya up the road,
                          Gunnar

                          --
                          “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                2. gudn tach!

                  Mal eine kleine Knobelaufgabe zum Wochenende: Was ist die einstellige Quersumme der Zahl [latex]42^{42}[/latex]?

                  eine halbe anleitung zur loesung steht ja bereits im thread an einer anderen stelle. sie ist mit schulwissen loesbar.

                  loesung (rot13):
                  qvr ybrfhat ynhgrg: arha
                  ortehraqhat: qvr dhrefhzzr d(k) rvare tnamra mnuy k vfg tranh qnaa qhepu arha grvyone, jraa k fryofg fpuba qhepu arha grvyone vfg. (qnf vfg orxnaag nhf qre fpuhyr.)
                  42 vfg mjrv zny qerv zny fvrora. jveq qnf tnamr dhnqevreg, vfg nhpu qvr arha nyf grvyre ragunygra (jrtra qerv zny qerv zny vetraqjnf). jveq qnf tnamr abpu ivremvt jrvgrer znyr zvg 42 zhygvcyvmvreg, nraqreg qnf avpugf qnena, qnff qvr fvpu retroraqr mnuy jvrqre qhepu arha grvyone vfg.
                  nyfb vfg i=(42 ubpu 42) qhepu arha grvyone. nyfb nhpu qvr dhrefhzzr d(i) qhepu arha grvyone. nyfb nhpu d(d(i)) hfj.. jve znpura qnf fbynatr, ovf jve rvar rvafgryyvtr mnuy unora. haq qvr rvamvtr rvafgryyvtr mnuy, qvr qhepu arha grvyone vfg, vfg qvr arha fryofg.

                  prost
                  seth

                  1. Hello out there!

                    Frue fpuöa rexyäeg.

                    Rvar Nazrexhat: Ahyy vfg nhpu rvafgryyvt. Ragsäyyg nore, qn qvr Dhrefhzzr wrqre iba Ahyy irefpuvrqrara Mnuy nhpu iba Ahyy irefpuvrqra vfg.

                    See ya up the road,
                    Gunnar

                    --
                    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                    1. Hallo Gunnar und seth.

                      Warum nutzt ihr nicht [rоt13][/rot13]? Dafür haben wir doch dieses Feature.

                      Einen schönen Samstag noch.

                      Gruß, Ashura

                      --
                      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                      [HTML Design Constraints: Logical Markup]
                      1. Hello out there!

                        Warum nutzt ihr nicht [rоt13][/rot13]?

                        [rot13]Dann wäre das Schmulen nach der Lösung ja zu einfach.[/rot13] ;-)

                        See ya up the road,
                        Gunnar

                        --
                        “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)
                        1. gudn tach!

                          Warum nutzt ihr nicht [rоt13][/rot13]?

                          [rot13]Dann wäre das Schmulen nach der Lösung ja zu einfach.[/rot13] ;-)

                          genau! und wenn man versehentlich zu weit nach unten scrollt, faellt einem womoeglich doch schon die antwort ins auge, weil sie ja im antwort-feld unverschluesselt steht.

                          und sowieso und ueberhaupt macht vimming viel mehr spass. es ist uebrigens seit diesem monat version 7 draussen!

                          prost
                          seth

                3. Hallo Gunnar,

                  Mal eine kleine Knobelaufgabe zum Wochenende: Was ist die einstellige Quersumme der Zahl [latex]42^{42}[/latex]?

                  echo "42^42" | bc -l | perl -pi -e 's~\\\n~~g' | perl -pi -e 's~(.)~$1+~g' | perl -pi -e 's~\+$~~g' | bc -l [rot13]ergibt bei mir dreihundertfuenfzehn, also ist die einstellige Quersumme neun. ;-)[/rot13]

                  Viele Grüße,
                  Christian

                  --
                  "I have always wished for my computer to be as easy to use as my telephone; my wish has come true because I can no longer figure out how to use my telephone." - Bjarne Stroustrup
                  1. gudn tach!

                    echo "42^42" | bc -l | perl -pi -e 's~\\\n~~g' | perl -pi -e 's~(.)~$1+~g' | perl -pi -e 's~\+$~~g' | bc -l

                    geil. und da soll noch mal jemand auf das cli schimpfen.

                    aber wenn schon perl, dann kann man den letzten abschnitt auch gleich in eine schleife packen, um ein endgueltiges ergebnis zu bekommen:
                    perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'
                    ;-)

                    prost
                    seth

                    1. Hallo seth.

                      perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'

                      Führt zu „bash: syntax error near unexpected token `{s/'“.

                      Einen schönen Mittwoch noch.

                      Gruß, Ashura

                      --
                      sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                      „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                      [HTML Design Constraints: Logical Markup]
                      1. gudn tach!

                        perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'

                        Führt zu „bash: syntax error near unexpected token `{s/'“.

                        oh, und warum?

                        (unter redhat und unter cygwin hatte ich keine probleme damit und es kam raus, was rauskommen sollte: arha (als ziffer))

                        wie sieht's denn hiermit aus:
                        perl -e "\$_=\echo 42^42 | bc -l`; s/\\\n//g; while($>9){s/(?<=.)(?=.)/+/g; $=eval;} s/$/\n/; print;`"

                        prost
                        seth

                        1. Hallo seth.

                          perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'

                          Führt zu „bash: syntax error near unexpected token `{s/'“.

                          oh, und warum?

                          Wüsste ich es, hätte ich es behoben. Aber so bewandert bin ich im Shellscripting noch nicht.

                          (unter redhat und unter cygwin hatte ich keine probleme damit und es kam raus, was rauskommen sollte: arha (als ziffer))

                          „arha“?

                          wie sieht's denn hiermit aus:
                          perl -e "\$_=\echo 42^42 | bc -l`; s/\\\n//g; while($>9){s/(?<=.)(?=.)/+/g; $=eval;} s/$/\n/; print;`"

                          Ergibt „9“, funktioniert also.

                          Einen schönen Mittwoch noch.

                          Gruß, Ashura

                          --
                          sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                          „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                          [HTML Design Constraints: Logical Markup]
                          1. gudn tach!

                            (unter redhat und unter cygwin hatte ich keine probleme damit und es kam raus, was rauskommen sollte: arha (als ziffer))

                            „arha“?

                            ei, ich wollte doch nicht die loesung verraten, wobei rot13 ja in diesem fall eigentlich fast nutzlos ist. ;-)

                            wie sieht's denn hiermit aus:
                            perl -e "\$_=\echo 42^42 | bc -l`; s/\\\n//g; while($>9){s/(?<=.)(?=.)/+/g; $=eval;} s/$/\n/; print;`"

                            Ergibt „9“, funktioniert also.

                            ahhh! jetzt hast du's verraten, du..., du... spielverderber, du! ;-)

                            prost
                            seth

                            1. Hallo seth.

                              „arha“?

                              ei, ich wollte doch nicht die loesung verraten, wobei rot13 ja in diesem fall eigentlich fast nutzlos ist. ;-)

                              Nö, funktioniert wunderbar. Siehe Versuchsperson 1: ich.

                              Einen schönen Mittwoch noch.

                              Gruß, Ashura

                              --
                              sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                              „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                              [HTML Design Constraints: Logical Markup]
                              1. „arha“?

                                ei, ich wollte doch nicht die loesung verraten, wobei rot13 ja in diesem fall eigentlich fast nutzlos ist. ;-)

                                Nö, funktioniert wunderbar. Siehe Versuchsperson 1: ich.

                                aus eben diesem grunde schob ich dem "fast" sogar noch ein "eigentlich" davor. ;-p

                                prost
                                seth

                          2. Einen guten Morgen ins Erzgebirge,

                            (unter redhat und unter cygwin hatte ich keine probleme damit und es kam raus, was rauskommen sollte: arha (als ziffer))

                            „arha“?

                            wenn es mal schnell gehen soll: ROT13.exe (einschließlich ROT5).

                            Viele Grüße und einen schönen Feiertag

                            Jörg

                            1. gudn tach!

                              wenn es mal schnell gehen soll: ROT13.exe (einschließlich ROT5).

                              naja, exe-files von "fremden" sind doch boese. ;-)
                              fuer rot13 gibt's auch einfachere moeglichkeiten:

                              echo arha | tr A-Za-z N-ZA-Mn-za-m
                              oder
                              echo arha | perl -pi -e "y/A-Za-z/N-ZA-Mn-za-m/"

                              oder als batchfile
                              @echo %1 | tr A-Za-z N-ZA-Mn-za-m
                              oder
                              @echo %1 | perl -pi -e "y/A-Za-z/N-ZA-Mn-za-m/"

                              (ach so: und ein computer ohne perl ist wie eine pizza ohne kaese oder ein taschenmesser ohne kettensaege)

                              prost
                              seth

                              1. Hi,

                                naja, exe-files von "fremden" sind doch boese. ;-)

                                ja, eigentlich schon …

                                fuer rot13 gibt's auch einfachere moeglichkeiten:

                                Wenn man's kennt, ja. Mir gefällt halt das besser:

                                Strg + Umschalt + Pfeil, Strg + Einfg, Alt + Tab (evtl. noch Strg + a), Umschalt + Einfg. ;-)

                                (ach so: und ein computer ohne perl ist wie eine pizza ohne kaese oder ein taschenmesser ohne kettensaege)

                                Dann habe ich ja Glück - Perl habe ich auf der Platte (nutze es aber nie) ;-)

                                Viele Grüße

                                Jörg

                                1. gudn tach!

                                  Wenn man's kennt, ja. Mir gefällt halt das besser:

                                  Strg + Umschalt + Pfeil, Strg + Einfg, Alt + Tab (evtl. noch Strg + a), Umschalt + Einfg. ;-)

                                  wort markieren, in die zwischenablage kopieren, zum naechsten task wechseln, evtl. noch alles markieren, dann den inhalt der zwischenablage pasten.
                                  hmm, seltsam. wenn die software schon geoeffnet ist, ok. aber ansonsten verschdeh isch's nedd.

                                  (ach so: und ein computer ohne perl ist wie eine pizza ohne kaese oder ein taschenmesser ohne kettensaege)

                                  Dann habe ich ja Glück - Perl habe ich auf der Platte (nutze es aber nie) ;-)

                                  aeh, perl auf der platte zu haben und nicht zu nutzen, ist in etwa so wie eine pizza um den kaese herum zu essen oder eine schweizer taschenkettensaege zu besitzen, ohne die kettensaege zu benutzen... ;-)

                                  prost
                                  seth

                                  1. Hi,

                                    wort markieren, in die zwischenablage kopieren, zum naechsten task wechseln, evtl. noch alles markieren, dann den inhalt der zwischenablage pasten.
                                    hmm, seltsam. wenn die software schon geoeffnet ist, ok. aber ansonsten verschdeh isch's nedd.

                                    naja, es ist doch so: Die Programme, die man ständig braucht, sind halt ständig offen. ;-)

                                    Dann habe ich ja Glück - Perl habe ich auf der Platte (nutze es aber nie) ;-)

                                    aeh, perl auf der platte zu haben und nicht zu nutzen, ist in etwa so wie eine pizza um den kaese herum zu essen oder eine schweizer taschenkettensaege zu besitzen, ohne die kettensaege zu benutzen... ;-)

                                    *g* Hm, ich habe zwar ein Schweizer Taschenmesser; da ich aber eine Wohnung in Berlin habe, kann ich die Kettensäge so schlecht gebrauchen … ;-)

                                    Viele Grüße

                                    Jörg

                          3. Hallo.

                            Ergibt „9“, funktioniert also.

                            Dann funktioniert "8+1" also auch?
                            MfG, at

                      2. Hallo Ingrid.

                        perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'

                        Führt zu „bash: syntax error near unexpected token `{s/'“.

                        Tja, man sollte auch nicht nur das kopieren, was im Codeblock steht.
                        Ich hatte vorhin das „perl -e '“ und „'“ übersehen, also mein Fehler.

                        Einen schönen Mittwoch noch.

                        Gruß, Ashura

                        --
                        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
                        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
                        [HTML Design Constraints: Logical Markup]
                        1. gudn tach!

                          perl -e '$_=echo 42^42 | bc -l; s/\\\n//g; while($_>9){s/(?<=.)(?=.)/+/g; $_=eval;} s/$/\n/; print;'

                          Führt zu „bash: syntax error near unexpected token `{s/'“.

                          Tja, man sollte auch nicht nur das kopieren, was im Codeblock steht.
                          Ich hatte vorhin das „perl -e '“ und „'“ übersehen, also mein Fehler.

                          duffdae! duffdae! duffdae!
                          vermutlich deswegen hat der Christian Seiler in weiser voraussicht den _kompletten_ kram in einen codeblock geschrieben, obwohl lang=shell (noch) gar nicht erkannt wird.

                          prost
                          seth

              3. Hallo Struppi,

                ich kan mich aber auch erinnern, das wir Quersummen in der Schule immer auf eine Stelle berechnet haben.

                Ja, und zwar um zu ermitteln, ob der Primfaktor 3 in einer ganzen Zahl enthalten ist. Dadurch lassen sich ein paar Probedivisionen einsparen.

                Gruß Gernot

          3. Hallo Struppi,

            Ich bin ja blöd, ist die Quersumme nicht immer einstellig, d.h. hier muss eine rekursive Funktion aufgerufen werden.

            Zur Berechnung der einstelligen Quersumme würde ich auch keinen rekursiven Algorithmus verwenden. Außerdem würde ich Zahlen normalerweise nicht als Strings darstellen:

              
            public static void main(String[] argv) {  
                int n = 546731;  
                int summe = 0;  
                int basis = 10;  
                while (n > 0) {  
                    summe += n % basis;  
                    n = n / basis;  
                    if (summe > basis) {  
                        summe -= basis - 1;  
                    }  
                }  
                System.out.println(summe);  
            }  
            
            

            Da JS keine ganzzahlige Division kennt, wird man sich da wohl was anderes einfallen lassen müssen (Abrunden oder Teilerrest erst abziehen).

            Grüße

            Daniel

            1. Zur Berechnung der einstelligen Quersumme würde ich auch keinen rekursiven Algorithmus verwenden. Außerdem würde ich Zahlen normalerweise nicht als Strings darstellen:

              Indem Fall, warum nicht, du willst ja die einzelnen Zahlen zusammenrechnen. Ausserdem weißt du in JS gar nicht was für einen Typ du hast. Kannst aber jeden Typ mit Number() casten.

              public static void main(String[] argv) {
                  int n = 546731;
                  int summe = 0;
                  int basis = 10;
                  while (n > 0) {
                      summe += n % basis;
                      n = n / basis;
                      if (summe > basis) {
                          summe -= basis - 1;
                      }
                  }
                  System.out.println(summe);
              }

                
              Naja, ist zumindest in JS immer noch halb so langsam wie die Version mit split() und im Firefox nochmal langsamer wie charAt() Funktion, im IE sind beide relativ gleich.  
                
              Struppi.
              
              -- 
              [Javascript ist toll](http://javascript.jstruebig.de/) (Perl auch!)
              
              1. Hallo Struppi,

                Naja, ist zumindest in JS immer noch halb so langsam wie die Version mit split() und im Firefox nochmal langsamer wie charAt() Funktion, im IE sind beide relativ gleich.

                Also mir ging es hier eher um eine allgemein saubere Lösung und darum, die einstellige Quersumme ohne Rekursion zu berechnen. Normalerweise sollte es auch schneller sein, direkt auf Zahlen zu rechnen, als dauernd zwischen Strings und Zahlen hin und her zu konvertieren. Um das zu konvertieren müssen ja schließlich die gleichen Rechenoperationen ausgeführt und zusätzlich noch ein String erzeugt werden.

                Ich habe meinen Algorithmus jetzt auch mal kurz in JS implementiert und bin zu dem Ergebnis gekommen, dass meine Variante ungefähr doppelt so schnell ist, wie die Variante mit charAt.

                Meine Implementierungen:

                  
                function impl1(n) {  
                  summe = 0; while (n > 0) {  
                    summe += n % 10;  
                    n = Math.floor(n / 10);  
                    if (summe > 10) {  
                      summe -= 9  
                    }  
                  }  
                  return summe;  
                }  
                  
                function impl2(n) {  
                  summe = 0;  
                  n = "" + n;  
                  for (var i = 0; i < n.length; i++) {  
                    summe += parseInt(n.charAt(i));  
                    if (summe > 10) {  
                      summe -= 9;  
                    }  
                  }  
                  return summe;  
                }  
                
                

                Getestet habe ich das im FF 1.5 (unter Linux)
                Im Prinzip ist es natürlich denkbar, dass bei einer Scriptsprache wie JS es schneller ist, den Interpreter die Zahl in einen String konvertieren zu lassen. Wenn das so ist, liegt das aber daran, dass die Scriptsprache relativ langsam abgearbeitet wird und die Bibliotheksaufrufe dagegen sehr schnell (weil nicht in der Scriptsprache implementiert) sind. Dann kann es natürlich von Vorteil sein, möglichst wenig direkt in der Scriptsprache zu implementieren.
                Wenn man die Quersumme aber sowieso nur für ein Beispiel berechnet und nicht mehrere Tausend mal, dann spielt das alles keine Rolle und man kann sich für den schönsten Algorithmus, sprich den, der nicht mit Strings rumbastelt, entscheiden ;-)

                Grüße

                Daniel

                1. Ich habe meinen Algorithmus jetzt auch mal kurz in JS implementiert und bin zu dem Ergebnis gekommen, dass meine Variante ungefähr doppelt so schnell ist, wie die Variante mit charAt.

                  Sehr interessant.
                  Der Unterschied kommt von Math.floor im gegensatz zu parseInt(), dadurch wird deine Funktion 2 mal so schnell.

                  Aber je länger die Zahl ist, umso schneller wird split und aber einer gewissen länger der Zahl fällt deine hinter charAt(), aber je kürzer umso schneller wird deine (ab ca. 25 Stellen)

                  Mich hat das aber eher gewundert, da du zwei Divisionen in der Schleife hast (Modulo ist eine, oder?) und Fließkommaarithmetik ja immer langsam ist.

                  Wenn man die Quersumme aber sowieso nur für ein Beispiel berechnet und nicht mehrere Tausend mal, dann spielt das alles keine Rolle und man kann sich für den schönsten Algorithmus, sprich den, der nicht mit Strings rumbastelt, entscheiden ;-)

                  Ich finde deinen Ansatz elegant, aber nicht schöner. Letzlich ist das aufsplitten der Zahl in die einzelnen Zahlen, ja das was man tut, wenn man die Quersumme berechnet. Unabhängig von dem Datentyp, der in JS auch gar nicht so eine grosse Rolle spielt.

                  Du rechnest ja die Quersumme ja nicht so aus:

                  Der Rest von 2345 / 10 ist gleich 5, geteilt durch 10 gleich 234
                  Der Rest von 234 / 10 ist gleich 4 plus 5 gleich 9 , geteilt durch 10 gleich 234
                  ...

                  Sondern
                  2 + 3 + 4 + 5

                  Insofern finde ich meinen Ansatz am elegantesten ;-)

                  Struppi.

                  --
                  Javascript ist toll (Perl auch!)
                  1. Hello out there!

                    Divisionen […] (Modulo ist eine, oder?)

                    Denke schon. Aber ...

                    und Fließkommaarithmetik ja immer langsam ist.

                    ... keine Division in Fließkommaarithmetik, sondern ausschließlich mit ganzen Zahlen.

                    Letzlich ist das aufsplitten der Zahl in die einzelnen Zahlen, […]

                    Beim ersten Auftretn des Worts „Zahl“ meintest du eine, beim zweiten Mal meintest du „Ziffern“.

                    Struppi.

                    See ya up the road,
                    Gunnar

                    --
                    “Remember, in the end, nobody wins unless everybody wins.” (Bruce Springsteen)