Tugas
Diberikan representasi garis, menampilkan jumlah kuadran yang dilewati garis itu.
Representasi Garis yang Valid
Anda dapat mewakili garis sebagai
- Tiga bilangan bulat ditandatangani
A
,B
danC
yang berbagi tidak ada faktor umum dan di manaA
danB
tidak keduanya nol, mewakili garisAx + By = C
, - Empat bilangan bulat ditandatangani , , , dan , yang mewakili garis yang melewati titik-titik dan , atau
X1
Y1
X2
Y2
(X1, Y1)
(X2, Y2)
- Tipe data yang menggambarkan garis, jika bahasa Anda memiliki satu (itu harus mendukung garis vertikal).
Anda tidak boleh mengambil input dalam format apa pun yang tidak memungkinkan untuk garis vertikal (mis. Formulir penyadapan miring). Jika Anda memilih untuk mengambil bilangan bulat sebagai input, Anda dapat mengasumsikan bahwa mereka berada dalam kisaran inklusif [-127, 128]
.
Spesifikasi
- Output akan selalu 0, 2, atau 3 (garis tidak pernah bisa melewati keempat kuadran, juga tidak bisa melewati hanya satu kuadran).
- Garis pada sumbu dianggap tidak melewati kuadran mana pun. Garis melalui titik asal dianggap hanya melewati 2 kuadran.
- Anda tidak harus mengembalikan kuadran mana yang sedang dilewati (meskipun kasus uji menyertakannya untuk kejelasan).
- Ini adalah kode-golf , sehingga jawaban terpendek yang valid (diukur dalam byte) menang.
Uji Kasus
Anda harus mengonversi ini ke format yang sesuai sebelum menggunakannya.
1x + 1y = 1 -> 3 (quadrants I, II, and IV)
-2x + 3y = 1 -> 3 (quadrants I, II, and III)
2x + -3y = 0 -> 2 (quadrants III and I)
1x + 1y = 0 -> 2 (quadrants II and IV)
3x + 0y = 6 -> 2 (quadrants I and IV)
-3x + 0y = 5 -> 2 (quadrants II and III)
0x + -8y = 4 -> 2 (quadrants III and IV)
0x + 1y = 0 -> 0 (lies on the x-axis)
1x + 0y = 0 -> 0 (lies on the y-axis)
Jawaban:
Python 3 , 24 byte
Cobalah online!
sumber
'320'[a.count(0)]
dan mengembalikan nilai dalam bentuk string dapat diterima?Jelly , 5 byte
Cobalah online!
Tidak lagi berdasarkan jawaban Leaky!
sumber
ċ0ị2,0,3
menghemat satu byteTL’ȧ$
. Tidak tahu Jelly, jadi ini mungkin golfJavascript (ES6),
302422 byteIni adalah pertama kalinya saya mencoba bermain golf di Javascript.
Pasti ada cara yang lebih baik untuk menghitung nol ...-6 byte berkat Herman Lauenstein, -2 byte untuk mengingat prioritas operator.
Alternatif solusi 24-byte untuk mengembalikan string sebagai gantinya:
sumber
(a,b,c)=>3<<(!a+!b+!c)&3
05AB1E , 6 byte
Cobalah online!
Berdasarkan jawaban Leaky Nun.
sumber
SOGL V0.12 , 8 byte
Coba Di Sini!
Didasarkan atas jawaban Leaky Nun .
sumber
GolfScript ,
1614 byteCobalah online!
Program ini mengambil array 3 bilangan bulat yang mewakili koefisien dalam persamaan
Ax + By = C
Contoh Input / Output
Bagaimana itu bekerja
Ini agak sulit pada awalnya bagi saya untuk mencari cara matematika untuk menghitung ini. Namun hanya ada 8 konfigurasi yang memungkinkan
a != 0 & b != 0 & c != 0
Saya akhirnya datang ke fungsi berikut.
dan semuanya bisa diringkas menjadi satu masalah matematika
sumber
{!!}%
bukan[{!!}/]
.{:!:!:+_1>*}
.:!
setara dengan{!}%
), 2) singkatan untuk mengurangi (:+
setara dengan{+}*
), 3) yang.
diubah menjadi_
(karena CJam mengapung), dan 4) bahwa CJam tidak memiliki input pada tumpukan secara default, artinya Anda membungkus kode{}
untuk membuatnya berfungsi.Retina , 13 byte
Cobalah online
Juga berdasarkan jawaban Leaky Nun .
sumber
10
misalnya. Regex pertama harus seperti itu\b0
.JavaScript, 25 byte
Didasarkan atas jawaban Leaky Nun.
sumber
Haskell , 22 byte
Cobalah online!
Solusi bebas titik, 27 byte
Cobalah online!
sumber
Perl 6, 18 byte
sumber
ABCR , 30 byte
Input dalam bentuk di
A,B,C
mana koma dapat diganti dengan non-numerik, non--
karakter.Belum ada juru bahasa online, tetapi inilah penjelasannya:
sumber
APL (Dyalog Unicode) ,
1411 byteCobalah online!
⎕IO
adalah0
. Berkat @ Adám untuk -3 byte!sumber
0⌈3-×⍨+/0=⎕
Deorst , 12 byte
Cobalah online!
Agak mendasari jawaban Leaky ; menggunakan premis yang sama, tetapi metode pemetaan yang berbeda.
Bagaimana itu bekerja
Deorst memiliki jumlah kejadian bawaan, tetapi tidak (karena alasan tertentu) memiliki perintah pengindeksan, jadi saya harus membuat pemetaan berikut, di mana kiri
a.count(0)
dan kanan adalah hasil yang diinginkanProgram itu sendiri berfungsi seperti ini (contoh input dari
[1,1,1]
)sumber
Tambahkan ++ , 23 byte
Cobalah online!
Didasarkan atas jawaban Deorst saya dan jawaban Python Leaky
Bagaimana itu bekerja
Namun, saya pikir saya telah menggunakan fungsi terlalu banyak di Add ++, daripada badan kode utama. Jadi saya berusaha melakukan ini menggunakan kedua fungsi, dan kode tubuh, dan menghasilkan potongan 50 byte yang jauh lebih baik (ya, itu adalah jawaban terlama di sini):
Cobalah online!
sumber