Penjelasan:
Tahun lalu di kelas matematika, pada pekerjaan rumah kita kadang-kadang akan mendapatkan pertanyaan yang sangat sederhana, meskipun sama-sama menjengkelkan yang disebut teka-teki berlian. Ini pada dasarnya pertanyaan di mana kita akan diberi jumlah, dan suatu produk kemudian diminta untuk menemukan dua angka yang ketika dikalikan memberikan produk, dan kapan ditambahkan memberi jumlah. Ini membuat saya gila, karena satu-satunya cara saya tahu bagaimana menyelesaikannya (dalam Aljabar I) adalah dengan hanya mendaftar faktor-faktor produk kemudian melihat mana yang ditambahkan untuk menghasilkan jumlah. (Karena saya tidak tahu bagaimana menggunakan Quadratics pada saat itu) Belum lagi, mereka tidak terlalu menantang matematika. Namun, saya sadar bahwa saya seharusnya menulis sebuah program. Jadi itulah tantanganmu hari ini! Tulis sebuah program yang dapat memecahkan teka-teki berlian.
Contoh Permintaan Maaf untuk gambar buram, itu yang terbaik yang bisa saya temukan. Juga, abaikan angka dalam gelembung. Bagian atas berlian adalah produk, bagian bawah adalah jumlah, bagian kanan dan kiri adalah dua angka. Jawabannya adalah sebagai berikut: (Ini juga merupakan kasus uji Anda)
- 9, -7
- -2, -1
- 5, 8
- -9, -9
Aturan:
- Anda tidak boleh menggunakan fungsi atau kelas yang telah ditentukan yang menyelesaikan ini untuk Anda.
- Kode Anda harus merupakan program yang lengkap, atau berfungsi yang mengembalikan atau mencetak jawaban setelah menemukannya
- Input adalah jumlah dan produk, yang dimasukkan sebagai parameter fungsi atau input pengguna
Spesifikasi:
- Asumsikan bahwa dua angka, jumlah, dan produk akan selalu berupa bilangan bulat.
- Kedua jawaban akan berada di antara -127 hingga 127.
- Input Anda akan berupa dua bilangan bulat (Jumlah dan Produk).
Ingat ini adalah kode-golf, sehingga jumlah byte terpendek menang. Silakan beri judul jawaban Anda dengan Nama Bahasa ## standar, Hitungan Byte
Sunting: Juga, Doorknob menunjukkan bahwa ini pada dasarnya adalah "faktor kuadrat bentuk x ^ 2 + bx + c,". Itu adalah cara lain untuk memikirkan dan mendekati tantangan ini. : D
x^2 + bx + c
," benar?(x + n)(x + m)
memberi Andax^2 + (n+m)x + (n*m)
, jadi anjak kata kuadrat pada dasarnya setara dengan pertanyaan ini (jika saya memahaminya dengan benar).Jawaban:
Jelly ,
151110 byteCobalah online!
Kode biner berikut berfungsi dengan versi juru bahasa Jelly ini.
Ide
Ini berdasarkan fakta bahwa
Kode
sumber
Unicorn ,
4650298218741546Sekarang dengan kambing, pelangi, dan berkilau!
Semoga lebih pendek dari Jawa.
Menggunakan penyandian khusus yang dapat diterapkan dengan
ApplyEncoding
Penjelasan
Bagaimana cara kerjanya ??? Dengan keajaiban unicorn (dan sedikit kode).
Unicorn dikompilasi ke dalam JavaScript
Setiap bagian dipisahkan oleh spasi, dan setiap bagian mewakili karakter dalam kode JavaScript.
Jika bagian tersebut berisi unicorn, karakter bagian itu adalah panjang bagian itu, dikonversi menjadi kode char (mis. 32 unicorn akan menjadi spasi)
Jika bagian tersebut mengandung kambing, panjang bagian tersebut digandakan dan kemudian dikonversi menjadi kode char.
Jika karakter khusus program tidak muncul, berikut gambarnya:
Ini tidak bersaing karena Unicorn dibuat setelah tantangan ini diposting.
sumber
JavaScript ES6,
453937 * byte* Berkat Dennis!
sumber
TeaScript, 22 byte
30 31Tidak terlalu buruk. Akan jauh lebih pendek jika saya bisa mendapatkan beberapa fitur golf selesai sebelumnya seperti cara pintas
unicornunicodeCobalah online
sumber
MATL , 33 byte
Menghasilkan dua angka dalam dua baris yang berbeda. Jika tidak ada solusi, itu tidak menghasilkan output. Jika ada beberapa solusi, itu hanya menghasilkan pasangan angka yang sesuai dengan satu solusi.
Contoh
Berikut ini dijalankan di Octave dengan komit GitHub saat ini dari kompiler.
Penjelasan
sumber
matl
dan menekan "enter"; lalu tempel program dan selesaikan dengan baris kosong. Apa maksud Anda sintaks sangat terpecah? MATL menggunakan notasi reverse polish (postfix), mungkin itu membingungkan Anda?Julia,
464432 byteFungsi f yang mengambil jumlah dan kemudian produk.
Jawab Julia pertamaku. @AlexA., Anda harus bangga padaku.
Terima kasih @Dennis dan @Alex A. untuk semua bantuannya. Saya harus mencoret 44.: P
sumber
f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
dc, 16
Membaca jumlah lalu produk dari jalur STDIN yang terpisah. -ve number harus dimasukkan dengan garis bawah bukan tanda minus. misalnya
Penjelasan:
Solusi kuadratik dasar yang sama untuk
sum = a + b
danproduct = a * b
. Ini menghitung solusia
sebagai:Dan menghitung solusi
b
sebagai:Diperluas:
Membagi dengan 2 dilakukan terlambat untuk mencegah kehilangan presisi. Dimungkinkan untuk membagi dengan 2 lebih awal, tetapi ini membutuhkan ketelitian fraksional yang membutuhkan lebih banyak karakter.
sumber
Pyth,
2118 byteDisimpan 3 byte berkat @Dennis
Suite uji
Program Pyth kedua saya, jadi mungkin bisa golf dengan built-in. Saran dipersilahkan!
Bagaimana itu bekerja
(Penjelasan ini mungkin tidak 100% benar; Saya tidak terlalu terbiasa dengan Pyth.)
Perhatikan bahwa
/
ini adalah pembagian integer. Dengan menggantinya denganc
, kita bisa membuatnya bekerja dengan input non-integer juga.sumber
J
adalah variabel penetapan otomatis dan disetel saat pertama kali digunakan. Satu-satunya bagian yang tampaknya tidak beres adalah Daftar saat ini [J].,
mengambil tepat dua argumen dan menggabungkannya dalam daftar.Java, 82 (69 λ) byte dengan rumus kuadrat (127 (114 λ) byte brute-force)
Brute-Force: (Vanilla, Java 7)
λ-enhanced: (Java 8)
Tetapkan lambda ke
java.util.function.BiFunction<Integer, Integer, int[]>
dan panggilapply()
.Pendekatan kasar lama yang kasar. Hanya fungsi yang bekerja di sini, dan karena Java tidak dapat mengembalikan beberapa nilai, kami mengembalikan
int
array 2 elemen dengan angka yang diperlukan.Program berbasis pendekatan brute-force penuh dapat ditemukan di sini di ideone.com , dengan versi λ di sini.
Golf ini melibatkan menghilangkan semua kawat gigi yang tidak perlu.
Tidak Disatukan:
Pendekatan Quadratic: (Vanilla, Java 7)
λ-enhanced: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); kembalikan int baru [] {x / 2, sx / 2} ;}
(Penggunaan untuk brute-force λ di atas).
Parameter dan kriteria pengembalian sama dengan solusi brute-force di atas.
Menggunakan formula kuadratik lama yang baik yang digunakan oleh hampir semua jawaban lain di sini, dan tidak dapat diturunkan lebih jauh kecuali seseorang membantu saya di sini. Cukup jelas jadi saya tidak termasuk versi yang tidak ungolfed.
Program berbasis pendekatan kuadratik lengkap ada di sini di ideone.com , dengan versi λ di sini.
sumber
Japt ,
28222120 byteInput dibuat dalam bentuk
-63 2
.Penjelasan:
U
danV
merupakan dua input (-63
dan2
dalam kasus pertama)²
kuadratkan jumlahnyaq
mengekstrak akar kuadratsumber
[X=ºV²-4*U ¬+V)/2V-X]
Tanpa pintasan:[X=((V²-4*U q +V)/2V-X]
Aku harus benar-benar membuat trailing yang]
tidak perlu di versi berikutnya ...APL,
2721 byteIni adalah fungsi kereta diad yang menerima bilangan bulat di kanan dan kiri dan mengembalikan array. Untuk menyebutnya, tetapkan ke variabel.
Tidak Disatukan:
Cobalah online
Disimpan 6 byte berkat Dennis!
sumber
CJam, 18 byte
Cobalah online!
Bagaimana itu bekerja
sumber
Python 3,
4944 byteMungkin ada beberapa cara untuk menurunkan ini lebih jauh, tetapi ini terlihat cukup bagus.
sumber
s/2-d
. Juga,d=(s*s/4-p)**.5
simpan beberapa byte.MathCAD 15. 38 Bytes
Dengan rumus matematika, pemrograman dalam MathCAD mudah. Bahasanya bahkan dirancang untuk menangani bilangan kompleks dengan mudah. Namun ada bahasa yang lebih pendek yang dapat memecahkan masalah.
sumber
𝔼𝕊𝕄𝕚𝕟, 21 karakter / 30 byte
Try it here (Firefox only).
Meh Ini harus cukup visual bagi kalian untuk mendapatkan ide; Namun, jika Anda harus
î = input1, í = input2
,.sumber
PHP, 62 byte
Ini bisa sangat lama tetapi menjadi PHP web- "program" berfitur lengkap. Terima argumen melalui permintaan "dapatkan".
Demo .
sumber
TI-BASIC, 20 byte
Diambil
Q
dariAns
, danP
dariPrompt
. Sebut sepertiP:prgmNAME
.sumber
Prompt
pernyataan itu terlalu panjang lol. Saya tidak tahu TI-BASIC, tetapi bisa lebih pendek jika Anda meletakkan kode dalam fungsi dan lulus P sebagai parameter.Prompt
,P
,/
,2
,+
,√(
,²
,4
,-
,Ans
, dan{
adalah salah satu tanda, dan masing-masing token ini adalah salah satu byte. Juga, TI-BASIC tidak memiliki fungsi. Ini mungkin metode terpendek.