Plus oder Minus Polyglotten!

14

Ihre Einreichung muss eine Liste von Zahlen (in dem von Ihrer Sprache unterstützten Listenformat oder mit mehreren Funktions- / Befehlszeilenparametern) oder eine Folge von Zahlen enthalten, die durch ein anderes Zeichen getrennt sind 0123456789. In einer Sprache muss es alle addieren und die Summe ausgeben. In einer anderen Sprache muss es sie subtrahiert voneinander in der Reihenfolge ausgeben . Beispiel:

12
5
7
2

In einer Sprache muss es ausgegeben werden 26, und in einer anderen Sprache muss es ausgegeben werden -2. Beachten Sie, dass alle eingegebenen Zahlen positive ganze Zahlen kleiner als sind 100. Es werden nie mehr als 20Zahlen angegeben, sodass Sie niemals mehr als 2000oder weniger als ausgeben -1899. Irgendwelche Fragen? Kommentiere unten!

programmer5000
quelle
Ist das nachgestellte Leerzeichen in der Ausgabe zulässig?
Business Cat
Sind zwei verschiedene Versionen derselben Sprache zulässig? Siehe die Python 2/3 Antwort von HyperNeutrino
Mr. Xcoder
@ Mr.Xcoder es ist erlaubt.
programmer5000
2
@BetaDecay Sie denken, dass das ein Problem ist, sehen Sie sich Code-Golf an!
programmer5000
1
@ programmer5000 Du meinst [code-golf] -[polyglot]?
Erik der Outgolfer

Antworten:

14

Jelly / 05AB1E , 3 Bytes

00000000: c6 71 53                                         .qS

Dies ist ein Hexdump (xxd) des eingereichten Programms.

Probieren Sie es online!

Gelee: Summe

Jelly verwendet die Jelly-Codepage , sodass die folgenden Zeichen angezeigt werden.

İqS

Probieren Sie es online!

Wie es funktioniert

İqS  Main link. Argument: A (array)

İ    (ignored)
 q   Unrecognized token. This breaks the link; nothing to the left is executed.
  S  Take the sum of A.

05AB1E: Unterschied

05AB1E verwendet Windows-1252 , daher werden die folgenden Zeichen angezeigt .

ÆqS

Probieren Sie es online!

Wie es funktioniert

Æ     Take the difference of the input.
 q    Quit.
  S   (ignored)
Dennis
quelle
22

Python 2/3, 52 Bytes

lambda l:sum(l[:1]+[x*int(1-(1/2)*4)for x in l[1:]])

int(1-(1/2)*4)Gibt 1in Python 2 zurück, da 1/2zuerst nach 0und dann nach ausgewertet wird 0 * 4 = 0.

int(1-(1/2)*4)Gibt -1in Python 3 zurück, da 1/2zuerst nach 0.5und dann nach ausgewertet wird int(0.5 * 4) = int(2.0) = 2.

HyperNeutrino
quelle
1
Ist die Verwendung derselben Sprache mit anderen Versionen überhaupt erlaubt?
Mr. Xcoder
3
@ Mr.Xcoder Ich verstehe nicht, warum nicht, ich habe andere Sprachen gesehen, die entweder unterschiedliche Versionen von C, Java, Python und Befunge verwenden. Ich werde allerdings nach Meta fragen oder nachsehen, ob ich einen verwandten Meta-Beitrag finde.
HyperNeutrino
Gute Anwendung von Mathe-Tricks aufgrund von Versionsänderungen.
Mr. Xcoder
1
@ Mr.Xcoder Danke! Ich habe die Frage auf Meta gefragt hier ; Ich sollte hoffentlich bald eine Antwort bekommen.
HyperNeutrino
1
@ programmer5000 Ganzzahldivision.
HyperNeutrino
14

C und C ++ (beide von GCC), 81 75 73 Bytes

int c;int f(int*a,int l){auto d=.5;c=*a++;for(;--l;a++)c+=*a-4*d**a;c=c;}

Nimmt einen Zeiger auf Array und Länge.

Erläuterung: @Steadybox wird noch verwendet Erläuterung: p Deklariert in C auto d=.5eine Ganzzahlvariable mit der automatischen Speicherklasse (die Standardeinstellung), die dann auf 0 initialisiert wird, während in C ++ 11 ein double deklariert wird, das initialisiert wird bis 0,5.

C - plus Sprache: Probieren Sie es online!

C ++ - Minus-Sprache: Probieren Sie es online!

betseg
quelle
11

05AB1E / Jelly , 5 Bytes

00000000: 4f71 7f5f 2f                             Oq._/

