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 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)
- 9, -7
- -2, -1
- 5, 8
- -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
x^2 + bx + c
”, prawda?(x + n)(x + m)
dajex^2 + (n+m)x + (n*m)
, więc faktoryzacja kwadratyki jest w zasadzie równoznaczna z tym pytaniem (jeśli dobrze to rozumiem).Odpowiedzi:
Galaretka ,
151110 bajtówWypróbuj online!
Poniższy kod binarny działa z tą wersją interpretera Jelly.
Pomysł
Jest to oparte na tym, że
Kod
źródło
Jednorożec ,
4650298218741546Teraz 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:
To nie konkuruje, ponieważ Unicorn powstał po opublikowaniu tego wyzwania.
źródło
JavaScript ES6,
453937 * bajtów* Dzięki Dennis!
źródło
TeaScript, 22 bajty
30 31Nie tak źle. Byłbym o wiele krótszy, gdybym mógł uzyskać niektóre funkcje gry w golfa, takie jak skróty
jednorożcaWypróbuj online
źródło
MATL , 33 bajty
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.
Wyjaśnienie
źródło
matl
i 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?Julia,
464432 bajtyFunkcja 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ódło
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
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
Wyjaśnienie:
To samo podstawowe rozwiązanie kwadratowe dla
sum = a + b
iproduct = a * b
. Oblicza to rozwiązaniea
jako:I oblicza rozwiązanie
b
jako:Rozszerzony:
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.
źródło
Pyth,
2118 bajtówZaoszczędź 3 bajty dzięki @Dennis
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
(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 goc
, moglibyśmy sprawić, aby działał również z wejściami niecałkowitymi.źródło
J
jest 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.Java, 82 (69 λ) bajtów ze wzorem kwadratowym (127 (114 λ) bajtów)
Brute-Force: (Vanilla, Java 7)
λ-ulepszone: (Java 8)
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
int
tablicę 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:
Podejście kwadratowe: (Vanilla, Java 7)
λ-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.
źródło
Japt ,
28222120 bajtówDane wejściowe są dokonywane w formie
-63 2
.Wyjaśnienie:
U
iV
są dwa wejścia (-63
i2
w pierwszym przypadku)²
obciąża liczbęq
wyodrębnia pierwiastek kwadratowyźródło
[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 ...APL,
2721 bajtówJest 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:
Wypróbuj online
Zaoszczędź 6 bajtów dzięki Dennisowi!
źródło
CJam, 18 bajtów
Wypróbuj online!
Jak to działa
źródło
Python 3,
4944 bajtówPrawdopodobnie istnieje kilka sposobów na grę w golfa jeszcze bardziej, ale wygląda to całkiem dobrze.
źródło
s/2-d
. Ponadtod=(s*s/4-p)**.5
oszczędza kilka bajtów.MathCAD 15. 38 bajtów
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.
źródło
𝔼𝕊𝕄𝕚𝕟, 21 znaków / 30 bajtów
Try it here (Firefox only).
Meh Powinno to być wystarczająco wizualne, abyście wszyscy mieli pomysł; Jednakże, jeśli trzeba,
î = input1, í = input2
.źródło
PHP, 62 bajty
Może to być dość długie, ale w pełni funkcjonalny „program” PHP. Akceptuje argumenty za pomocą żądania „get”.
Demo .
źródło
TI-BASIC, 20 bajtów
Bierze
Q
odAns
iP
odPrompt
. Zadzwoń jakP:prgmNAME
.źródło
Prompt
oś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.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.