Bei einer nicht negativen Ganzzahl wird die absolute Differenz zwischen der Summe der geraden und der Summe der ungeraden Stellen zurückgegeben.
Standardregeln
Es gelten Standard-Regelungslücken.
Sie können mit jeder Standard-Eingabe- / Ausgabemethode Eingaben vornehmen und Ausgaben bereitstellen.
Sie können Eingaben als Zeichenfolge, als Ganzzahl oder als Ziffernliste annehmen.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes in jeder Sprache !
Testfälle
Eingabe ~> Ausgabe 0 ~> 0 (| 0-0 | = 0) 1 ~> 1 (| 1-0 | = 1) 12 ~> 1 (| 2-1 | = 1) 333 ~> 9 (| 0- (3 + 3 + 3) | = 9) 459 ~> 10 (| 4- (5 + 9) | = 10) 2469 ~> 3 (| (2 + 4 + 6) -9 | = 3) 1234 ~> 2 (| (2 + 4) - (1 + 3) | = 2)
code-golf
number
number-theory
Mr. Xcoder
quelle
quelle
Antworten:
Gelee , 6 Bytes
Probieren Sie es online!
Wie es funktioniert
quelle
Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.
ähm, ich denke, Sie haben etwas durcheinander gebracht oder so ...SHENZHEN I / O MCxxxx-Skripte, 197 (126 + 71) Bytes
Chip 1 (MC6000):
Chip 2 (MC4000):
quelle
<!-- -->
Kommentar hinterlassen, um den Code direkt nach einer Liste zu erhalten, anstatt den Text auszufüllen. Oder den Code mit 4 weiteren Leerzeichen einrücken.)Python 2, 39 Bytes
Übernimmt eine Ganzzahl als Liste. Probieren Sie es online aus
-3 Byte dank @ Mr.Xcoder
-1 Byte dank @ovs
quelle
[i,-i][i%2]
statti%2and i or -i
für 40 Bytes .(-1)**i*i
für 39 BytesTI-Basic,
189 BytesErläuterung
Multipliziert jede Ziffer in der Liste mit -1 und negiert jede ungerade Ziffer, bevor sie summiert wird.
quelle
C (gcc) ,
595857 BytesProbieren Sie es online!
quelle
R
3029 Bytesd = scan()
Nimmt die eingegebene Nummer um eine Stelle nach der anderen.-1 Byte danke an @Giuseppe!
quelle
abs(sum((d=scan())-2*d*d%%2))
C #, 57 Bytes
Nimmt die Eingabe als
i
und summiert die ganzen Zahlen, indem die Quote auf negativ gesetzt wird.quelle
namespace System.Linq{
und eine tatsächliche Funktion ausführen . Siehe die andere C #Main
. Only reason I thought I'd answer with it. Oh wells.Mathematica, 20 bytes
takes as input a list of digits
special thanx to @LLlAMnYP for letting me know about the "new rules"
quelle
*
.Japt , 8 Bytes
Testen Sie es online!
Erläuterung
quelle
Neim , 7 Bytes
Erläuterung:
quelle
APL, 8 bytes
Try it online!
How?
¯1*⊢
- -1n forn
in⍵
[
4 5 9
→1 ¯1 ¯1
]⊢+.×
- verctorized multiplication witho
, then sum[
+/ 4 5 9 × 1 ¯1 ¯1
→+/ 4 ¯5 ¯9
→¯10
]|
- absolute valuequelle
|⊢+.ׯ1*⊢
with the new input spec.JavaScript (ES6),
4338 bytesTakes input as
a stringan array of digits.Test cases
Show code snippet
quelle
EDIT: A more golf-centered approach:
EXCEL,
423629 bytesSaved 6 bytes thanks to Magic Octopus Urn Saved 7 bytes by using Dennis' -1^ approach (which, I just learned, works on arrays in excel)
Takes a list of integers in A column for input. Probably can be golfed further, or by using the string version, taking a string in A1 for input.
EXCEL, 256 bytes
quelle
You may take input as a String, as an Integer or as a list of digits.
your 42 byte answer should be the answer you use.Julia 0,5 , 19 Bytes
Probieren Sie es online!
quelle
Schale , 7 Bytes
Probieren Sie es online!
Takes a list of digits as input.
Fehlt noch ein "abs" eingebaut, aber trotzdem ein gutes Ergebnis :)
Erläuterung
Ṡ!¡_
ist eine Funktion, die eine Zahl annimmtn
und dannn-1
mal die Funktion_
(Negation) auf anwendetn
. Dies führtn
zu ungeradenn
oder geraden-n
Wertenn
.ṁ
Wendet eine Funktion auf jedes Element einer Liste an und summiert die Ergebnisse.≠0
Gibt die absolute Differenz zwischen einer Zahl und 0 zurück.quelle
05AB1E , 6 Bytes
Danke an Dennis für den -1 Power Trick. Übernimmt die Eingabe als Ziffernliste
Probieren Sie es online!
Erläuterung
quelle
È2*<*O
wie ein dreckiger Gelegenheitsarbeiter.PHP, 51 Bytes
addiert Ziffer zu
$s
ungerade, subtrahiert wenn gerade. Als Rohr mit laufen lassen-nR
.oder
mit Dennis '
-1
Power-Trick.quelle
Mathematica, 67 bytes
quelle
PHP, 54 bytes
Try it online!
PHP, 57 bytes
store the even and odd sums in an array
Try it online!
PHP, 57 bytes
store the even and odd sums in two variables
Try it online!
quelle
${1}
und gerade Summe in${0}
:while(~$n=$argn[$i++])${$n&1}+=$n;echo abs(${1}-${0});
for(;~$n=$argn[$i++];$s+=$n)$u+=($n&1)*$n;echo abs($s-2*$u);
andfor(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);
is an interesting wayHaskell,
474239382625 bytes-1 thanks to nimi
-12 thanks to Bruce
-1 thanks to xnor
Try it online!
quelle
s
:((*)=<<((-1)^))
.(\x->x*(-1)^x)
.Perl 6 , 28 Bytes
Probieren Sie es online!
Nimmt eine Ziffernliste als Eingabe.
$_
ist das Eingabeargument..map(* % 2 * 2 - 1)
ordnet jede Ziffer entweder1
oder-1
abhängig davon zu, ob die Ziffer gerade oder ungerade ist.Z*
Zippt die ursprüngliche Ziffernliste mit der geraden / ungeraden Liste durch Multiplikation.quelle
Braingolf , 18 Bytes
Probieren Sie es online!
Übernimmt die Eingabe als Ziffernliste
Erläuterung
quelle
R
7243 Bytesd = scan()
Nimmt zuerst die Zahl als Eingabe, eine Ziffer nach der anderen (dank @ Giuseppe-Kommentar!).
b = d %% 2 <1
Assoziiert dann zub
einemTRUE
oderFALSE
-Wert an jedem Index, abhängig von der Parität der Ziffern. Daherb
Werte sindTRUE
für gerade Zahlen, und!b
sindTRUE
für ungerade Werte.Endlich,
abs(sum(d[b]) - sum(d[!b]))
macht den Job.quelle
<1
ist ein Byte kürzer als==0
, aber beachten Sie, dass Sie die Eingabe auch als Ziffernliste annehmen können.Bash
14113999 BytesTry it online!
quelle
Java (OpenJDK 8), 55 bytes
Try it online!
Naive implementation.
quelle
C#, 67 bytes
quelle
05AB1E, 7 bytes
Probieren Sie es online!
quelle
x86-64-Maschinencode, 30 Byte
The above code defines a function that accepts a list/array of integer digits and returns the absolute difference between the sum of its even digits and the sum of its odd digits.
Wie in C, assembly language doesn't implement lists or arrays as first-class types, but rather represents them as a combination of a pointer and a length. Therefore, I have arranged for this function to accept two parameters: the first is a pointer to the beginning of the list of digits, and the second is an integer specifying the total length of the list (total number of digits, one-indexed).
Die Funktion entspricht der System V AMD64-Aufrufkonvention , die auf Gnu / UNIX-Systemen Standard ist. Insbesondere wird der erste Parameter (Zeiger auf den Anfang der Liste) übergeben
RDI
(da dies ein 64-Bit-Code ist, handelt es sich um einen 64-Bit-Zeiger), und der zweite Parameter (Länge der Liste) wird übergebenESI
( Dies ist nur ein 32-Bit-Wert, da das mehr als genug Stellen sind, um damit zu spielen, und natürlich wird davon ausgegangen, dass es nicht Null ist. Das Ergebnis wird imEAX
Register zurückgegeben.Wenn es klarer ist, wäre dies der C-Prototyp (und Sie können dies verwenden, um die Funktion von C aus aufzurufen):
Ungolfed Assembler-Mnemonik:
Hier ist eine kurze Einführung in den Code:
EAX
und -Register auf Null, dieEDX
verwendet werden, um die Gesamtsummen von geraden und ungeraden Ziffern zu halten. DasEAX
Register wird gelöscht, indemXOR
es mit sich selbst (2 Bytes)EDX
gelöscht wird , und dann wird das Register gelöscht, indem der EAX mit Vorzeichen darin erweitert wird (CDQ
1 Byte) .Dann gehen wir in die Schleife, die alle im Array übergebenen Ziffern durchläuft. Es ruft eine Ziffer ab, prüft, ob sie gerade oder ungerade ist (indem es das niedrigstwertige Bit prüft, das 0 ist, wenn der Wert gerade ist, oder 1, wenn es ungerade ist), und springt oder fällt dann entsprechend durch und fügt dies hinzu Wert auf den entsprechenden Akku. Am Ende der Schleife dekrementieren wir den Ziffernzähler (
ESI
) und setzen die Schleife fort, solange er nicht Null ist (dh solange noch weitere Ziffern in der abzurufenden Liste vorhanden sind).Das einzige, was hier schwierig ist, ist der anfängliche MOV-Befehl, der den komplexesten Adressierungsmodus verwendet, der auf x86 möglich ist. * Es nimmt
RDI
als Basisregister (den Zeiger zum Anfang der Liste), skaliertRSI
(den Längenzähler, der als Index dient) um 4 (die Größe einer Ganzzahl in Bytes) und fügt das zur Basis hinzu, und dann subtrahiert man 4 von der Summe (weil der Längenzähler einsbasiert ist und der Offset nullbasiert sein muss). Dies gibt die Adresse der Ziffer im Array an, die dann in dasECX
Register geladen wird .Nachdem die Schleife beendet ist, subtrahieren wir die Gewinnchancen von den Evens (
EAX -= EDX
).Schließlich berechnen wir den Absolutwert mit einem allgemeinen Trick, der auch von den meisten C-Compilern für die
abs
Funktion verwendet wird. Ich werde hier nicht näher darauf eingehen, wie dieser Trick funktioniert. In den Codekommentaren finden Sie Hinweise, oder führen Sie eine Websuche durch.__
* Der Code kann umgeschrieben werden, um einfachere Adressierungsmodi zu verwenden, verkürzt ihn jedoch nicht. Ich konnte mir eine alternative Implementierung einfallen lassen, die die Referenz
RDI
jedes Mal um 8 dereferenzierte und inkrementierte, aber da Sie den Zähler immer noch dekrementieren müssenESI
, stellte sich heraus, dass dies die gleichen 30 Bytes waren. Was mir anfangs Hoffnung gegeben hatte, ist, dassadd eax, DWORD PTR [rdi]
es nur 2 Bytes sind, was dem Hinzufügen von zwei registrierten Werten entspricht. Hier ist diese Implementierung, wenn auch nur, um jedem zu ersparen, der versucht, mich zu übertreiben :-)quelle
TI-BASIC,
116 BytesÜbernimmt die Eingabe als Liste.
i²^Ans
spart zwei Bytes,(-1)^Ans
weil wir keine Klammern brauchen.quelle
J, 14 Bytes
Probieren Sie es online!
Erläuterung
quelle