De acordo com a página da Wikipedia sobre o número 69 , é de notar que 69 2 = 4,761 e 69 3 = 328,509 juntos usam todos os dígitos decimais. O número 69 é de fato o número mais baixo que satisfaz essa propriedade.
Por uma razão semelhante, 32.043 é notável: 32.043 2 = 1.026.753.849 usa todos os dígitos decimais.
Se continuarmos falando sobre números interessantes dessa maneira, precisaremos de alguma notação.
Para a maioria dos números inteiros n , as potências n 2 ,…, n k usarão todos os dez dígitos decimais (sem contar os zeros à esquerda) pelo menos uma vez para valores suficientemente grandes de k . Se existir, vamos chamar o menor tal k o CUDDLE ( cumulativo Decimal Digits, menos Exponent ) do n .
Tarefa
Escreva um programa ou uma função que aceite um único número inteiro não negativo n como entrada e calcule e retorne seu CUDDLE .
Se n não tiver um CUDDLE , você poderá retornar qualquer coisa, exceto um número inteiro positivo, incluindo um erro ou uma string vazia, desde que seu código pare eventualmente.
Casos de teste
Coluna esquerda é entrada, coluna direita é saída.
0
1
2 15
3 10
4 10
5 11
6 12
7 7
8 5
9 6
10
11 7
12 6
13 6
14 7
15 9
16 5
17 7
18 4
19 5
20 15
26 8
60 12
69 3
128 3
150 9
200 15
32043 2
1234567890 3
Regras adicionais
Seu código deve funcionar para todas as entradas até 255 .
Observe que isso envolve lidar com números bastante grandes. 20 15 já é maior que 2 64 .
Se você imprimir o resultado, poderá ser seguido por um avanço de linha.
Aplicam-se as regras padrão de código de golfe .
26->8
porque é o menor exemplo em que incluirn^1
fornece a resposta errada (de6
), um erro que eu cometi no meu código.Respostas:
Pitão, 16 bytes
Experimente on-line: Demonstration or Test Suite
Como outras soluções, eu uso 15 como limite superior. Eu acredito que este também é o abraço máximo . Testei todos os números de até 10.000.000, e não há número com um CUDDLE maior que 15.
Números com um CUDDLE > = 10 já são bastante raros. Os únicos números com um CUDDLE de 15 são os números
2*10^k
. Não há números com um CUDDLE de 14 ou 13, o CUDDLE 12 aparece apenas para os números6*10^k
, o CUDDLE 11 apenas para5*10^k
.Então, acho que esse código funciona perfeitamente para qualquer número natural.
Imprime uma mensagem de erro, se não houver solução.
Explicação:
fonte
Python 2, 56
Uma solução recursiva. Conta os expoentes a
i
partir de2
e acumula os dígitos dos poderesn**i
na strings
. Quandos
possui todos os dez dígitos, retornaTrue
, que é igual a1
, e, de outro modo, se repete e adiciona1
. Acabou mais curto do que voltari
.A chamada da função em um número sem um CUDDLE termina com
Internal error: RangeError: Maximum call stack size exceeded
. Os números até a255
saída nunca precisam de mais de 15 iterações.Devido ao hábito irritante do Python 2 de anexar
L
números grandes a, na verdade inicializamos a sequência de dígitosL
e verificamos se o tamanho definido é pelo menos 11. O Python 3 salva 2 caracteres por não precisar disso, mas perde 3 caracteres ao usarstr
backticks. O Python 3.5 salva mais 2 caracteres com a descompactação de conjunto, salvando um caractere sobre o Python 2 no total:fonte
Ruby,
6765 caracteresFunciona quase instantaneamente para todos os casos de teste, mesmo aqueles> 255.
Erros para números sem CUDDLE.
Explicação:
fonte
CJam, 28 bytes
Experimente online
Isso depende do fato de que CUDDLE (se existir) nunca é maior que 15 para o intervalo de entrada, como observado pela primeira vez por @xnor.
Provavelmente existe uma maneira melhor de produzir a saída para o caso em que não há solução. Vou atualizar se pensar em alguma coisa.
Explicação:
fonte
Mathematica, 103 bytes
Parece que apenas potências de 10 eventualmente não teriam CUDDLEs, então elas são ignoradas. A função mantém uma lista de dígitos vistos e para quando não há mais zeros nela.
Resultado:
fonte
log_10(n)
seja irracional, dado qualquer número inteiro positivok
que exista, dem
modo que a representação decimal den^m
comece comk
. O que significa que ignorar os poderes de 10 (e 0) é bom :) #JavaScript (ES6) 188
Nada mal para um idioma limitado a números inteiros de 53 bits.
Teste a execução do snippet abaixo em um navegador que implementa o EcmaScripts 6, incluindo funções de seta e operador de propagação (AFAIK Firefox)
fonte
PowerShell, 94 bytes
Nada muito inteligente sobre isso, mas canalizar
sort -U[nique]
é uma maneira interessanteset()
de aproveitar a funcionalidade do Python para esse tipo de uso, sem adicionar explicitamente itens a uma hashtable.por exemplo
fonte
gawk 4, 73 + 5 para sinalizadores = 78 bytes
Para cada dígito
0
bis9
encontrado nas potências da entrada, ele define o bit que representa2^digit
ina
, até que os 10 primeiros dígitos sejam encontrados (a == 1023 == 2^10-1
) ou que ocorram mais de 15 iterações.Tem que ser chamado com um separador de campo vazio e o sinalizador -M para grandes números.
Brincando com isso, encontrei as seguintes seqüências para os diferentes CUDDLEs:
fonte