Um número de Munchausen na base , também conhecido como invariante perfeito de dígito a dígito ou PDDI é um tipo peculiar de número inteiro positivo em que a soma dos dígitos da base elevados para si mesmos é igual ao número em si. Eles são nomeados para o fictício Barão Munchausen , que aparentemente se ergueu através de seu próprio rabo de cavalo para se salvar do afogamento. Um conceito relacionado são os números narcisistas .
Por exemplo, é trivialmente um número de Munchausen em todas as bases porque . Além disso, todo número inteiro positivo é um número Munchausen de base 1 por definição.
Mais interessante, é um número Munchausen de base 10 porque e, de fato, é o único outro número Munchausen de base 10 .
Uma lista parcial dos números de Munchausen em todas as bases até 35 pode ser encontrada no OEIS como sequência A166623 .
Dado um número inteiro positivo , determine se é um número de Munchausen em qualquer base .
Regras
- As regras de E / S padrão se aplicam, portanto:
- Programa completo ou funções são aceitáveis.
- A entrada pode ser de STDIN, como argumento de função, e a saída pode ser para STDOUT, como um valor de retorno de função, etc.
- Aplicam-se brechas padrão.
- A saída deve ser um dos dois resultados distintos e consistentes. O mesmo
TRUE
vale para a verdade eFALSE
para a falsidade, mas você pode reverter isso ou retornarNone
para1
a verdade e a falsidade ou qualquer outra coisa. Especifique os resultados selecionados em sua resposta. - Sua resposta deve funcionar pelo menos teoricamente para qualquer número inteiro positivo.
- Os números de Munchausen usam a convenção , então é um número de Munchausen de base 2 como . Seu código deve seguir esta convenção.
- As explicações são fortemente encorajadas, embora as submissões provavelmente usem o método de busca por força bruta.
- O uso de idiomas esotéricos ganha pontos extras, já que Munchausen era aparentemente uma pessoa estranha.
Casos de teste
Truthy
1 (all bases)
2 (base 2)
5 (base 3)
28 (base 9 and base 25)
29 (base 4)
55 (base 4)
3435 (base 10)
923362 (base 9)
260 (base 128)
257 (base 64 and base 253)
Falsy
3
4
591912
3163
17
Isso é código-golfe , então a resposta mais curta em cada idioma (em bytes) vence!
fonte
determine if it's a Munchausen number in any base b≥2.
Respostas:
05AB1E , 7 bytes
Experimente online!
Os casos de teste maiores expirarão no TIO.
Explicação
fonte
1^1
é 1 .Gelatina , 8 bytes
Rende
0
para Munchausen e1
outros.Experimente online!
Ou veja os primeiros quinhentos inteiros positivos divididos como
[[Munchausen], [non-Munchausen]]
.Quão?
Alternativa para
1
Munchausen e0
caso contrário:fonte
1
era Munchausen.J ,
332827 bytesExperimente online!
e.
é a entrada um elemento de ...1#.
a soma de cada linha de ...i.@>: ... ]
0..input e a própria entrada, passados como argumentos à esquerda e à direita para ...^~@(#.inv)"0
converta o arg direito (entrada) em cada base no arg esquerdo e aumente cada resultado elementwise para si mesmo^~@
.::1
finalmente, isso é necessário porque você não pode converter exclusivamente na base 1, por isso erros. nesse caso, simplesmente retornamos 1, que não corresponde a nenhum número, exceto 1, que é o que queremosfonte
R ,
7269 bytes-1 byte graças a digEmAll
Experimente online!
Saídas
TRUE
para números de Munchausen eFALSE
outros.x%/%b^(0:log(x,b))%%b)
convertex
em baseb
e o loop for faz o resto do trabalho (reatribuiçãoF
, que éFALSE
por padrão).Precisamos permitir que a base
b
percorra todo o caminho, emx+1
vez dex
lidar com o casox=1
.fonte
+
com|
e remover!
, então eu percebi que eu escrevi 71, mas meu código era na verdade 70: DJaponês , 13 bytes
Guardou um byte graças a @Shaggy
Tente
fonte
ÃÃøU
por<newline>øN
.N
, eu nunca usei antes!Perl 6 , 51 bytes
Experimente online!
Explicação:
fonte
Ruby , 50 bytes
O TIO atingiu o tempo limite de 591912. De alguma forma, limita o Perl em 1 byte ... (no momento da escrita)
Experimente online!
fonte
JavaScript (ES7), 60 bytes
Retorna um valor booleano.
Experimente online!
Comentado
fonte
APL (dzaima / APL) ,
2313 bytesExperimente online!
Graças a Adám, ngn e dzaima, conseguimos extrair 10 bytes dessa resposta usando dzaima / APL.
Função de prefixo tácito. Os números de Munchausen retornam 1, mais 0.
Quão
fonte
Wolfram Language (Mathematica) , 65 bytes
Experimente online!
-4 bytes de @attinat
fonte
Carvão , 17 bytes
Experimente online! Link é a versão detalhada do código. Minha tentativa de 16 bytes não funcionou, mas isso pode ser um bug no Charcoal, portanto, observe este espaço. Saídas
-
, a menos que o número seja um número Munchausen. Explicação:fonte
C # (compilador interativo do Visual C #) , 99 bytes
Experimente online!
fonte
Haskell, 61 bytes
Retorna
True
para Munchausen eFalse
outros.Experimente online!
fonte
C (gcc)
-lm
,7975 bytesExperimente online!
Retorna
0
para números de Munchausen e1
outros.também 75 bytes
Experimente online!
fonte
Python 2 ,
8381 bytesExperimente online!
Retorna
1
para verdade e0
para falsey. Por causa da recursão, praticamente não é possível lidar com isso591912
, mas funciona em abstrato.fonte
Perl 6 ,
6665 bytesExperimente online!
fonte
JavaScript (ES6), 88 bytes
fonte
Ícone , 109 bytes
Experimente online!
Tempos limite para
591912
. O ícone trata0^0
como um estouro e é por isso que preciso de uma verificação adicional para zero.fonte
Stax , 15 bytes
Execute e depure
Leva muito tempo para os casos de teste maiores.
Explicação:
fonte