Teka-teki Berlian!


21

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 masukkan deskripsi gambar di sini 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)

  1. 9, -7
  2. -2, -1
  3. 5, 8
  4. -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


9
Ini pada dasarnya adalah "faktor kuadrat bentuk x^2 + bx + c," benar?
Gagang Pintu

1
b = - (x + y), c = (x * y)
TheNumberOne

Penyederhanaan (x + n)(x + m)memberi Anda x^2 + (n+m)x + (n*m), jadi anjak kata kuadrat pada dasarnya setara dengan pertanyaan ini (jika saya memahaminya dengan benar).
Gagang Pintu

@ Doorknob 冰 ya kamu benar. Saya kira saya akan ditandai sebagai duplikat. :(
Ashwin Gupta

Yah, saya kira kita belum memiliki pertanyaan "faktor x ^ 2 + bx + c". Hanya menunjukkan bahwa masalahnya sangat mirip.
Gagang Pintu

Jawaban:


18

Jelly , 15 11 10 byte

Hð+,_ðH²_½

Cobalah online!

Kode biner berikut berfungsi dengan versi juru bahasa Jelly ini.

0000000: 48 98 2b 2c 5f 98 48 8a 5f 90  H.+,_.H._.

Ide

Ini berdasarkan fakta bahwa

rumus

Kode

Hð+,_ðH²_½    Left input: s -- Right input: p

 ð   ð        This is a link fork. We define three links, call the left and right
              link with the input as arguments, then the middle link with the
              results as arguments.

H             Left link, dyadic. Arguments: s p

H             Halve the left input.

     ðH²_½    Right link, dyadic. Arguments: s p

      H       Halve the left input.
       ²      Square the result.
        _     Hook; subtract the right input from the result.
         ½    Apply square root to the difference.

 ð+,_         Middle link, dyadic. Arguments: (results of the previous links)

  +           Compute the sum of the results.
    _         Compute the difference of the results.
   ,          Pair.

1
Itu adalah kompiler online yang sangat bagus. Saya berharap mereka punya satu seperti itu untuk java.
Ashwin Gupta

2
@AshwinGupta Dennis membuatnya sendiri, sebenarnya;) Untuk Java, selalu ada Ideone .
Gagang Pintu

@Doorknob 冰 ya saya tahu kompiler daringnya sangat keren. Saya telah menggunakan Ideone, itu bagus dan semuanya tetapi tidak memiliki dukungan multiclass yang merupakan masalah. Saya tidak punya cara untuk menguji program saya yang lebih kompleks di sekolah D :. Plus, itu tidak berfungsi pada browser iPad baik yang percaya atau tidak harus menjadi persyaratan karena itu adalah perangkat komputasi yang telah kami sediakan ...
Ashwin Gupta

Kecuali seseorang bisa mengalahkan 14, saya pikir Anda menang.
Ashwin Gupta

3
OK, Jelly sekarang secara resmi pendek gila. Saya harus belajar bahasa ini tepat setelah saya selesai membungkus kepala saya di sekitar Pyth ...
ETHproduk

14

Unicorn , 4650 2982 1874 1546

[ ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 2 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐🐐 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨ 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 4 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄🦄 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 ( ) ) 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈 🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤🌤 ✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨✨ ]

Sekarang dengan kambing, pelangi, dan berkilau!

Semoga lebih pendek dari Jawa.


Menggunakan penyandian khusus yang dapat diterapkan denganApplyEncoding

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:

masukkan deskripsi gambar di sini


Ini tidak bersaing karena Unicorn dibuat setelah tantangan ini diposting.


1
Apa yang sedang terjadi di sini? Saya hanya melihat kotak. ; -;
Lynn

@Mauris aww :( Saya akan memposting gambar program ini sehingga semua orang dapat melihat itu adalah kemuliaan
Downgoat

3
LOL oke ini adalah favorit saya walaupun saya tidak bisa menerimanya karena sudah sangat lama.
Ashwin Gupta

4
"Semoga lebih pendek dari Jawa." Anda berhak mendapatkan +10 hanya untuk itu;)
ETHproduksi

