Elmas Bulmacalar!


21

Açıklama:

Geçen yıl matematik dersinde, ödevlerde ara sıra bu son derece basit olacağız, ancak elmas bulmacalar olarak da sinir bozucu sorular vardı. Bunlar temel olarak bize toplamın verileceği sorulardı ve bir üründen daha sonra çarpıldığında ürünü veren iki sayıyı bulması ve ilave edildiğinde toplamı vermesi istendi. Bunlar beni çılgına çevirdi, çünkü onları nasıl çözeceğimi bilmemin tek yolu (Cebir I'de) ürünün faktörlerini listelemek ve hangilerini toplamı yapmak için eklediklerini görmekti. (O zamanlar Quadratics'i nasıl kullanacağımı bilmiyordum.) Bahsetmiyorum bile, tam olarak zor değillerdi. Ancak, sadece bir program yazmam gerektiğini düşündüm. Demek bugün meydan okuman bu! Bir elmas bulmacasını çözebilecek bir program yazın.

Örnekler görüntü tanımını buraya girin Bulanık görüntü için özür dilerim, bulabildiğim en iyi şey. Ayrıca, baloncuklardaki sayıları dikkate almayınız. Pırlantanın üst kısmı üründür, alt toplam, sağ ve sol iki sayıdır. Cevaplar aşağıdaki gibidir: (Bunlar aynı zamanda sizin test durumlarınızdır)

  1. 9, -7
  2. -2, -1
  3. 5, 8
  4. -9, -9

Kurallar:

  • Bunu sizin için yapan önceden tanımlanmış işlevleri veya sınıfları kullanamazsınız.
  • Kodunuz tam bir program veya cevapları bulduktan sonra döndüren ya da basan bir işlev olmalıdır
  • Giriş, bir fonksiyon parametresi veya kullanıcı girişi olarak girilen toplam ve üründür.

Özellikler:

  • İki sayının, toplamın ve ürünün her zaman bir tam sayı olacağını varsayalım.
  • İki cevap da -127 ile 127 arasında olacak.
  • Girişiniz iki tamsayı olacak (Toplam ve Ürün).

Unutmayın, bu kod golf, bu yüzden en kısa bayt sayısı kazanır. Lütfen cevabınızı standart ## Dil Adı, Bayt Sayısı ile belirtin

Düzenleme: Ayrıca, Doorknob bunun esasen "x ^ 2 + bx + c biçiminde ikinci dereceden bir faktör olduğunu" belirtti. Bu, bu zorluğu düşünmenin ve ona yaklaşmanın başka bir yoludur. : D


9
Bu "faktörü formun bir kuadratik temelde x^2 + bx + c," doğru mu?
Doorknob

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

Sadeleştirme (x + n)(x + m)size verir x^2 + (n+m)x + (n*m), bu yüzden çarpanlara ayırmak temel olarak bu soruya eşdeğerdir (eğer doğru anlıyorsam).
Doorknob

@Doorknob 冰 evet haklısınız. Sanırım kopya olarak işaretlenmek üzereyim. :(
Ashwin Gupta

Yine de "faktör x ^ 2 + bx + c" sorusu olduğunu sanmıyorum. Sadece sorunların çok benzer olduğunu işaret ediyorum.
Doorknob

Yanıtlar:


18

Jöle , 15, 11 bayt

Hð+,_ðH²_½

Çevrimiçi deneyin!

Aşağıdaki ikili kod Jelly yorumlayıcısının bu versiyonuyla çalışır .

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

Fikir

Bu gerçeği dayanmaktadır

formula

kod

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
Bu çok güzel bir çevrimiçi derleyici. Java için böyle bir tane olsun isterdim.
Ashwin Gupta

2
@ AshwinGupta Dennis bunu kendisi yaptı; aslında;) Java için her zaman Ideone var .
Doorknob

