Vielleichts hats schonmal jemand geposted, aber ich habs heute erst entdeckt:
http://projecteuler.net/Sind mehrere mathematische Programmieraufgaben, z.T. recht anspruchsvoll. Löst man eine Aufgabe bekommt man dafür Punkte, und ein Thread im Forum zu dieser Aufgabe wird freigesschaltet. Je weniger Leute die Aufgabe bisher gelöst haben, desto mehr Punkte bekommt man.
Versuch mich gerade an Aufgabe Nr. 165 "Intersections". Klappt aber noch nicht so ganz.
Wieso kann man denn da nicht einfach nacheinander alle Schnitte ausrechnen
und in einem Baum ablegen (so dass doppelte nicht mehr aufgenommen werden)?
Dann muss man ca. 5000^2=25 Mio Schnitte ausrechnen, das ist doch machbar,
oder wäre das zu aufwendig?
(Und das Berechnen der Schnitte ist doch mit dem Lösen eines
linearen Gleichungssystems getan…)
Rofl! Obwohl unter den 25, die alles gelöst haben, C++ die dominante Sprache ist, programmiert der 1. mit Java und der 2. mit Python! Und es ist sogar mehrmals Haskell zu finden! Irre.
Was ist daran irre?
Ich finde es ja schon irre, sich mit Mathematik ODER funktionaler Programmierung zu beschäftigen. Aber noch irrer, als beides zusammen zu tun - finde ich - ist zu fragen, was daran irre ist! [24]
(Und das Berechnen der Schnitte ist doch mit dem Lösen eines
linearen Gleichungssystems getan…)
Die Segmente sind keine Geraden.
Aber n ähnlichen Ansatz hab ich auch. Ich verlängere einfach die Segmente zu Geraden und schau ob sie die Geraden anderer Segmente schneiden. Wenn ja, überprüf ich ob der Schnittpunkt auf den Segmenten liegt. Mein Ergebnis ist: 1710231 echte innere Schnittpunkte. Ist aber leider falsch. Hab aber keine Ahnung was ich falsch mache.
(Und das Berechnen der Schnitte ist doch mit dem Lösen eines
linearen Gleichungssystems getan…)
Die Segmente sind keine Geraden.
Ja, schon klar, man muss natürlich noch gucken, ob die Lösung des
LGS ggf. die Randbedingung erfüllt, aber das ist ja dann auch nicht
schwierig. Ehrlich gesagt sehe ich wirklich nicht, warum die Aufgabe
schwierig ist. Vielleicht übersehe ich ja was… (Performance?)
Vielleicht ist die Schwierigkeit, die ganzen Formeln (Lösungsformeln
für LGS) fehlerfrei in ein Programm zu tippen?
Mein Ergebnis ist: 1710231 echte innere Schnittpunkte. Ist aber leider falsch. Hab aber keine Ahnung was ich falsch mache.
Hmm, vielleicht Rundungsfehler? Vergleiche von floating-point-Zahlen sind immer sehr heikel.
Wahrscheinlich soll man hier drauf kommen, dass die Schnittpunkte als Lösungen von LGS mit
rationalen Koeffizienten wieder rationale Koordinaten haben und man sich daher auf Integer-
Arithmetik beschränken kann um Rundungsfehler auszuschließen.
"students for whom the basic curriculum is not feeding their hunger to learn"
Lazy mein Bester, komm mal lieber zu deinen Vorlesungen, da kannst deinen Hunger stillen
:)…
dein _-_-M.s.-_-_
Problem 1:
multiplesOf n = sum [0,n..999]
solution = multiplesOf 3 + multiplesOf 5 - multiplesOf 15
Problem 2:
fibs = 0 : 1 : zipWith (+) fibs (tail fibs)
everyThird (a:b:c:rest) = a : everyThird rest
solution = sum . takeWhile (<= 4000000) . everyThird $ fibs