Usted debe escribir un programa o función que, dada una N
por N
rejilla cuadrada igualmente espaciados y un sólido salidas círculo inscrito o devuelve el número de cuadrados de rejilla que se solapan parcial o totalmente por el círculo sólido.
Las superposiciones de tamaño 0 (es decir, cuando el círculo solo toca una línea) no se cuentan. (Estas superposiciones ocurren, por ejemplo, en N = 10
).
Ejemplo
N = 8 (64 squares), Slices = 60
Entrada
- Un entero
N > 0
. (La cuadrícula tendráN * N
cuadrados).
Salida
- Un número entero, el número de rodajas de círculo sólido.
Ejemplos
(pares de entrada-salida)
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
Este es el código de golf, por lo que gana la entrada más corta.
N^2
.Respuestas:
Pyth,
2726Pruébelo en línea: Pyth Compiler / Executor
Yo uso una
2Nx2N
cuadrícula y cuento2x2
cuadrados superpuestos . Eso es un poco más corto, ya que conozco el radioN
.Y en realidad no cuento los cuadrados superpuestos. Cuento los cuadrados no superpuestos del segundo cuadrante, multiplico el número por 4 y restamos el resultado
N*N
.Explicación de la solución 27:
Explicación de la solución 26:
Me di cuenta de que uso las coordenadas solo una vez e inmediatamente resta las coordenadas
Q
. ¿Por qué no simplemente generar los valoresQ - coords
directamente?Esto sucede en
%2_UtQ
. Solo un char más grande que en la solución anterior y ahorra 2 caracteres, porque no tengo que restar-Q
.fuente
Pitón 2, 72
Sin golf:
La cuadrícula apunta a un
(n+1)*(n+1)
cuadrado. Una celda se superpone al círculo si su punto de cuadrícula más cercano al centro está dentro del círculo. Entonces, podemos contar los puntos de la cuadrícula, excepto que esto pierde2*n+1
puntos de la cuadrícula en los ejes (tanto para pares como para imparesn
), por lo que corregimos eso manualmente.El código guarda caracteres al usar distancias complejas para calcular la distancia al centro y un colapso de bucle para iterar sobre un índice único.
fuente
CJam,
36 35 3427 bytesResultó ser el mismo algoritmo que el de xnor, pero me pregunto si hay uno mejor.
Explicación del código :
ACTUALIZACIÓN : ¡Usando el truco 2N de Jakube junto con algunas otras técnicas para ahorrar 7 bytes!
Pruébalo en línea aquí
fuente
Pyth
4436Tratando de limpiarlo un poco en caso de que pudiera reducir algunos bytes.
Explicación
Tengo que verificar explícitamente
n = 1
, ya que mi algoritmo solo verifica la esquina del cuadrado más cercano al centro (y ninguno está cubierton = 1
).fuente
Octava
(74) (66)(64)Aquí la versión de octava. Básicamente, encontrar todos los vértices dentro del círculo y luego encontrar todos los cuadrados con uno o más vértices válidos por convolución. 64 bytes:
66 bytes:
74 bytes:
fuente
R - 64
fuente