Napisz program lub funkcję, która przyjmuje dwie liczby całkowite reprezentujące współrzędne X i Y punktu na płaszczyźnie kartezjańskiej .
Wejście może się w dowolnym odpowiednim formacie, pod warunkiem, że wartość X jest przed Y. Na przykład 1 -2
, (1,-2)
, [1, -2]
albo 1\n-2
że wszystkie dobrze dla x = 1, y = -2.
Wydrukuj lub zwróć pojedynczy ciąg znaków (a następnie opcjonalny końcowy znak nowej linii) opisujący położenie punktu w płaszczyźnie:
1
jeśli punkt jest w ćwiartce I2
jeśli punkt znajduje się w ćwiartce II3
jeśli punkt znajduje się w ćwiartce III4
jeśli punkt znajduje się w ćwiartce IVX
jeśli punkt znajduje się na osi x (małe literyx
nie są dozwolone)Y
jeśli punkt znajduje się na osi y (małe literyy
nie są dozwolone)O
jeśli punkt znajduje się na początku (to wielka litera „oh”, a nie zero)
Najkrótszy kod w bajtach wygrywa. Tiebreaker przechodzi do wyżej głosowanej odpowiedzi.
Przypadki testowe
(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
Hobby Calvina
źródło
źródło
"30+56i"
) Jest prawidłowym formatem wejściowym?1+2j
)Odpowiedzi:
Galaretka, 14 bajtów
Wypróbuj online!
Jak to działa
źródło
Rubin, 35 bajtów
Wykorzystanie
<=>
operatora „statku kosmicznego” ( ).x <=> 0
wróci0
Jeślix == 0
1
Jeślix > 0
-1
Jeślix < 0
Stąd,
jeśli
x == 0
wrócimy'OY'[y<=>0]
. To jestO
ify == 0
(indeksowanie ciągów w0
)Y
ify != 0
(jest to prawda, ponieważ jedno1
i drugie-1
spowodujeY
indeksowanie tego ciągu, ponieważ-1
odnosi się do ostatniego znaku w ciągu, który również zdarza się tak, jak w przypadku indeksu 1)jeśli
x > 0
wrócimy'X14'[y<=>0]
. Jest tak,X
jeśliy == 0
,1
jeśliy > 0
i4
jeśliy < 0
(patrz wyjaśnienie powyżej).jeśli
x < 0
wrócimy'X23'[y<=>0]
.źródło
JavaScript, 44 bajty
Pokaż fragment kodu
źródło
s/^f=//
)ES6, 43 bajty
Cały bajt krótszy niż wszystkie te trójskładniki!
źródło
Japt,
3022 bajtówZainspirowany odpowiedzią Jelly @Dennis, zanim dodał wyjaśnienie. Przetestuj online!
Ciekawostka: byłoby o dwa bajty krótsze, gdybym dodał obsługę liczb ujemnych w
g
funkcji ciągów.Kolejna próba, bliższa do galaretki (23 bajty):
Niestety zwiększenie listy kosztuje 4 bajty ...
źródło
MATL , 22 bajty
Używa bieżącej wersji (10.2.1) języka / kompilatora.
Wypróbuj online!
Wyjaśnienie
To bezwstydnie zapożycza świetne podejście w odpowiedzi Dennisa .
źródło
Pyth, 18 bajtów
Wyjaśnienie:
Wypróbuj tutaj.
Lub cały pakiet testowy
źródło
Python 2, 75 bajtów
Całkiem proste.
źródło
Mathematica 81 bajtów
źródło
Retina , 52
Jest to prosta metoda oparta na podstawieniu:
Wypróbuj online . Statysta
m`
na początku niektórych linii jest potrzebny tylko do przetestowania wielu danych wejściowych za jednym razem, więc nie są liczone w wyniku.Wcześniej próbowałem tego bardziej interesującego podejścia , ale jest ono nieco dłuższe (około 65 bez
m
modyfikatorów):1
, pozostawiając-
znaki na miejscu-1
z2
3
i1
odpowiednio jako jedne cyfry. Skutecznie daje to 2 cyfry bazowe 3, wyrażone w jednostronnie3
s na111
. Skutecznie daje to pojedynczą liczbę jednoznaczną, która odpowiada każdej z ćwiartek, osi i początkuźródło
X
scena potrzebowała,$
ponieważ na wejściu nie będzie początkowych zer.Oktawa, 34 bajty
Stara sztuczka base-3 polegająca na mnożeniu wektorów (chociaż musiałem dodać 5, aby uwzględnić indeksy tablic 1) plus trochę magii indeksowania Octave.
Dane wejściowe to wektor formularza
[1, -2]
(z przecinkiem lub bez), więc po przypisaniu do zmiennejw
:Tutaj jest na ideone .
źródło
Pyth, 24
Zbyt długie, ale być może ciekawe podejście:
Dane wejściowe należy podać jako liczbę zespoloną, np
1-2j
. Zasadniczo zagnieżdżona trójka do testowania:O
Y
X
Wypróbuj online.
źródło
Java 8, 64 bajty
to jest wyrażenie lambda dla
BiFunction<Integer,Integer,String>
.3 bajty można zaoszczędzić, zwracając
Character
zamiast zamiast,String
ale nie jestem całkowicie pewien, czy autoboxing będzie dobrze grał z lambda.źródło