Diamentowe puzzle!

21

Wyjaśnienie:

W zeszłym roku na lekcji matematyki od czasu do czasu otrzymywaliśmy te niezwykle proste, choć równie irytujące pytania, zwane diamentowymi łamigłówkami. Były to w zasadzie pytania, w których otrzymalibyśmy sumę, a następnie produkt został poproszony o znalezienie dwóch liczb, które po pomnożeniu dają iloczyn, a po dodaniu dają sumę. Doprowadziło mnie to do szaleństwa, ponieważ jedynym sposobem, w jaki wiedziałem, jak je rozwiązać (w Algebra I), było po prostu wyszczególnienie czynników produktu, a następnie sprawdzenie, które z nich zostały dodane do sumy. (Ponieważ nie wiedziałem wtedy, jak korzystać z Quadratics). Nie wspominając o tym, że nie były to trudne wyzwania matematyczne. Jednak przyszło mi do głowy, że powinienem napisać program. To jest twoje wyzwanie dzisiaj! Napisz program, który potrafi rozwiązać diamentową łamigłówkę.

Przykłady wprowadź opis zdjęcia tutaj Przepraszamy za rozmazany obraz, najlepiej jak mogłem go znaleźć. Zignoruj ​​też liczby w bąbelkach. Góra diamentu to iloczyn, dół to suma, prawa i lewa to dwie liczby. Odpowiedzi są następujące: (Są to również twoje przypadki testowe)

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

Zasady:

  • Nie możesz używać żadnych predefiniowanych funkcji lub klas, które dokonają tego za Ciebie.
  • Twój kod musi być kompletnym programem lub funkcją, która albo zwraca albo drukuje odpowiedzi, gdy je znajdzie
  • Dane wejściowe to suma i iloczyn, które są wprowadzane jako parametry funkcji lub dane wejściowe użytkownika

Dane techniczne:

  • Załóżmy, że dwie liczby, suma i iloczyn zawsze będą liczbą całkowitą.
  • Obie odpowiedzi będą w zakresie od -127 do 127.
  • Twoje dane wejściowe będą dwie liczby całkowite (Suma i Produkt).

Pamiętaj, że to kod-golf, więc wygrywa najkrótsza bajt. Wpisz tytuł swojej odpowiedzi standardową nazwą języka ##, liczba bajtów

Edycja: Doorknob wskazał również, że jest to „czynnik kwadratowy formy x ^ 2 + bx + c”. To kolejny sposób na przemyślenie i podejście do tego wyzwania. :RE

Ashwin Gupta
źródło
9
Zasadniczo jest to „czynnik kwadratowy formy x^2 + bx + c”, prawda?
Klamka
1
b = - (x + y), c = (x * y)
TheNumberOne
Uproszczenie (x + n)(x + m)daje x^2 + (n+m)x + (n*m), więc faktoryzacja kwadratyki jest w zasadzie równoznaczna z tym pytaniem (jeśli dobrze to rozumiem).
Klamka
@Doorknob 冰 tak, masz rację. Zgaduję, że niedługo zostanę oznaczony jako duplikat. :(
Ashwin Gupta,
Cóż, nie sądzę, żebyśmy mieli jeszcze pytanie „czynnik x ^ 2 + bx + c”. Wskazując tylko, że problemy są bardzo podobne.
Klamka

Odpowiedzi:

18

Galaretka , 15 11 10 bajtów

Hð+,_ðH²_½

Wypróbuj online!

Poniższy kod binarny działa z tą wersją interpretera Jelly.

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

Pomysł

Jest to oparte na tym, że

formuła

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.
Dennis
źródło
1
To bardzo fajny kompilator online. Chciałbym, żeby mieli taki taki dla java.
Ashwin Gupta
2
@AshwinGupta Dennis sam to zrobił;) W Javie zawsze jest Ideone .
Klamka
@Doorknob 冰 tak, wiem, że jego internetowy kompilator jest taki fajny. Byłem na Ideone, jest dobry i wszystko, ale nie ma obsługi wieloklasowej, co jest problemem. Nie mam możliwości przetestowania moich bardziej złożonych programów w szkole D :. Ponadto nie działa w przeglądarce iPad, która w to wierzy lub nie musi być wymogiem, ponieważ jest to urządzenie komputerowe, które otrzymaliśmy ...
Ashwin Gupta
Chyba że ktoś może pokonać 14, myślę, że wygrałeś.
Ashwin Gupta
3
OK, Galaretka jest teraz oficjalnie niesamowicie niska. Muszę nauczyć się tego języka zaraz po tym, jak skończę owijać głowę wokół Pytha ...
ETHproductions
14

