Sie sollten ein Programm oder eine Funktion schreiben, die bei einem Quadrat N
mit N
gleichem Abstand und einem Vollkreis die Anzahl der Gitterquadrate ausgibt oder zurückgibt, die teilweise oder vollständig vom Vollkreis überlappt werden.
Überlappungen der Größe 0 (dh wenn der Kreis nur eine Linie berührt) werden nicht gezählt. (Diese Überlappungen treten zB auf N = 10
.)
Beispiel
N = 8 (64 squares), Slices = 60
Eingang
- Eine ganze Zahl
N > 0
. (Das Gitter wirdN * N
Quadrate haben.)
Ausgabe
- Eine Ganzzahl, die Anzahl der durchgezogenen Kreisscheiben.
Beispiele
(Eingabe-Ausgabe-Paare)
Inputs: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
Outputs: 1 4 9 16 25 36 45 60 77 88 109 132 149 172 201
Dies ist Code-Golf, also gewinnt der kürzeste Einstieg.
N^2
.Antworten:
Pyth,
2726Probieren Sie es online aus: Pyth Compiler / Executor
Ich benutze ein
2Nx2N
Gitter und zähle überlappende2x2
Quadrate. Das ist etwas kürzer, da ich den Radius schon kenneN
.Und eigentlich zähle ich die überlappenden Quadrate nicht. Ich zähle die nicht überlappenden Quadrate des zweiten Quadranten, multipliziere die Zahl mit 4 und subtrahiere das Ergebnis von
N*N
.Erklärung zur 27-Lösung:
Erklärung für die 26 Lösung:
Mir ist aufgefallen, dass ich die Koordinaten nur einmal benutze und die Koordinaten sofort von subtrahiere
Q
. Warum nicht einfach die WerteQ - coords
direkt generieren ?Das passiert in
%2_UtQ
. Nur ein Zeichen größer als in der vorherigen Lösung und spart 2 Zeichen, weil ich nicht subtrahieren muss-Q
.quelle
Python 2, 72
Ungolfed:
Das Gitter zeigt auf ein
(n+1)*(n+1)
Quadrat. Eine Zelle überlappt den Kreis, wenn der dem Mittelpunkt am nächsten liegende Gitterpunkt innerhalb des Kreises liegt. Wir können also Gitterpunkte zählen, außer dass2*n+1
Gitterpunkte an den Achsen fehlen (sowohl für gerade als auch für ungeraden
). Deshalb korrigieren wir dies manuell.Der Code speichert Zeichen, indem komplexe Abstände zur Berechnung des Abstands zur Mitte verwendet und eine Schleife geschlossen wird , um über einen einzelnen Index zu iterieren.
quelle
CJam,
36 35 3427 BytesEs stellte sich heraus, dass dies der gleiche Algorithmus ist wie der von xnor, aber ich frage mich, ob es einen besseren gibt.
Code Erklärung :
UPDATE : Verwenden Sie den 2N-Trick von Jakube zusammen mit einigen anderen Techniken, um 7 Bytes zu sparen!
Probieren Sie es hier online aus
quelle
Pyth,
4436Ich versuche es ein bisschen zu säubern, falls ich ein paar Bytes rasieren könnte.
Erläuterung
Ich muss explizit nachsehen
n = 1
, da mein Algorithmus nur die Ecke des Quadrats prüft, die der Mitte am nächsten liegt (und keine abgedeckt istn = 1
).quelle
Oktave
(74) (66)(64)Hier die Oktavfassung. Grundsätzlich alle Eckpunkte innerhalb des Kreises finden und dann alle Quadrate mit einem oder mehreren gültigen Eckpunkten durch Faltung finden. 64 Bytes:
66 Bytes:
74 Bytes:
quelle
R - 64
quelle