Apa gunanya?

22

Tulis program atau fungsi yang menggunakan dua bilangan bulat yang mewakili koordinat X dan Y dari suatu titik pada bidang Cartesian .

Input dapat datang dalam format yang wajar asalkan nilai X datang sebelum Y. Sebagai contoh, 1 -2, (1,-2), [1, -2], atau 1\n-2semua akan baik-baik saja untuk X = 1, Y = -2.

Cetak atau kembalikan string karakter tunggal (diikuti oleh baris tambahan opsional) yang menjelaskan lokasi titik di pesawat:

  • 1jika intinya ada di kuadran I
  • 2 jika intinya ada di kuadran II
  • 3 jika intinya ada di kuadran III
  • 4 jika intinya ada di kuadran IV
  • Xjika titiknya pada sumbu x (huruf kecil xtidak diperbolehkan)
  • Yjika titiknya pada sumbu y (huruf kecil ytidak diperbolehkan)
  • O jika intinya adalah pada asal (itu huruf kapital "oh", bukan nol)

Kode terpendek dalam byte menang. Tiebreaker memilih jawaban yang lebih tinggi.

Uji Kasus

(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
Hobi Calvin
sumber
Jadi untuk keperluan tantangan ini, sumbu X dan Y tidak ada kuadran?
Rɪᴋᴇʀ
@RikerW Benar. Kalau tidak, titik (0, 9) dapat dikatakan kuadran I atau II.
Hobi Calvin
Apakah bilangan kompleks (atau representasi string, seperti "30+56i") format input yang valid?
Level River St
@steveverrill Ya
Hobi Calvin
Bisakah input dalam bentuk bilangan kompleks? (mis. 1+2j)
Trauma Digital

Jawaban:

16

Jelly, 14 byte

Ṡḅ3ị“Y4X13X2YO

Cobalah online!

Bagaimana itu bekerja

Ṡḅ3ị“Y4X13X2YO    Main link. Input: [x, y]

Ṡ                 Apply the sign function to both coordinates.
 ḅ3               Convert the resulting pair from base 3 to integer.
                  Because of how base conversion is implemented in Jelly, this maps
                  [a, b] to (3a + b), even if a and b aren't valid ternary digits.
                  Therefore:
                      [0, 1]   ->  1
                      [1, -1]  ->  2
                      [1, 0]   ->  3
                      [1, 1]   ->  4
                      [-1, -1] -> -4
                      [-1, 0]  -> -3
                      [-1, 1]  -> -2
                      [0, -1]  -> -1
                      [0, 0]   ->  0
   ị“Y4X13X2YO    Retrieve the character at that index from the string.
                Indexing is 1-based and modular in Jelly, so 1ị retrieves the
                first character, -1ị the penultimate, and 0ị the last.
Dennis
sumber
6
Bergabung dengan Jelly dari klub ponsel .
Dennis
3
Aaaaaand Jelly menang sekali lagi ...
ETHproduksi
Pendekatan yang sangat bagus!
Luis Mendo
11

Ruby, 35 byte

->x,y{%w[OY X14 X23][x<=>0][y<=>0]}

Memanfaatkan <=>operator "pesawat ruang angkasa" ( ).

x <=> 0 akan kembali

  • 0 jika x == 0
  • 1 jika x > 0
  • -1 jika x < 0

Karenanya,

  • jika x == 0kita kembali 'OY'[y<=>0]. Ini adalah

    • Oif y == 0(string indexing at 0)

    • Yif y != 0(ini benar karena keduanya 1dan -1akan menghasilkan Ysaat pengindeksan pada string ini, sebagaimana -1merujuk pada karakter terakhir dalam string, yang juga merupakan yang ada di indeks 1)

  • jika x > 0kita kembali 'X14'[y<=>0]. Ini adalah Xjika y == 0, 1jika y > 0, dan 4jika y < 0(lihat penjelasan di atas).

  • jika x < 0kita kembali 'X23'[y<=>0].

Gagang pintu
sumber
6

JavaScript, 44 byte

(x,y)=>x?y?x>0?y>0?1:4:y>0?2:3:'X':y?'Y':'O'

dihapus
sumber
3
Mataku sakit, itu satu rantai panjang operator ternary
andlrc
1
afaik diizinkan untuk menulis fungsi anonim ( s/^f=//)
andlrc
5

ES6, 43 byte

(x,y)=>"OYYX32X41"[3*!!x+3*(x>0)+!!y+(y>0)]

Seluruh byte lebih pendek dari semua terner itu!

Neil
sumber
3

Japt, 30 22 byte

"3Y2XOX4Y1"g4+3*Ug +Vg

Terinspirasi oleh jawaban Jelly @ Dennis 'sebelum dia menambahkan penjelasan. Uji secara online!

Fakta menyenangkan: ini akan menjadi dua byte lebih pendek jika saya telah menambahkan dukungan untuk angka negatif dalam gfungsi untuk string.

Upaya lain, lebih dekat dengan Jelly satu (23 byte):

"3Y2XOX4Y1"gNmg m+1 ¬n3

Sayangnya, penambahan daftar biaya 4 byte ...

Produksi ETH
sumber
2

MATL , 22 byte

'3X2YOY4X1'iZSQI1h*sQ)

Ini menggunakan rilis saat ini (10.2.1) dari bahasa / kompiler.

Cobalah online!

Penjelasan

Ini tanpa malu meminjam pendekatan hebat dalam jawaban Dennis .

'3X2YOY4X1'     % literal string. Will be indexed into to produce result
i               % input array of two numbers
ZS              % sign of each number in that array. Gives -1, 0 or 1
Q               % add 1 to produce 0, 1 or 2
I1h             % array [3 1]
*s              % multiply both arrays element-wise and compute sum
Q               % add 1. Gives a value from 1 to 9
)               % index into string. Display
Luis Mendo
sumber
2

