[Code] Project Euler

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von N0S, 15. April 2010 .

Schlagworte:
  1. 15. April 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    Project Euler

    Wer macht alles bei Project Euler mit?

    Ich mache gerade mal ein paar Rätsel mit C++. Diese Rätsel sind auch ideal um sich an eine neue Programmiersprache zu gewöhnen. Wer es nicht kennt sollte also mal reinschauen.

    About - Project Euler

    Bisher hab ich 12 Rätsel gelöst und alles in einer C++ exe (Lösungen natürlich zensiert):
    Spoiler
    Bild

    Mit Java kann man aber die Rätsel viel einfacher lösen, vor allem wegen der BigInteger Klasse, aber ich bleibe hart und nutze C++^^


    Kennt jemand noch ähnliche Projekte mit solchen Programmierrätsel?
     
  2. 15. April 2010
    AW: Project Euler

    Gewissermaßen ähnlich wären wohl die Challenges von hacker.org. Ist aber nicht nur reines Programmieren, sondern eher breit gefächert. Die c't hat mal geschrieben, dass Leute die unter die Top 50 kommen sich bei ihnen bewerben sollen.^^
     
  3. 15. April 2010
    AW: Project Euler

    Hoi,

    hab auch grade angefangen, allerdings in Python.
    Hast du bei dir alle Lösungen in einer Datei?

    Es gibt btw auch eine BigNumber-Bibliothek für C++.
     
  4. 15. April 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Project Euler

    Aber keine standardmäßig oder? Naja gut mit einer BigInt Klasse ist auch alles viel einfacher.

    in python ist es auch recht einfach, weil python auch keine Probleme mit großen zahlen hat^^

    jo... willst haben?^^ No File | www.xup.in
     
  5. 15. April 2010
    AW: Project Euler

    Hab hier kein Linux, könnts also nicht ausführen ^^

    Bei Problem 5, hast du da irgendeinen Trick angewandt oder einfach stur die Zahlen durchprobiert?
    Dauert bei mir nämlich ziemlich lange ^^ Vllt. sollte ich das mal in C implementieren
     
  6. 15. April 2010
    AW: Project Euler

    ich find das hochspannend hab da lange nichts mehr gemacht weil ich für einiges einfach noch nicht bereit war, danke meines tollen algebra dozenten trau ich mir da schon mehr zu

    ich mach die dinger in C und PHP
     
  7. 15. April 2010
    AW: Project Euler

    ne mach das auch mit bruteforce. Bei mir dauert es auch 2-3 Sekunden.

    Ich verwende eigentlich nirgends einen mathematischen algo der es beschleunigt, ich denk mir alles selber aus. Genauso auch bei den Primzahlen, da gibt es ja viele mathe algos die sehr schnell sind, benutzt ich aber nicht, weil ich sie nicht auswendig kann...
     
  8. 15. April 2010
    AW: Project Euler

    Naja, auf meinem etwas ältlicherem PC hat das ganze schon eher 2-3 Minuten gedauert ^^

    Hab das auch "etwas" beschleunigt, indem ich zuerst nur durch 19, 17, 13, 11, 7, 3 und 2 geteilt hab und erst wenn die Zahl durch die Zahlen teilbar war, hab ich erst durch alle 20 dividiert.
     
  9. 15. April 2010
    AW: Project Euler

    Gut gedacht, aber du hast was wichtiges vergessen.... es kann ja nur eine gerade Zahl sein, also kannst dir das durch 2 teilen sparen und in der schleife kannst du auch immer 2er Schritte machen...

    letztendlich hab ich 2 for schleifen und 2-3 sekunden ist ok finde ich.
     
  10. 15. April 2010
    AW: Project Euler

    find ich sehr gut werd ich mich demnächst mal dransetzen. Werds auch mal mit verschiedenen Sprachen probieren, einfach zur übung. Mehr von solchen seiten!
     
  11. 15. April 2010
    AW: Project Euler

    Hier gibts auch Probleme die gelöst werden wollen: Sphere Online Judge (SPOJ)

    viel Spass
     
  12. 16. April 2010
    AW: Project Euler

    Naja das gefällt mir auf den 1. Blick nicht so, weil man da den Sourcecode denen zuschicken muss und die das dann überprüfen? Bei Euler weiss man sofort ob richtig oder falsch, das finde ich auch so gut daran... Kein Bock zu warten wegen sowas^^


    Die Aufgaben bei Project Euler find ich auch richtig geil und interessant, das hier ist bisher das interessanteste:
    Problem 35 - Project Euler

    Echt krass wie viele Primzahlen es gibt bei denen man die Zahlen rumdrehen kann wie man will und es trotzdem immer eine Primzahl bleibt.
     
  13. 19. April 2010
    AW: Project Euler

    Echt cooler Tipp!!

    pyro: hast du denn 5 schon gelöst? Meins dauert nämlich auch ganz schön lang und ich probier es auch mit bruteforce. (ich probiers auch mit python fürs lernen!)

    kann es denn nicht sogar sein, dass es nur eine 10er zahl sein kann?

    EDIT: Hab es extrem beschleunigt. Wenn es gewollt ist, dass ich die Lösung poste, einfach schreiben

    PS: Problem16 ist denke ich in allen Scriptsprachen einfach nur ing easy Zumindest in PHP und Python
     
  14. 19. April 2010
    AW: Project Euler

    wieso meinst du ist es in scriptsprachen einfacher als in java z.b.?

    ja die lösung für 5 würde mich interessieren
     
  15. 19. April 2010
    AW: Project Euler

    Aufgabe5:
    Spoiler
    Code:
    public class Euler5 {
    
     /**
     * @param args
     */
     public static void main(String[] args) {
     // TODO Auto-generated method stub
     for (int i = 1;;i++){
     if (((i % 20) == 0) && ((i % 19) == 0) && ((i % 18) == 0) && ((i % 17) == 0) && ((i % 16) == 0) && ((i % 15) == 0) && ((i % 14) == 0) && ((i % 13) == 0) && ((i % 12) == 0) && ((i % 11) == 0)){
     System.out.println(i); 
     break;
     }
     }
     }
    
    }
    
    Edit: Ma nen spoiler hinzugefügt...

    An sich doch sehr simpel - ich denke man könnte es beschleunigen und schöner machen - aber hier solved es sofort - ergo kein optimierungsbedarf für mich


    Bin nu mit lvl10 fertig und gönn mir ne pause - is bisher nicht wirklich anspruchsvoll - ich denke das anspruchsvolle läge darin, das ganze etwas optimierter zu machen - weil bisher hab ich einfach alles per bruteforce "durchgebrügelt" - aber noch geht es
     
  16. 19. April 2010
    AW: Project Euler

    irgendwie bin ich zu doof für lvl 2

    versteh nicht wirklich was ich da machen muss.

    ansonsten bin ich jetzt bei lvl 9. Die anderen waren kein problem
     
  17. 19. April 2010
    AW: Project Euler

    Level 2 is recht easy - du hast ne fibonacci reihe, bis unter 4 millionen (die letzte fibonacci zahl, die noch unter 4 mio is) - und addierst die ganzen geraden zahlen der reihe miteinander.

    Lösung: (sehr schlampig und hässlich, aber es tut...)
    Spoiler
    Code:
    import java.math.BigInteger;
    
    
    public class Euler2 {
    
     /**
     * @param args
     */
     public static void main(String[] args) {
     // TODO Auto-generated method stub
     BigInteger end = new BigInteger("4000000");
     // BigInteger end = new BigInteger("10");
     BigInteger mod = new BigInteger("2");
     BigInteger res = BigInteger.ZERO; 
     BigInteger result = BigInteger.ZERO;
     BigInteger first = new BigInteger("1");
     BigInteger second = new BigInteger("2");
     BigInteger temp = BigInteger.ZERO;
     
     while (first.compareTo(end)<0){
     temp = second;
     second = second.add(first);
     first = temp;
     if (first.mod(mod).equals(res)){
     result = result.add(first);
     }
     
     }
     System.out.println(result);
     
     }
    }
    
     
  18. 19. April 2010
    Zuletzt von einem Moderator bearbeitet: 14. April 2017
    AW: Project Euler

    Mal ganz nebenbei, was zur Hölle bringt dann dieser Screenshot ? :lol:
    Das kann doch jeder mit Level 1-xxx machen (ich zweifele trotzdem nicht dran, dass du die gelöst hast)
     
  19. 19. April 2010
    AW: Project Euler

    Der Screenshot dient als kleine Hilfe. Oft denkt man das man alles richtig gemacht hat, aber trotzdem ist es falsch, dann kann es helfen die ersten beiden Zahlen zu wissen....

    @test@private.co
    Deine Lösung 2 "tut" zwar, aber ich kann dir versprechen, wenn du so programmierst kommst du nicht weit.
    Ich bin gerade bei einer sehr harten Nuss... mein Algorithmus stimmt zwar und ist nach meiner Auffassung auch schon gut optimiert, aber er ist einfach viel zu langsam auf meinem C2D 3Ghz CPU...
    Das Problem ist wirklich die Optimierung bei den meisten Aufgaben und da braucht man mehr Mathematikkenntnisse als Programmierkenntnisse...

    Mein 5er C/C++ Lösung:

    Spoiler
    Code:
    int problem5()
    {
     for (int zahl = 2520; zahl< 1000000000; zahl+=2)
     {
     if (zahl % 7 == 0 && zahl % 17 == 0 && zahl % 13 == 0)
     {
     
     for (int i = 3; i < 21; i++)
     {
     if ( zahl % i != 0)
     {
     break;
     } else {
     if (i == 20)
     {
     return zahl;
     }
     }
     }
     }
     }
    
    }
     
  20. 19. April 2010
    AW: Project Euler

    Warum ich meine dass Scriptsprachen einfacher sind?
    Weil man zwischen Strings, Integern, Floats einfach hinundher switchen kann, ohne sich groß gedanken machen zu müssen. Es wird einem so viel Arbeit abgenommen.

    Siehe Problem16:
    Spoiler
    Code:
    '''
    Created on 19.04.2010
    
    @author: badloader
    '''
    
    def main():
     integer = 2**1000
     
     string = str(integer)
     
     result = 0
     for i in range(len(string)):
     result += int(string[i])
     
     print(result)

    Hier mein Problem Nummer 5

    Spoiler
    Code:
    '''
    Created on 17.04.2010
    
    @author: badloader
    '''
    
    def checkInt(x, max):
     if max > 1:
     if not x % max:
     if checkInt(x, max-1):
     return True 
     else:
     # we don't need to check x <= 1 because 1 always works
     # and 0 and smaller does not work at all
     return True
     
     return False
    
    def main():
     i = 10
     check = 20
     
     while not checkInt(i, check):
     i+=10
     print('The result is: ', i)
     
  21. 19. April 2010
    AW: Project Euler

    jo da hast du schon recht. Besonders in Python ist alles sehr einfach.... Die Aufgabe 16 ist in C++ eine Qual ohne BigInteger. In Java dank BigInteger noch einfach, aber in Python extrem einfach, wie man an deiner Lösung schön sieht.


    Probiert mal Problem 119... -erledigt

    PS: aber keine Lösung posten... nur tipps...
     
  22. 19. April 2010
    AW: Project Euler

    Richtig geile Seite

    Habe bis jetzt die Probleme 1, 2, 5, 6, 14 und 45 gelöst! Die ließen sich auch recht "elegant" per Brute-Force in Sekundenbruchteilen lösen

    C++ (teils VC++ 2010 only!) im Spoiler:
    Spoiler
    Problem 1
    Spoiler
    Code:
    unsigned prob1()
    {
     unsigned int i = 3;
     unsigned int sum = 0;
    
     for (i = 3; i < 1000; i += 3)
     {
     if (i % 5 != 0)
     sum += i;
     }
    
     for (i = 5; i < 1000; i += 5)
     {
     sum += i;
     }
    
     return sum;
    }

    Problem 2
    Spoiler
    Code:
    unsigned int prob2()
    {
     unsigned int i = 0, i1 = 1, i2 = 1, sum = 0;
    
     for (;;)
     {
     i = i1 + i2;
    
     if (i >= 4000000)
     break;
    
     if ((i & 1) == 0)
     sum += i;
    
     i1 = i2;
     i2 = i;
     }
    
     return sum;
    }

    Problem 3
    Spoiler
    Code:
    unsigned prob3()
    {
     unsigned __int64 j = 600851475143, k = -1;
    
     for (;;)
     {
     for (unsigned __int64 i = 2; i <= j; ++i)
     {
     if (j % i == 0)
     {
     j /= i;
     if (j == 1)
     return (unsigned) i;
     else
     break;
     }
     }
     }
    
     return 0;
    }

    Problem 5
    Spoiler
    Code:
    unsigned prob5()
    {
     //we don't need to test for divisibility by 1, 2, 3, 4, 5, 6, 7, 8, 9 and 10 - leaving 11, 12, 13, 14, 15, 16, 17, 18, 19
     for (unsigned i = 20; ;i += 20)
     {
     if ((i & 15) == 0)
     if (i % 11 == 0)
     if (i % 12 == 0)
     if (i % 13 == 0)
     if (i % 14 == 0)
     if (i % 15 == 0)
     if (i % 17 == 0)
     if (i % 18 == 0)
     if (i % 19 == 0)
     return i;
     }
    }

    Problem 6
    Spoiler
    Code:
    unsigned prob6()
    {
     unsigned sum = 0, square = 0;
    
     for (unsigned i = 1; i <= 100; ++i)
     {
     sum += i * i;
     square += i;
     }
    
     square *= square;
    
     return square - sum;
    }

    Problem 14
    Spoiler
    Code:
    unsigned prob14()
    {
     unsigned i, m, k, l, j;
     j = k = l = 0;
    
     auto next = [](unsigned n) -> unsigned {n & 1 ? n = n * 3 + 1 : n = n >> 1; return n;};
    
     for (i = 999999; i > 1; --i)
     {
     j = i;
    
     m = 0;
     while ((j = next(j)) != 1)
     {
     m++;
     }
    
     if (m > l) { l = m; k = i; }
     }
    
     return k;
    }

    Problem 45
    Spoiler
    Code:
    unsigned prob45()
    {
     auto T = [](unsigned n) -> unsigned {return (n*(n+1)) >> 1;};
     auto P = [](unsigned n) -> unsigned {return (n*(3*n-1)) >> 1;};
     auto H = [](unsigned n) -> unsigned {return (n*(2*n-1));};
    
     for (unsigned i = 286;true;++i)
     {
     unsigned iT = T(i);
    
     bool found_p = false;
     for (unsigned j = 0; true; ++j)
     {
     unsigned jP = P(j);
     if (jP == iT)
     {
     found_p = true;
     break;
     }
     else if(jP > iT)
     break;
     }
    
     if (found_p)
     {
     for (unsigned k = 0; true; ++k)
     {
     unsigned kH = H(k);
     if (kH == iT)
     return iT;
     else if (kH > iT)
     break;
     }
     }
     }
    
     return -1;
    }
     
  23. 19. April 2010
    AW: Project Euler

    Ja, ich weiß dass ich damit nicht weit komme, ich studier den spaß ja

    Was wiederum auch sehr wichtig ist:
    Nur so viel optimieren wie nötig, bzw vertretbar. Das Ergebnis muss immer in Relation zum Aufwand stehen. Wenn man 5 Stunden an etwas optimiert, um später eine Sekunde raus zu holen (bei Prozessen, welche nicht zeitkritisch sind) ist das den Aufwand/die Zeit nicht Wert. Natürlich ist das hier anders (man tut es ja für sich, und da ist die Optimierung eher ne Sache um die perfekte Lösung zu bekommen). Aber erstma die Aufgaben machen - und optimieren wenn es wirklich sein muss, bzw es sich lohnt. Für das "zum Spaß optimieren" hatte ich leider keine Zeit bisher - und ehrlich gesagt hab ich mich auch vor dem Mathematischen bisher gedrückt, heh
     
  24. 19. April 2010
    AW: Project Euler

    Tolle Seite! Muss ich unbedingt ausprobieren. Bin nur leider grad mit meinem iPhone unterwegs
     
  25. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.