1
@ Doᴡɴɢᴏᴀᴛ, maaf mengecewakan Anda. Jawa sekitar 18 kali lebih pendek dari itu.
Tamoghna Chowdhury

8

JavaScript ES6, 45 39 37 * byte

(q,p)=>[x=p/2+Math.sqrt(p*p/4-q),p-x]

* Berkat Dennis!


2
Saya memberi Anda +1 karena ini adalah jawaban pertama yang sebenarnya dapat saya mengerti (semacam). LOL
Ashwin Gupta

4

TeaScript, 22 byte 30 31

[d=y/2+$s(y*y/4-x),y-d

Tidak terlalu buruk. Akan jauh lebih pendek jika saya bisa mendapatkan beberapa fitur golf selesai sebelumnya seperti cara pintas unicorn unicode

Cobalah online


"pintas unicorn" Aku suka suaranya! ;)
ETHproduksi

@ ETHproductions haha, itu benar otomatis: p meskipun cara pintas unicorn bisa menarik ...
Downgoat

3

MATL , 33 byte

-100:100t!2$t+i=bb*i=&2#2$1fv101-

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.

>> matl -r '-100:100t!2$t+i=bb*i=&2#2$1fv101-'
> 2
> -63
 9
-7

Penjelasan

-100:100           % row vector -100, -99, ..., 100
t!                 % duplicate and transpose into column vector
2$t                % duplicate the two vectors
+                  % sum with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
bb                 % move the two vectors to top
*                  % multiply with singleton expansion (all combinations)
i=                 % does it equal input? Produces logical matrix
&                  % logical "and"
2#2$1f             % find row and column of the first "true" value in logical matrix
v101-              % concatenate vertically and subtract 101

Karena penasaran, apakah program dalam bentuk "penjelasan" benar-benar berjalan pada kompiler MATL? Sintaksnya sangat terpecah.
Ashwin Gupta

Ya, Anda dapat menempelkan program dalam baris terpisah, misalnya menyalin daftar dari penjelasan. Anda mengetik matldan 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?
Luis Mendo

3

Julia, 46 44 32 byte

f(b,c)=(x=b+√(b^2-4c))/2,b-x/2

Fungsi 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


40 byte:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
Alex A.

@AlexA. - Anda akan membuat meme dengan menyarankan perbaikan untuk yang ini ...
Darrel Hoffman

34 byte:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
Alex A.

32 byte:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
Dennis

2
Ini seperti formula kuadratik biasa yang telah dipukuli di kepala kita sejak kita masih bayi.
Alex A.

3

dc, 16

?ddd*?4*-v+2/p-p

Membaca jumlah lalu produk dari jalur STDIN yang terpisah. -ve number harus dimasukkan dengan garis bawah bukan tanda minus. misalnya

$ { echo 2; echo _63; } | dc -e'?ddd*?4*-v+2/p-p'
9
-7
$ 

Penjelasan:

Solusi kuadratik dasar yang sama untuk sum = a + bdan product = a * b. Ini menghitung solusi asebagai:

a = [ sum + √( sum² - 4 * product ) ] / 2

Dan menghitung solusi bsebagai:

b = sum - a

Diperluas:

?                   # push sum to stack
 ddd                # duplicate 3 times (total 4 copies)
    *               # sum squared
     ?              # push product to stack
      4*            # multiply by 4
        -           # subtract (4 * product) from (sum squared)
         v          # take square root of (sum squared) - (4 * product)
          +         # add sum to square root of (sum squared) - (4 * product)
           2/       # divide by 2 to give solution a
             p      # print with newline and without pop
              -     # subtract solution a from sum to give solution b
               p    # print with newline and without pop

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.


