Vous devez écrire un programme ou une fonction qui, donnée N
par N
une grille carrée équidistante et un cercle inscrit solide, affiche ou renvoie le nombre de carrés de la grille qui se chevauchent partiellement ou entièrement par le cercle plein.
Les chevauchements de taille 0 (c'est-à-dire lorsque le cercle ne touche qu'une ligne) ne sont pas comptés. (Ces chevauchements se produisent par exemple N = 10
.)
Exemple
N = 8 (64 squares), Slices = 60
Contribution
- Un entier
N > 0
. (La grille aura desN * N
carrés.)
Production
- Un entier, le nombre de tranches de cercle plein.
Exemples
(paires entrée-sortie)
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
C'est le golf de code, donc l'entrée la plus courte gagne.
N^2
.Réponses:
Pyth,
2726Essayez-le en ligne: Pyth Compiler / Executor
J'utilise une
2Nx2N
grille et compte les2x2
carrés qui se chevauchent . C'est un peu plus court, car je connais déjà le rayonN
.Et en fait, je ne compte pas les carrés qui se chevauchent. Je compte les carrés non superposés du deuxième quadrant, multiplie le nombre par 4 et soustrais le résultat de
N*N
.Explication de la solution 27:
Explication de la solution 26:
J'ai remarqué que j'utilise les coordonnées une seule fois et que je soustrais immédiatement les coordonnées de
Q
. Pourquoi ne pas simplement générer les valeursQ - coords
directement ?Cela se produit en
%2_UtQ
. Un seul caractère plus grand que dans la solution précédente et enregistre 2 caractères, car je n'ai pas à soustraire-Q
.la source
Python 2, 72
Non golfé:
La grille indique un
(n+1)*(n+1)
carré. Une cellule chevauche le cercle si son point de grille le plus proche du centre se trouve à l'intérieur du cercle. Donc, nous pouvons compter les points de grille, sauf qu'il manque des2*n+1
points de grille sur les axes (à la fois pour les paires et les impairesn
), nous corrigeons donc cela manuellement.Le code enregistre les caractères en utilisant des distances complexes pour calculer la distance au centre et un effondrement de boucle pour itérer sur un seul index.
la source
CJam,
36 35 3427 octetsCela s'est avéré être le même algorithme que xnor, mais je me demande s'il y en a un meilleur.
Explication du code :
MISE À JOUR : Utilisation de l'astuce 2N de Jakube avec d'autres techniques pour économiser 7 octets!
Essayez-le en ligne ici
la source
Pyth,
4436Essayer de le nettoyer un peu au cas où je pourrais raser quelques octets.
Explication
Je dois vérifier explicitement
n = 1
, car mon algorithme ne vérifie que le coin du carré le plus proche du centre (et aucun n'est couvertn = 1
).la source
Octave
(74) (66)(64)Voici la version octave. Fondamentalement, trouver tous les sommets dans le cercle, puis trouver tous les carrés avec un ou plusieurs sommets valides via convolution. 64 octets:
66 octets:
74 octets:
la source
R - 64
la source