@Doorknob 冰 evet çevrimiçi derleyicisinin çok iyi olduğunu biliyorum. Ben Ideone'dayım, her şey yolunda ve hepsi ama çok sorunlu bir desteğe sahip değil. Daha karmaşık programlarımı okul D: 'de test edemem. Ayrıca, bizim ihtiyaç duyduğumuza veya ihtiyaç duyulması gerekmediğine dair bir iPad tarayıcısında da çalışmaz, çünkü cihazla birlikte verilen bilgisayar cihazıdır ...
Ashwin Gupta

Birisi 14'ü geçemezse, kazandığını düşünüyorum.
Ashwin Gupta

3
Tamam, Jelly şimdi resmen delicesine kısa.
Kafamı Pyth'in

14

Unicorn , 4650 2982 1874 1546

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

Şimdi keçi, gökkuşağı ve parıldıyor!

Umarım Java'dan daha kısadır.


Özel bir kullanır kodlama ile uygulanabilirApplyEncoding

açıklama

Bu nasıl çalışıyor??? Tek boynuzlu atların büyüsü ile (ve küçük bir kod).

Unicorn, JavaScript içine derlendi

Her bölüm bir boşlukla ayrılmıştır ve her bölüm, JavaScript kodundaki bir karakteri temsil eder.

Bölüm tek boynuzlu atlar içeriyorsa, bölümün karakteri bir karakter koduna dönüştürülen bölümün uzunluğudur (örneğin, 32 tek boynuzlu at bir boşluk olacaktır).

Bölüm keçi içeriyorsa, bölümün uzunluğu iki katına çıkarılır ve ardından bir karakter koduna dönüştürülür.


Programın özel karakterleri görünmüyorsa, işte bir resim:

enter image description here


Bu rekabet edici değil çünkü Unicorn bu zorluğun yayınlanmasından sonra yapıldı.


1
Burada ne oluyor? Sadece kutuları görüyorum. , -;
Lynn,

@Mauris aww :( Programın bir görüntüsünü yayınlayacağım, böylece herkes görkemini görebilir
Downgoat

3
LOL tamam, bu çok sevdiğim için kabul edemem bile benim favorim.
Ashwin Gupta

4
"Umarım Java'dan daha kısadır." Sadece bunun için bir +10 hak ediyorsun;)
ETHproductions

1
@ Doᴡɴɢᴏᴀᴛ, sizi hayal kırıklığına uğrattığım için üzgünüm. Java bundan 18 kat daha kısa.
Tamoghna Chowdhury

8

JavaScript ES6, 45 39 37 * bayt

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

* Dennis'e teşekkürler!


2
Seni + 1'ledim çünkü bu gerçekten anlayabileceğim ilk cevap. LOL
Ashwin Gupta

4

TeaScript, 22 bayt 30 31

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

Değil da kötü . Tek boynuzlu at unicode kısayolları gibi daha önce bitmiş bazı golf özellikleri kazanabilseydim çok daha kısa olurdu

Çevrimiçi deneyin


"tek boynuzlu at kısayolları" Bunun sesini seviyorum! ;)
ETHProductions

@ETHproductions haha, bu otomatik olarak düzeltildi: p, tek boynuzlu at kısayolları ilginç olsa da ...
Downgoat

3

MATL , 33 bayt

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

İki sayıyı iki farklı satıra çıkarır. Bir çözüm yoksa, çıktı üretmez. Birkaç çözüm varsa, yalnızca bir çözüme karşılık gelen sayı çiftini üretir.

Örnek

Aşağıdaki, derleyicinin mevcut GitHub taahhüdüyle Octave'da gerçekleştirildi .

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

açıklama

-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

Meraktan, "açıklama" biçimindeki program aslında bir MATL derleyicisinde çalışır mıydı? Sözdizimi müthiş bölünmüş durumda.
Ashwin Gupta

Evet, programı ayrı satırlara yapıştırabilirsiniz, örneğin listeyi açıklamadan kopyalayabilirsiniz. Daktilo matlve basın "enter"; sonra programı yapıştırın ve boş bir satırla bitirin. Ne demek istiyorsun, sözdizimi aşırı derecede bölünmüş? MATL, ters cila (postfix) notasyonu kullanıyor, belki de bu kafayı karıştırıyor?
Luis Mendo

