f=lambda r,x=0:r-x and-~((r*r-x*x)**.5%1>0)*4+f(r,x+1)
Çevrimiçi deneyin!
Daha az golf oynadı (55 bayt) ( TIO )
lambda r:8*r-4*sum((r*r-x*x)**.5%1==0for x in range(r))
Bu, çıktıyı şu şekilde tahmin eder 8*r
, sonra köşe geçişlerini düzeltir. Sonucudur 8*r-g(r*r)
nerede, g(x)
sayar yollardan sayısı yazmak için x
iki kare toplamı olarak (hariç g(0)=0
).
Daire hiç bir tepe noktasından geçmediyse, dokunulan hücre sayısı, geçen kenarların sayısına eşittir. Daire , her biri her iki yönde de toplam olarak geçen 2*r
dikey kılavuz çizgileri ve 2*r
yatay kılavuz çizgileri arasından geçer 8*r
.
Ancak, bir köşedeki her geçiş sadece bir yeni hücreye girerken iki kenar geçişi olarak sayılır. Bu nedenle, köşe geçişlerinin sayısını çıkararak telafi ediyoruz. Bu eksenler üzerinde noktalar gibi içermektedir (r,0)
Pisagor gibi üç katına yanı sıra (4,3)
için r=5
.
Tek bir kadran için noktaları (x,y)
ile x>=0
ve y>0
ile x*x+y*y==n
, sonra da 4 ile çarpın. Sayıları , aralıktaki sqrt(r*r-x*x)
sayının tam sayısını sayarak yaparız .x
[0,r)