
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.
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)
Code: Alles auswählen
print 2.*k/sum(1for _ in"."*k if r()+m.sin(m.pi*r())>1)
So knifflig sind die 93 Zeichen nicht - wenn man sich ein wenig von den gewohnten Programmierstrukturen löst ...EyDu hat geschrieben:98 Zeichen sind noch locker schaffbar, aber noch weitere fünf Zeichen zu finden scheint mir sehr kniffelig.
@numerix: Die da wären?numerix hat geschrieben:...wenn man sich ein wenig von den gewohnten Programmierstrukturen löst ...
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)
...
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
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