3

Julia, 46 44 32 bayt

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

Toplamı ve ardından ürünü alan f işlevi.

İlk Julia cevabım. @AlexA, benimle gurur duymalısın.

Tüm yardım için @Dennis ve @Alex A. teşekkür ederiz. 44'ü geçmem gerekiyor.


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

@AlexA. - Bu konuda iyileştirmeler önererek meme oluşturacaksın ...
Darrel Hoffman,

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

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

2
Tıpkı biz bebekten ziyade başımıza dökülen normal kuadratik formül gibi.
Alex A.

3

dc, 16

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

Toplam STDIN satırlarından sonra toplamı okur. -ve numaraları eksi işareti yerine alt çizgi ile girilmelidir. Örneğin

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

Açıklama:

İçin aynı temel kuadratik çözüm sum = a + bve product = a * b. Bu, çözümü aşöyle hesaplar :

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

Ve çözümü bşu şekilde hesaplar :

b = sum - a

Expanded:

?                   # 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

Kayıp hassasiyetini önlemek için 2'ye bölünmek geç yapılır. Daha önce 2'ye bölünmek mümkündür, ancak bu daha fazla karakter gerektiren kesirli bir hassasiyet gerektirir.


2
Bir dakika ne? Bu APL, Pyth ve CJam'dan daha kısa sürdü. Bravo!
Dijital Travma

3

Pyth, 21 18 bayt

@Dennis sayesinde 3 bayt kaydedildi

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

Test odası

Şimdiye kadarki ikinci Pyth programım, bu yüzden muhtemelen yerleşiklerle golf oynayabilir. Önerilerinizi bekliyoruz!

Nasıl çalışır

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

(Bu açıklama% 100 doğru olmayabilir; Pyth'a pek aşina değilim.)

Bunun /tamsayı bölümü olduğunu unutmayın . Bununla değiştirerek c, bu işi tam sayı olmayan girdilerle de yapabiliriz.


Bir bayt tarafından
yenilmiş

Bu açıklama% 100 doğru olmayabilir ... ???
Dijital Travma

@DigitalTrauma% 100 çalıştığından emin değilim (özellikle J), ​​ancak bu belgeleri okumaktan topladığım şey.
ETHproductions

1
Evet, Jotomatik atanan bir değişkendir ve ilk kullanıldığı zaman ayarlanır. Oldukça doğru görünmeyen tek parça Liste şu anda [J]. ,tam olarak iki argüman alır ve bunları bir listede birleştirir.
Dennis,

3

Java, kuadratik formül (127 (114 λ) bayt kaba kuvvet) ile 82 (69 λ) bayt)

Brute-Force: (Vanilya, 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;}

λ gelişmiş: (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;}

Lamda'yı atayın java.util.function.BiFunction<Integer, Integer, int[]>ve arayın apply().

Düz eski kaba kuvvet yaklaşımı. Yalnızca çalışma işlevi burada ve Java birden fazla değer döndüremediğinden int, gerekli sayılara sahip 2 öğeli bir dizi döndürüyoruz.

Kaba kuvvet yaklaşımı temelli programın tamamı burada deo versiyonuyla ideone.com adresinde bulunabilir .

Bu golf oynamak, gereksiz tüm telleri çıkarmayı içeriyordu.

Ungolfed:

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;}

Kuadratik Yaklaşım: (Vanilya, 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};}

λ geliştirilmiş: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); yeni int [] {x / 2, sx / 2} döndür ;}

(Yukarıdaki ute kaba kuvvet kullanımında).

Parametreler ve geri dönüş kriterleri yukarıdaki kaba kuvvet çözümüyle aynıdır.

Buradaki diğer tüm cevapların kullandığı eski ikinci dereceden formülü kullanır ve burada bana yardım etmeyen çok daha fazla golf oynayamaz. Oldukça açık, bu yüzden bir ungolfed sürümünü dahil değilim.