Jednorożec , 4650 2982 1874 1546

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

Teraz z kozami, tęczami i iskierkami!

Mam nadzieję, że krótszy niż Java.


Używa niestandardowego kodowania, które można zastosowaćApplyEncoding

Wyjaśnienie

Jak to działa??? Z magią jednorożców (i odrobiną kodu).

Unicorn jest skompilowany w JavaScript

Każda sekcja jest oddzielona spacją, a każda sekcja reprezentuje znak w kodzie JavaScript.

Jeśli sekcja zawiera jednorożce, znakiem sekcji jest długość sekcji, przekonwertowana na kod char (np. 32 jednorożce to spacja)

Jeśli sekcja zawiera kozy, długość sekcji jest podwojona, a następnie konwertowana na kod char.


Jeśli specjalne znaki programu nie są wyświetlane, oto zdjęcie:

wprowadź opis zdjęcia tutaj


To nie konkuruje, ponieważ Unicorn powstał po opublikowaniu tego wyzwania.

Downgoat
źródło
1
Co tu się u licha dzieje? Po prostu widzę pudełka. ; -;
Lynn
@Mauris aww :( Zamieszczę zdjęcie programu, aby każdy mógł zobaczyć jego chwałę
Downgoat
3
LOL okej, to moja ulubiona, chociaż nie mogę jej zaakceptować, ponieważ jest tak cholernie długa.
Ashwin Gupta
4
„Mam nadzieję, że krótszy niż Java”. Zasługujesz na +10 za to;)
ETHprodukcje
1
@ Doᴡɴɢᴏᴀᴛ, przepraszam, że cię rozczarowałem. Java jest około 18 razy krótsza.
Tamoghna Chowdhury
8

JavaScript ES6, 45 39 37 * bajtów

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

* Dzięki Dennis!

Nicość
źródło
2
Daję ci +1, ponieważ jest to pierwsza odpowiedź, którą naprawdę rozumiem (w pewnym sensie). LOL
Ashwin Gupta
4

TeaScript, 22 bajty 30 31

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

Nie tak źle. Byłbym o wiele krótszy, gdybym mógł uzyskać niektóre funkcje gry w golfa, takie jak skróty jednorożca

Wypróbuj online

Downgoat
źródło
„skróty jednorożca” Podoba mi się dźwięk! ;)
ETHproductions
@ETHproductions haha, to było autokorekty: p chociaż skróty jednorożca mogą być interesujące ...
Downgoat
3

MATL , 33 bajty

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

Wysyła dwie liczby w dwóch różnych wierszach. Jeśli nie istnieje żadne rozwiązanie, nie daje wyników. Jeśli istnieje kilka rozwiązań, powstaje tylko para liczb odpowiadająca jednemu rozwiązaniu.

Przykład

Poniższe zostało uruchomione w Octave z bieżącym zatwierdzeniem GitHub kompilatora.

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

Wyjaśnienie

-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
Luis Mendo
źródło
Z ciekawości, czy program w formie „objaśnienia” rzeczywiście działałby na kompilatorze MATL? Składnia jest strasznie podzielona.
Ashwin Gupta
Tak, możesz wkleić program w osobnych wierszach, na przykład kopiując listę z objaśnienia. Wpisujesz matli naciskasz „enter”; następnie wklej program i zakończ pustą linią. Co masz na myśli mówiąc, że składnia jest strasznie podzielona? MATL używa notacji z odwrotnym polerowaniem (postfiks), może to Cię myli?
Luis Mendo
3

Julia, 46 44 32 bajty

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

Funkcja f, która pobiera sumę, a następnie iloczyn.

Moja pierwsza odpowiedź Julii. @AlexA., Powinieneś być ze mnie dumny.

Dzięki @Dennis i @Alex A. za całą pomoc. Muszę skreślić 44.: P

