Dieseldunst
I'd rather be a forest than a street.

14.09.11, 14:37 | 'Nicht drueber nachdenken'
Ich bin gerade ein wenig angefixt vom Projekt Euler.

Rauchzeichen




hora sexta   |   19.09.2011, 23:45   |  
Ui, toll. Darf ich fragen, welches dortige Problem gerade bei dir dran ist? Ich glaube, man kann dort auch lange nur herumstöbern, statt einfach ins Bett zu gehen, wenn der Tag zu Ende ist. Gefährlicher Link -

texas-jim   |   20.09.2011, 08:39   |  
Das gleichschenklige Dreieck, an den Ecken offen, in das ein Laserstrahl geschickt wird. Dieser soll nach genau drölf Millionen Spiegelungen wieder austreten, und ich habe eine Idee, wie man die doofen Winkelfunktionen vermeiden kann. Die funktionieren auf Rechnern ja doch nur beschränkt, weil angenähert.

hora sexta   |   21.09.2011, 10:34   |  
Nr. 9 lachte mich sehr an, aber es lässt sich nicht so schnell en passant et élégamment als Abendunterhaltung machen, jedenfalls nicht für mich.

texas-jim   |   22.09.2011, 11:11   |  
Ach, die Voraussetzungen!
Natürliche Zahlen, größer null, in Reihe steigend. Das muß man einem Rechner erst mal beibiegen. Ich habe c durch a und b ersetzt und die Gleichung umgestellt. Dann eine Ersetzung für a + b vorgenommen. Dann waren Pause und Blatt am Ende.

hora sexta   |   27.09.2011, 21:29   |  
Ich habe a durch b und c ersetzt und in die andere Gleichung eingesetzt und dann umgestellt. Dann war das Blatt am Ende und ich musste dringend ins Bett.
Für rationale Zahlen habe ich relativ schnell ein Tripel gefunden... aber das gilt ja nicht.

texas-jim   |   28.09.2011, 09:39   |  
Wir müssen ja nicht alles selber machen, sondern nur den Rechner mit wirklich allen Informationen füttern. Also übersetzen. Suchen darf er dann noch alleine, nur den Suchbereich und die Methode geben wir vor.

Also finden wir eben die größte Zahl b heraus. Nach
a < b
nähern wir uns einfach einer der beiden Grenzen an.
Wenn
a=b ist, gilt:
2 * b^2=1000
Da a < b ist, muß b ja größer werden. Und a kleiner. Dann muß man schon nicht mehr viel probieren. Das kann der Rechner schon in der Vorgabe unter einer Minute, denke ich.
Als untere Grenze können wir vorgeben, daß a = 1 sein soll. (Engländer rechnen vielleicht mit der 0 als kleinster natürlicher Zahl. Das müsste ich nachsehen.)
Dann ist b größtmöglich und
b^2 < 1000 - 1
Das schränkt den Suchbereich ziemlich ein, und wir haben nicht mal gerechnet!

hora sexta   |   28.09.2011, 22:10   |  
Ich habe das heute morgen gelesen und versucht, darüber nachzudenken. War natürlich nicht in Tiefe möglich. Also vielleicht lag es daran, dass ich dir gerade nicht folgen kann.

Für mich war die Bedingung a < b < c insofern trivial, als eine der Dreiecksseiten doch immer größer ist als die beiden anderen, sogar größer als die beiden anderen zusammen (hier: c, die Hypothenuse, das ist ja in einer anderen Bedingung gegeben), sonst ist es ja kein Dreieck. Die Bedingung a < b < c schließt als Lösung also lediglich ein gleichschenkliges Dreieck aus (a = b). Eine solche Lösung mit zwei gleichen Katheten gilt es also zu vermeiden. Die Null kann übrigens nicht dabeisein, weil ja ein Dreieck mit der Seitenlänge Null nicht existiert, außer man will es unbedingt :-)

Ich habe auch schon daran gedacht, ein Programm zu schreiben, das solange alle Möglichkeiten durchgeht (sei a 1, b 2, daher c 997, und dann den Pythagoras befragen), bis eine Lösung gefunden ist, mit zunächst wachsendem b, bis kein b < c mehr geht, dann neue Schleife mit wachsendem a. Das ist aber nicht gemeint, glaube ich, denn klar, mit einem Computer geht das und man kann dabei einfach warten, bis die Lösung rauskommt. Ich würde das lieber auf dem Papier lösen, mit Einsetzen und Umstellen und so, ausgehend von der Konstante 1000.

hora sexta   |   28.09.2011, 22:51   |  
So. Geht wirklich leicht mit diesen Schleifen, und blitzschnell. Aber es macht nicht glücklich... Und nun Schluss mit Nerd-Kram, hier jedenfalls und für heute.

texas-jim   |   29.09.2011, 08:55   |  
Ich hab mich gestern ja auch vertan. So ist das, wenn man die Vorgaben aus dem Gedächtnis holt, 'zefix. Der Ansatz soll schon sein, ein Rechnerprogramm zu schreiben. Aber ein clever geschriebenes, kein Brute Force. So habe ich das zumindest verstanden.

Also, ich schränke nochmal den Bereich ein.
0 < a < b < c

a + b + c = 1000

Einfach:
a > 0
b > 1

Nicht mehr ganz so einfach:
a < 333 (weil 332+333+334=999)
b < 499 (weil 1 +499 +500 = 1000)

Schwierig:
Einschränkung für c finden. Da mache ich es mir (zu) einfach und schränke ein:
c > 2 und
c < 998 (weil 1 + 2 + 997 = 1000)

Wenn ich mir jetzt ein a-b-Diagramm aufmale, kann ich die Grenzen einzeichnen als senkrechte und waagerechte Linien. Anschließend zeichne ich noch die Hauptdiagonale als Grenze ein (wegen a < b, Grenze a=b).

Der Rest ist eine lineare Optimierung innerhalb dieses Bereiches. Heute abend dann.

texas-jim   |   29.09.2011, 08:57   |  
Ich hab mich gestern ja auch vertan. So ist das, wenn man die Vorgaben aus dem Gedächtnis holt, 'zefix. Der Ansatz soll schon sein, ein Rechnerprogramm zu schreiben. Aber ein clever geschriebenes, kein Brute Force. So habe ich das zumindest verstanden.

Also, ich schränke nochmal den Bereich ein.
0 < a < b < c

a + b + c = 1000

Einfach:
a > 0
b > 1

Nicht mehr ganz so einfach:
a < 333 (weil 332+333+334=999)
b < 499 (weil 1 +499 +500 = 1000)

Schwierig:
Einschränkung für c finden. Da mache ich es mir (zu) einfach und schränke ein:
c > 2 und
c < 998 (weil 1 + 2 + 997 = 1000)

Wenn ich mir jetzt ein a-b-Diagramm aufmale, kann ich die Grenzen einzeichnen als senkrechte und waagerechte Linien. Anschließend zeichne ich noch die Hauptdiagonale als Grenze ein (wegen a < b, Grenze a=b).

Der Rest ist eine lineare Optimierung innerhalb dieses Bereiches. Heute abend dann.
Mitrauchen