Originalmente la raíz digital multiplicativa
Reto
Básicamente haz lo que dice el título
Método
Dado un entero positivo 1 <= N <= 100000000 a través de uno de nuestros métodos de entrada estándar , multiplique cada dígito, ignorando los ceros.
Ej .: toma un número y di 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(ignore los ceros o conviértalos en unos) =1152
1152
*2
=2304
La salida para 361218402
es2304
Casos de prueba
1 => 1 cada dos dígitos> 0 => sí mismo 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
Las lagunas estándar no están permitidas, y este es el código de golf , por lo que gana el conteo de bytes más corto.
¡Enhorabuena a Jo King que obtuvo la recompensa con su respuesta de 70 bytes!
code-golf
math
arithmetic
integer
FantaC
fuente
fuente
100000000000
, sugiero el caso de prueba99999999999 => 31381059609
, ya que no cabe en un entero predeterminado de 32 bits. Quizás sea mejor reducir la salida máxima a un máximo de 32 bits (2147483647).Respuestas:
Pyt , 3 bytes
Explicación:
Pruébalo en línea!
fuente
Haskell , 27 bytes
Pruébalo en línea!
Ungolfed con UniHaskell y
-XUnicodeSyntax
Explicación
Comenzaré con lo que tenía inicialmente:
Esta es una expresión sin puntos que se evalúa como una función que toma una cadena (o una lista de caracteres) s (
"301"
) como argumento. Se asignamax 1.read.pure
sobre s , esencialmente tomando cada carácter i , inyectándolo en una lista (lo que lo convierte en una cadena) (["3", "0", "1"]
), luego lo lee, lo que evalúa la cadena ([3, 0, 1]
) y finalmente toma el mayor de i y 1 ([3, 1, 1]
). Luego toma laproduct
lista resultante de enteros (3
).Luego lo jugué por un byte con:
Esto funciona porque
product
es equivalente afoldr (*) 1
. En lugar de mapear y doblar, combiné los dos doblando con lo(*).max 1.read.pure
que toma cada dígito distinto de cero y lo multiplica con el acumulador.fuente
Python 2 , 34 bytes
Pruébalo en línea!
fuente
Jalea , 4 bytes
Pruébalo en línea! o ver el conjunto de pruebas
Cómo funciona
fuente
R , 40 bytes
Pruébalo en línea!
Como se garantiza que la entrada no tiene más de 12 dígitos, esto debería funcionar bien. Calcula los dígitos como
x
(incluidos los ceros iniciales), luego reemplaza los ceros con1
y calcula el producto.fuente
C (gcc) , 39 bytes
Necesita compilarse sin optimizaciones (que es la configuración predeterminada para gcc, de todos modos).
Pruébalo en línea!
fuente
k=k;
ponerk
en el registro de retorno accidentalmente es simplemente malvado. Usted debe probablemente añadir que esto sólo funciona sin optimizaciones, posiblemente, sólo en x86 / x64. +1.O0
) es el valor predeterminado para gcc, por lo que no hay necesidad de usar explícitamente ese indicador. Creo que de todos modos agregaré una mención a la publicación.Brain-Flak ,
747270 bytes-2 gracias a Nitrodon por sugerir obtener la negación del número para que solo tenga que aumentar en lugar de disminuir más adelante
Pruébalo en línea!
Puede haber algunas formas de jugar más al golf, como
rehacer la multiplicación para evitar tener que inicializar el total con 1.(-2 bytes)Cómo funciona:
fuente
05AB1E , 4 bytes
Pruébalo en línea!
Explicación
fuente
J ,
171413 bytes-4 bytes cortesía de @GalenIvanov
Pruébalo en línea!
Probablemente se pueda mejorar algo. Editar: y así fue.
Explicación
&.
-under es un ingenioso adverbio que aplica el verbo a la derecha, luego el verbo a la izquierda, luego el inverso del verbo a la derecha. También convertir de nuevo a números es técnicamente usando eval (".
-do).fuente
+0=]
a*#]
Probar en línea[:*/0-.~,.&.":
por 14 bytes. Pruébelo en línea(+-.@*)
, supongo que me inclino a agregar. Intenté usar'0'-.~
asumiendo una entrada de una cadena, no estoy seguro de por qué no se me ocurrió hacerlo en los dígitos divididos. ¡Gracias!1>.
hace el trabajo de0-.~
un byte menos.[:*/1>.,.&.":
¡Intentalo!Python 2 , 43 bytes
Pruébalo en línea!
fuente
JavaScript (ES6), 28 bytes
Diseñado para enteros de 32 bits.
Casos de prueba
Mostrar fragmento de código
fuente
Bash + coreutils + sed + bc,
272423 bytesPruébalo en línea!
fuente
Brachylog , 5 bytes
Pruébalo en línea!
Explicación
Esto funciona porque
⊇
unifica desde subconjuntos grandes a subconjuntos pequeños, por lo que el primero que dará como resultado un producto distinto de cero es cuando se excluyen todos los ceros y nada más.fuente
Perl 5 , 23 + 1 (
-p
) = 24 bytesPruébalo en línea!
fuente
Java 8,
55545351 bytesPuerto de @Dennis 'Python 2 respuesta .
-1 byte gracias a @RiaD .
Pruébalo aquí
55Versión de 54 bytes:Pruébalo en línea.
fuente
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Julia 0.6, 26 bytes
Ejemplo de uso:
Pruébalo en línea!
fuente
JavaScript (Node.js) , 30 bytes
Pruébalo en línea!
Toma una cadena como entrada, la trata como una matriz y, mediante la desestructuración de la matriz, se separa el primer elemento
[a,...b]
.+a||1
Devuelve el dígito correspondiente ala
carácter. Supongo que el descanso se explica por sí mismo.fuente
Octava , 21 bytes
¡Gracias a @Luis Mendo por guardar un byte y gracias a @alephalpha por guardar otro byte!
Toma la entrada como una cadena de dígitos.
Pruébalo en línea!
30 bytes:
Toma la entrada como un número.
Pruébalo en línea!
fuente
@(n)prod((k=n-48)+~k)
Brain-Flak , 88 bytes
Versión legible:
Pruébalo en línea!
fuente
Clojure , 56 bytes
Bastante básico Convierte el número en una cadena, luego resta 48 de cada carácter para volverlos a convertir en números. Luego reemplaza cada 0 con un 1, y aplica
*
a la lista de números resultante (que se reduce*
sobre la lista). Puede aceptar un número o un número en cadena.Pruébalo en línea!
fuente
MATL , 5 bytes
La entrada se toma como una cadena
¡Pruébalo en MATL Online! O verifique los casos de prueba en ¡Pruébelo en línea!
Explicación
fuente
Befunge,
2322 bytesPruébalo en línea!
Explicación
fuente
JavaScript (Node.js) ,
3633 bytesMétodo Javascript simple (ES6) que toma la entrada como una cadena de números, la distribuye en una matriz y luego la reduce a través de la multiplicación o devuelve el valor si el resultado es 0.
3 bytes guardados gracias a Shaggy
Pruébalo en línea!
fuente
Ruby,
4240353227 bytesAsume que no hay líneas nuevas en la entrada Mayor influencia
-2 bytes gracias a @GolfWolf
-5 bytes gracias a @Conor O'Brien
fuente
tr
: 32 bytes*
unirte?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 bytes
Pruébalo en línea!
fuente
C # , 97 Bytes (primer código de golf)
No estoy seguro si tuve que envolverlo en un método o no, así que solo lo incluí para que sea seguro.
Toma un Int, lo convierte en una cadena y devuelve el múltiplo de cada uno de los caracteres ignorando los 0. Tuvo que menos 48 debido a que el programa usa el valor ascii ya que lo lee como un char.
fuente
var z=y.ToString();
y colocarlo directamente en elforeach
, así:foreach(var q in y.ToString())
; y para obtener el resultado, puede guardar más bytes reemplazándolos{if(q!=48){r*=q-48;}}
conr*=(q>48?q:1);
, quitando los corchetes y elif
.C # (compilador interactivo de Visual C #) , 46 bytes
Pruébalo en línea!
fuente
Haskell , 36 bytes
Mismo recuento de bytes:
Pruébalo en línea!
fuente
Gelatina ,
6, 5 bytesPruébalo en línea!
fuente
DTịDP
ahorraría un byte, pero hay mejores formas de eliminar los ceros o reemplazarlos por otra cosa.> <> , 19 bytes
Pruébalo en línea!
fuente