2
Tunggu apa? Ini berakhir lebih pendek dari APL, Pyth dan CJam ??? Woo hoo!
Trauma Digital

3

Pyth, 21 18 byte

Disimpan 3 byte berkat @Dennis

,J/+@-^Q2*4E2Q2-QJ

Suite uji

Program Pyth kedua saya, jadi mungkin bisa golf dengan built-in. Saran dipersilahkan!

Bagaimana itu bekerja

,J/+@-^Q2*4E2Q2-QJ   Implicit: Q = first line of input
,                    Create and output a list of these items:
 J                     Set variable J to the result of these operations:
      ^Q2                Square Q.
     -   *4E             Subtract 4*(next line of input).
    @       2            Take the square root.
   +         Q           Add Q.
  /           2          Divide by 2.
                       The list is currently [J].
               -QJ     Push Q-J; the list is now [J, Q-J].
                     EOF; list is sent to output.

(Penjelasan ini mungkin tidak 100% benar; Saya tidak terlalu terbiasa dengan Pyth.)

Perhatikan bahwa /ini adalah pembagian integer. Dengan menggantinya dengan c, kita bisa membuatnya bekerja dengan input non-integer juga.


Dipukul Anda oleh satu byte: P Anda harus mempertimbangkan beralih; D
nicael

Penjelasan ini mungkin tidak 100% benar ... ???
Trauma Digital

@DigitalTrauma Saya tidak 100% yakin cara kerjanya (khususnya J), tapi itulah yang saya kumpulkan dari membaca dokumen.
Produk ETH

1
Ya, Jadalah 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.
Dennis

3

Java, 82 (69 λ) byte dengan rumus kuadrat (127 (114 λ) byte brute-force)

Brute-Force: (Vanilla, Java 7)