Rɪᴋᴇʀ
źródło
40 bajtów:f(b,c)=b/2+√(b^2/4-c),b/2-√(b^2/4-c)
Alex A.
@AlexA. - Zrobisz mema, sugerując ulepszenia tego ...
Darrel Hoffman
34 bajty:f(b,c)=b/2+√(x=b^2/4-c),b/2-√x
Alex A.
32 bajty:f(b,c)=(x=b+√(b^2-4c))/2,b-x/2
Dennis
2
To tak, jak zwykła kwadratowa formuła, która została pobita nam do głowy, odkąd byliśmy tylko małymi dziećmi.
Alex A.,
3

dc, 16

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

Odczytuje sumę, a następnie iloczyn produktu z oddzielnych linii STDIN. -ve liczby należy wprowadzić ze znakiem podkreślenia zamiast znaku minus. na przykład

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

Wyjaśnienie:

To samo podstawowe rozwiązanie kwadratowe dla sum = a + bi product = a * b. Oblicza to rozwiązanie ajako:

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

I oblicza rozwiązanie bjako:

b = sum - a

Rozszerzony:

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

Dzielenie przez 2 odbywa się z opóźnieniem, aby zapobiec precyzji strat. Możliwe jest wcześniejsze podzielenie przez 2, ale wymaga to ułamkowej precyzji, która wymaga więcej znaków.

Cyfrowa trauma
źródło
2
Czekaj, co? To skończyło się krócej niż APL, Pyth i CJam ??? Łał!
Digital Trauma
3

Pyth, 21 18 bajtów

Zaoszczędź 3 bajty dzięki @Dennis

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

Zestaw testowy

Mój drugi program Pyth w historii, więc prawdopodobnie można w niego grać z wbudowanymi funkcjami. Sugestie są mile widziane!

Jak to działa

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

(To wyjaśnienie może nie być w 100% poprawne; nie znam się na Pyth.)

Zauważ, że /jest to dzielenie liczb całkowitych. Zastępując go c, moglibyśmy sprawić, aby działał również z wejściami niecałkowitymi.

ETHprodukcje
źródło
Pobity przez jeden bajt: P Powinieneś rozważyć zmianę; D
nicael
To wyjaśnienie może nie być w 100% poprawne ... ???
Digital Trauma
@DigitalTrauma Nie jestem w 100% pewien, że tak to działa (konkretnie J), ​​ale to właśnie zebrałem po przeczytaniu dokumentacji.
ETHproductions
1
Tak, Jjest zmienną automatycznego przypisywania i ustawia się przy pierwszym użyciu. Jedyną częścią, która nie wydaje się całkiem właściwa, jest Lista [J]. ,bierze dokładnie dwa argumenty i łączy je na liście.
Dennis
3

Java, 82 (69 λ) bajtów ze wzorem kwadratowym (127 (114 λ) bajtów)

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

λ-ulepszone: (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;}

Przypisz lambda do java.util.function.BiFunction<Integer, Integer, int[]>i zadzwoń apply().

Proste stare podejście brutalnej siły. Jest tylko działająca funkcja, a ponieważ Java nie może zwrócić wielu wartości, zwracamy inttablicę 2-elementową z wymaganymi liczbami.

Program oparty na pełnym podejściu brutalnej siły można znaleźć tutaj na ideone.com , z wersją λ tutaj.

Gra w golfa polegała na usunięciu wszystkich niepotrzebnych aparatów ortodontycznych.

Nie golfowany:

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

Podejście kwadratowe: (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};}

λ-ulepszone: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); zwraca nowy int [] {x / 2, sx / 2} ;}

(Zastosowanie jak w przypadku siły brute λ powyżej).

Parametry i kryteria powrotu są takie same jak powyższe rozwiązanie brutalnej siły.

Wykorzystuje starą dobrą kwadratową formułę stosowaną przez prawie wszystkie inne odpowiedzi tutaj i nie można grać w golfa o wiele dalej, chyba że ktoś mi tu pomoże. To całkiem jasne, więc nie dołączam wersji bez golfa.

Program oparty na pełnym podejściu kwadratowym znajduje się tutaj na ideone.com , z wersją λ tutaj.

