Um número inteiro positivo pode ser representado em uma base inteira 1 <= b < inf
.
Quando convertido para essa base, possui algum número de dígitos distintos.
Qualquer número inteiro positivo na base 1
possui 1
um dígito distinto.
A maioria dos números inteiros positivos na base 2
tem 2
dígitos distintos, as exceções são aquelas da forma 2^n - 1
, que possuem apenas 1
.
Portanto, o primeiro número inteiro positivo que pode ser representado em uma base inteira com 1
dígito único é 1
e o primeiro que pode ser representado com 2
dígitos distintos é 2
.
Podemos dizer que 1
é o primeiro número inteiro com diversidade digital 1
e 2
é o primeiro número inteiro com diversidade digital 2
.
Desafio:
Dado um número inteiro positivo, n
retorne o primeiro número inteiro positivo (na base dez *) que possui uma diversidade digital de n
.
* se o seu idioma suportar apenas uma base específica (por exemplo, unária ou binária), você poderá produzir nessa base.
Seu algoritmo deve funcionar em teoria para qualquer entrada inteira positiva: pode falhar porque a precisão do número inteiro do seu idioma é muito pequena para a saída; mas pode não falhar porque a conversão básica é definida apenas até algum limite.
Casos de teste
input output
1 1
2 2
3 11
4 75
5 694
6 8345
7 123717
17 49030176097150555672
20 5271200265927977839335179
35 31553934355853606735562426636407089783813301667210139
63 3625251781415299613726919161860178255907794200133329465833974783321623703779312895623049180230543882191649073441
257 87678437238928144977867204156371666030574491195943247606217411725999221158137320290311206746021269051905957869964398955543865645836750532964676103309118517901711628268617642190891105089936701834562621017362909185346834491214407969530898724148629372941508591337423558645926764610261822387781382563338079572769909101879401794746607730261119588219922573912353523976018472514396317057486257150092160745928604277707892487794747938484196105308022626085969393774316283689089561353458798878282422725100360693093282006215082783023264045094700028196975508236300153490495688610733745982183150355962887110565055971546946484175232
Isso é código-golfe , a solução mais curta em bytes vence.
OEIS: A049363 - também o menor número pandigital na base n.
fonte
Python, 40 bytes
Teste em Ideone .
Como funciona
Um número com n dígitos distintos deve ser claramente expresso na base b ≥ n . Como nosso objetivo é minimizar o número, b também deve ser o menor possível, de modo que b = n é a escolha lógica.
Isso nos permite organizar os dígitos 0,…, n-1 para criar um número o menor possível, o que significa que os dígitos mais significativos devem ser mantidos o menor possível. Como o primeiro dígito não pode ser um 0 na representação canônica, o menor número é
(1) (0) (2) ... (n-2) (n-1) n = n n-1 + 2n n-3 +… + (N-2) n + (n-1) , que f calcula recursivamente.
fonte
Python 2,
5446 bytesEste é um muito muito muito ! solução rápida e iterativa.
Experimente online
Não há recursão, portanto, ele funciona para entradas grandes. Aqui está o resultado de
n = 17000
(leva 1-2 segundos):http://pastebin.com/UZjgvUSW
fonte
lambda n:n**~-n+sum(i*n**(n+~i)for i in range(2,n))
n=r=input();k=2\nwhile k<n:r=r*n+k;k+=1\nprint r
JavaScript (ES6), 29 bytes
fonte
J, 9 bytes
Baseado no método @Dennis ' .
Uso
Explicação
Existe uma solução alternativa baseada no uso do índice de permutação. Dada entrada n , criar a lista de dígitos
[0, 1, ..., n]
, e encontrar a permutação usando um índice de n ! E converter isso como uma lista de base- n dígitos. A solução correspondente em J para 12 bytesfonte
[1,0,2,3,...,n-1]
?Ruby,
373534 bytesA resposta para um dado
n
assume o formulário10234...(n-1)
na basen
. Usandon=10
como exemplo:Começar com
n
:10
Multiplique por
n
e adicione 2:102
Mutliply by
n
e adicione 3:1023
E assim por diante.
EDIT: Mais curto para usar o mapa, ao que parece.
EDIT 2: Obrigado pela dica, m-chrzan!
fonte
(2...n)
será um byte mais curto.CJam , 9 bytes
Experimente online!
Explicação
fonte
CJam (9 bytes)
Demonstração online
Dissecação
Obviamente, o menor número com diversidade digital
n
é encontrado pela conversão[1 0 2 3 ... n-1]
de base em basen
. No entanto, observe que a conversão básica incorporada não exige que os dígitos estejam no intervalo0 .. n-1
.Observe que, no caso especial
n = 1
, obtemos1 [0] 1 1 tb
o1 [0 1] b
que é1
.fonte
Haskell, 31 bytes
Converte a lista
[n,2,3,...,n-1]
em basen
usando o método de Horner via dobra. Uma versão menos golfe disso é fornecida na página OEIS .Obrigado a nimi por 3 bytes!
fonte
f
?) Para ser uma solução válida de golfe? (é apenasf
não é referenciado mais tarde no código)\n->fold1...
, e é apenas o nome dele. Você pode escrever uma função sem ponto em que a variável de entrada não é nomeada pela combinação de sub-funções, mas isso seria horrível aqui com três referências an
.foldl
e começar comn
:f n=foldl((+).(*n))n[2..n-1]
05AB1E , 9 bytes
Experimente online!
Explicação
n = 4
usado por exemplo.fonte
C ++ -
18155Estava prestes a publicar essa solução realmente legal usando
<numeric>
:e então eu percebi que é muito mais fácil:
fonte
Perl 6 ,
34 3130 bytesTraduzido do exemplo Haskell na página OEIS .
[&(…)]
vira…
em um operador infix no local[…]
mostrado acima transforma um infix op em uma dobra (esquerda ou direita, dependendo da associação do operador)Expandido:
Uso:
fonte
Brain-Flak ,
8476 bytesAgradecimentos ao Wheat Wizard por jogar 8 bytes
Experimente online!
Explicação
O programa envia os valores de
0
paran-1
para a pilha substitui o topo0
e1
por1
e0
. Em seguida, multiplica o topo da pilha porn
e adiciona o valor abaixo dela até que haja apenas um valor restante na pilha.Essencialmente, ele encontra os dígitos do menor número na base
n
que contémn
dígitos diferentes (poisn
> 1 é sempre do formato1023...(n-1)
). Em seguida, calcula o número dado os dígitos e a base.Código anotado
fonte
{}{}(()(<()>))([][()])
por(<{}{}>)([(())][])
para salvar quatro bytes #(<{}{}>)((()))
a salvar mais quatro bytesJulia, 26 bytes
Experimente online!
fonte
ShapeScript , 25 bytes
A entrada está em unário, a saída está em decimal. Experimente online!
fonte
PHP, 78 bytes
Versão Online
60 bytes trabalha apenas até n = 16 com a precisão nas caixas de teste
Para n = 144 INF
n = 145 NAN
fonte
k, 12 bytes
Baseado na resposta de Dennis .
fonte
JavaScript (ES6), 39 bytes
Não usa
=>
fonte