Wenn Sie eine nicht leere Liste nichtnegativer Ganzzahlen angeben, sollten Sie das Umschreiben als ein arithmetisches Problem betrachten, bei dem Folgendes zutrifft:
- Ein Pluszeichen (
+
) wird zwischen Zahlenpaaren eingefügt, die von links nach rechts (vom Anfang der Liste bis zum Ende) zunehmen. - Ein Minuszeichen (
-
) wird zwischen Zahlenpaaren eingefügt, die von links nach rechts abnehmen. - Ein Multiplikationszeichen (
*
) wird zwischen Zahlenpaaren eingefügt, die gleich sind.
Anders gesagt: Jede Unterliste a,b
wird zu a+b
if a<b
, a-b
if a>b
und a*b
if a==b
.
Zum Beispiel die Liste
[12, 0, 7, 7, 29, 10, 2, 2, 1]
würde der Ausdruck werden
12 - 0 + 7*7 + 29 - 10 - 2*2 - 1
die auswertet zu 75
.
Schreiben Sie ein Programm oder eine Funktion, die eine solche Liste aufnimmt und auswertet und das Ergebnis druckt oder zurückgibt.
- Die Reihenfolge der Operationen ist wichtig. Multiplikationen sollten vor jeder Addition oder Subtraktion durchgeführt werden.
- Wenn die Eingabeliste eine Nummer hat, sollte dies der Wert sein, zu dem sie ausgewertet wird. zB
[64]
soll geben64
. - Die Verwendung von
eval
oderexec
ähnlichen Konstrukten ist erlaubt.
Hier sind einige zusätzliche Beispiele:
[list]
expression
value
[0]
0
0
[1]
1
1
[78557]
78557
78557
[0,0]
0*0
0
[1,1]
1*1
1
[2,2]
2*2
4
[0,1]
0+1
1
[1,0]
1-0
1
[1,2]
1+2
3
[2,1]
2-1
1
[15,4,4]
15-4*4
-1
[9,8,1]
9-8-1
0
[4,2,2,4]
4-2*2+4
4
[10,9,9,12]
10-9*9+12
-59
[1,1,2,2,3,3]
1*1+2*2+3*3
14
[5,5,4,4,3,3]
5*5-4*4-3*3
0
[3,1,4,1,5,9,2,6,5,3,5,9]
3-1+4-1+5+9-2+6-5-3+5+9
29
[7637,388,389,388,387,12,0,0,34,35,35,27,27,2]
7637-388+389-388-387-12-0*0+34+35*35-27*27-2
7379
Der kürzeste Code in Bytes gewinnt. Tiebreaker ist frühere Antwort.
code-golf
math
number
arithmetic
Calvins Hobbys
quelle
quelle
Antworten:
Python 2, 63 Bytes
Konstruiert und
eval
s den Ausdrucksstring. Das arithmetische Symbol wird durch Vergleichen der vorherigenp
mit der aktuellen Nummer ausgewähltx
. Das Symbol wird gefolgt von der aktuellen Nummer angehängt.Die erste Zahl wird mit einem cleveren Trick von Sp3000 gehandhabt. Der Anfangswert von
p
wird auf eine Zeichenfolge festgelegt, die größer als eine beliebige Zahl ist und daher ein-
vor der ersten Zahl verursacht. Abers
wird initialisiertprint-
zugleich, die das Ergebnis Start mit machtprint--
(zum Speichern von 2 Bytes durch Initialisierung mit dank xsotprint
.)quelle
print
in die Zeichenfolge bewegen undexec
anstelle von verwendeneval
.Pyth,
312619171615 BytesAusdrücke mit
*
werden nicht online ausgewertet, funktionieren aber theoretisch.2 Bytes dank Maltysen.
Testsuite (mit Auswertung).
Die anderen Fälle (ohne Bewertung).
Geschichte
M+G@"*-+"->GH<GHv+sgMC,JsMQtJ\x60e
M+G@"*-+"->GH<GHv+sgVQtQ\x60e
vtssVm@"*-+"->Zd<~Z
vtssVm@"*-+"._-~Z
vssVm@"*-+"._-~k
vsm+@"*-+"._-~k
quelle
+
und-
online)--safe
Schalter, der ersetzteval
mitast.literal_eval
.Jelly ,
18161514 BytesVerwendet kein eingebautes eval. Probieren Sie es online! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
eval
als Atom hinzufügen ...MATL , 12 Bytes
Hierbei wird @ aditsus sehr schöne Idee der Lauflängencodierung verwendet.
Probieren Sie es online!
Erläuterung
quelle
CJam, 20
Probieren Sie es online aus
Erläuterung:
quelle
JavaScript (ES6), 54
eval
empfängt eine durch Kommas getrennte Liste von Ausdrücken und gibt den Wert des letzten zurück.Prüfung
quelle
Julia,
7657 BytesMein erstes Golfspiel mit Julia. Vielleicht gibt es offensichtliche Verbesserungen. Probieren Sie es online!
Dennis hat eine Menge Bytes gespart.
quelle
!
.Pyth -
232220 BytesWie bei Kenny's funktioniert die Multiplikation nicht online.
Test Suite ohne eval zu machen .
quelle
R, 92 Bytes
Hier kann man wahrscheinlich noch ein bisschen Golf spielen.
Ungolfed:
quelle
Brachylog ,
3432 BytesProbieren Sie es online!
quelle
TI-BASIC, 146 Bytes
Ich werde es schön formatieren, wenn nicht auf dem Handy. Der Schlaf entgeht mir, also bekommst du das. Genießen.
quelle
Javascript ES6,
6462 Zeichenquelle
a
ein Parameter sein?a[i+1]...a[i+1]
=>a[++i]...a[i]
- 2 Zeichen kürzer sein, aber ich habe fälschlicherweise das Löschen des gesamten Codes ersetzta=>
).Java, 384 Bytes
Ungolfed online versuchen
quelle
int a=l.length
,&&
=>&
, setzen dieint i=0
auf der gleichen „Linie“ , wieint n=l[0],m
.if(i<l.length-2&&l[i+1]!=l[i+2])n+=l[i+1];else{m=l[i+1];while(i<l.length-2&&l[i+1]==l[i+2])m*=l[(i++)+1];n+=m;
können Sie dies einfach durch den Inhalt innerhalb deselse
Blocks ersetzen .Javascript ES6, 79 Zeichen
quelle
Perl, 49 Bytes
48 Byte Code + 1 für
-p
Verwendung
Anmerkungen
Ich habe hier erfahren, dass Sie einen Lookahead in PCRE erfassen können, obwohl dies (
(?=(\d+))
anstelle von((?=\d+))
) ein wenig unintuitiv ist . Nach dem Lesen ist dies jedoch sinnvoll, da Sie mit letzterem eine Übereinstimmung mit der Länge Null (den Lookahead) erfassen und stattdessen die Übereinstimmung mit erstem erfassen würden.Vielen Dank an @ninjalj für das Speichern von 8 Bytes!
quelle
-e
kostenlosp
damit laufen kannst und ein Making-It-pe
+1 gab ? Wird vorerst aktualisiert, aber wenn Sie eine Quelle finden könnten, die ich zitieren / verlinken könnte, wäre das großartig!$&.qw(* - +)[$&<=>$1]
im Ersatzteil dess///
Operators.Eigentlich 30 Bytes
Leider
≡
funktioniert dieses Programm unter TIO nicht , da der Befehl eval ( ) nur Literale unter TIO auswertet.Erläuterung:
quelle
R ,
12044 ByteProbieren Sie es online!
Der Algorithmus ähnelt dem dieser Antwort , aber ich habe ihn erst erkannt, nachdem ich meine Antwort codiert habe. Viel besser als meine ursprüngliche Antwort
eval(parse)
.Nutzt die vektorisierten Operationen von R voll aus -
*
Verwendet die Operation zuerstrle(x)$values ^ rle(x)$lenghts
und punktiert diesen Vektor mitsign( diff( rle(x)$values ) )
(vorangestellt mit1
).quelle
05AB1E (Legacy) ,
171615 Byte-2 Bytes dank @Emigna .
Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle
>
indem Sie+
an das Ende der Zeichenfolge verschieben.Ć
und entfernen¨
, wenn Sie‚ζ
anstelle vonø
‚ζ
ist eine perfekte Alternative, da der Raum in der Auswertung ignoriert wird. Danke noch einmal. :)PHP, 103 Bytes
Ordentliche Herausforderung. Das wurde länger als erwartet. Ich denke, mit
array_map
o.ä. wird die Anzahl der Bytes nicht verbessert, da anonyme Funktionen in PHP immer noch teuer sind.Wird über die Befehlszeile ausgeführt und fordert zur Eingabe einer durch Kommas getrennten Liste auf, z.
quelle
PowerShell v2 +, 62 Byte
Nimmt Eingaben als durch Leerzeichen getrennte Befehlszeilenargumente an, die in ein automatisches Array konvertiert werden
$args
. Wir durchlaufen jedes Element und verwenden die Hilfsvariable für$o
jede Iteration, um uns daran zu erinnern, was unser vorheriger Eintrag war. Wir verwenden eine indizierte Zeichenfolge, um den entsprechenden Operator zu ermitteln, indem wir die implizit konvertierten Booleschen Werte berechnen (wenn der vorherige Eintrag kleiner ist, bedeutet die[]
Auswertung,1+2*0
dass'*+-'[1]
der+
ausgewählte ausgewählt ist).Die verketteten Zeichenfolgen verbleiben in der Pipeline. Wir sammeln alle diese Schnipsel zusammen ( zum Beispiel
3-
,1+
,4-
, etc.) mit einem-join
Betrieb, verketten auf der Endzahl (implizit in einem String konvertiert), und eine Pipe aniex
(alias fürInvoke-Expression
und ähnlicheeval
).quelle
Japt , 25 Bytes
Würde es gerne kürzer machen, aber ich könnte keine auswertungsfreie Version zum Laufen bringen.
Probieren Sie es online!
quelle
Japt
-x
,21 bis19 BytesVersuch es
Erläuterung
quelle