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-2todos 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:
1si el punto está en el cuadrante I2si el punto está en el cuadrante II3si el punto está en el cuadrante III4si el punto está en el cuadrante IVXsi el punto está en el eje x (xno se permiten minúsculas )Ysi el punto está en el eje y (yno se permiten minúsculas )Osi 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 <=> 0volverá0Six == 01Six > 0-1Six < 0Por lo tanto,
Si
x == 0volvemos'OY'[y<=>0]. Esto esOify == 0(cadena de indexación en0)Yify != 0(esto es cierto porque ambos1y-1resultarán en laYindexación en esta cadena, ya que se-1refiere al último carácter de la cadena, que también es el índice 1)Si
x > 0volvemos'X14'[y<=>0]. Esto esXify == 0,1ify > 0y4ify < 0(ver explicación más arriba).Si
x < 0volvemos'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
gfunció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
mmodificadores):1, dejando-signos en su lugar-1con23y1respectivamente como dígitos unarios. Esto efectivamente da 2 dígitos base3, expresados en unario3s a111. Esto efectivamente le da al único número unario que corresponde a cada uno de los cuadrantes, ejes y origenfuente
Xetapa 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:OYXPrué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
Characterlugar de unStringpero no estoy completamente seguro de si el autoboxing jugará bien con el lambda.fuente