Um número pandigital é um número inteiro que contém todos os dígitos de 0 a 9 pelo menos uma vez. 1234567890, 1902837465000000 e 9023289761326634265 são todos pandigitais. Para os fins deste desafio, números como 123456789 não são pandigitais, pois não contêm um 0, mesmo que 123456789 = 0123456789.
Um par diverso de números inteiros é um par de números inteiros tal que é pandigital. é chamado expoente diversificador .
Desafio: Dado um número inteiro , encontre o menor expoente diversificador correspondente . Este é um código de golfe , portanto o programa mais curto em bytes vence.
(Você pode assumir que existe um expoente, ou seja, seu programa não receberá entrada inválida, como uma potência de 10.)
Sua solução deve poder manipular no mínimo os casos de teste fornecidos, mas teoricamente deve manipular todas as entradas válidas.
Este é o A090493 no OEIS.
Casos de teste
2 -> 68
3 -> 39
4 -> 34
5 -> 19
6 -> 20
7 -> 18
8 -> 28
9 -> 24
11 -> 23
12 -> 22
13 -> 22
14 -> 21
15 -> 12
16 -> 17
17 -> 14
18 -> 21
19 -> 17
20 -> 51
21 -> 17
22 -> 18
23 -> 14
24 -> 19
25 -> 11
26 -> 18
27 -> 13
28 -> 11
29 -> 12
30 -> 39
31 -> 11
32 -> 14
33 -> 16
34 -> 14
35 -> 19
36 -> 10
1234567890 -> 1
1234567890 -> 1
.123456789
conta como pandigital? É igual a0123456789
, que é definitivamente pandigital.Respostas:
Brachylog (v2), 9 bytes
Experimente online!
Este é um envio de função. O link TIO contém um wrapper que transforma uma função em um programa completo.
Explicação
fonte
Python 2 , 44 bytes
A entrada deve ser longa, pois
`k`
se comporta de maneira diferente para comprimentos e entradas.Experimente online!
fonte
Perl 6 , 32 bytes
Experimente online!
Bastante auto-explicativo.
Explicação
fonte
JavaScript (Node.js) ,
51 4643 bytesRecebe a entrada como um literal BigInt. Retorna true em vez de 1 .
Experimente online!
fonte
Ruby , 41 bytes
Experimente online!
fonte
Haskell, 50 bytes
Experimente online!
Contagem de mesmos bytes:
fonte
J , 25 bytes
Experimente online!
Único verbo monádico. A entrada deve ser um número inteiro de precisão estendida (por exemplo
2x
).Como funciona
fonte
(]+10>#@=@":@^)^:_*
Tcl , 82 bytes
Experimente online!
fonte
llength
82 bytesRaquete ,
11096 bytes-14 bytes graças ao UltimateHawk!
Experimente online!
fonte
(define(f n[b 1])(if(= 10(length(remove-duplicates(string->list(~v(expt n b))))))b(f n(+ b 1))))
Python 3 ,
5247 bytesgraças a @BMO
Experimente online!
fonte
05AB1E (herdado) ,
109 bytesEconomizou 1 byte graças ao Sr. Xcoder
Experimente online!
Explicação
fonte
1µINmÙgTQ
- Experimente online!N
época. Obrigado!Carvão , 19 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
Empurre repetidamente a sequência vazia para a lista vazia até que não haja dígitos que a potência da entrada no comprimento da lista não contenha.
Imprima o comprimento da lista.
fonte
K (ngn / k) , 76 bytes
Experimente online!
{
}
função com argumentox
|(99#10)\x
representamos números como listas invertidas de 99 dígitos decimais - faça isso com o argumentoa::
atribuir à variável globala
(k não possui fechamentos. precisamosa
ser globais para que possamos usá-la em subfunções){
}{
}\
enquanto a primeira função retorna falsey, continue aplicando a segunda função (aka loop while), preservando resultados intermediáriosa*\:x
cada um dosa
dígitos multiplicado por cada um dosx
dígitos ("produto externo")99 99#a*\:x,0
adicione uma coluna extra de 0s e altere novamente para 99x99, isso muda a i-ésima linha por i itens para a direita, inserindo 0s à esquerda (isso funciona para os testes, para entradas maiores, 99x99 pode levar a estouros)+/
soma{+/2 99#,/|0 10\x,0}/
propagar carry:{
}/
continue aplicando até convergência0 10\x
divmod por 10 (um par de listas)|0 10\x
moddiv by 102 99#,/|0 10\x,0
moddiv por 10, com a parte "div" deslocada 1 dígito para a direita+/
soma{10>#?(+/|\0<|x)#x}
- verifique (não) pandigital:|x
marcha réx
0<
quais dígitos são diferentes de zero|\
máximos parciais+/
soma - isso conta o número de 0s iniciais emx
10>
eles são menos de 10?#
comprimento da sequência de poderes - este é o resultadofonte
PowerShell , 107 bytes
Experimente online!
Bem simples, apenas uma pena que precisamos usar em
[bigint]
qualquer lugar. Nós recebemos a entrada$a
e configuramos umfor
loop com o inicializador$b=1
.Cada iteração que incrementamos
$b
após verificar se$a ^ $b
(viapow
) enviadot
oCharArray
,sort
ed com o-u
sinalizador nique, e depois-join
editado em uma string é-n
ote
qual ao intervalo0..9
também-join
ed em uma string.Isso é um bocado. Por exemplo, este seria comparar
7 ^ 5 = 16807 --> "01678"
contra"0123456789"
, determinar que eles não são iguais, e continuar o ciclo.Uma vez que estamos fora do circuito, determinamos o que melhor se
$b
adequa às nossas informações e, portanto, deixamos isso no pipeline. A saída está implícita.fonte
Java, 108 bytes
Experimente online!
Explicação
Força bruta, fazendo um loop a ^ b até encontrar uma sequência com 10 (ou mais, mas isso é impossível, pois haverá apenas 0 a 9) caracteres únicos.
BigDecimal
é necessário, porqueMath.pow
não é preciso o suficiente (falha no caso11
) e também porque converter umDouble
para uma String por padrão mostra notação científica, que quebra esse método de encontrar um número pandigital.fonte
new java.math.BigDecimal(a).pow(++b).toString()
para(new java.math.BigDecimal(a).pow(++b)+"")
(e o ponto e vírgula à direita não precisa ser contado para as funções lambda). Tente onlinePitão,
108 bytesExperimente online aqui .
Economizou 2 bytes graças a FryAmTheEggman, código anterior
fq;l{j^QT;
fonte
T
operação de energia.Geléia ,
1211 bytesExperimente online!
Como funciona
fonte
Limpo ,
107101 bytesExperimente online!
Recebe entrada como
Integer
, retornaInt
fonte
Wolfram Language (Mathematica) , 48 bytes
Experimente online!
fonte
Anexo , 27 bytes
Experimente online!
Explicação
Alternativas
28 bytes:
${Generate{Unique@S[x^_]@9}}
29 bytes:
${Generate{Unique[S[x^_]]@9}}
30 bytes:
${Generate{#Unique[S[x^_]]>9}}
31 bytes:
Generate@${{#Unique[S[x^_]]>9}}
32 bytes:
${Generate[{#Unique[S[x^_]]>9}]}
33 bytes:
${If[#Unique[x^y]>9,y,x&$!-~y]}&0
34 bytes:
${If[#Unique[x^y]>9,y,$[x,y+1]]}&0
fonte