Üçüncü ayın ondördü, Monte Carlo'dan selamlar...
python2 -c "
from random import random
l = lambda (a, b), c: (a + c, b + 1)
g = (1 if random()**2 + random()**2 <= 1 else 0 for i in range(10**6))
r, t = reduce(l, g, (0.0, 0))
print r / t * 4.0
"
Üçüncü ayın ondördü, Monte Carlo'dan selamlar...
python2 -c "
from random import random
l = lambda (a, b), c: (a + c, b + 1)
g = (1 if random()**2 + random()**2 <= 1 else 0 for i in range(10**6))
r, t = reduce(l, g, (0.0, 0))
print r / t * 4.0
"
Genel sıkıntım, bu tarz basit programları bir satırda yazacak bir programlama dili bulamamış olmam. Herhangi bir öneriye açığım. Aynı şekilde birisi python ile daha düzgününü yazabiliyorsa, görmeyi çok isterim.
Valla her birkac senede bir ogrenmeye heves ettigim APL turevi dillerden biri care olabilir zira uzaktan bakinca asiri 'kompakt' gorunuyorlar. Misal:
Hmm, tek satir mi? Challenge accepted:
print (lambda (r, t): r / t * 4.0)((lambda random: reduce(lambda (a, b), c: (a + c, b + 1), (1 if random()**2 + random()**2 <= 1 else 0 for i in range(10**6)), (0.0, 0)))(__import__("random").random))
Daha duzgunu mu? Tabi ki hayir, ama saniyorum APL ile yazilmis olsa da benzer seviyede okunamaz olurdu.
araya noktali virgul koyunca, ya da komut satirindan bir seferde calistiramayinca pek tadi yok.
Moving average versiyonu. import olmasa bu yeterdi bana.
from random import random
print 4 * reduce(
lambda a, (c, d): (a * (d - 1) + c) / d,
((1.0 if random()**2 + random()**2 <= 1 else 0, i) for i in range(1, 10**6)),
0)
yapmisim zaten ben bunu bir ara
https://gist.github.com/auselen/0f6f467da91d0003eb345b80af0f27e8
A-aaa, Buffon! :)