Você deve escrever um programa ou função que dado um N
por N
grade quadrada igualmente espaçados e uma sólida saídas inscrito círculo ou retorna o número de quadrículas que são sobrepostas parcialmente ou totalmente pelo círculo sólido.
Sobreposições de tamanho 0 (ou seja, quando o círculo toca apenas uma linha) não são contadas. (Essas sobreposições ocorrem em, por exemplo N = 10
.)
Exemplo
N = 8 (64 squares), Slices = 60
Entrada
- Um inteiro
N > 0
. (A grade teráN * N
quadrados.)
Resultado
- Um número inteiro, o número de fatias de círculo sólido.
Exemplos
(pares de entrada-saída)
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 é o código-golfe, e a menor entrada ganha.
N^2
.Respostas:
Pyth,
2726Experimente online: Pyth Compiler / Executor
Eu uso uma
2Nx2N
grade e conto2x2
quadrados sobrepostos . Isso é um pouco mais curto, já que eu já conheço o raioN
.E, na verdade, não conto os quadrados sobrepostos. Conto os quadrados não sobrepostos do segundo quadrante, multiplico o número por 4 e subtraio o resultado
N*N
.Explicação para a solução 27:
Explicação para a solução 26:
Notei que uso as coordenadas apenas uma vez e subtraio imediatamente as coordenadas
Q
. Por que não simplesmente gerar os valoresQ - coords
diretamente?Isso acontece em
%2_UtQ
. Apenas um caractere maior que na solução anterior e salva 2 caracteres, porque não preciso subtrair-Q
.fonte
Python 2, 72
Ungolfed:
A grade aponta para um
(n+1)*(n+1)
quadrado. Uma célula sobrepõe o círculo se seu ponto de grade mais próximo do centro estiver dentro do círculo. Portanto, podemos contar pontos da grade, exceto que isso perde2*n+1
pontos da grade nos eixos (tanto para pares quanto para ímparesn
), portanto, corrigimos isso manualmente.O código salva caracteres usando distâncias complexas para calcular a distância até o centro e um recolhimento de loop para iterar em um único índice.
fonte
CJam,
36 35 3427 bytesEsse acabou sendo o mesmo algoritmo que o xnor, mas me pergunto se existe algum melhor.
Explicação do código :
ATUALIZAÇÃO : Usando o truque 2N de Jakube junto com algumas outras técnicas para economizar 7 bytes!
Experimente online aqui
fonte
Pyth,
4436.Tentando limpá-lo um pouco, caso eu pudesse raspar alguns bytes.
Explicação
Eu tenho que procurar explicitamente
n = 1
, já que meu algoritmo verifica apenas o canto do quadrado mais próximo do centro (e nenhum é coberton = 1
).fonte
Oitava
(74) (66)(64)Aqui a versão oitava. Localizando basicamente todos os vértices dentro do círculo e, em seguida, localizando todos os quadrados com um ou mais vértices válidos por convolução. 64 bytes:
66 bytes:
74 bytes:
fonte
R - 64
fonte