Latar Belakang
Quaternion adalah sistem bilangan yang memperluas bilangan kompleks. Angka empat memiliki bentuk berikut
di mana adalah bilangan real dan adalah tiga unit angka empat mendasar . Unit memiliki properti berikut:
Perhatikan bahwa perkalian angka empat tidak komutatif .
Tugas
Dengan angka empat yang tidak nyata , hitung setidaknya satu dari akar kuadratnya.
Bagaimana?
Menurut jawaban Math.SE ini , kami dapat mengekspresikan angka empat yang tidak nyata dalam bentuk berikut:
di mana adalah bilangan real dan adalah vektor satuan imajiner dalam bentuk dengan . Apapun seperti memiliki properti , sehingga dapat dilihat sebagai satuan imajiner.
Maka kuadrat terlihat seperti ini:
Sebaliknya, dengan diberi angka empat , kita dapat menemukan akar kuadrat dari dengan menyelesaikan persamaan berikut
yang identik dengan proses menemukan akar kuadrat dari bilangan kompleks.
Perhatikan bahwa bilangan real negatif memiliki banyak akar kueriern yang tak terhingga banyaknya, tetapi angka empat yang tidak nyata hanya memiliki dua akar kuadrat .
Masukan dan keluaran
Input adalah angka empat yang tidak nyata. Anda dapat menganggapnya sebagai empat angka nyata (titik mengambang), dalam urutan dan struktur pilihan apa pun. Non-nyata berarti bahwa setidaknya satu dari adalah nol.
Output adalah satu atau dua angka empat yang, ketika kuadrat, sama dengan input.
Uji kasus
Input (a, b, c, d) => Output (a, b, c, d) rounded to 6 digits
0.0, 1.0, 0.0, 0.0 => 0.707107, 0.707107, 0.000000, 0.000000
1.0, 1.0, 0.0, 0.0 => 1.098684, 0.455090, 0.000000, 0.000000
1.0, -1.0, 1.0, 0.0 => 1.168771, -0.427800, 0.427800, 0.000000
2.0, 0.0, -2.0, -1.0 => 1.581139, 0.000000, -0.632456, -0.316228
1.0, 1.0, 1.0, 1.0 => 1.224745, 0.408248, 0.408248, 0.408248
0.1, 0.2, 0.3, 0.4 => 0.569088, 0.175720, 0.263580, 0.351439
99.0, 0.0, 0.0, 0.1 => 9.949876, 0.000000, 0.000000, 0.005025
Dihasilkan menggunakan skrip Python ini . Hanya satu dari dua jawaban yang benar yang ditentukan untuk setiap kasus uji; yang lainnya adalah keempat nilai dinegasikan.
Kriteria penilaian & menang
Aturan standar kode-golf berlaku. Program atau fungsi terpendek dalam byte di setiap bahasa menang.
sumber
a, (b, c, d)
?a,[b,[c,[d]]]
itu baik-baik saja, jika Anda entah bagaimana dapat menyimpan byte dengan itu :)Jawaban:
APL (NARS) , 2 byte
√
NARS memiliki dukungan bawaan untuk angka empat. ¯ \ _ (⍨) _ / ¯
sumber
¯\_(⍨)√¯
Python 2 , 72 byte
Cobalah online!
Lebih atau kurang formula mentah. Saya pikir saya bisa menggunakan daftar untuk mengulang
b,c,d
, tetapi ini tampaknya lebih lama. Python benar-benar terluka di sini karena kurangnya operasi vektor, khususnya penskalaan dan norma.Python 3 , 77 byte
Cobalah online!
Memecahkan kuadrat secara langsung juga lebih pendek daripada menggunakan akar kuadrat bilangan kompleks Python untuk menyelesaikannya seperti dalam pernyataan masalah.
sumber
(s*s).sum()**.5
.Bahasa Wolfram (Mathematica) , 19 byte
Cobalah online!
Mathematica memiliki Quaternion built-in juga, tetapi lebih verbose.
Meskipun built-in terlihat keren, lakukan solusi peningkatan yang tidak menggunakan built-in juga! Saya tidak ingin suara pada pertanyaan yang mencapai HNQ miring.
sumber
JavaScript (ES7),
5553 byteBerdasarkan rumus langsung yang digunakan oleh xnor .
Mengambil input sebagai array.
Cobalah online!
Bagaimana?
Dan kembali:
sumber
Haskell , 51 byte
Cobalah online!
Formula langsung. Trik utama untuk mengekspresikan bagian nyata dari output
r/sqrt(r*2)
untuk memparalelkan ekspresi bagian imajiner, yang menghemat beberapa byte lebih dari:54 byte
Cobalah online!
sumber
Arang , 32 byte
Cobalah online! Tautan adalah untuk mengucapkan versi kode. Port of @ xnor's Python answer. Penjelasan:
Keluarkan nilai ke string dan cetak secara implisit.
sumber
Java 8, 84 byte
Port jawaban @xnor dari Python 2 .
Cobalah online.
Penjelasan:
sumber
05AB1E , 14 byte
Port jawaban @xnor dari Python 2 .
Cobalah secara online atau verifikasi semua kasus uji .
Penjelasan:
sumber
Bahasa Wolfram (Mathematica) , 28 byte
Port of @ xnor's Python 2 menjawab .
Cobalah online!
sumber
C # .NET, 88 byte
Port of Java 8 saya menjawab , tetapi mengembalikan Tuple alih-alih sebuah String. Saya pikir itu akan lebih pendek, tapi sayangnya
Math.Sqrt
memerlukanSystem
-import di C # .NET, berakhir pada 4 byte lebih lama, bukan 10 byte lebih pendek ..>.>Deklarasi lambda terlihat sangat lucu:
Cobalah online.
sumber
Perl 6 , 49 byte
Cobalah online!
Fungsi kari mengambil input sebagai
f(b,c,d)(a)
. Mengembalikan angka empat sebagaia,(b,c,d)
.Penjelasan
sumber