Tamoghna Chowdhury
źródło
AHHA tak, dziękuję. Czekałem na odpowiedź Java. Czekałem też na kogoś, kto użyje pętli i brutalnej siły z czynnikami. Chyba mam dwie za jedną ofertę. +1
Ashwin Gupta
1
Java pokonał jednorożca :( Chciałbym +1, ale wykorzystałem mój dzienny limit głosów
Downgoat
2

Japt , 28 22 21 20 bajtów

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

Dane wejściowe są dokonywane w formie -63 2.

Wyjaśnienie:

  • Ui Vsą dwa wejścia ( -63i 2w pierwszym przypadku)
  • ² obciąża liczbę
  • q wyodrębnia pierwiastek kwadratowy
Nicość
źródło
Właśnie pisałem na to odpowiedź; to znaczy dopóki nie zobaczyłem twojego. Dobra robota! Przearanżowując pierwszą część i używając kilku kolejnych skrótów Unicode, możemy uzyskać 21 bajtów: [X=ºV²-4*U ¬+V)/2V-X]Bez skrótów: [X=((V²-4*U q +V)/2V-X]Naprawdę powinienem sprawić, że trailing będzie ]niepotrzebny w następnej wersji ...
ETHproductions
@Eth Ok, ¬ to świetna rzecz.
nicael
2

APL, 27 21 bajtów

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

Jest to dynamiczny ciąg funkcji, który przyjmuje liczby całkowite po prawej i lewej stronie i zwraca tablicę. Aby go wywołać, przypisz go do zmiennej.

Nie golfowany:

                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

Wypróbuj online

Zaoszczędź 6 bajtów dzięki Dennisowi!

Alex A.
źródło
2

CJam, 18 bajtów

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

Wypróbuj online!

Jak to działa

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.
Dennis
źródło
2

Python 3, 49 44 bajtów

Prawdopodobnie istnieje kilka sposobów na grę w golfa jeszcze bardziej, ale wygląda to całkiem dobrze.

def f(s,p):s/=2;d=(s*s-p)**.5;return s+d,s-d
Sherlock9
źródło
Znak różnicy jest niepoprawny; tak powinno być s/2-d. Ponadto d=(s*s/4-p)**.5oszczędza kilka bajtów.
Dennis
@Dennis Ups, masz rację. Naprawiono i grał w golfa.
Sherlock9,
1

MathCAD 15. 38 bajtów

wprowadź opis zdjęcia tutaj

Dzięki formule matematycznej programowanie w MathCAD jest łatwe. Język jest nawet zaprojektowany do łatwej obsługi liczb zespolonych. Istnieją jednak krótsze języki, które mogą rozwiązać problem.

znak
źródło
1

𝔼𝕊𝕄𝕚𝕟, 21 znaków / 30 bajtów

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

Try it here (Firefox only).

Meh Powinno to być wystarczająco wizualne, abyście wszyscy mieli pomysł; Jednakże, jeśli trzeba, î = input1, í = input2.

Mama Fun Roll
źródło
0

PHP, 62 bajty

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

Może to być dość długie, ale w pełni funkcjonalny „program” PHP. Akceptuje argumenty za pomocą żądania „get”.

Demo .

Nicość
źródło
0

TI-BASIC, 20 bajtów

Bierze Qod Ansi Pod Prompt. Zadzwoń jak P:prgmNAME.

Prompt P
P/2+√(P²/4-Ans
{Ans,P-Ans
Conor O'Brien
źródło
Bardzo dobrze. Szkoda, że ​​to Promptoświadczenie jest tak długie lol. Nie znam TI-BASIC, ale może być krótszy, jeśli wstawisz kod do funkcji i przekażesz P jako parametr.
Ashwin Gupta
W rzeczywistości TI-BASIC jest podzielony na „tokeny”; Każdy z Prompt , P, /, 2, +, √(, ², 4, -, Ans, i {to jeden żeton, a każdy z tych żetonów jest jeden bajt. Ponadto TI-BASIC nie ma funkcji. To prawdopodobnie najkrótsza metoda.
Conor O'Brien
Cóż, to ciekawe, nie zdawałem sobie z tego sprawy. Ale czy każdy char jest bajtem wciąż w sensie technicznym? Tak jak gdybym skopiował wklej to do dokumentu tekstowego, dostaję 36 bajtów. Czy używa to specjalnych znaków Unicode?
Ashwin Gupta
TI-BASIC jest językiem kalkulatora, więc to właśnie widzi. Jest wpisany do kalkulatora, a nie dokumentu tekstowego lub podobnego. Oto tokeny jednobajtowe.
Conor O'Brien
Ach, dobrze, mam cię. Fajne. Byłem po prostu ciekawy.
Ashwin Gupta