Seite 2 von 2
Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 20:08
von BlackJack
@b.esser-wisser: Die ``import``-Zeile haben wir schonmal gemeinsam.
Meine Schleife ist kürzer. Ich habe eine ``for``-Schleife die für das "loopen" 14 Zeichen benötigt. Als Tipp: Es gibt eine syntaktisch recht kompakte Möglichkeit ein Objekt zu erstellen, das "iterable" ist und halt entsprechend lang.
Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 20:12
von EyDu
Ich werfe mal 108 in den Raum:
Edit: 106
Edit: 105
Code: Alles auswählen
import random,math as m;r=random.random
k=input()
print 2.*k/sum(1for _ in"."*k if r()+m.sin(m.pi*r())>1)
Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 20:24
von philistion
@EyDu:
Code: Alles auswählen
print 2.*k/sum(1for _ in"."*k if r()+m.sin(m.pi*r())>1)
Diese Zeile ist genial

Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 21:19
von BlackJack
@EyDu: Trifft aber zumindest meine Problembeschreibung nicht mehr was das umsetzen des Pascal-Programms war. *Explizit* mit `x` und `y` und Test auf beide Enden der Nadel. Das hatte ich nämlich absichtlich hingeschrieben damit diese Vereinfachung rausfällt.
Edit: Und Deine Zeile mit dem ``print`` geht bestimmt noch 4 Zeichen kürzer.
Edit2: Deine Lösung kann man auf 99 Zeichen drücken.
Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 21:29
von EyDu
Das ich noch locker vier Zeichen einsparen kann ist mir vorhin auch noch aufgefallen, aber das Sofa war zu gemütlich
Die genaue Beschreibung hatte ich mir vorhin gar nicht durchgelesen, vielleicht versuche ich mich daran noch. Aber eine alternative Lösung in unter 100 Zeichen ist auch schon etwas.
Re: Buffon Nadelproblem
Verfasst: Montag 7. Juni 2010, 22:22
von bords0
BlackJack hat geschrieben:Deine Lösung kann man auf 99 Zeichen drücken.
93 Zeichen meintest du wohl?

Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 00:20
von EyDu
98 Zeichen sind noch locker schaffbar, aber noch weitere fünf Zeichen zu finden scheint mir sehr kniffelig.
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 05:39
von numerix
EyDu hat geschrieben:98 Zeichen sind noch locker schaffbar, aber noch weitere fünf Zeichen zu finden scheint mir sehr kniffelig.
So knifflig sind die 93 Zeichen nicht - wenn man sich ein wenig von den gewohnten Programmierstrukturen löst ...

Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 08:38
von philistion
numerix hat geschrieben:...wenn man sich ein wenig von den gewohnten Programmierstrukturen löst ...

@numerix: Die da wären?
@BlackJack:
Mich würde außerdem die Lösung mit 180 Zeichen, in der Form wie du es angegeben hast, interessieren. Ich komme einfach nicht unter 200.
Edit: Meint ihr, es ist möglich eine Konstruktion wie die folgende, zum Laufen zu bringen? Das würde das Kriterium erfüllen, ich finde aber im Moment keine Lösung das x und y jeweils die gleiche r()-Zahl enthalten und b sowie c berechnet werden.
Code: Alles auswählen
...
o=lambda a,b:any((a>=1>b,a<0,b>=1,b<0)
s = sum(o(y+b,y-b)+o(x+c,x-c) for _ in "."*t)
...
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 09:02
von HerrHagen
eval ist dein Freund... (alte Code-Golfer Weisheit)...
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 09:05
von philistion
Daran hab ich auch schon gedacht, um mehrere lambdas in weniger Platz reinzupacken.
Werd wohl noch ein bisschen rumexperimentieren müssen..
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 09:22
von BlackJack
Was mich von `eval`/`exec` Abstand nehmen liess war die Tatsache, das meine Lösung soviel Speicher gefressen hat, dass man keine 10000000 eingeben konnte. Den Prozess musste ich abschiessen. Ich wollte keine Lösung die nur theoretisch funktioniert.
Hier ist meine "lange" Version (179 Zeichen):
Code: Alles auswählen
import math as m,random;r=random.random
g=lambda x,b:(x-b>=1)-(x-b<0)!=(x+b>=1)-(x+b<0);t=input();s=0
for _ in'x'*t:a=m.pi*r();s+=g(r(),m.sin(a)/2)+g(r(),m.cos(a)/2)
print 4.*t/s
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 09:41
von HerrHagen
Wer beim Code-Golf versucht auch noch performanten Code zu schreiben ist selber Schuld...
Krze um jdn Prs!
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 09:52
von BlackJack
@HerrHagen: Es ging dabei nicht um "performant", sondern um lauffähig. Wenn ich das Ding nicht gestoppt hätte als die Swap-Partition zu 80% belegt war, hätte das Betriebssystem die Notbremse gezogen. Ich wollte halt etwas früher wieder ein benutzbares System haben.
Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 18:55
von bloody1337
oha..^^
hier hat sich ja ganz schön was entwickelt.
eine frage habe ich trotzdem noch
und zwar,was diese zeilen geometrisch! bedeuten:
Code: Alles auswählen
a = math.pi * random.random()
b = math.cos(a) / 2.0
c = math.sin(a) / 2.0
if intp(y - b) != intp(y + b):
s = s + 1
if intp(x - c) != intp(x + c):
s = s + 1
a= ist der winkel der nadel oder?
was ist b und c? wie kann man die sachverhalte in einer skizze darstellen?
das wäre meine wirklich letzte frage,wäre echt super,wenn ihr mir auch dabei helfen würdet!
danke und schönen feierabend

Re: Buffon Nadelproblem
Verfasst: Dienstag 8. Juni 2010, 20:22
von b.esser-wisser
b und c sind die 'Länge' der Nadel auf der y- bzw. x-Achse, x+-c/2, y+-b/2 sind dann die Koordinaten der Nadelenden - sind doch ganz normale geometrische Funktionen (Tip: aufmalen).
hth, Jörg
Re: Buffon Nadelproblem
Verfasst: Sonntag 13. Juni 2010, 12:58
von bloody1337
oh man.. ich durchschau es einfach nicht,was mit der länge der nadeln b und c gemeint ist.
und dann,wenn man von y (dem mittelpunkt der nadel bzgl. y-achse) minus b - also die länge der nadel von der x-achse?! abzieht , wie kommt man da auf die koordinaten eines nadelendes? geht man da nicht einfach nach unten oder links o.ä. und kommt auf einen ganz anderen punkt,der gar nciht zur nadel gehört. die länge müsste ja eig. da nicht auf den achsen liegen,sondern mit dem winkel der nadel.!??!!
ich bin echt am verzweifeln

wenn das jemand skizzenhaft mir aufmalen könnte, wäre das super!
gruß
bloody
Re: Buffon Nadelproblem
Verfasst: Sonntag 13. Juni 2010, 14:12
von BlackJack
Wieviel würdest Du denn dafür zahlen, dass Dir jemand *Deinen* Vortrag erarbeitet!?

Re: Buffon Nadelproblem
Verfasst: Sonntag 13. Juni 2010, 14:27
von DaMutz