int[] n(int s,int p){for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

λ-enhanced: (Java 8)

(s,p)->{for(int a=-100;a<=100;a++)for(int b=-100;b<=100;b++) if(a+b==s&&a*b==p)return new int[]{a,b};return null;}

Tetapkan lambda ke java.util.function.BiFunction<Integer, Integer, int[]>dan panggil apply().

Pendekatan kasar lama yang kasar. Hanya fungsi yang bekerja di sini, dan karena Java tidak dapat mengembalikan beberapa nilai, kami mengembalikan intarray 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:

int[] n(int s,int p){//sum and product as function parameters,in that order
    for(int a=-100;a<=100;a++){//iterate first no. from -100 to 100
        for(int b=-100;b<=100;b++){//iterate second no. from -100 to 100
            //if the 2 nos. satisfy the diamond-puzzle condition, 
            //pack them in an int array and return them
            if(a+b==s&&a*b==p)return new int[]{a,b};}
     }//if no such pair exists, return null
return null;}

Pendekatan Quadratic: (Vanilla, Java 7)

int[] n(int s,int p){int x=s+(int)Math.sqrt(s*s-4*p);return new int[]{x/2,s-x/2};}

λ-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.


AHHA ya terima kasih. Saya sedang menunggu jawaban Java. Juga, saya sedang menunggu seseorang untuk menggunakan loop dan kekerasan dengan faktor-faktornya. Saya kira saya mendapat keduanya untuk satu kesepakatan. +1
Ashwin Gupta

1
Java mengalahkan unicorn :( Saya akan memberi +1 tetapi saya telah menggunakan batas suara harian saya
Downgoat

2

Japt , 28 22 21 20 byte

[X=V/2+(V²/4-U ¬V-X]

Input dibuat dalam bentuk -63 2.

Penjelasan:

  • Udan Vmerupakan dua input ( -63dan 2dalam kasus pertama)
  • ² kuadratkan jumlahnya
  • q mengekstrak akar kuadrat

Saya hanya menulis jawaban untuk ini; sampai aku melihat milikmu. Kerja bagus! Dengan mengatur ulang bagian pertama dan menggunakan beberapa pintasan Unicode lagi, kita dapat mencapai 21 byte: [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 ...
ETHproduksi

@ Oke, ¬ adalah hal yang hebat.
nicael

2

APL, 27 21 byte

h(+,-).5*⍨⊣-⍨h×h←.5×⊢

Ini adalah fungsi kereta diad yang menerima bilangan bulat di kanan dan kiri dan mengembalikan array. Untuk menyebutnya, tetapkan ke variabel.

Tidak Disatukan:

                h←.5×⊢       ⍝ Define a train h for halving the input
              h×             ⍝ b^2/4
          ⊣-⍨                ⍝ b^2/4 - c
      .5*⍨                   ⍝ sqrt(b^2/4 - c)
h(+,-)                       ⍝ Return the halved pair

Cobalah online

Disimpan 6 byte berkat Dennis!


2

CJam, 18 byte

q~2d/_2#@-mq_2$+p-

Cobalah online!

Bagaimana itu bekerja

q~                  e# Read an evaluate all input. STACK: product sum
  2d/               e# Divide the sum by 2.0.
     _              e# Push a copy of the result.
      2#            e# Square the copy.
        @-          e# Rotate the product on top and subtract it from the square.
          mq        e# Apply square root.
            _2$     e# Push copies of the root and the halved sum.
               +p   e# Add and print.
                 -  e# Subtract the originals.

2

Python 3, 49 44 byte

Mungkin ada beberapa cara untuk menurunkan ini lebih jauh, tetapi ini terlihat cukup bagus.

def f(s,p):s/=2;d=(s*s-p)**.5;return s+d,s-d

Tanda perbedaannya salah; seharusnya begitu s/2-d. Juga, d=(s*s/4-p)**.5simpan beberapa byte.
Dennis

@ Dennis Ups, kau benar. Tetap dan golf.
Sherlock9

1

MathCAD 15. 38 Bytes

masukkan deskripsi gambar di sini

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.


1

𝔼𝕊𝕄𝕚𝕟, 21 karakter / 30 byte

[x=í/2+√ í²/4-î⦆,í-x]

Try it here (Firefox only).

Meh Ini harus cukup visual bagi kalian untuk mendapatkan ide; Namun, jika Anda harus î = input1, í = input2,.


0

PHP, 62 byte

<?=($x=($p=$_GET[p])/2+sqrt($p*$p/4-$q=$_GET[q]))." ".($p-$x);

Ini bisa sangat lama tetapi menjadi PHP web- "program" berfitur lengkap. Terima argumen melalui permintaan "dapatkan".

Demo .


0

TI-BASIC, 20 byte

Diambil Qdari Ans, dan Pdari Prompt. Sebut seperti P:prgmNAME.

Prompt P
P/2+√(P²/4-Ans
{Ans,P-Ans

Sangat bagus. Sayang sekali Promptpernyataan itu terlalu panjang lol. Saya tidak tahu TI-BASIC, tetapi bisa lebih pendek jika Anda meletakkan kode dalam fungsi dan lulus P sebagai parameter.
Ashwin Gupta

Sebenarnya, TI-BASIC dibagi menjadi "token"; Masing-masing 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.
Conor O'Brien

Oh well itu intresting, saya tidak menyadarinya. Tetapi bukankah masing-masing karakter byte masih dalam pengertian teknis? Seperti jika saya menyalin paste ini ke dokumen teks, saya mendapatkan 36 byte. Atau apakah ini menggunakan karakter Unicode khusus?
Ashwin Gupta

TI-BASIC adalah bahasa kalkulator, jadi ini yang dilihat orang. Itu dimasukkan ke dalam kalkulator, bukan dokumen teks atau sejenisnya. Ini adalah token satu byte.
Conor O'Brien

Ah, oke, saya mengerti. Keren. Saya hanya ingin tahu.
Ashwin Gupta
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.