Dado um número inteiro positivo n
, produza a menor base em b >= 2
que a representação da n
base b
sem zeros à esquerda não contém a 0
. Você pode assumir queb <= 256
para todas as entradas.
Casos de teste
1 -> 2 (1)
2 -> 3 (2)
3 -> 2 (11)
4 -> 3 (11)
5 -> 3 (12)
6 -> 4 (12)
7 -> 2 (111)
10 -> 4 (22)
17 -> 3 (122)
20 -> 6 (32)
50 -> 3 (1212)
100 -> 6 (244)
777 -> 6 (3333)
999 -> 4 (33213)
1000 -> 6 (4344)
1179360 -> 23 ([12, 9, 21, 4, 4])
232792560 -> 23 ([15, 12, 2, 20, 3, 13, 1])
2329089562800 -> 31 ([20, 3, 18, 2, 24, 9, 20, 22, 2])
69720375229712477164533808935312303556800 -> 101 ([37, 17, 10, 60, 39, 32, 21, 87, 80, 71, 82, 14, 68, 99, 95, 4, 53, 44, 10, 72, 5])
8337245403447921335829504375888192675135162254454825924977726845769444687965016467695833282339504042669808000 -> 256 ([128, 153, 236, 224, 97, 21, 177, 119, 159, 45, 133, 161, 113, 172, 138, 130, 229, 183, 58, 35, 99, 184, 186, 197, 207, 20, 183, 191, 181, 250, 130, 153, 230, 61, 136, 142, 35, 54, 199, 213, 170, 214, 139, 202, 140, 3])
9
não importam, porque não são0
.Respostas:
Pitão , 6 bytes
Verifique todos os casos de teste.
Como funciona
Embora o Pyth
f
funcione1, 2, 3, 4, ...
(começando em 1), o Pyth trata os números na base 1 (unário) como um monte de zeros, portanto a base 1 é ignorada.fonte
0 -> Falsy; > 0 -> Truthy
. É que intencional que0
é ao mesmo tempoTruthy
eFalsy
em que situação?>
placa na frente do segundo0
, o que significa que tudo mais que 0 é verdadeiro.C,
5250 bytesExperimente online!
C (gcc),
4745 bytesExperimente online!
Dois bytes salvos graças à sugestão de @ Nevay na resposta de @Kevin Cruijssen!
fonte
k%i
é uma verificação ternária aqui. Uma variante mais legível seriak=(k%i?k:n*++i);
ou mesmo mais claramente:if(k%i){k=k;}else{k=n*++i;}
.i,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;return i;}
ei,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Todo o crédito vai para o @Nevay, que postou esta sugestão na minha resposta do Java 8 portada .i, k;
ef(n)
existiam em versões antigas de C (K&R), mas apenas na época emreturn
que eram necessários colchetes em volta de seu argumento. Se você deseja usar o K&Ri,k;
, também precisa usarreturn(i);
. A descrição acima poderia ser gnuc, mas não C.Haskell ,
565248 bytesExperimente online!
Bastante básico, mas não consigo pensar em nenhuma maneira de reduzi-lo
EDIT: Obrigado a Laikoni por me salvar 4 bytes! Não sei por que nunca pensei nisso
!!0
. Eu provavelmente deveria ter tentado remover esses parênteses, mas tenho vagas lembranças de algum erro estranho quando você tenta usar||
e&&
juntos. Talvez eu esteja confundindo isso com os operadores de igualdade.EDIT 2: Obrigado @Lynn por raspar mais 4 bytes! Não sei como eu nunca soube
until
antes.fonte
!!0
é mais curto quehead
e acho que você pode colocar o parêntese#
.until :: (a → Bool) → (a → a) → a → a
salva quatro bytes:f n=until(#n)(+1)2
Wolfram Language (Mathematica) , 33 bytes
Experimente online!
fonte
Casca , 7 bytes
Experimente online!
Explicação
fonte
Python 2 , 57 bytes
Experimente online!
Este é um byte menor que uma função recursiva:
fonte
Geléia , 7 bytes
Experimente online!
fonte
05AB1E , 6 bytes
-4 bytes graças a Adnan
Experimente online!
fonte
[¹NÌDŠвPĀ#
1µNвPĀ
trabalha para 6 bytesLB0.å0k
é outro método inteiramente> _>.Casca , 9 bytes
Experimente online!
Explicação
fonte
Java 8,
615654 bytesExperimente aqui.
Explicação:
Tenho a sensação de que isso pode ser praticado usando uma abordagem aritmética.De fato, ele pode, com uma porta de resposta C do @Steadybox ' , e depois tachar em 2 bytes graças ao @Nevay .Resposta antiga ( 61 bytes ):
Experimente aqui.
Explanation:
fonte
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japonês , 8 bytes
Experimente online!
Explicação
Retorne o primeiro número (
X
) para passar a função, começando em2
Converta o número de entrada em uma matriz de
X
dígitos base .Verifique se todos os dígitos são verdadeiros.
fonte
10
?JavaScript (ES6),
434137 bytesCasos de teste
Mostrar snippet de código
fonte
Braquilog , 11 bytes
Experimente online!
Explicação
fonte
Python 2 , 57 bytes
Experimente online!
-1 graças a Felipe Nardi Batista .
-2 graças a Lynn (e agora esse é um truque da sua solução: D)
fonte
a,b=a+c,d
para #a+=c;b=d
while m>1
porwhile m
(e, em seguida, estamos unidos!)APL (Dyalog) ,
2019 bytesExperimente online!
Como sempre, agradeço a @ Adám por ajudar no bate-papo e fazer com que o código funcione no TIO. Além disso, economizando 1 byte.
Isto é tradfn ( trad itional f unctio n corpo). Para usá-lo, é necessário atribuir um nome (que está no campo de cabeçalho do TIO), coloque-o em
∇
s (um antes do nome e outro no campo de rodapé do TIO) e, em seguida, chame-o usando seu nome. Como ele usa um quad (⎕
) para receber a entrada do usuário, é chamado como emf \n input
vez do usualf input
Quão?
A função então retorna a base resultante.
fonte
n←⎕
será um número simples e você precisará1
como argumento inicial para o restante do código, basta contar o número de elementos emn
(que é 1), substituindo1⊣
por≢
. Experimente online!Próton , 40 bytes
Experimente online!
fonte
2..x
verifica as bases no intervalo[2, x)
, portanto, falha nos casos de teste1
e2
.R ,
7971666365 bytesExperimente online!
Essa resposta é baseada no rearranjo de Giuseppe em um único loop.
Economizou 8 bytes graças ao JDL e 6 bytes graças ao Giuseppe.
fonte
b
paraT
, que começa definida comoTRUE == 1
, eliminando a necessidade deb=1
. Da mesma forma, você pode inscrever-seF
emk
(F
éFALSE
)m%/%T
(divisão inteira) em vez de(m-m%%T)/T
MATL ,
1312 bytesExperimente online!
-1 byte graças a Luis Mendo. Este programa não processa casos de teste maiores que 2 ^ 53 (
flintmax
o número inteiro consecutivo máximo representável por um tipo de ponto flutuante), pois o tipo de dados padrão estádouble
em MATL. No entanto, ele deve ser capaz de encontrar qualquer base arbitrária sem zeros abaixo desse número.fonte
YA
usando dobros internamente, portanto, ele só pode manipular entradas até o número inteiro consecutivo máximo representável por um dobro (consulteflintmax
). Isso invalida a resposta? Em princípio, o algoritmo funciona para base arbitrária, trabalhei explicitamente em torno de outro comando que funcionaria apenas até a base 36.PHP, 59 + 1 bytes
usando builtins , base máxima 36:
sem builtins,
6360 + 1 bytes , qualquer base:Execute como pipe
-nR
ou experimente-os online .fonte
Na verdade ,
1211 bytesExperimente online!
Usa esse consenso . Agradecemos ao Mego pela ajuda de economia de bytes no bate-papo .
fonte
J, 26 bytes
Gostaria de saber se isso pode ser melhorado.
O verbo principal é uma frase diádica:
que recebe a entrada à esquerda e a constante 2 à direita. Essa frase verbal principal usa a construção Do.While de J, incrementando o argumento y certo, desde que 0 seja um elemento de
e.
argumento original na base y.Experimente online!
fonte
Lua ,
7776 bytesExperimente online!
fonte
Via Láctea , 38 bytes
uso:
./mw base.mwg -i 3
Explicação
Tenho certeza de que isso pode ser reduzido usando um loop while em vez de um loop for, mas não consegui fazê-lo funcionar.
fonte
Empilhados , 23 bytes
Experimente online!
Isso incrementa (
[1+]
) J a partir de dois (2
) enquanto a representação J base da entrada não possui zeros (all
euntil
).fonte
Perl 5 , 52 + 2 (
-pa
) = 54 bytesExperimente online!
fonte