#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 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? + Multi-Zitat Zitieren
#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.^^ + Multi-Zitat Zitieren
#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++. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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... + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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! + Multi-Zitat Zitieren
#11 15. April 2010 AW: Project Euler Hier gibts auch Probleme die gelöst werden wollen: Sphere Online Judge (SPOJ) viel Spass + Multi-Zitat Zitieren
#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. + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#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); } } + Multi-Zitat Zitieren
#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) + Multi-Zitat Zitieren
#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; } } } } } } + Multi-Zitat Zitieren
#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) + Multi-Zitat Zitieren
#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... + Multi-Zitat Zitieren
#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; } + Multi-Zitat Zitieren
#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 + Multi-Zitat Zitieren
#24 19. April 2010 AW: Project Euler Tolle Seite! Muss ich unbedingt ausprobieren. Bin nur leider grad mit meinem iPhone unterwegs + Multi-Zitat Zitieren