Probieren Sie es online! (05AB1E)
Probieren Sie es online! (Gelee)

05AB1E sieht :

Oq? _ /
Erläuterung:

Oq? _ / 1 implizites Argument.
O Nimm die Summe des ersten Eingabeelements.
 q Beenden.
  ?_/ Nicht funktionstüchtig.

Jelly sieht :

Oq
_ /
Erläuterung:

_ / Hauptlink. Argumente: z
_ / Subtrahiere die Elemente von z nacheinander.

Oq Helper Link. Nicht funktionstüchtig.
Erik der Outgolfer
quelle
Verwendet dies die Jelly-Codepage?
programmer5000
@ programmer5000 Dies ist ein roher Bytestream, der CP-1252 für 05AB1E und JELLY für Jelly verwendet. Daher die 7f.
Erik der Outgolfer
Oh, das habe ich nicht gemerkt!
programmer5000
8

Eigentlich / Jelly , 4 Bytes

00000000: e4 81 5f 2f                                      .._/

Dies ist ein Hexdump (xxd) des eingereichten Programms. Es kann nicht in unformatierter Form online getestet werden. TIO unterstützt die CP437-Codierung nicht.

Eigentlich: Summe

Verwendet tatsächlich CP 437 und sieht daher die folgenden Zeichen.

Σü_/

Probieren Sie es online!

Wie es funktioniert

Σ     Take the sum on the input.
 ü    Print and empty the stack.
  _   Natural logarithm. Ignored since the stack is empty.
   /  Float division. Ignored since the stack is empty.

Jelly: Unterschied

Jelly verwendet die Jelly-Codepage , sodass die folgenden Zeichen angezeigt werden.

ỵ¹_/

Probieren Sie es online!

Wie es funktioniert

ỵ¹_/  Main link. Argument: A (array)

ỵ     Unrecognized token. Splits the link.
 ¹    Identity; yield A.
  _/  Reduce (/) A by subtraction (_).
Dennis
quelle
Ich las das als actually, Jelly.:)
programmer5000
Sie haben die Tatsache missbraucht, dass sich ein undefinierter Charakter wie
folgt verhält
1
@EriktheOutgolfer Mehr oder weniger. Um ganz ehrlich zu sein, bin ich mir nicht ganz sicher, was nicht erkannte Token bewirken.
Dennis
Auf den zweiten Gedanken, ich denke, dass Sie gerade ausgewählt haben Eigentlich nur, weil es üdie perfekte Funktion zugewiesen hat > _>
Erik the Outgolfer
@ programmer5000 Es ist jelly, actually.
Arjun
8

Python 2 und 3, 44 41 Bytes

lambda l:eval(l.replace(' ','-+'[1/2>0]))

Nimmt durch Leerzeichen getrennte Zahlen.


-3 Bytes dank @JonathanAllan

Probieren Sie es online aus: Python 2 (minus) Python 3 (plus)

ovs
quelle
1
Verwenden Sie '-+'[1/2>0], um drei Bytes zu speichern.
Jonathan Allan
7

CJam / Jelly , 6 Bytes

q~:-
S

CJam

q~    e# Read a list from input
:-    e# Reduce by subtraction
S     e# Push a space
      e# Implicit output

Probieren Sie es online!

Gelee

(unter Verwendung von UTF-8, nicht der Jelly-Codepage)

q~:-ist die Hilfsverbindung. Da es nicht aufgerufen wird, spielt es keine Rolle, was es tut. Sberechnet die Summe eines Arrays.

Probieren Sie es online!

