Mit unseren bekannten mathematischen Symbolen: +, x, Klammern und einer beliebigen rationalen Zahl können Sie leicht Ausdrücke erstellen, die eine gewünschte Zahl ergeben. Zum Beispiel: 1+(2x3)=7
, (1+2)+(3x6.5)=22.5
und so weiter. Langweilig genug.
In dieser Herausforderung werden wir einen neuen Betreiber benutzen ±
. Die Verwendung von ±
in einem Ausdruck bedeutet, dass Sie den Ausdruck auswerten müssen, indem Sie die ±
durch +
oder -
auf alle möglichen Arten ersetzen und die Menge aller möglichen Werte zurückgeben. Beispielsweise:
1±2±3 = {-4,0,2,6}
da1±2±3
kann jeder sein1+2+3
,1+2-3
,1-2+3
und1-2-3
und ihre Werte6,0,2,-4
sind.(±2)x(2±3) = {-10,-2,2,10}
aus ähnlichen Gründen.
Nun, wie sich herausstellt, da jeder Satz von verschiedenen reellen Zahlen, ist es möglich , einen Ausdruck mit schaffen +
, x
, (
, )
, ±
, und reellen Zahlen , dass auswertet zu dem vorgegebenen Satz.
Aufgabe
Ihre Aufgabe ist es, ein Programm oder eine Funktion in der Sprache Ihrer Wahl zu schreiben, die eine Sequenz dauert (Liste / array / jedes geeignetes Format) von ganzen Zahlen und gibt einen Ausdruck (als String) aus +
, x
, (
, )
, ±
, und rationaler Zahlen das ergibt die Menge der gegebenen Zahlen.
- Beachten Sie, dass das genaue Zeichen
±
keine Rolle spielt. Sie können jedes andere Zeichen Ihrer Wahl verwenden, sofern es von den anderen Zeichen, die Sie verwenden, unterscheidbar ist. Sie müssen jedoch angeben, welchen Charakter Sie in Ihrer Einreichung verwenden. - Die Eingabe darf aus Dezimalnäherungen (bis zu einer angemessenen Genauigkeit) der verwendeten rationalen Zahlen bestehen.
- Die Ein- und Ausgabe kann auf eine der üblichen Arten erfolgen.
- Standardlücken sind verboten.
- Sie können davon ausgehen, dass die angegebenen Ganzzahlen unterschiedlich sind und in aufsteigender Reihenfolge angegeben werden.
- Die Ausgabe kann Leerzeichen und Zeilenumbrüche enthalten.
Gewinnkriterium
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Beispiele
Eingabe | Mögliche Ausgabe ------------- + ----------------------------- [1,2,3] | 2 ± 0,5 ± 0,5 [-7, -3,1,21] | (1 ± 2) x (3 ± 4)
Idee aus einer Frage des Städteturniers, Herbst 2015 .
quelle
Antworten:
Python 2 , 56 Bytes
Probieren Sie es online!
Das
?
steht für±
. Anwendungsbeispiel:Die Idee ist, dass wir einen Ausdruck nehmen
E
und einen neuen Werth
an seine Wertemenge anhängen können, indem wir tun(.5±.5)*(E+-h)+h
.quelle
+-h
und nicht nur-h
? Das heißt, warum nicht das+
a machen-
und das entfernen-
, was gerade im Programm ist?-
Operator im Ausdruck zu.Haskell , 52 Bytes
Probieren Sie es online!
Verwendet
?
für±
. Beispiel:Die Funktion
shows
funktioniertshows a b=(show a)++b
, ein Trick, den ich von Lynn gelernt habe.quelle
Haskell , 58 Bytes
Verwenden
#
für±
, da es ein Byte weniger ist.f
Nimmt eine Liste von Ganzzahlen und gibt eine Zeichenfolge zurück.Das Ergebnis ist von der Form
n+(.5#.5)x(rest)
, in dern
das erste Element der Liste undrest
die Darstellung aller anderen Elemente mit jeweilsn
abgezogen wird.Probieren Sie es online!
quelle
Gelee , 29 Bytes
Drucke v + (0.5¤0.5) × (i 1 + (0.5¤0.5) × ((i 2 + (0.5¤0.5) x (... (i n ) ...))) wobei v ist die erste Zahl in die Eingangsanordnung und i n ist die n - te inkrementale Differenz zwischen den Elementen des Eingangs - Array.
Probieren Sie es online!
Wie?
quelle
05AB1E , 25 Bytes
Probieren Sie es online!
Erläuterung
Das Bilden des Ausdrucks von rechts endet leider damit, dass die gleiche Byteanzahl mit
0¸«¥¤s¨RvX;Dy"ÿ+(ÿ±ÿ)*(ÿ)
. Die 8 Bytes, die für das Setup verwendet werden, sind hier die große Verschwendung.quelle
Haskell, 54 Bytes
das + - Zeichen ist
'?'
. Beispiel:quelle
JavaScript (ES6),
5651 ByteBasierend auf der Formel von @ JonathanAllan.
@
steht für±
.quelle