Напишите программу или функцию, которая принимает два целых числа, которые представляют координаты X и Y точки на декартовой плоскости .
Вход может прийти в любом приемлемом формате до тех пор , пока значение Х предшествует Y. Например, 1 -2
, (1,-2)
, [1, -2]
, или 1\n-2
все будет отлично для Х = 1, Y = -2.
Выведите или верните строку из одного символа (за которой следует необязательный завершающий символ новой строки), описывающий расположение точки на плоскости:
1
если точка находится в квадранте I2
если точка находится в квадранте II3
если точка находится в квадранте III4
если точка находится в квадранте IVX
если точка находится на оси х (нижний регистрx
не допускается)Y
если точка находится на оси Y (нижний регистрy
не допускается)O
если точка находится на источнике (это заглавная буква "о", а не ноль)
Самый короткий код в байтах побеждает. Tiebreaker переходит к ответу с более высоким рейтингом.
Тестовые случаи
(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
Кальвин Хобби
источник
источник
"30+56i"
) допустимым форматом ввода?1+2j
)Ответы:
Желе, 14 байт
Попробуйте онлайн!
Как это работает
источник
Рубин, 35 байт
Усиливая
<=>
оператор "космический корабль" ( ).x <=> 0
вернется0
еслиx == 0
1
еслиx > 0
-1
еслиx < 0
Следовательно,
если
x == 0
мы вернемся'OY'[y<=>0]
. ЭтоO
ify == 0
(индексация строки в0
)Y
ify != 0
(это верно, потому что и то,1
и другое-1
приведет кY
индексации по этой строке, так как-1
относится к последнему символу в строке, который также оказывается в индексе 1)если
x > 0
мы вернемся'X14'[y<=>0]
. ЭтоX
еслиy == 0
,1
еслиy > 0
и4
еслиy < 0
(см. Объяснение выше).если
x < 0
мы вернемся'X23'[y<=>0]
.источник
JavaScript, 44 байта
Показать фрагмент кода
источник
s/^f=//
)ES6, 43 байта
Целый байт короче всех этих троиц!
источник
Japt,
3022 байтаВдохновленный ответом Jelly @Dennis, прежде чем он добавил объяснение. Проверьте это онлайн!
Интересный факт: это было бы на два байта короче, если бы я добавил поддержку отрицательных чисел в
g
функцию для строк.Еще одна попытка, ближе к желе (23 байта):
К сожалению, увеличение списка стоит 4 байта ...
источник
MATL , 22 байта
Используется текущий выпуск (10.2.1) языка / компилятора.
Попробуйте онлайн!
объяснение
Это беззастенчиво заимствует великолепный подход в ответе Денниса .
источник
Pyth, 18 байт
Объяснение:
Попробуй это здесь.
Или весь набор тестов
источник
Python 2, 75 байт
Довольно просто.
источник
Mathematica 81 байт
источник
Сетчатка , 52
Это простой метод на основе подстановки:
Попробуйте онлайн . Дополнительная информация
m`
в начале некоторых строк необходима только для проверки нескольких входных данных за один раз, поэтому они не учитываются в счете.Ранее я пробовал этот более интересный подход , но он немного дольше (около 65 без
m
модификаторов):1
, оставив-
знаки на месте-1
на2
3
и,1
соответственно, как унарные цифры. Это эффективно дает 2 цифры base3, выраженные в одинарных3
с к111
. Это эффективно дает единственное унарное число, которое соответствует каждому из квадрантов, осей и происхожденияисточник
X
стадия нужна,$
так как на входе не будет ведущих нулей.Октава, 34 байта
Старый трюк с базовым 3 через векторное умножение (хотя мне пришлось добавить 5 для учета индексов массивов на основе 1) плюс некоторая магия индексирования Октавы.
Ввод - это вектор формы
[1, -2]
(с запятой или без нее), поэтому при назначении переменнойw
:Вот оно на идеоне .
источник
Пиф, 24
Слишком долго, но, возможно, интересный подход:
Ввод должен быть указан как комплексное число, например
1-2j
. В основном вложенный троичный для тестирования:O
Y
X
Попробуйте онлайн.
источник
Java 8, 64 байта
это лямбда-выражение для
BiFunction<Integer,Integer,String>
.3 байта можно сохранить, возвращая
Character
вместо a,String
но я не совсем уверен, будет ли автобокс хорошо играть с лямбдой.источник