A Wikipedia diz sobre as coordenadas polares :
Em matemática, o sistema de coordenadas polares é um sistema de coordenadas bidimensional no qual cada ponto de um plano é determinado por uma distância de um ponto de referência e um ângulo de uma direção de referência.
Isso parece perfeito para descrever grades hexagonais. Veja a seguinte grade hexagonal, por exemplo:
A B C
D E F G
H I J K L
M N O P
Q R S
Nosso ponto de referência será o centro do hexágono ('J'), e nosso ângulo de referência será o canto superior esquerdo do hexágono ('A'). No entanto, descreveremos o ângulo em termos do número de etapas no sentido horário ao redor da parte externa do hexágono a partir deste ponto, não em ângulos. Então, chamaremos de "número da etapa" em vez de ângulo.
Por exemplo, 'C' está em (2, 2) porque possui um raio de 2 (uma vez que está a dois anéis do centro, 'J') e um número de passo 2 (2 passos no sentido horário a partir de 'A '). Da mesma forma, 'O' está em (1, 3), porque fica a um anel do centro e a três passos no sentido horário a partir de 'E' (que está no ângulo de referência).
Para completar, 'J' está em (0, 0), pois você precisa de 0 passos e 0 passos no sentido horário para alcançá-lo.
Agora, você também pode descrever um hexagonal com coordenadas cartesianas , mas devido ao deslocamento, isso é um pouco estranho. Assim como com nossas coordenadas polares, colocaremos o centro em (0, 0). Cada espaço também ocupa uma coordenada, então 'K' está em (2, 0), não (1, 0). Isso colocaria 'A' em (-2, 2) e 'O' em (1, -1).
O desafio
Dadas coordenadas hexagonais polares, produza as mesmas coordenadas em coordenadas cartesianas. Você pode pegar essas cordas e enviar a resposta em qualquer formato razoável. Isso significa que você pode reverter a ordem das entradas, se quiser. Isso também significa que você pode emitir as cordas como (Y, X), mas, se o fizer, mencione isso na sua resposta para evitar confusão.
Você não precisa lidar com raios negativos, mas poderá obter ângulos negativos ou ângulos que vão mais do que uma revolução completa ao redor do hexágono. Por exemplo, você pode receber (1, 10) ou (1, -2) como entrada. Ambos corresponderiam a 'N' em nosso hexágono anterior. Você não precisa manipular não-inteiros para entrada.
IO de amostra
#Polar #Cartesian
(0, 0) (0, 0)
(1, 2) (2, 0)
(6, 0) (-6, 6)
(2, -3) (-3, -1)
(4, 23), (-5, 3)
(5, -3), (-8, 2)
(10, 50), (-20, 0)
(6, 10), (10, 2)
(8, 28), (0, -8)
(8, -20), (0, -8)
fonte
Respostas:
JavaScript (ES6), 93 bytes
Snippet de teste:
Mostrar snippet de código
fonte
(1, -7)
.JavaScript (ES6), 95 bytes
Explicação: A solução para um ângulo zero é simples
-r,r
, então começamos nesse ponto. Se o ângulo for negativo, adicionamos um hexágono inteiro e nos chamamos recursivamente, caso contrário, começamos a andar pelo hexágono com umd,e=2,0
passo. Sempre que possível, saltamosr
essas etapas e giramos a etapa usando a fórmulad+e*3>>1,e-d>>1
para avançar para o próximo lado. Finalmente, tomamos as medidas restantes para chegar ao nosso destino.fonte