Dado un número entero positivo n
, genera la base más pequeña b >= 2
donde la representación de n
in base b
sin ceros a la izquierda no contiene a 0
. Puede suponer eso b <= 256
para todas las entradas.
Casos de prueba
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
no importan, porque no lo son0
.Respuestas:
Pyth , 6 bytes
Verifique todos los casos de prueba.
Cómo funciona
Aunque Pyth's
f
opera en1, 2, 3, 4, ...
(comenzando en 1), Pyth trata los números en la base 1 (unario) como un montón de ceros, por lo que la base 1 se ignora.fuente
0 -> Falsy; > 0 -> Truthy
. ¿Es eso intencional que0
es ambosTruthy
yFalsy
en esa situación?>
signo delante del segundo0
, lo que significa que todo lo que sea superior a 0 es verdadero.C,
5250 bytesPruébalo en línea!
C (gcc),
4745 bytesPruébalo en línea!
¡Dos bytes guardados gracias a la sugerencia de @ Nevay sobre la respuesta de @Kevin Cruijssen!
fuente
k%i
es un cheque ternario aquí. Una variante más legible seríak=(k%i?k:n*++i);
o incluso con mayor claridad: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;}
yi,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Todo el crédito va a @Nevay que publicó esta sugerencia en mi respuesta Java 8 portada .i, k;
yf(n)
existían en versiones antiguas de C (K&R), sino solo en la era cuando sereturn
requerían corchetes alrededor de su argumento. Si desea usar K&R coni,k;
, también debe usarloreturn(i);
. Lo anterior podría ser gnuc, pero no C.Haskell ,
565248 bytesPruébalo en línea!
Bastante básico pero no se me ocurren buenas maneras de acortarlo
EDITAR: ¡Gracias a Laikoni por salvarme 4 bytes! No sé por qué nunca pensé
!!0
. Probablemente debería haber intentado eliminar esos paréntesis, pero tengo vagos recuerdos de algún error extraño cuando intentas usarlos||
y&&
juntos. Tal vez lo estoy confundiendo con los operadores de igualdad.EDIT 2: ¡Gracias @Lynn por afeitar otros 4 bytes! No sé cómo nunca supe
until
antes.fuente
!!0
es más corto quehead
y creo que puedes colocar el paréntesis#
.until :: (a → Bool) → (a → a) → a → a
ahorra cuatro bytes:f n=until(#n)(+1)2
Wolfram Language (Mathematica) , 33 bytes
Pruébalo en línea!
fuente
Casco , 7 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 57 bytes
Pruébalo en línea!
Este es un byte más corto que una función recursiva:
fuente
Jalea , 7 bytes
Pruébalo en línea!
fuente
05AB1E , 6 bytes
-4 bytes gracias a Adnan
Pruébalo en línea!
fuente
[¹NÌDŠвPĀ#
1µNвPĀ
funciona para 6 bytesLB0.å0k
es otro método completamente> _>.Casco , 9 bytes
Pruébalo en línea!
Explicación
fuente
Java 8,
615654 bytesPruébalo aquí
Explicación:
Tengo la sensación de que esto se puede jugar utilizando un enfoque aritmético.De hecho, puede, con un puerto de respuesta @Steadybox 'C , y luego jugar golf por 2 bytes gracias a @Nevay .Respuesta anterior ( 61 bytes ):
Pruébalo aquí
Explicación:
fuente
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japt , 8 bytes
Pruébalo en línea!
Explicación
Devuelve el primer número (
X
) para pasar la función, comenzando en2
Convierta el número de entrada en una matriz de
X
dígitos base .Verifique si todos los dígitos son verdaderos.
fuente
10
?JavaScript (ES6),
434137 bytesCasos de prueba
Mostrar fragmento de código
fuente
Brachylog , 11 bytes
Pruébalo en línea!
Explicación
fuente
Python 2 , 57 bytes
Pruébalo en línea!
-1 gracias a Felipe Nardi Batista .
-2 gracias a Lynn (y ahora este es un engaño de su solución: D)
fuente
a,b=a+c,d
aa+=c;b=d
while m>1
porwhile m
(¡y luego estamos atados!)APL (Dyalog) ,
2019 bytesPruébalo en línea!
Como de costumbre, gracias a @ Adám por ayudar en el chat y hacer que el código funcione en TIO. Además, ahorrando 1 byte.
Esto se tradfn ( trad itional f unctio n ) cuerpo. Para usarlo, debe asignarle un nombre (que está en el campo de encabezado de TIO), encerrarlo en
∇
s (uno antes del nombre y otro en el campo de pie de página de TIO), y luego llamarlo usando su nombre. Como usa un quad (⎕
) para tomar la entrada del usuario, se llama como enf \n input
lugar de lo habitualf input
¿Cómo?
La función luego devuelve la base resultante.
fuente
n←⎕
que será un número simple y que necesita1
como argumento inicial para el resto del código, puede contar el número de elementos enn
(que es 1), reemplazando1⊣
con≢
. Pruébalo en línea!Protón , 40 bytes
Pruébalo en línea!
fuente
2..x
comprueba las bases en el intervalo[2, x)
, por lo tanto, falla para los casos de prueba1
y2
.R ,
7971666365 bytesPruébalo en línea!
Esta respuesta se basa en la reorganización de Giuseppe en un solo bucle.
Guardado 8 bytes gracias a JDL, y 6 bytes gracias a Giuseppe.
fuente
b
paraT
, que comienza definido comoTRUE == 1
, eliminando la necesidad deb=1
. Del mismo modo se puede subF
parak
(F
esFALSE
)m%/%T
(división entera) en lugar de(m-m%%T)/T
MATL ,
1312 bytesPruébalo en línea!
-1 byte gracias a Luis Mendo. Este programa no maneja casos de prueba mayores de 2 ^ 53 (
flintmax
el número entero consecutivo máximo representable por un tipo de punto flotante), ya que el tipo de datos predeterminado estádouble
en MATL. Sin embargo, debería poder encontrar cualquier base cero arbitraria debajo de ese número.fuente
YA
usan dobles internamente, por lo que solo puede manejar entradas hasta el máximo entero consecutivo representable por un doble (verflintmax
). ¿Esto invalida la respuesta? En principio, el algoritmo funciona para una base arbitraria, he trabajado explícitamente en torno a otro comando que solo funcionaría hasta la base 36.PHP, 59 + 1 bytes
usando incorporados , base máxima 36:
sin construcciones,
6360 + 1 bytes , cualquier base:Ejecutar como tubería
-nR
o probarlos en línea .fuente
En realidad ,
1211 bytesPruébalo en línea!
Utiliza este consenso . Gracias a Mego por la ayuda para guardar bytes en el chat .
fuente
J 26 bytes
Me encantaría saber si esto se puede mejorar.
El verbo principal es una frase diádica:
que recibe la entrada a la izquierda y la constante 2 a la derecha. Esa frase verbal principal usa J's Do..Mientras construye, incrementando el argumento y derecho siempre que 0 sea un elemento del
e.
argumento original en base y.Pruébalo en línea!
fuente
Lua ,
7776 bytesPruébalo en línea!
fuente
Vía Láctea , 38 bytes
uso:
./mw base.mwg -i 3
Explicación
Estoy seguro de que esto se puede acortar usando un ciclo while en lugar de un ciclo for, pero no pude hacerlo funcionar.
fuente
Apilado , 23 bytes
Pruébalo en línea!
Esto incrementa (
[1+]
) J a partir de dos (2
) mientras que la representación J base de la entrada no tiene ceros (all
yuntil
).fuente
Perl 5 , 52 + 2 (
-pa
) = 54 bytesPruébalo en línea!
fuente