Escreva um programa ou função que inclua dois números inteiros que representam as coordenadas X e Y de um ponto em um plano cartesiano .
A entrada pode vir em qualquer formato razoável, desde que o valor X vem antes do Y. Por exemplo, 1 -2
, (1,-2)
, [1, -2]
, ou 1\n-2
todos seriam excelentes para X = 1, Y = -2.
Imprima ou retorne uma única sequência de caracteres (seguida por uma nova linha à direita opcional) que descreva a localização do ponto no plano:
1
se o ponto estiver no quadrante I2
se o ponto estiver no quadrante II3
se o ponto estiver no quadrante III4
se o ponto estiver no quadrante IVX
se o ponto estiver no eixo x (letras minúsculasx
não são permitidas)Y
se o ponto estiver no eixo y (letras minúsculasy
não são permitidas)O
se o ponto estiver na origem (é uma letra maiúscula "oh", não zero)
O código mais curto em bytes vence. O desempatador vai para a resposta mais votada.
Casos de teste
(1,-2) -> 4
(30,56) -> 1
(-2,1) -> 2
(-89,-729) -> 3
(-89,0) -> X
(0,400) -> Y
(0,0) -> O
(0,1) -> Y
(0,-1) -> Y
(1,0) -> X
(-1,0) -> X
(1,1) -> 1
(1,-1) -> 4
(-1,1) -> 2
(-1,-1) -> 3
code-golf
math
number
arithmetic
Passatempos de Calvin
fonte
fonte
"30+56i"
) é um formato de entrada válido?1+2j
)Respostas:
Gelatina, 14 bytes
Experimente online!
Como funciona
fonte
Ruby, 35 bytes
Aproveitando o
<=>
operador "nave espacial" ( ).x <=> 0
retornará0
E sex == 0
1
E sex > 0
-1
E sex < 0
Conseqüentemente,
se
x == 0
voltarmos'OY'[y<=>0]
. Isto éO
ify == 0
(indexação de string em0
)Y
ify != 0
(isso é verdade porque ambos1
e-1
resultará naY
indexação dessa sequência, como-1
se refere ao último caractere da sequência, que também é o do índice 1)se
x > 0
voltarmos'X14'[y<=>0]
. Isso éX
sey == 0
,1
sey > 0
e4
sey < 0
(veja a explicação acima).se
x < 0
voltarmos'X23'[y<=>0]
.fonte
JavaScript, 44 bytes
Mostrar snippet de código
fonte
s/^f=//
)ES6, 43 bytes
Um byte inteiro mais curto que todos esses ternários!
fonte
Japonês,
3022 bytesInspirado pela resposta de @Dennis 'Jelly antes de adicionar uma explicação. Teste online!
Curiosidade: seriam dois bytes mais curtos se eu tivesse adicionado suporte para números negativos na
g
função para strings.Outra tentativa, mais próxima da Jelly (23 bytes):
Infelizmente, incrementar uma lista custa 4 bytes ...
fonte
MATL , 22 bytes
Isso usa a versão atual (10.2.1) do idioma / compilador.
Experimente online!
Explicação
Isso empresta descaradamente a grande abordagem da resposta de Dennis .
fonte
Pitão, 18 bytes
Explicação:
Experimente aqui.
Ou toda a suíte de testes
fonte
Python 2, 75 bytes
Bem direto.
fonte
Mathematica 81 bytes
fonte
Retina , 52
Este é um método simples baseado em substituição:
Experimente online . O extra
m`
no início de algumas linhas é necessário apenas para testar várias entradas de uma só vez, portanto, não são contadas na pontuação.Anteriormente, tentei essa abordagem mais interessante , mas é um pouco mais longa (cerca de 65 sem os
m
modificadores):1
, deixando-
sinais no lugar-1
por2
3
e1
respectivamente como dígitos unários. Isso efetivamente fornece 2 dígitos base3, expressos em unário3
s para111
. Isso efetivamente fornece um único número unário que corresponde a cada um dos quadrantes, eixos e origemfonte
X
estágio precise,$
pois não haverá zeros à esquerda na entrada.Oitava, 34 bytes
O antigo truque base-3 através da multiplicação de vetores (embora eu tivesse que adicionar 5 para contabilizar os índices de matriz baseados em 1), além de alguma mágica de indexação do Octave.
Entrada é um vetor do formulário
[1, -2]
(com ou sem vírgula), portanto, quando atribuído a uma variávelw
:Aqui está no ideone .
fonte
Pyth, 24
Muito tempo, mas talvez uma abordagem interessante:
A entrada deve ser especificada como um número complexo, por exemplo
1-2j
. Basicamente, um ternário aninhado para testar:O
Y
X
Experimente online.
fonte
Java 8, 64 bytes
esta é uma expressão lambda para a
BiFunction<Integer,Integer,String>
.3 bytes podem ser salvos retornando um em
Character
vez de um,String
mas não tenho certeza absoluta se a autoboxing funcionará bem com o lambda.fonte