Die Aufgabe ist also einfach. Bei einem Array von Zahlen und Ergebnissen müssen Sie herausfinden, welche Operationen Sie für Zahlen aus dem Array verwenden müssen, um das angeforderte Ergebnis zu erhalten.
Machen wir es uns für den Start einfach und erlauben nur grundlegende Operationen wie: Addition, Subtraktion, Multiplikation und Division.
Beispiel:
Input : [5,5,5,5,5] 100
Output : 5*5*5-5*5
Um Sprachen wie Java einen Vorteil zu verschaffen, muss die Funktion implementiert werden, nicht das gesamte Programm. Das Ergebnis kann über Parameter zurückgegeben oder an die Konsole gedruckt werden.
Der Code wird basierend auf der Anzahl der Bytes bewertet, und da es sich um eine Golfcode-Herausforderung handelt, gewinnt die niedrigste Punktzahl.
Eine weitere Anforderung ist, dass Sie zusätzliche -10 Punkte erhalten können, wenn das Array nur Digids enthält. Sie unterstützen Lösungen, bei denen Sie Zahlen aus folgenden Ziffern erstellen können. Dh
Input : [1,2,3,4,5] 0
Output : 12-3-4-5
Beachten Sie, dass einige Fälle möglicherweise mehr als eine Lösung haben, sofern es sich bei den Ausgaben um vorgeschlagene Ausgaben handelt. Es liegt an Ihnen, eine oder mehrere Lösungen für eine bestimmte Aufgabe bereitzustellen.
BEARBEITEN: Das Ergebnis muss aus mathematischer Sicht gültig sein, daher ist Division eine rationale Division, keine ganze Zahl, und die Priorität der Operation ist dieselbe wie in der klassischen Mathematik (zuerst Multiplikation und Division, dann Addition und Subtraktion).
quelle
*
und/
hat Vorrang vor+
und-
? Ihre beiden Beispiele widersprechen sich.Antworten:
Pyth, 23 Bytes
Aus Sicherheitsgründen
*
und/
nicht online auswerten, aber sie funktionieren theoretisch.Testsuite mit nur
+
und-
.quelle
Oracle SQL 11.2,
322304270 Byte: 1 ist die Liste der Ziffern
: 2 ist das gesuchte Ergebnis
Nicht Golf:
quelle
TSQL (sqlserver 2016)
310294280 ByteWas für eine wunderbare Gelegenheit, hässlichen Code zu schreiben:
Golf:
Probieren Sie es online aus
Lesbar: (Das Einfügen eines Dezimalpunkts (.) Und das Entfernen desselben ist erforderlich, damit SQL akzeptiert, dass 4/5 nicht 0 ist. Das Entfernen ist auch für die Testpersonen vorgesehen.)
Diese Lösung kann auch folgende Eingabetypen verarbeiten:
quelle
JavaScript (ES6),
165147 BytesVerschachtelt
eval
... schön.quelle
Python 3,
170155 BytesErstellen Sie einen Generator mit allen möglichen Ordnungen der Operatoren, kombinieren Sie diese mit den Zahlen und bewerten Sie sie, bis wir die Antwort erhalten.
https://repl.it/C2F5
quelle
['+','-','*','/']
mit'+-*/'
; Dastring
s iterabel sind, wird es wie ein behandelt,array
wobei jedes Element jedes Zeichen im ist.string
Es verhält sich also so, als hätten Sie es mit dem Array versehen, über das Sie derzeit verfügen.Python,
195186 BytesHier ist eine grausame Art, es zu tun.
Die Funktion
x
akzeptiert zum Beispiel ein Argument von alist
und aresult
-x([1,2,3,4,5], 15)
.Das Programm beginnt eine Schleife, in der wir nach dem Zufallsprinzip auswählen, ob
"+", "-", "*", or "/"
zwischen die einzelnen Zahlen angehängt werden soll oder ob sie miteinander verknüpft werden sollen. Dies schien eine präzisere Option zu sein, als tatsächlich Permutationen durchzugehen und jede Kombination zu versuchen, um jedes Ergebnis zu finden, und obwohl die Ausführung länger dauert und viel weniger effizient ist. (Zum Glück ist das in diesem Zusammenhang kein Problem!)Es wird auch "." zu jeder Zahl, um nicht ganzzahlig gerundete Operationen wie zu vermeiden
6/4 = 1
. Es ist danneval
unser Ausdruck und bestimmt, ob das Ergebnis dem entspricht, was wir erwarten, und wenn ja, gibt es den Ausdruck aus.Dieses Programm wird nie beendet - es gibt kontinuierlich Ergebnisse aus, bis es beendet wird.
BEARBEITEN 1 : Entfernen Sie unnötige Zeilenumbrüche, in denen einzeilige
if
Anweisungen verwendet werden können.quelle
Matlab, 234
238258BytesIch gehe aufgrund der Einschränkungen der anderen Antworten davon aus, dass die Nummernreihenfolge des Eingabearrays von fiat beibehalten wird.
Dieser Code eine Reihe von Zahlen nimmt
x
, sagenx = '12345'
und ein Ergebnisr
, sagenr = 15
und kehrt alle Saiten von Ausdrücken können Sie auswerten bekommenr
vonx
mit den vier Betreibern.Ich habe zwei verschiedene längenäquivalente Methoden verwendet, um die Verwendung von Ausdrücken vom Typ
ones(length())
-type oderrepmat(length())
-type zu vermeiden :~~p(1,:)
die Nicht-Nicht-Werte inp
(dh eine Liste von1
s der gleichen Länge als erste Dimension vonp
) zurückgeben und0|p(:,1)
die 0 zurückgeben oder vorhanden sind -a-value-inp
(dh eine Liste von1
s mit der gleichen Länge wie die zweite Dimension vonp
).Matlab hat keine Methode
nchoosek
mit Ersetzung , daher habe ich die Operatoren die richtige Anzahl von Malen dupliziert, den gesamten Speicherplatznchoosek
für diese größere Auswahl von Operatoren berechnet und dann einenunique
Aufruf verwendet, um das Ergebnis auf das zu reduzieren, was es sein sollte (Entfernen äquivalenter Kombinationen wie '*** +' und '*** +'). Ich füge ein abschließendes Leerzeichen hinzu, das der Länge des Eingabevektors zu Verkettungszwecken entspricht, und komponiere dann die Operatorzeichenfolgen mit den Eingabezeichenfolgen in den Spalten einer Matrix. Ich werte dann die Ausdrücke spaltenweise aus, um Ergebnisse zu erhalten und die Reihenfolge der Operatoren zu finden, die den Spalten mit Ergebnissen entspricht, die unserer Eingabe entsprechenr
.Test:
x = '12345'
,r = 15
:Wenn ich ein Array mit Werten mit doppelter Genauigkeit verwenden müsste, müsste ich
x = num2str(x,'%d');
die Ziffern in eine Zeichenfolge konvertieren;
und meiner Punktzahl 21 (20 ohne ) hinzufügen . * Die zusätzlichen Bytes waren Semikolons, die ich rein gelassen habe, damit jeder, der diesen Code ausführt, seine Eingabeaufforderung nicht mit langen Arrays in die Luft sprengen sieht. Da meine Bearbeitung ohnehin einen riesigen Stapel von Warnungen über Logiken und Doppelpunktoperanden erzeugt, habe ich die Semikolons in der neuen Version entfernt.Bearbeiten 2: Vergessen, ein
2*n+2
durch zu ersetzenk
.Alte Antwort:
quelle
JavaScript (ES6), 88 Byte
Warf ein wenig Zufälligkeit in die Mischung. Viel einfacher als das systematische Durchlaufen der Kombinationen.
Testsuite
quelle
PHP, 108 Bytes
Nimmt Eingaben von Befehlszeilenargumenten in umgekehrter Reihenfolge entgegen. Laufen Sie mit
-r
.Nervenzusammenbruch
quelle
Perl 5 mit
-pa
46 BytesProbieren Sie es online aus!
quelle