Étant donné un entier non négatif, renvoyez la différence absolue entre la somme de ses chiffres pairs et la somme de ses chiffres impairs.
Règles par défaut
Les échappatoires standard s'appliquent.
Vous pouvez prendre des entrées et fournir des sorties par n'importe quelle méthode d'entrée / sortie standard.
Vous pouvez prendre l'entrée comme une chaîne, comme un entier ou comme une liste de chiffres.
C'est le code-golf , donc le code le plus court en octets dans toutes les langues gagne!
Cas de test
Entrée ~> Sortie 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
M. Xcoder
la source
la source
Réponses:
Gelée , 6 octets
Essayez-le en ligne!
Comment ça fonctionne
la source
Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.
euh, je pense que vous avez gâché quelque chose ou quelque chose ...Scripts SHENZHEN I / O MCxxxx, 197 (126 + 71) octets
Puce 1 (MC6000):
Puce 2 (MC4000):
la source
<!-- -->
commentaire pour obtenir le code juste après une liste, au lieu du texte de remplissage. Ou indenter le code avec 4 autres espaces.)Python 2, 39 octets
Prend un entier comme liste. Essayez-le en ligne
-3 octets grâce à @ Mr.Xcoder
-1 octet grâce à @ovs
la source
[i,-i][i%2]
lieu dei%2and i or -i
pour 40 octets .(-1)**i*i
pour 39 octetsTI-Basic,
189 octetsExplication
Multiplie chaque chiffre de la liste par -1 à sa puissance, annulant chaque chiffre impair, avant de les additionner.
la source
C (gcc) ,
595857 octetsEssayez-le en ligne!
la source
R,
3029 octetsd = scan()
prend le numéro saisi d'un chiffre après l'autre.-1 octet grâce à @Giuseppe!
la source
abs(sum((d=scan())-2*d*d%%2))
C #, 57 octets
Prend l'entrée au fur
i
et à mesure et résume les nombres entiers en tournant les cotes à négatif.la source
namespace System.Linq{
et faire une fonction réelle. Voir l'autre réponse C # pour référenceMain
. La seule raison pour laquelle je pensais répondre avec ça. Oh bien.Mathematica, 20 octets
prend en entrée une liste de chiffres
merci spécial à @LLlAMnYP pour m'avoir informé des "nouvelles règles"
la source
*
.Japt , 8 octets
Testez-le en ligne!
Explication
la source
Neim , 7 octets
Explication:
la source
APL, 8 octets
Essayez-le en ligne!
Comment?
¯1*⊢
- -1 n pourn
dans⍵
[
4 5 9
→1 ¯1 ¯1
]⊢+.×
- multiplication vérifiée aveco
, puis somme[
+/ 4 5 9 × 1 ¯1 ¯1
→+/ 4 ¯5 ¯9
→¯10
]|
- valeur absoluela source
|⊢+.ׯ1*⊢
avec la nouvelle spécification d'entrée.JavaScript (ES6),
4338 octetsPrend l'entrée sous
forme de chaîne d'un tableau de chiffres.Cas de test
Afficher l'extrait de code
la source
EDIT: Une approche plus centrée sur le golf:
EXCEL,
423629 octetsEnregistré 6 octets grâce à Magic Octopus Urn Enregistré 7 octets en utilisant l'approche Dennis '-1 ^ (qui, je viens de l'apprendre, fonctionne sur des tableaux dans Excel)
Prend une liste d'entiers dans une colonne pour l'entrée. Peut probablement être joué plus loin, ou en utilisant la version chaîne, en prenant une chaîne en A1 pour entrée.
EXCEL, 256 octets
la source
You may take input as a String, as an Integer or as a list of digits.
votre réponse de 42 octets, vous devez utiliser la réponse.Julia 0,5 , 19 octets
Essayez-le en ligne!
la source
Husk , 7 octets
Essayez-le en ligne!
Prend une liste de chiffres en entrée.
Il manque toujours un "abs" intégré, mais un bon résultat tout de même :)
Explication
Ṡ!¡_
est une fonction qui prend un nombren
et applique ensuiten-1
la fonction_
(négation) àn
. Cela se traduitn
par impairn
ou-n
pairn
.ṁ
applique une fonction à chaque élément d'une liste et additionne les résultats.≠0
renvoie la différence absolue entre un nombre et 0.la source
05AB1E , 6 octets
Merci à Dennis pour le power-trick -1. Prend la saisie sous forme de liste de chiffres
Essayez-le en ligne!
Explication
la source
È2*<*O
comme un sale sale.PHP, 51 octets
ajoute un chiffre
$s
si impair, soustrait s'il est pair. Exécuter en tant que tuyau avec-nR
.ou
en utilisant le tour de
-1
force de Dennis .la source
Mathematica, 67 octets
la source
PHP , 54 octets
Essayez-le en ligne!
PHP , 57 octets
stocker les sommes paires et impaires dans un tableau
Essayez-le en ligne!
PHP , 57 octets
stocker les sommes paires et impaires dans deux variables
Essayez-le en ligne!
la source
${1}
et somme paire${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);
etfor(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);
est une manière intéressanteHaskell,
474239382625 bytes-1 thanks to nimi
-12 thanks to Bruce
-1 thanks to xnor
Try it online!
la source
s
:((*)=<<((-1)^))
.(\x->x*(-1)^x)
.Perl 6, 28 bytes
Try it online!
Takes a list of digits as input.
$_
is the input argument..map(* % 2 * 2 - 1)
maps each digit to either1
or-1
depending on whether the digit is odd or even, respectively.Z*
zips the original list of digits with the even/odd list using multiplication.la source
Braingolf, 18 bytes
Try it online!
Takes input as a list of digits
Explanation
la source
R,
7243 bytesFirst,
d = scan()
takes the number as input, one digit after the other (thanks to @Giuseppe comment !)Then,
b = d %% 2 <1
associates tob
aTRUE
orFALSE
value at each index depending on the digits' parity. Therefore,b
values areTRUE
for even numbers, and!b
areTRUE
for odd values.Finaly,
abs(sum(d[b]) - sum(d[!b]))
does the job.la source
<1
is one byte shorter than==0
, but note that you may take input as a list of digits as well.Bash
14113999 BytesTry it online!
la source
Java (OpenJDK 8), 55 bytes
Try it online!
Naive implementation.
la source
C#, 67 bytes
la source
05AB1E, 7 bytes
Try it online!
la source
x86-64 Machine Code, 30 bytes
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.
As 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).
The function conforms to the System V AMD64 calling convention, which is standard on Gnu/UNIX systems. In particular, the first parameter (pointer to the beginning of the list) is passed in
RDI
(as this is 64-bit code, it is a 64-bit pointer), and the second parameter (length of the list) is passed inESI
(this is only a 32-bit value, because that's more than enough digits to play with, and naturally it is assumed to be non-zero). The result is returned in theEAX
register.If it's any clearer, this would be the C prototype (and you can use this to call the function from C):
Ungolfed assembly mnemonics:
Here's a brief walk-through of the code:
EAX
andEDX
registers, which will be used to hold the sum totals of even and odd digits. TheEAX
register is cleared byXOR
ing it with itself (2 bytes), and then theEDX
register is cleared by sign-extending the EAX into it (CDQ
, 1 byte).Then, we go into the loop that iterates through all of the digits passed in the array. It retrieves a digit, tests to see if it is even or odd (by testing the least-significant bit, which will be 0 if the value is even or 1 if it is odd), and then jumps or falls through accordingly, adding that value to the appropriate accumulator. At the bottom of the loop, we decrement the digit counter (
ESI
) and continue looping as long as it is non-zero (i.e., as long as there are more digits left in the list to be retrieved).The only thing tricky here is the initial MOV instruction, which uses the most complex addressing mode possible on x86.* It takes
RDI
as the base register (the pointer to the beginning of the list), scalesRSI
(the length counter, which serves as the index) by 4 (the size of an integer, in bytes) and adds that to the base, and then subtracts 4 from the total (because the length counter is one-based and we need the offset to be zero-based). This gives the address of the digit in the array, which is then loaded into theECX
register.After the loop has finished, we do the subtraction of the odds from the evens (
EAX -= EDX
).Finally, we compute the absolute value using a common trick—the same one used by most C compilers for the
abs
function. I won't go into details about how this trick works here; see code comments for hints, or do a web search.__
* The code can be re-written to use simpler addressing modes, but it doesn't make it any shorter. I was able to come up with an alternative implementation that dereferenced
RDI
and incremented it by 8 each time through the loop, but because you still have to decrement the counter inESI
, this turned out to be the same 30 bytes. What had initially given me hope is thatadd eax, DWORD PTR [rdi]
is only 2 bytes, the same as adding two enregistered values. Here is that implementation, if only to save anyone attempting to outgolf me some effort :-)la source
TI-BASIC,
116 bytesTakes input as a list.
i²^Ans
saves two bytes over(-1)^Ans
because we don't need the parentheses.la source
J, 14 bytes
Try it online!
explanation
la source