Pyth, 18 byte

@"OY4X13X2Y"i._RQ3

Penjelasan:

                   - Autoassign Q = eval(input())
             ._RQ  - map(cmp, Q)
            i    3 - convert to base 3
@"OY4X13X2Y"       - "OY4X13X2Y"[^] (A lookup table)

Coba di sini.

Atau seluruh test suite

Biru
sumber
1

Python 2, 75 byte

lambda x,y,b=bool:[['OX','YO'][b(y)][b(x)],[[1,2],[4,3]][y<0][x<0]][b(x*y)]

Cukup mudah.

Mego
sumber
1

Mathematica 81 byte

Switch[Sign@#,{1,-1},4,{1,1},1,{-1,1},2,{-1,-1},3,{0,0},"O",{_,0},"X",{0,_},"Y"]&

%/@{{1, -2}, {30, 56}, {-2, 1}, {-89, -729}, {-89, -0}, {0, 400}, {0, 0},{0, 1}, {0, -1}, {1, 0}, {-1, 0}, {1, 1}, {1, -1}, {-1, 1}, {-1, -1}}

{4, 1, 2, 3, "X", "Y", "O", "Y", "Y", "X", "X", 1, 4, 2, 3}

DavidC
sumber
1

Retina , 52

Ini adalah metode berbasis substitusi sederhana:

^0 0
O
^0.*
Y
.* 0
X
-.*-.*
3
^-.*
2
.*-.*
4
.* .*
1

Cobalah online . Ekstra m`di awal beberapa baris hanya diperlukan untuk menguji beberapa input sekaligus, jadi tidak dihitung dalam skor.


Sebelumnya saya mencoba pendekatan yang lebih menarik ini , tapi agak lebih lama (sekitar 65 tanpa mpengubah):

[1-9]\d*
1
-1
2
(.) (.)
$1$*3$2$*1
3
111
m`^(.)*$
$#1
T`d`OYYX14X23
  • gantilah semua nomor yang bukan nol dengan 1meninggalkan -tanda di tempatnya
  • Pengganti -1dengan2
  • Konversi angka 1 dan 2 unary dengan 3dan 1masing - masing sebagai digit unary. Ini secara efektif memberikan 2 digit base3, dinyatakan dalam unary
  • Konversikan ke 3s ke 111. Ini secara efektif memberikan angka unary tunggal yang sesuai dengan masing-masing kuadran, sumbu dan asal
  • Ubah unary menjadi satu angka desimal
  • Ubah posisi angka desimal ke karakter keluaran yang sesuai.
Trauma Digital
sumber
1
Saya tidak berpikir Xpanggung perlu $karena tidak akan ada nol terkemuka di input.
Martin Ender
1
Pendekatan yang lebih menarik dapat disingkat menjadi setidaknya 40 byte . Sekarang saya akan melihatnya lagi besok.
randomra
Untuk menjalankan batch Anda perlu beberapa penyesuaian .
randomra
1

Oktaf, 34 byte

@(p)['3X2YOY4X1'](sign(p)*[3;1]+5)

Trik base-3 yang lama melalui perkalian vektor (walaupun saya harus menambahkan 5 untuk memperhitungkan indeks array berbasis 1) ditambah beberapa sihir pengindeksan oktaf.

Input adalah vektor dari formulir [1, -2](dengan atau tanpa koma), jadi ketika ditugaskan ke variabel w:

>> w([1 -2])
ans = 4

Ini dia ideone .

gelas kimia
sumber
Ideone tampaknya bekerja kembali. Apakah Anda melakukan sesuatu yang istimewa untuk menggunakannya?
Luis Mendo
@LuisMendo Yang ini menggunakan fungsi anonim. Fungsi-fungsi yang disebutkan masih borked bagi saya. :(
gelas kimia
Aah, kamu benar. Itu bernama fungsi yang tidak berfungsi. Jadi masih sama: - /
Luis Mendo
1

Pyth, 24

Terlalu panjang, tapi mungkin pendekatan yang menarik:

?Q?sQ?eQh%/yPQ.n04\X\Y\O

Input harus ditentukan sebagai angka kompleks, mis 1-2j. Pada dasarnya terner bersarang untuk diuji:

  • jika inputnya nol - output O
  • lain jika bagian nyata adalah nol - output Y
  • lain jika bagian imajiner adalah nol - output X
  • selain itu hitung fase kompleks, kalikan dengan 2, bilangan bulat integer dengan π, lalu mod dan tambahkan untuk memberikan nomor kuadran yang sesuai.

Cobalah online.

Trauma Digital
sumber
1

Java 8, 64 byte

ini adalah ungkapan lambda untuk a BiFunction<Integer,Integer,String>.

(x,y)->"OYYX14X23".charAt(3*(x>0?1:x<0?2:0)+(y>0?1:y<0?2:0))+"";

3 byte dapat disimpan dengan mengembalikan Characterbukan Stringtapi saya tidak sepenuhnya yakin apakah autoboxing akan bermain dengan baik dengan lambda.

Jack Ammo
sumber
1
Oh rapi, jawaban ini menggunakan PCCG Handicap System mendapat skor lebih baik (1,5598) daripada jawaban Dennis's Jelly (1,5929).
Draco18s
itu cukup menarik. terima kasih telah menunjukkannya
Jack Ammo
1
Menjalankan nilai untuk beberapa entri yang satu ini karena penasaran (semua skor adalah antara 1,5 dan 2, untuk referensi).
Draco18s