f=lambda r,x=0:r-x and-~((r*r-x*x)**.5%1>0)*4+f(r,x+1)
Спробуйте в Інтернеті!
Менше гольфу (55 байт) ( TIO )
lambda r:8*r-4*sum((r*r-x*x)**.5%1==0for x in range(r))
Він оцінює вихід як 8*r, а потім коригує для перетину вершин. Результат полягає в тому 8*r-g(r*r), де g(x)підраховується кількість способів запису xяк сума двох квадратів (крім g(0)=0).
Якщо коло ніколи не проходило через будь-які вершини, кількість дотикових комірок дорівнювало б кількості перекреслених ребер. Коло проходить через 2*rвертикальні та 2*rгоризонтальні лінії, проходячи кожне в обох напрямках, загалом 8*r.
Але кожне перетинання у вершині вважається двома крайовими перетинами, вводячи лише одну нову клітинку. Отже, ми компенсуємо відняттям кількості перетинів вершин. Це включає в себе точку на осях любить (r,0), а також Піфагор трійки , як (4,3)для r=5.
Підраховуємо за один квадрант точки (x,y)з x>=0і y>0з x*x+y*y==n, а потім множимо на 4. Це робимо, підраховуючи число sqrt(r*r-x*x)цього цілого числа xна проміжку [0,r).