Escriba un programa o función que tome dos enteros que representen las coordenadas X e Y de un punto en un plano cartesiano .
La entrada puede venir en cualquier formato razonable, siempre que el valor X viene antes de la Y. Por ejemplo, 1 -2
, (1,-2)
, [1, -2]
, o 1\n-2
todos serían bien para X = 1, Y = -2.
Imprima o devuelva una cadena de un solo carácter (seguida de una nueva línea final opcional) que describa la ubicación del punto en el plano:
1
si el punto está en el cuadrante I2
si el punto está en el cuadrante II3
si el punto está en el cuadrante III4
si el punto está en el cuadrante IVX
si el punto está en el eje x (x
no se permiten minúsculas )Y
si el punto está en el eje y (y
no se permiten minúsculas )O
si el punto está en el origen (es una letra mayúscula "oh", no cero)
El código más corto en bytes gana. Tiebreaker va a la respuesta más votada.
Casos de prueba
(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
Pasatiempos de Calvin
fuente
fuente
"30+56i"
) un formato de entrada válido?1+2j
. ej. )Respuestas:
Jalea, 14 bytes
Pruébalo en línea!
Cómo funciona
fuente
Ruby, 35 bytes
Aprovechando el
<=>
operador "nave espacial" ( ).x <=> 0
volverá0
Six == 0
1
Six > 0
-1
Six < 0
Por lo tanto,
Si
x == 0
volvemos'OY'[y<=>0]
. Esto esO
ify == 0
(cadena de indexación en0
)Y
ify != 0
(esto es cierto porque ambos1
y-1
resultarán en laY
indexación en esta cadena, ya que se-1
refiere al último carácter de la cadena, que también es el índice 1)Si
x > 0
volvemos'X14'[y<=>0]
. Esto esX
ify == 0
,1
ify > 0
y4
ify < 0
(ver explicación más arriba).Si
x < 0
volvemos'X23'[y<=>0]
.fuente
JavaScript, 44 bytes
Mostrar fragmento de código
fuente
s/^f=//
)ES6, 43 bytes
¡Un byte completo más corto que todos esos ternarios!
fuente
Japt,
3022 bytesInspirado por la respuesta de @Dennis 'Jelly antes de agregar una explicación. ¡Pruébelo en línea!
Dato curioso: esto sería dos bytes más corto si hubiera agregado soporte para números negativos en la
g
función para cadenas.Otro intento, más cercano al Jelly (23 bytes):
Lamentablemente, incrementar una lista cuesta 4 bytes ...
fuente
MATL , 22 bytes
Esto usa la versión actual (10.2.1) del lenguaje / compilador.
Pruébalo en línea!
Explicación
Esto toma descaradamente el gran enfoque en la respuesta de Dennis .
fuente
Pyth, 18 bytes
Explicación:
Pruébalo aquí
O todo el conjunto de pruebas
fuente
Python 2, 75 bytes
Muy claro.
fuente
Mathematica 81 bytes
fuente
Retina , 52
Este es un método simple basado en la sustitución:
Pruébalo en línea . El extra
m`
al comienzo de algunas líneas solo es necesario para probar múltiples entradas de una vez, por lo que no se cuentan en la puntuación.Anteriormente probé este enfoque más interesante , pero es bastante más largo (alrededor de 65 sin los
m
modificadores):1
, dejando-
signos en su lugar-1
con2
3
y1
respectivamente como dígitos unarios. Esto efectivamente da 2 dígitos base3, expresados en unario3
s a111
. Esto efectivamente le da al único número unario que corresponde a cada uno de los cuadrantes, ejes y origenfuente
X
etapa necesite,$
ya que no habrá ceros a la izquierda en la entrada.Octava, 34 bytes
El viejo truco de base-3 a través de la multiplicación de vectores (aunque tuve que agregar 5 para tener en cuenta los índices de matriz basados en 1) más un poco de magia de indexación de octava.
La entrada es un vector de la forma
[1, -2]
(con o sin la coma), por lo que cuando se asigna a una variablew
:Aquí está en ideone .
fuente
Pyth, 24
Demasiado largo, pero quizás un enfoque interesante:
La entrada debe especificarse como un número complejo, por ejemplo
1-2j
. Básicamente un ternario anidado para probar:O
Y
X
Pruébalo en línea.
fuente
Java 8, 64 bytes
Esta es una expresión lambda para a
BiFunction<Integer,Integer,String>
.Se pueden guardar 3 bytes devolviendo un en
Character
lugar de unString
pero no estoy completamente seguro de si el autoboxing jugará bien con el lambda.fuente