Há uma grande história para contar sobre hexágonos comuns encontrados, por exemplo, em favos de mel. Mas essa abelha ocupada precisa de sua ajuda para dizer a ele que ponto está dentro ou fora de seu honeypot. Portanto, dado um hexágono regular, como mostrado na figura abaixo, centralizado na origem e com o tamanho da aresta l, determine se um conjunto de coordenadas (x, y) está dentro, exatamente na aresta ou fora do meu hexágono regular.
Entrada, saída e regras
As regras são:
- Os métodos de entrada e saída seguem as regras padrão .
- Entrada consiste de três inteiros :
x,y,l
. x
ey
são de qualquer formato inteiro assinado e conveniente.l
é positivo (nunca 0).- Seu programa deve gerar / retornar a
1
se o ponto(x,y)
estiver dentro do hexágono regular,-1
se estiver fora ou0
se estiver exatamente no limite. - Este é um código de golfe, portanto o código mais curto vence. Em caso de empate, o primeiro post vence.
- Para saída para stdout: são permitidos espaços à esquerda / à direita ou novas linhas na saída.
- Aplicam-se brechas padrão.
Casos de teste
Aqui estão alguns casos de teste:
0,0,1 --> 1
0,1,1 --> -1
0,-1,1 --> -1
1,0,1 --> 0
-1,0,1 --> 0
-1,-1,1 --> -1
1,1,1 --> -1
-2,-3,4 --> 1
32,45,58 --> 1
99,97,155 --> -1
123,135,201 --> 1
Respostas:
JavaScript (ES6) 77
83Teste
fonte
Ruby,
1501451371271251068876 bytes76 bytes
Alterou a comparação tripla com um foguete.
88 bytes
Remova o teste y igual ao apótema para pontos no hexágono, pois para números inteiros isso nunca pode ser verdade.
106 bytes:
O pôster sugeria não usar o epsilon, então substituiu o epsilon por zero e reorganizou, removeu um abdômen, etc.
125 bytes:
Incorpore y na definição de z e remova alguns parênteses.
127 bytes:
Termos reorganizados para evitar a necessidade de converter to_f. Use d (dobre o apótema) em vez de a (o apótema). Combine várias atribuições.
137 bytes:
Inline 'c'.
150 bytes:
Isso funciona para números inteiros ou flutuantes! O teste epsilon é para que os pontos dentro do erro de arredondamento de estar na borda sejam corretamente identificados.
Os valores absolutos movem tudo para o quadrante um.
O valor 'a' é a distância do apótema (a interceptação em y do hexágono).
O valor 'c' é o valor x do canto superior direito do hexágono.
O valor 'z' é para ver se o ponto está acima ou abaixo da linha inclinada do canto até a interceptação x.
Ungolfed:
Teste
fonte
MATL ,
2925 bytesAs entradas são
y
,x
,l
nessa ordem.Experimente online!
fonte
Julia,
6558 bytesx
é um vetor de linha[x y]
. Chamada assim:f([0 0],1)
.fonte
Python 2, 89 bytes
quase a mesma solução que a resposta de Julia, mas podemos usar a operação no vetor sem adormecer
Resultados
fonte
Pitão, 41 bytes
Teste aqui
fonte
JavaScript (ES6), 67 bytes
Nota: Para atribuir isso a uma variável para que você possa chamá-la, coloque
f=
depois dewith(Math)
.Eu usei
l*l
eb*b
no primeiro parâmetro paramin
evitar chamadas paraabs
esqrt
, mas não consegui descobrir se eu poderia fazer um truque semelhante com o segundo parâmetro.fonte