Dado un número entero no negativo, devuelve la diferencia absoluta entre la suma de sus dígitos pares y la suma de sus dígitos impares.
Reglas predeterminadas
Se aplican lagunas estándar.
Puede tomar entrada y proporcionar salida por cualquier método estándar de Entrada / Salida.
Puede tomar la entrada como una cadena, como un entero o como una lista de dígitos.
Este es el código de golf , por lo que gana el código más corto en bytes en cada idioma .
Casos de prueba
Entrada ~> Salida 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
Sr. Xcoder
fuente
fuente
Respuestas:
Jalea , 6 bytes
Pruébalo en línea!
Cómo funciona
fuente
Raise -1 to A's digits, yielding 1 for even digits and 0 for odd ones.
umm, creo que te equivocaste un poco o algo ...SHENZHEN I / O MCxxxx scripts, 197 (126 + 71) bytes
Chip 1 (MC6000):
Chip 2 (MC4000):
fuente
<!-- -->
comentario para obtener el código justo después de una lista, en lugar del texto de relleno. O sangrar el código con 4 espacios más.)Python 2, 39 bytes
Toma un entero como lista. Pruébalo en línea
-3 bytes gracias a @ Mr.Xcoder
-1 byte gracias a @ovs
fuente
[i,-i][i%2]
lugar dei%2and i or -i
por 40 bytes .(-1)**i*i
para 39 bytesTI-Basic,
189 bytesExplicación
Multiplica cada dígito de la lista por -1 a su potencia, negando cada dígito impar, antes de sumarlos.
fuente
C (gcc) ,
595857 bytesPruébalo en línea!
fuente
R,
3029 bytesd = scan()
toma el número de entrada un dígito después del otro.-1 byte gracias a @Giuseppe!
fuente
abs(sum((d=scan())-2*d*d%%2))
C #, 57 bytes
Toma datos como
i
y suma los enteros al convertir las probabilidades en negativas.fuente
namespace System.Linq{
y hacer una función real. Vea la otra respuesta de C # para referenciaMain
. La única razón por la que pensé que respondería con eso. Oh bienMathematica, 20 bytes
toma como entrada una lista de dígitos
Un agradecimiento especial a @LLlAMnYP por informarme sobre las "nuevas reglas"
fuente
*
.Japt , 8 bytes
¡Pruébalo en línea!
Explicación
fuente
Neim , 7 bytes
Explicación:
fuente
APL, 8 bytes
Pruébalo en línea!
¿Cómo?
¯1*⊢
- -1 n paran
en⍵
[
4 5 9
→1 ¯1 ¯1
]⊢+.×
- multiplicación verctorizada cono
, luego suma[
+/ 4 5 9 × 1 ¯1 ¯1
→+/ 4 ¯5 ¯9
→¯10
]|
- valor absolutofuente
|⊢+.ׯ1*⊢
con la nueva especificación de entrada.JavaScript (ES6),
4338 bytesToma la entrada como
una cadena deuna matriz de dígitos.Casos de prueba
Mostrar fragmento de código
fuente
EDITAR: Un enfoque más centrado en el golf:
EXCEL,
423629 bytesGuardado 6 bytes gracias a Magic Octopus Urn Guardado 7 bytes usando el enfoque Dennis '-1 ^ (que, acabo de enterar, funciona en matrices en Excel)
Toma una lista de enteros en la columna A para entrada. Probablemente se pueda jugar más, o usando la versión de cadena, tomando una cadena en A1 como entrada.
EXCEL, 256 bytes
fuente
You may take input as a String, as an Integer or as a list of digits.
su respuesta de 42 bytes, debe ser la respuesta que utiliza.Julia 0.5 , 19 bytes
Pruébalo en línea!
fuente
Casco , 7 bytes
Pruébalo en línea!
Toma una lista de dígitos como entrada.
Todavía falta un "abs" incorporado, pero un buen resultado de todos modos :)
Explicación
Ṡ!¡_
es una función que toma un númeron
y luego aplica eln-1
tiempo a la función_
(negación)n
. Este resultado enn
por extrañon
o-n
incluso paran
.ṁ
aplica una función a cada elemento de una lista y suma los resultados.≠0
devuelve la diferencia absoluta entre un número y 0.fuente
05AB1E , 6 bytes
Gracias a Dennis por el truco de poder -1. Toma entrada como una lista de dígitos
Pruébalo en línea!
Explicación
fuente
È2*<*O
un asqueroso casual.PHP, 51 bytes
agrega dígitos a
$s
si es impar, resta si es par. Corre como tubería con-nR
.o
usando el
-1
truco de poder de Dennis .fuente
Mathematica, 67 bytes
fuente
PHP , 54 bytes
Pruébalo en línea!
PHP , 57 bytes
almacenar las sumas pares e impares en una matriz
Pruébalo en línea!
PHP , 57 bytes
almacenar las sumas pares e impares en dos variables
Pruébalo en línea!
fuente
${1}
y suma par${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);
yfor(;~$n=$argn[$i++];)$u+=(($n&1)-.5)*2*$n;echo abs($u);
es una forma interesanteHaskell ,
474239382625 bytes-1 gracias a nimi
-12 gracias a Bruce
-1 gracias a xnor
Pruébalo en línea!
fuente
s
:((*)=<<((-1)^))
.(\x->x*(-1)^x)
.Perl 6 , 28 bytes
Pruébalo en línea!
Toma una lista de dígitos como entrada.
$_
es el argumento de entrada..map(* % 2 * 2 - 1)
asigna cada dígito a cualquiera1
o-1
dependiendo de si el dígito es par o impar, respectivamente.Z*
comprime la lista original de dígitos con la lista par / impar usando la multiplicación.fuente
Braingolf , 18 bytes
Pruébalo en línea!
Toma entrada como una lista de dígitos
Explicación
fuente
R,
7243 bytesEn primer lugar,
d = scan()
toma el número como entrada, un dígito después de los otros (gracias a @Giuseppe comentario!)Entonces,
b = d %% 2 <1
asociados ab
unaTRUE
oFALSE
valor en cada índice en función de la paridad de los dígitos. Por lo tanto,b
los valores sonTRUE
para los números pares, y!b
sonTRUE
para valores impares.Finalmente,
abs(sum(d[b]) - sum(d[!b]))
hace el trabajo.fuente
<1
es un byte más corto que==0
, pero tenga en cuenta que también puede tomar la entrada como una lista de dígitos.Bash
14113999 BytesPruébalo en línea!
fuente
Java (OpenJDK 8) , 55 bytes
Pruébalo en línea!
Implementación ingenua.
fuente
C #, 67 bytes
fuente
05AB1E , 7 bytes
Pruébalo en línea!
fuente
Código de máquina x86-64, 30 bytes
El código anterior define una función que acepta una lista / matriz de dígitos enteros y devuelve la diferencia absoluta entre la suma de sus dígitos pares y la suma de sus dígitos impares.
Como en C , el lenguaje ensamblador no implementa listas o matrices como tipos de primera clase, sino que las representa como una combinación de un puntero y una longitud. Por lo tanto, he dispuesto que esta función acepte dos parámetros: el primero es un puntero al comienzo de la lista de dígitos, y el segundo es un número entero que especifica la longitud total de la lista (número total de dígitos, un índice) .
La función se ajusta a la convención de llamadas System V AMD64 , que es estándar en los sistemas Gnu / UNIX. En particular, se pasa el primer parámetro (puntero al comienzo de la lista)
RDI
(como se trata de un código de 64 bits, es un puntero de 64 bits) y se pasa el segundo parámetro (longitud de la lista)ESI
( este es solo un valor de 32 bits, porque son dígitos más que suficientes para jugar, y naturalmente se supone que no es cero). El resultado se devuelve en elEAX
registro.Si es más claro, este sería el prototipo C (y puede usar esto para llamar a la función desde C):
Mnemónicos de ensamblaje sin golf:
Aquí hay un breve recorrido por el código:
EAX
yEDX
, que se usarán para contener los totales de suma de dígitos pares e impares. ElEAX
registro se borraXOR
haciéndolo consigo mismo (2 bytes), y luegoEDX
se borra al extender el signo EAX (CDQ
1 byte).Luego, entramos en el ciclo que itera a través de todos los dígitos pasados en la matriz. Recupera un dígito, prueba para ver si es par o impar (probando el bit menos significativo, que será 0 si el valor es par o 1 si es impar), y luego salta o cae en consecuencia, agregando que valor para el acumulador apropiado. En la parte inferior del bucle, disminuimos el contador de dígitos (
ESI
) y continuamos haciendo el bucle siempre que no sea cero (es decir, mientras haya más dígitos restantes en la lista para recuperar).Lo único complicado aquí es la instrucción MOV inicial, que utiliza el modo de direccionamiento más complejo posible en x86. * Toma
RDI
como registro base (el puntero al comienzo de la lista), escalaRSI
(el contador de longitud, que sirve como índice) en 4 (el tamaño de un entero, en bytes) y lo agrega a la base, y luego resta 4 del total (porque el contador de longitud está basado en uno y necesitamos que el desplazamiento esté basado en cero). Esto proporciona la dirección del dígito en la matriz, que luego se carga en elECX
registro.Después de que el ciclo ha terminado, hacemos la resta de las probabilidades de los pares (
EAX -= EDX
).Finalmente, calculamos el valor absoluto utilizando un truco común, el mismo utilizado por la mayoría de los compiladores de C para la
abs
función. No entraré en detalles sobre cómo funciona este truco aquí; vea los comentarios del código para obtener sugerencias o realice una búsqueda en la web.__
* El código puede reescribirse para usar modos de direccionamiento más simples, pero no lo hace más corto. Pude idear una implementación alternativa que la desreferenciaba
RDI
y la incrementaba en 8 cada vez a través del ciclo, pero debido a que aún tiene que disminuir el contadorESI
, resultaron ser los mismos 30 bytes. Lo que inicialmente me había dado esperanza es queadd eax, DWORD PTR [rdi]
solo son 2 bytes, lo mismo que agregar dos valores registrados. Aquí está esa implementación, aunque solo sea para salvar a cualquiera que intente superar mi esfuerzo :-)fuente
TI-BASIC,
116 bytesToma la entrada como una lista.
i²^Ans
ahorra dos bytes(-1)^Ans
porque no necesitamos los paréntesis.fuente
J, 14 bytes
Pruébalo en línea!
explicación
fuente