Erläuterung:
Letztes Jahr im Matheunterricht bekamen wir bei den Hausaufgaben gelegentlich diese extrem einfachen, wenn auch ebenso nervigen Fragen, die als Diamant-Rätsel bezeichnet wurden. Dies waren im Grunde genommen Fragen, bei denen wir eine Summe erhalten, und ein Produkt wurde dann gebeten, die beiden Zahlen zu finden, die, wenn sie multipliziert werden, das Produkt ergeben und wenn sie addiert werden, die Summe ergeben. Diese machten mich verrückt, da ich sie (in Algebra I) nur lösen konnte, indem ich nur die Faktoren des Produkts auflistete und dann sah, welche addiert wurden, um die Summe zu ergeben. (Da ich zu der Zeit nicht wusste, wie man Quadratics benutzt) Ganz zu schweigen davon, dass sie nicht gerade die Mathematik herausfordern. Mir ist jedoch gerade eingefallen, dass ich gerade ein Programm hätte schreiben sollen. Das ist heute Ihre Herausforderung! Schreiben Sie ein Programm, mit dem Sie ein Diamant-Puzzle lösen können.
Beispiele Entschuldigung für das verschwommene Bild, es ist das Beste, was ich finden konnte. Ignorieren Sie auch die Zahlen in Blasen. Die Oberseite des Diamanten ist das Produkt, die Unterseite ist die Summe, rechts und links sind die beiden Zahlen. Die Antworten lauten wie folgt: (Dies sind auch Ihre Testfälle.)
- 9, -7
- -2, -1
- 5, 8
- -9, -9
Regeln:
- Sie dürfen keine vordefinierten Funktionen oder Klassen verwenden, die dies für Sie ausführen.
- Ihr Code muss ein vollständiges Programm oder eine Funktion sein, die die Antworten zurückgibt oder druckt, sobald sie gefunden wurden
- Die Eingabe ist die Summe und das Produkt, die als Funktionsparameter oder Benutzereingabe eingegeben werden
Spezifikationen:
- Nehmen Sie an, dass die beiden Zahlen, die Summe und das Produkt immer eine ganze Zahl sind.
- Die beiden Antworten liegen zwischen -127 und 127.
- Ihre Eingabe besteht aus zwei ganzen Zahlen (Summe und Produkt).
Denken Sie daran, dass dies Codegolf ist, sodass die kürzeste Anzahl an Bytes gewinnt. Bitte benennen Sie Ihre Antwort mit dem standardmäßigen ## Sprachnamen und der Bytezahl
Edit: Doorknob wies auch darauf hin, dass dies im Wesentlichen "Faktor ein Quadrat der Form x ^ 2 + bx + c" ist. Das ist eine andere Art, über diese Herausforderung nachzudenken und sich ihr zu nähern. : D
x^2 + bx + c
", richtig?(x + n)(x + m)
gibt Ihnenx^2 + (n+m)x + (n*m)
, also Faktorisierung besagten Quadrats ist im Grunde gleichbedeutend mit dieser Frage (wenn ich es richtig verstehe).Antworten:
Jelly ,
151110 BytesProbieren Sie es online!
Der folgende Binärcode funktioniert mit dieser Version des Jelly-Interpreters.
Idee
Dies beruht auf der Tatsache, dass
Code
quelle
Unicorn ,
4650298218741546Jetzt mit Ziegen, Regenbogen und Funkeln!
Hoffentlich kürzer als Java.
Verwendet eine benutzerdefinierte Codierung, die mit angewendet werden kann
ApplyEncoding
Erläuterung
Wie funktioniert das??? Mit der Magie der Einhörner (und ein bisschen Code).
Unicorn ist in JavaScript kompiliert
Jeder Abschnitt ist durch ein Leerzeichen getrennt, und jeder Abschnitt repräsentiert ein Zeichen im JavaScript-Code.
Wenn der Abschnitt Einhörner enthält, entspricht das Zeichen des Abschnitts der Länge des Abschnitts, umgerechnet in einen Zeichencode (z. B. wären 32 Einhörner ein Leerzeichen).
Wenn der Abschnitt Ziegen enthält, wird die Länge des Abschnitts verdoppelt und dann in einen Zeichencode umgewandelt.
Wenn die Sonderzeichen des Programms nicht angezeigt werden, sehen Sie hier ein Bild:
Dies ist kein Wettbewerb, da Unicorn hergestellt wurde, nachdem diese Herausforderung veröffentlicht wurde.
quelle
JavaScript ES6,
453937 * Bytes* Danke an Dennis!
quelle
TeaScript, 22 Bytes
30 31Nicht so schlimm. Wäre viel kürzer, wenn ich ein paar Golf-Features wie Unicode-Shortcuts für
Einhörnerfertig bekommen könnteProbieren Sie es online aus
quelle
MATL , 33 Bytes
Gibt die beiden Zahlen in zwei verschiedenen Zeilen aus. Wenn keine Lösung vorhanden ist, wird keine Ausgabe erstellt. Wenn mehrere Lösungen existieren, wird nur das einer Lösung entsprechende Zahlenpaar erzeugt.
Beispiel
Das Folgende wurde in Octave mit dem aktuellen GitHub-Commit des Compilers ausgeführt.
Erläuterung
quelle
matl
und drücken Sie "Enter"; Fügen Sie dann das Programm ein und schließen Sie es mit einer leeren Zeile ab. Was meinst du die Syntax ist schrecklich gespalten? MATL verwendet die umgekehrte polnische Notation (Postfix), was Sie vielleicht verwirrt?Julia,
464432 BytesEine Funktion f, die die Summe und dann das Produkt nimmt.
Meine erste Antwort von Julia. @AlexA., Du solltest stolz auf mich sein.
Vielen Dank an @Dennis und @Alex A. für die Hilfe. Ich muss die 44 streichen.: P
quelle
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
Liest Summe dann Produkt aus separaten Zeilen von STDIN. -ve Zahlen müssen mit einem Unterstrich anstelle eines Minuszeichens eingegeben werden. z.B
Erläuterung:
Gleiche quadratische Grundlösung für
sum = a + b
undproduct = a * b
. Dies berechnet die Lösunga
als:Und berechnet die Lösung
b
als:Erweitert:
Das Teilen durch 2 erfolgt zu spät, um eine Verlustgenauigkeit zu vermeiden. Es ist möglich, früher durch 2 zu teilen, dies erfordert jedoch eine gebrochene Genauigkeit, die mehr Zeichen erfordert.
quelle
Pyth,
2118 Bytes3 Bytes gespart dank @Dennis
Testsuite
Mein zweites Pyth-Programm überhaupt, daher kann es wahrscheinlich mit eingebauten Funktionen gespielt werden. Vorschläge sind willkommen!
Wie es funktioniert
(Diese Erklärung ist möglicherweise nicht zu 100% richtig. Ich bin mit Pyth nicht sehr vertraut.)
Beachten Sie, dass dies
/
eine Ganzzahldivision ist. Durch Ersetzen durchc
könnte dies auch für nicht ganzzahlige Eingaben funktionieren.quelle
J
handelt sich um eine automatisch zuweisende Variable, die bei der ersten Verwendung festgelegt wird. Der einzige Teil, der nicht ganz richtig zu sein scheint, ist Die Liste ist derzeit [J].,
Nimmt genau zwei Argumente und kombiniert sie in einer Liste.Java, 82 (69 λ) Bytes mit quadratischer Formel (127 (114 λ) Bytes Brute-Force)
Brute-Force: (Vanille, Java 7)
λ-erweitert: (Java 8)
Weisen Sie Lambda zu
java.util.function.BiFunction<Integer, Integer, int[]>
und rufen Sie anapply()
.Einfacher alter Brute-Force-Ansatz. Hier ist nur die Arbeitsfunktion, und da Java nicht mehrere Werte zurückgeben kann, geben wir ein 2-Element zurück
int
Array mit mit den erforderlichen Zahlen zurück.Das vollständige auf Brute-Force-Ansätzen basierende Programm ist zu finden hier auf ideone.com . Die λ-Version finden Sie hier.
Zum Golfen mussten alle unnötigen Zahnspangen entfernt werden.
Ungolfed:
Quadratischer Ansatz: (Vanilla, Java 7)
λ-erweitert: (Java 8) (s, p) -> {int x = s + (int) Math.sqrt (s * s-4 * p); neues int [] {x / 2, sx / 2} zurückgeben ;}
(Verwendung wie für Brute Force λ oben).
Parameter und Rückgabekriterien sind dieselben wie bei der obigen Brute-Force-Lösung.
Verwendet die gute alte quadratische Formel, die von fast allen anderen Antworten hier verwendet wird, und kann nicht viel weiter abgespielt werden, es sei denn, jemand hilft mir hier. Es ist ziemlich klar, also schließe ich keine ungolfed Version ein.
Das vollständige Programm auf der Basis eines quadratischen Ansatzes finden Sie hier auf ideone.com . Die λ-Version finden Sie hier.
quelle
Japt ,
28222120 BytesDie Eingabe erfolgt in Form von
-63 2
.Erläuterung:
U
undV
sind die beiden Eingänge (-63
und2
im ersten Fall)²
quadriert die Zahlq
extrahiert die Quadratwurzelquelle
[X=ºV²-4*U ¬+V)/2V-X]
Ohne die Verknüpfungen:[X=((V²-4*U q +V)/2V-X]
Ich sollte das Nachziehen]
in der nächsten Version wirklich überflüssig machen ...APL,
2721 BytesDies ist ein dyadischer Funktionszug, der rechts und links ganze Zahlen akzeptiert und ein Array zurückgibt. Um es aufzurufen, weisen Sie es einer Variablen zu.
Ungolfed:
Probieren Sie es online aus
6 Bytes gespart dank Dennis!
quelle
CJam, 18 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Python 3,
4944 BytesEs gibt wahrscheinlich einige Möglichkeiten, dies noch weiter nach unten zu spielen, aber dies sieht so aus, wie es ist, ziemlich gut aus.
quelle
s/2-d
. Außerdemd=(s*s/4-p)**.5
spart ein paar Bytes.MathCAD 15. 38 Bytes
Mit einer mathematischen Formel ist die Programmierung in MathCAD einfach. Die Sprache ist sogar für den einfachen Umgang mit komplexen Zahlen ausgelegt. Es gibt jedoch kürzere Sprachen, die das Problem lösen können.
quelle
𝔼𝕊𝕄𝕚𝕟 21 Zeichen / 30 Bytes
Try it here (Firefox only).
Meh. Dies sollte visuell genug sein, damit Sie auf die Idee kommen; wenn Sie müssen
î = input1, í = input2
,.quelle
PHP, 62 Bytes
Dies könnte ziemlich lange dauern, ist aber ein voll ausgestattetes PHP-Web- "Programm". Akzeptiert die Argumente über die "get" -Anforderung.
Demo .
quelle
TI-BASIC, 20 Bytes
Nimmt
Q
abAns
undP
abPrompt
. Rufen Sie gerne anP:prgmNAME
.quelle
Prompt
Aussage so lang ist, lol. Ich kenne TI-BASIC nicht, aber es könnte kürzer sein, wenn Sie den Code in eine Funktion einfügen und P als Parameter übergeben.Prompt
,P
,/
,2
,+
,√(
,²
,4
,-
,Ans
, und{
ist ein Token, und jeder dieses Token ist ein Byte. TI-BASIC hat auch keine Funktionen. Dies ist wahrscheinlich die kürzeste Methode.