Schreiben Sie ein Programm oder eine Funktion, die bei einem ganzzahligen Radius r die Anzahl der Quadrate zurückgibt, durch die der Kreis mit dem Radius r zentriert ist. Wenn der Kreis genau durch einen Punkt auf dem Raster verläuft, der nicht als Durchlauf durch die benachbarten Einheitsquadrate zählt.
Hier ist eine Illustration für r = 5 :
Illustration von Kival Ngaokrajang, gefunden auf OEIS
Beispiele:
0 → 0
1 → 4
4 → 28
5 → 28
49 → 388
50 → 380
325 → 2540
5524 → 44180
5525 → 44020
N = 50
).Antworten:
Python 2 , 54 Bytes
Probieren Sie es online!
Weniger Golf (55 Bytes) ( TIO )
Dies schätzt die Ausgabe als
8*r
, korrigiert dann Scheitelpunktkreuzungen. Das Ergebnis ist8*r-g(r*r)
, wog(x)
die Anzahl der Schreibweisenx
als Summe von zwei Quadraten gezählt wird (außerg(0)=0
).Wenn der Kreis keine Eckpunkte durchläuft, entspricht die Anzahl der berührten Zellen der Anzahl der gekreuzten Kanten. Der Kreis durchläuft
2*r
vertikale und2*r
horizontale Gitterlinien, die jeweils in beide Richtungen verlaufen8*r
.Jede Kreuzung an einem Scheitelpunkt zählt jedoch als zwei Kantenübergänge, während nur eine neue Zelle eingegeben wird. Wir kompensieren dies, indem wir die Anzahl der Scheitelpunktkreuzungen subtrahieren. Dies beinhaltet die Punkte auf Achsen wie
(r,0)
auch pythagoreische Tripel wie(4,3)
fürr=5
.Wir zählen für einen einzelnen Quadranten die Punkte
(x,y)
mitx>=0
undy>0
mitx*x+y*y==n
und multiplizieren dann mit 4. Dazu zählen wirsqrt(r*r-x*x)
die ganze Zahlx
im Intervall[0,r)
.quelle
Mathematica, 48 Bytes
Betrachtet den ersten Quadranten und zählt die Anzahl der Rasterzellen, für die die Eingabe zwischen den Normen der unteren linken und oberen rechten Ecke der Zelle liegt (das Ergebnis wird natürlich mit 4 multipliziert).
quelle
8#-SquaresR[2,#^2]Sign@#&
basiert auf xnors BeitragSquaresR
existiert. Fühlen Sie sich frei, dies selbst zu posten (oder lassen Sie es xnor posten).Python 2 , 72 Bytes
Probieren Sie es online!
quelle
Jelly ,
21131211 BytesProbieren Sie es online!
Wie es funktioniert
quelle
Perl 6, 61 Bytes
Wie es funktioniert
quelle
AWK, 90 Bytes
Verwendung:
Nur eine einfache Suche durch Quadrant 1, um alle Kästchen zu finden, die den Kreis schneiden. Symmetrie ermöglicht die Multiplikation mit 4. Könnte gehen
-$1 to $1
, aber das würde mehr Bytes dauern und weniger effizient sein. Offensichtlich ist dies nicht der zeiteffizienteste Algorithmus, aber es dauert nur ungefähr 16 Sekunden, um den 5525-Fall auf meinem Computer auszuführen.quelle
Haskell, 74 Bytes
Zählen Sie ganz einfach die Anzahl der Quadrate zwischen (0,0) und (n, n), wobei sich links unten innerhalb des Kreises und rechts oben außerhalb des Kreises befindet, und multiplizieren Sie dann mit 4.
quelle
Pyth , 29 Bytes
Versuch es!
Erläuterung
quelle
Batch, 147 Bytes
Etwas inspiriert von den Antworten von AWK und Haskell.
quelle
Bash + Unix-Dienstprogramme, 127 Bytes
Probieren Sie es online!
Gehen Sie einfach alle Punkte im ersten Quadranten durch, zählen Sie sie hoch und multiplizieren Sie sie mit 4. Es kann sehr langsam sein, aber es funktioniert.
quelle
JavaScript (ES7), 76 Byte
quelle
n
unten nach unten rekursiv vorgehen0
?n
Radius undk
Iteration speichern und alle Versuche ergaben die gleichen Bytesk<n?...
aber ich verliere dien**2-k++**2
Reihenfolge der Bytes, weil die Operatorrangfolge beim Rückwärtsfahren falsch ist und die Subtraktion nicht kommutativ ist, so dass die linke Seite immerk-1
Klammern haben muss und braucht. Es sei denn, Sie haben einen Weg gefunden?