Tome una cadena como entrada y realice la suma / resta de todos los dígitos de la cadena y genere la suma de esas operaciones como resultado.
Reglas
- Los dígitos de la cadena se leen de izquierda a derecha.
- Si un dígito (n) es impar, realice la suma con el siguiente dígito (n + n1)
- Si un dígito (n) es par, realice la resta con el siguiente dígito (n - n1)
- Si ha alcanzado el último dígito en la cadena, realice la operación con el primer dígito en la cadena
- La salida será la suma de todos los valores resultantes.
- Si solo hay un dígito en la cadena, realice la operación consigo mismo (n + no nn)
- Si no hay dígitos en la cadena, la salida es 0
Ejemplo
Input: r5e6o9mm!/3708dvc
Process: (5+6) + (6-9) + (9+3) + (3+7) + (7+0) + (0-8) + (8-5)
Output: 32
Notas
- Se acepta la función o el programa completo
- La longitud máxima de entrada dependerá del límite de su idioma para una entrada de cadena
- No hay restricciones en la entrada de caracteres, pero solo los dígitos de ancho medio cuentan para la salida
- Pocos bytes ganan
""
,"0"
,"1"
Respuestas:
Jalea ,
17 1512 bytesPruébalo en línea!
Prueba los casos de prueba.
El programa mantiene solo los dígitos que siguen a un dígito impar y luego calcula el doble de la suma.
fuente
K (oK) ,
47434031 bytesSolución:
Pruébalo en línea!
Explicación:
Elimine todo de la cadena que no sea un número (mientras que también convierte), módulo 2, multiplique por 2, multiplique con x girado por 1, y sume.
Solución ingenua:
Elimine todo de la cadena que no sea un número (al mismo tiempo que convierte), tome una ventana deslizante de 2 elementos, descubra si son pares o impares, aplique sumar / restar según corresponda, luego resuma.
Pruébalo en línea!
Notas:
fuente
x:48!x@&x in,/$!10
->x^:(x-:48)^!10
':
como "ventana deslizante", interesante.Python 2 , 86 bytes
Pruébalo en línea!
fuente
Perl 6 , 41 bytes
Pruébalo en línea!
Utiliza la misma lógica que la respuesta Jelly de dylnan . Esto suma solo dígitos que siguen a un número impar y luego se multiplica por 2.
fuente
Powershell,
807876 bytes-2 bytes gracias Neil con solución Retina
-2 bytes gracias AdmBorkBork
Script de prueba:
Explicación
En primer lugar: debería agregar 2 * n si el dígito anterior es impar y 0 si un dígito anterior es par.
Extra, 99 bytes
Inspirado por @Neil. Los dígitos de coincidencia de expresiones regulares con 'el dígito anterior es impar' solamente.
Matches
Es una variable automática .fuente
|?{$_}
para-ne''
y otro moviéndose$d="$args"-split'\D*'-ne''
a parens como($d="$args"-split'\D*'-ne'')+$d[0]
.MATL ,
1817 bytesPruébalo en línea!
(-1 byte gracias a Luis Mendo / Giuseppe / ambos!)
Explicación:
La idea básica es que los números que siguen a los números pares se pueden ignorar, mientras que los que siguen a los números impares se duplican, y el resultado final es la suma de esos valores duplicados.
No pensé que
f
después de la verificación de paridado
sería necesario, pero por alguna razón, MATL no ve la matriz de 0 y 1 que resultan deo
una matriz lógica, sino que los toma como índices e índices numéricos en posiciones1
yend
.fuente
!U
lugar de48-
. La transposición no parece hacer ningún daño aquí.o
para ladouble
entrada es justamod(...,2)
, entonces la salida esdouble
. BuenNaN
truco de entrada! Si eso está destinado a resolver la producción extraña en STDOUT, Dennis tuvo una idea y probablemente lo arregle pronto!U
en lugar de48-
o
da una salida de matriz lógica entonces, o no? (Debo confesar que nunca he investigado realmente el sistema de tipos numéricos de MATLAB). Y sí, pensé queNaN
sería un buen centinela, ya que es poco probable que sea una entrada real en cualquier lugar, pero es bueno saber que no será necesario por mucho más tiempo. !K (ngn / k) , 33 bytes
Pruébalo en línea!
{
}
es una función con argumentox
!10
es la lista0 1 ... 9
$
convertir a cadenas,/
concatenarx^
significax
sin lo que está a la derechax^x^
significax
intersectado con lo que está a la derecha, es decir, mantener solo los dígitos dex
-48+
sustraer48
, que es el código ASCII de"0"
x:
asignar ax
2!
mod 22*
multiplicado por 21_x,*x
es una gota de:x
seguido de la primera dex
; es decirx
girado a la izquierda un paso+/
sumafuente
Japt (v2.0a0),
2519 bytes-6 bytes gracias a Shaggy .
Pruébalo aquí .
¡Funciona sin dígitos esta vez! La entrada es una lista de caracteres.
fuente
x
embargo, no estoy contento con la matriz en la función. Hazme ping en el chat si tienes alguna pregunta.05AB1E ,
129 bytesAhorra 1 byte sobre el método ingenuo utilizando el truco de paridad de dylnan.
Guardado 3 bytes gracias al Sr. Xcoder
Pruébalo en línea!
Explicación
fuente
þÀIþ€ÉÏSO·
,þÀDÁ€ÉÏSO·
,þÀ¹þ€ÉÏSO·
oþÀsþ€ÉÏSO·
pasar todos los casos de prueba para -2 bytes?þDÁ€ÉÏSO·
por -3 :)Retina , 37 bytes
Pruébalo en línea! Explicación:
Agregue un duplicado del primer dígito.
Haga coincidir cualquier cosa cuyo primer dígito anterior sea impar.
Convierta todas las coincidencias en unarias y duplíquelas. (Los no dígitos se tratan como cero).
Toma la suma. Si no hubo coincidencias, esto produce cero según sea necesario.
Lo mejor que pude hacer en Retina 0.8.2 fue 44 bytes:
Pruébalo en línea! Explicación:
Eliminar no dígitos.
Agregue una copia del primer dígito.
Eliminar dígitos que no siguen un dígito impar.
Convierte a unario.
Doblarlos.
Toma la suma.
fuente
Jalea , 15 bytes
Pruébalo en línea!
fuente
1ịṭƊ
JavaScript (ES6), 56 bytes
Toma entrada como una matriz de caracteres.
Pruébalo en línea!
Comentado
fuente
JavaScript (Node.js) ,
85848382 bytes-1 bytes gracias a ovs
Pruébalo en línea!
Toma la entrada de cadena, encuentra los dígitos como una matriz de caracteres o devuelve una matriz vacía si no se encuentra ninguna, y luego usa la coerción de tipo para garantizar que los valores se sumen / resten correctamente. La búsqueda directa aumenta el índice y utiliza una comprobación nula de brevedad, y luego la parte final verifica si el número es impar o par para luego forzar la suma o la resta (+ y - es -, etc.)
fuente
n-0
puede ser+n
R , 58 bytes
Pruébalo en línea!
fuente
array
salida.xxx
lo que son 68 bytes usando el cambio en la indexacióna
para generary
.strtoi
lugar deas.double
, pero sí, eso debería estar bien.Perl 5 , 48 bytes
Pruébalo en línea!
Me gusta cuán críptico se ve esto, pero es un bucle bastante sencillo alrededor de todos los números en la cadena.
fuente
Julia 0.6 ,
7769 bytesPruébalo en línea!
fuente
C Sharp 180 bytes
Esto no es muy buen golf, jajaja.
Sin golf:
fuente
Stax , 14 bytes
Ejecutar y depurarlo
Desempaquetado, sin golf y comentado, se ve así.
Ejecute este
fuente
JavaScript (ES6), 52 bytes
Espera entrada como una matriz de caracteres. Advertencia: debido al uso de desplazamiento de bits, la salida tiene un límite superior de
2^31-1
Pruébalo en línea!
Explicación
Esencialmente duplica la suma de los dígitos después de valores impares.
fuente