Originalmente a raiz digital multiplicativa
Desafio
Basicamente, faça o que o título diz
Método
Dado um número inteiro positivo 1 <= N <= 100000000 através de um de nossos métodos de entrada padrão , multiplique cada dígito juntos, ignorando os zeros.
Ex: Pegue um número, diga 361218402
:
3
*6
=18
18
*1
=18
18
*2
=36
36
*1
=36
36
*8
=288
288
*4
=1152
1152
*1
(ignore zeros ou transforme-os em um) =1152
1152
*2
=2304
A saída para 361218402
é2304
Casos de teste
1 => 1 todos os outros dígitos> 0 => em si 10 => 1 20 => 2 100 => 1 999 => 729 21333 => 54 17801 => 56 4969279 => 244944 100000000 => 1
As brechas padrão não são permitidas, e este é um código de golfe , portanto, a menor contagem de bytes vence!
Parabéns a Jo King, que recebeu a recompensa com sua resposta cerebral de 70 bytes!
code-golf
math
arithmetic
integer
FantaC
fonte
fonte
100000000000
, sugiro o caso de teste99999999999 => 31381059609
, pois ele não se encaixa em um número inteiro de 32 bits padrão. Talvez o melhor seria diminuir a saída máxima para um máximo de 32 bits (2147483647).Respostas:
Pyt , 3 bytes
Explicação:
Experimente online!
fonte
Haskell , 27 bytes
Experimente online!
Ungolfed with UniHaskell and
-XUnicodeSyntax
Explicação
Vou começar com o que eu tinha inicialmente:
Esta é uma expressão sem pontos que é avaliada como uma função que utiliza uma string (ou uma lista de caracteres) s (
"301"
) como argumento. Ele mapeiamax 1.read.pure
sobre s , essencialmente tomando cada personagem i , injetá-lo em uma lista (o que torna uma string) (["3", "0", "1"]
), em seguida, lê-lo, que avalia a string ([3, 0, 1]
) e, finalmente, tomar a maior de i e 1 ([3, 1, 1]
). Depois, pega aproduct
lista resultante de números inteiros (3
).Eu então joguei um byte com:
Isso funciona porque
product
é equivalente afoldr (*) 1
. Em vez de mapear e dobrar, combinei os dois dobrando com o(*).max 1.read.pure
qual pega cada dígito diferente de zero e o multiplica com o acumulador.fonte
Python 2 , 34 bytes
Experimente online!
fonte
Gelatina , 4 bytes
Experimente online! ou veja a suíte de testes
Como funciona
fonte
R , 40 bytes
Experimente online!
Como a entrada é garantida para não ter mais de 12 dígitos, isso deve funcionar bem. Calcula os dígitos como
x
(incluindo zeros à esquerda), substitui zeros por1
e calcula o produto.fonte
C (gcc) , 39 bytes
Precisa ser compilado sem otimizações (que é a configuração padrão para o gcc, de qualquer maneira).
Experimente online!
fonte
k=k;
colocark
o registro de retorno acidentalmente é simplesmente um mal. Você provavelmente deve adicionar que isso só funciona sem otimizações, possivelmente apenas em x86 / x64. +1.O0
) é o padrão para o gcc; portanto, não há necessidade de usar explicitamente esse sinalizador. Eu acho que vou adicionar uma menção ao post de qualquer maneira.Flacidez Cerebral ,
747270 bytes-2 obrigado a Nitrodon por sugerir obter a negação do número para que você só precise incrementar em vez de diminuir mais tarde
Experimente online!
Pode haver algumas maneiras de jogar isso ainda mais, como
refazer a multiplicação para evitar a necessidade de inicializar o total com 1.(-2 bytes)Como funciona:
fonte
05AB1E , 4 bytes
Experimente online!
Explicação
fonte
J ,
171413 bytes-4 bytes cortesia de @GalenIvanov
Experimente online!
Provavelmente pode ser melhorado alguns. Edit: e assim foi.
Explicação
&.
-under é um advérbio bacana que aplica o verbo à direita, depois o verbo à esquerda e o inverso do verbo à direita. Também converter de volta para números é tecnicamente usando eval (".
-do).fonte
+0=]
para*#]
Experimente-o on-line[:*/0-.~,.&.":
por 14 bytes. Experimente on-line(+-.@*)
: acho que estou inclinado a acrescentar. Eu tentei usar'0'-.~
assumindo a entrada de uma string, sem saber por que não passou pela minha cabeça fazê-lo nos dígitos divididos. Obrigado!1>.
faz o trabalho de0-.~
por um byte a menos.[:*/1>.,.&.":
Tente!Python 2 , 43 bytes
Experimente online!
fonte
JavaScript (ES6), 28 bytes
Projetado para números inteiros de 32 bits.
Casos de teste
Mostrar snippet de código
fonte
Bash + coreutils + sed + bc,
272423 bytesExperimente online!
fonte
Brachylog , 5 bytes
Experimente online!
Explicação
Isso funciona porque
⊇
unifica de subconjuntos grandes a subconjuntos pequenos; portanto, o primeiro que resultará em um produto diferente de zero é quando todos os zeros são excluídos e nada mais.fonte
Perl 5 , 23 + 1 (
-p
) = 24 bytesExperimente online!
fonte
Java 8,
55545351 bytesPorto da resposta do @Dennis 'Python 2 .
-1 byte graças a @RiaD .
Experimente aqui.
5554 bytes versão:Experimente online.
fonte
long f(long n){return n>0?(n%10>0?n%10:1)*f(n/10):1;}
Julia 0.6, 26 bytes
Exemplo de uso:
Experimente online!
fonte
JavaScript (Node.js) , 30 bytes
Experimente online!
Pega string como uma entrada, trata-a como matriz e, por meio da destruição da matriz, separa o primeiro elemento
[a,...b]
.+a||1
retorna o dígito correspondente aoa
caractere. Eu acho que o resto é auto-explicativo ..fonte
Oitava , 21 bytes
Agradecemos a @Luis Mendo por salvar um byte e a @alephalpha por salvar outro byte!
Recebe a entrada como uma sequência de dígitos.
Experimente online!
30 bytes:
Recebe a entrada como um número.
Experimente online!
fonte
@(n)prod((k=n-48)+~k)
Brain-Flak , 88 bytes
Versão legível:
Experimente online!
fonte
Clojure , 56 bytes
Bastante básico. Transforma o número em uma sequência e subtrai 48 de cada caractere para transformá-los novamente em números. Em seguida, substitui cada 0 por 1 e se aplica
*
à lista resultante de números (que é reduzida ao*
longo da lista). Pode aceitar um número ou um número estrito.Experimente online!
fonte
MATL , 5 bytes
A entrada é tomada como uma sequência
Experimente no MATL Online! Ou verifique os casos de teste no Try It Online!
Explicação
fonte
Befunge,
2322 bytesExperimente online!
Explicação
fonte
JavaScript (Node.js) ,
3633 bytesO método Javascript simples (ES6) que recebe a entrada como sequência numérica, a espalha em uma matriz e a reduz por multiplicação ou retorna o valor se o resultado for 0.
3 bytes salvos graças a Shaggy
Experimente online!
fonte
Ruby,
4240353227 bytesNão assume novas linhas na entrada Maior influência
-2 bytes graças a @GolfWolf
-5 bytes graças a @Conor O'Brien
fonte
tr
: 32 bytes*
para participar?p eval (gets.chars-[?0])*?*
?Java (OpenJDK 8) , 45 bytes
Experimente online!
fonte
C # , 97 bytes (primeiro código de golfe)
Não tenho certeza se eu tinha que envolvê-lo em um método ou não, apenas incluí-lo para ser seguro.
Pega um Int, converte-o em uma string e retorna o múltiplo de cada um dos caracteres, ignorando os 0's. Teve que menos 48 devido ao programa usando o valor ascii, pois o lê como um caractere.
fonte
var z=y.ToString();
colocá-lo diretamente noforeach
, assimforeach(var q in y.ToString())
:; e para obter o resultado, você pode salvar mais bytes substituindo{if(q!=48){r*=q-48;}}
porr*=(q>48?q:1);
, raspando os colchetes eif
.C # (compilador interativo do Visual C #) , 46 bytes
Experimente online!
fonte
Haskell , 36 bytes
Contagem de mesmos bytes:
Experimente online!
fonte
Gelatina ,
6, 5 bytesExperimente online!
fonte
DTịDP
salvaria um byte, mas existem maneiras melhores de eliminar os zeros ou substituí-los por outra coisa.> <> , 19 bytes
Experimente online!
fonte