Geschäfts-Katze
quelle
5
Marmelade und Gelee. Es macht Sinn, zwei ähnliche Dinge zusammen zu verwenden.
mbomb007
1
Das ist ungültig. Jelly hat 0x7f für Newline, dies hat 0x0a für Newline. In Jelly ist das eigentlich dasselbe wie q~:-½S. Leider ist das fix ( q~:-e#\x7fS) größer. Probieren Sie es online! (CJam) und online ausprobieren ! , jeder mit seiner eigenen Kodierung, um es selbst zu testen.
Erik der Outgolfer
2
Alternativ können Sie die UTF-8-Codierung für Jelly verwenden. Damit ist die aktuelle Codierung gültig. Geben Sie sie jedoch an.
Erik der Outgolfer
5

JavaScript / Cubix, 36 Byte

//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

Versuch es!

Die JavaScript-Funktion kann mit dem folgenden Snippet getestet werden, das Cubix-Programm kann hier getestet werden .

Wie funktioniert das?

JavaScript

Die erste Zeile ist ein Zeilenkommentar zu JavaScript, da sie mit zwei Schrägstrichen beginnt. Daher wird in JavaScript nur die unterste Zeile ( a=>eval(a.join`-`)) angezeigt, die ein Array als Eingabe verwendet, mit Minuszeichen dazwischen verknüpft und anschließend als Code ausgeführt die Subtraktion aller Elemente im Array.

let f=
//.!v+u;$I^@O<.Iu
a=>eval(a.join`-`)

console.log(f([1,2,3,4,5]))
console.log(f([3,1,4,1,5]))

Cubix

Cubix sieht den folgenden Cube (beachten Sie, dass Cubix alle Leerzeichen ignoriert):

      / / .
      ! v +
      u ; $
I ^ @ O < . I u a = > e
v a l ( a . j o i n ` -
` ) . . . . . . . . . .
      . . .
      . . .
      . . .

Der Anfang

Die IP beginnt in der dritten Zeile und zeigt nach Osten. Es 'I'drückt den Befehl, der eine Zahl aus der Eingabe entnimmt und auf den Stapel schiebt. Dann wird es '^'in die Summenschleife umgeleitet .

Summenschleife

Ich habe alle Zeichen, die nicht Teil der Summenschleife sind, entfernt und durch No-Ops ( '.') ersetzt. Das IP kommt zunächst in der zweiten Zeile an und zeigt nach Osten.

      . . .
      ! v +
      u ; $
. . . . . . I u . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Zunächst '!'überprüft der Befehl das oberste Element. Wenn dies der Fall ist 0(dh wir haben das Ende der Eingabe erreicht), wird der nächste Befehl ( 'v') ausgeführt, der die IP außerhalb der Schleife widerspiegelt. Wenn wir das Ende der Eingabe noch nicht erreicht haben, addieren wir die beiden obersten Elemente ( '+'das zweite Element ist die Summe bis zu diesem Punkt, das oberste Element die neue Eingabe). Dann springt die IP auf eine andere Seite des Würfels, in das 'u'Zeichen, wodurch die IP eine Kehrtwende ausführt und einen 'I'Befehl ausführt (eine andere Ganzzahl liest), während sie nach Norden zeigt. Die IP springt zurück auf die Oberseite, überspringt ( '$') den Löschbefehl ( ';') und macht eine weitere Kehrtwende, zurück zu dem Punkt, an dem wir begonnen haben.

Das Ende

Wenn die IP außerhalb der Schleife angezeigt wird, werden die folgenden Zeichen ausgeführt:

      . . .
      . v .
      . ; .
. . @ O < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
      . . .
      . . .
      . . .

Diese Anweisungen löschen das oberste Element (das Null ist) und geben dann das oberste Element (die Summe) als Ganzzahl aus. Ist der '@'Befehl dann erreicht, so endet das Programm.

Luke
quelle
4

Python 2 und 3, 33 Bytes

lambda l,*r:l+sum(r)*(1/2>0 or-1)

Nimmt Eingaben als separate Parameter.


Python 2.
Python 3.

Veedrac
quelle
lambda l,*r:l+sum(r)*(1/2-.5)*2für 31 Bytes
Ovs
@ovs Ich habe absichtlich vermieden, einen Schwimmer zurückzugeben. Wenn du darfst, dann *(1/2*4-1)ist ein Byte weniger als deins.
Veedrac
Ich denke, der Rückgabetyp spielt keine Rolle, solange der Wert korrekt ist
ovs
4

JS (ES6), CGL (CGL Golfing Language) , 32 26 Bytes

 x=>eval(x.join`-`)
//-⨥

JS subtrahiert und CGL addiert.

JS:

x=>eval(x.join`-`)

Eine anonyme Funktion, die jedes Element im Array mit subtrahiert Array#reduce.

//-⨥

Ein Kommentar.

CGL

 x=>eval(x.join`-`)

Was wie ein Leerzeichen in der ersten Zeile aussieht, ist eigentlich ein nicht unterbrechendes Leerzeichen, ein Kommentar in CGL. Die erste Zeile wird ignoriert.

//-⨥

Sie /tun nichts. Der -aktuelle Stapelzeiger wird dekrementiert, sodass er auf die Eingabe zeigt.addiert den aktuellen Stapel (Eingabe), schiebt diesen zum nächsten Stapel und erhöht den aktuellen Stapel. Es wird implizit ausgegeben.

programmer5000
quelle
1
Sie können die JS-Version verkürzen x=>eval(x.join`-`), indem Sie 5B
Luke
@Adam du hast recht. Fest.
programmer5000
4

JavaScript (ES6) / QBasic, 84 83 Bytes

'';f=x=>eval(x.join`+`)/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/

Eine andere Lösung mit dem Kommentar-Hack!

JavaScript berechnet die Summe. Es wird ein Array mit Zahlen als Eingabe verwendet. Ausgänge als Funktion return. Sie können die Funktion wie folgt aufrufen alert(f([10,20,30])).

QBasic berechnet die Differenz. Bittet wiederholt um Eingabe. Sobald Sie einen Wert eingeben, wird die Differenz aller von Ihnen eingegebenen Zahlen bis zum Zeitpunkt des Treffens ausgegeben Enterund erneut eine Eingabe angefordert. Macht so weiter bis zum Ende von allem.


Wie funktioniert es?

Markiert in QBasic (eine Sprache der strukturierten BASIC-Familie, für die keine Zeilennummern erforderlich sind) 'den Anfang eines Kommentars, der bis zum Ende der Zeile reicht. In JavaScript markiert es den Anfang einer Zeichenfolge. Die gesamte erste Zeile wird in QBasic als Kommentar markiert, in JavaScript wird die Zeile jedoch ausgeführt (und diese Zeile enthält den JavaScript-Teil, der die Zahlen hinzufügt, sowie ein/* am Ende einen Kommentar, um den Rest auszublenden des QBasic-Codes aus dem JavaScript-Interpreter.)

Der Code von der zweiten bis zur vorletzten Zeile enthält den QBasic-Code zur Berechnung der Differenz aller eingegebenen Zahlen (der Code ist sehr selbsterklärend).

Die letzte Zeile enthält '*/. 'bewirkt, dass der QBasic-Interpreter den folgenden Code als Kommentar interpretiert, während er in JavaScript keine Auswirkungen hat, da er Teil eines Kommentars ist (der am Ende der ersten Zeile gestartet wurde). Der folgende Code ( */) bewirkt, dass JavaScript den in der ersten Zeile gestarteten Kommentar beendet. Er wird jedoch in QBasic nicht ausgeführt, da QBasic denkt, dass er Teil eines Kommentars ist.


Testfälle

JavaScript (fügt hinzu):

'';f=x=>eval(x.join`+`);/*
INPUT a
FOR i=1 TO 2
i=0
INPUT n
a=a-n
PRINT a
NEXT i
'*/
console.log(f([12,5,7,2]));

QBasic (subtrahiert):

Gehen Sie zu dieser Website . Kopieren Sie den folgenden Code und fügen Sie ihn in den Texteditor ein:

1 '';f=x=>eval(x.join`+`);/*
2 INPUT a
3 FOR i=1 TO 2
4 i=0
5 INPUT n
6 a=a-n
7 PRINT a
8 NEXT i
9 '*/

Der Grund, warum Zeilennummern erforderlich sind, ist, dass die von mir erwähnte Website nur unstrukturierte BASIC-Sprachen unterstützt. Und diese Website ist der einzige anständige Online-BASIC-Interpreter, den ich finden konnte. Das Ausführen des Codes am Anfang des Posts (der Code ohne Zeilennummern) sollte jedoch in jedem guten QBasic-Interpreter, der strukturierte BASIC- und -Dateien unterstützt, problemlos funktionieren' als Kommentar-Starter gut funktionieren (nur wenige tun dies jedoch nicht, die meisten).


Anmerkungen

  • Dies ist meine erste Beitrag! Ich hoffe es ist gut!
  • Der QBasic-Teil des Codes ist nicht erforderlich, ENDda der Interpreter ihn niemals erreichen wird! (Es wird für immer in der Endlosschleife stecken bleiben und immer nach mehr Input fragen.)
Arjun
quelle
3

Brain-Flak / Brain-Flueue , 20 Bytes

({}<([({{}})]){}>{})

Probieren Sie es online! (Brain-Flak) (plus)

Probieren Sie es online! (Brain-Flueue) (minus)

Erläuterung

Der einzige Unterschied zwischen Brain-Flak und Brain-Flueue besteht darin, dass Brain-Flueue die beiden in Brain-Flak verwendeten Stapel (last in first out) durch zwei Warteschlangen (first in first out) ersetzt. Natürlich nutzt dieses Programm diesen Unterschied.

Kommentierter Code

(                  ) Push the sum of...
 {}                   the first input,
   <            >     zero,
                 {}   the remaining sum (see below)
    ([      ])       Push the of below line
      ({{}})         Pop all the input sans first, push the sum
              {}     Pop (in Brain-Flak, this discards the negative sum,
                            in Brain-Flueue, the positive)
0 '
quelle