Tam karesel yaklaşıma dayalı program ideone.com adresinde , burada λ sürümüyle birlikte açıktır .


AHHA evet, teşekkürler. Java cevabını bekliyordum. Ayrıca, birinin faktörler ile döngü ve kaba kuvvet kullanmak için bekliyordum. Sanırım ikisini bir anlaşma için aldım. +1
Ashwin Gupta

1
Java boynuzlu at :( + 1 yedim ama günlük oy
limitimi

2

Japt , 28 22 21 20 bayt

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

Giriş şeklinde yapılır -63 2 .

Açıklama:

  • Uve Viki girdidir ( -63ve 2ilk durumda)
  • ² sayıyı kareler
  • q karekökü ayıklar

Sadece bunun için bir cevap yazıyordum; bu seninkini görene kadar. İyi iş! İlk kısmı yeniden düzenleyerek ve birkaç tane daha Unicode kısayolu kullanarak, 21 bayta ulaşabiliriz: [X=ºV²-4*U ¬+V)/2V-X]Kısayollar olmadan: [X=((V²-4*U q +V)/2V-X]Bir ]sonraki sürümde gerçekten gereksiz yere
yapmalıyım

@Eth Tamam, great harika bir şey.
nicael,

2

APL, 27 21 bayt

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

Bu, sağ ve soldaki tamsayıları kabul eden ve bir dizi döndüren iki yönlü bir fonksiyon trenidir. Aramak için değişkene atayın.

Ungolfed:

                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

Çevrimiçi deneyin

Dennis sayesinde 6 bayt kaydedildi!


2

CJam, 18 bayt

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

Çevrimiçi deneyin!

Nasıl çalışır

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 bayt

Muhtemelen bunu daha da aşağıya indirmenin bazı yolları var, ama bu durum oldukça iyi görünüyor.

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

Farkın işareti yanlış; olmalı s/2-d. Ayrıca, d=(s*s/4-p)**.5birkaç byte kaydeder.
Dennis,

@Dennis Oops, haklısın. Sabit ve golf oynadı.
Sherlock9

1

MathCAD 15. 38 Bayt

enter image description here

Matematiksel bir formülle, MathCAD'de programlama yapmak kolaydır. Dil, karmaşık sayıları kolaylıkla idare etmek için bile tasarlanmıştır. Ancak sorunu çözebilecek daha kısa diller var.



0

PHP, 62 bayt

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

Bu oldukça uzun olabilir, ancak tam özellikli bir PHP web-"program" olması. Argümanları "get" isteği ile kabul eder.

Demo .


0

TI-BASIC, 20 bayt

Alır Qgelen Ansve Pgelen Prompt. Gibi ara P:prgmNAME.

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

Çok hoş. Çok Promptuzun lol olması bu ifade için çok kötü . TI-BASIC bilmiyorum, ancak kodu bir fonksiyona koyup P'yi parametre olarak iletmek daha kısa olabilirdi.
Ashwin Gupta

Aslında, TI-BASIC "belirteçlere" bölünmüştür; Her biri Prompt , P, /, 2, +, √(, ², 4, -, Ans, ve {bir belirteci olan, ve bu simgelerin her biri tek bir bayt olup. Ayrıca, TI-BASIC fonksiyonlara sahip değildir. Bu muhtemelen en kısa yoldur.
Conor O'Brien,

Oh evet bu ilginç, bunu anlamadım. Fakat her karakter bir bayt hala teknik anlamda değil mi? Bunu bir metin belgesine yapıştırmak gibi olsaydım, 36 bayt alırım. Yoksa bu özel Unicode karakterler mi kullanıyor?
Ashwin Gupta

TI-BASIC bir hesap makinesi dilidir, bu yüzden gördüğü şeydir. Bir metin belgesi veya benzeri değil, hesap makinesine girilir. İşte bir baytlık belirteçler.
Conor O'Brien,

Ah tamam seni anladım. Güzel. Sadece merak ettim.
Ashwin Gupta
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.