Étant donné un entier positif n
, affichez la plus petite base b >= 2
où la représentation de n
in base b
sans zéros non significatifs ne contient pas a 0
. Vous pouvez supposer que b <= 256
pour toutes les entrées.
Cas de test
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
- dessus n'ont pas d'importance, car elles ne le sont pas0
.Réponses:
Pyth , 6 octets
Vérifiez tous les cas de test.
Comment ça marche
Bien que Pyth
f
fonctionne sur1, 2, 3, 4, ...
(à partir de 1), Pyth traite les nombres en base 1 (unaire) comme un groupe de zéros, donc la base 1 est ignorée.la source
0 -> Falsy; > 0 -> Truthy
. Est-ce intentionnel qui0
est à la foisTruthy
etFalsy
dans cette situation?>
signe devant le second0
, ce qui signifie que tout ce qui est supérieur à 0 est vrai.C,
5250 octetsEssayez-le en ligne!
C (gcc),
4745 octetsEssayez-le en ligne!
Deux octets enregistrés grâce à la suggestion de @ Nevay sur la réponse de @Kevin Cruijssen!
la source
k%i
est un test ternaire ici. Une variante plus lisible seraitk=(k%i?k:n*++i);
ou encore plus clairement: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;}
eti,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Tout le mérite revient à @Nevay qui a posté cette suggestion sur ma réponse Java 8 portée .i, k;
etf(n)
existaient dans les anciennes versions de C (K&R), mais seulement à l'époque où desreturn
crochets autour de son argument. Si vous souhaitez utiliser K&R aveci,k;
, vous devez également utiliserreturn(i);
. Ce qui précède pourrait être gnuc, mais pas C.Haskell ,
565248 octetsEssayez-le en ligne!
Assez basique mais je ne vois pas de bonnes façons de le raccourcir
EDIT: Merci à Laikoni de m'avoir sauvé 4 octets! Je ne sais pas pourquoi je n'y ai jamais pensé
!!0
. J'aurais probablement dû essayer de supprimer ces parenthèses, mais j'ai de vagues souvenirs d'une erreur étrange lorsque vous essayez d'utiliser||
et&&
ensemble. Peut-être que je le confond avec les opérateurs d'égalité.EDIT 2: Merci @Lynn pour avoir rasé encore 4 octets! Je ne sais pas comment je ne l'ai jamais su
until
auparavant.la source
!!0
est plus court quehead
et je pense que vous pouvez déposer la parenthèse#
.until :: (a → Bool) → (a → a) → a → a
enregistre quatre octets:f n=until(#n)(+1)2
Wolfram Language (Mathematica) , 33 octets
Essayez-le en ligne!
la source
Husk , 7 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 57 octets
Essayez-le en ligne!
C'est un octet plus court qu'une fonction récursive:
la source
Gelée , 7 octets
Essayez-le en ligne!
la source
05AB1E , 6 octets
-4 octets grâce à Adnan
Essayez-le en ligne!
la source
[¹NÌDŠвPĀ#
1µNвPĀ
fonctionne pour 6 octetsLB0.å0k
est une autre méthode entièrement> _>.Coque , 9 octets
Essayez-le en ligne!
Explication
la source
Java 8,
615654 octetsEssayez-le ici.
Explication:
J'ai l'impression que cela peut être joué au golf en utilisant une approche arithmétique.Il peut en effet, avec un port de réponse @Steadybox 'C , puis jouer au golf de 2 octets grâce à @Nevay .Ancienne ( 61 octets ) réponse:
Essayez-le ici.
Explication:
la source
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japt , 8 octets
Essayez-le en ligne!
Explication
Renvoie le premier nombre (
X
) pour passer la fonction, en commençant par2
Convertissez le numéro d'entrée en un tableau de
X
chiffres de base .Vérifiez si tous les chiffres sont véridiques.
la source
10
?JavaScript (ES6),
434137 octetsCas de test
Afficher l'extrait de code
la source
Brachylog , 11 octets
Essayez-le en ligne!
Explication
la source
Python 2 , 57 octets
Essayez-le en ligne!
-1 merci à Felipe Nardi Batista .
-2 merci à Lynn (et maintenant c'est une dupe de sa solution: D)
la source
a,b=a+c,d
poura+=c;b=d
while m>1
parwhile m
(et alors nous sommes à égalité!)APL (Dyalog) ,
2019 octetsEssayez-le en ligne!
Comme d'habitude, merci à @ Adám d'avoir aidé dans le chat et d'avoir fait fonctionner le code dans TIO. En outre, économiser 1 octet.
Ceci est tradfn ( trad itional f unctio n corps). Pour l'utiliser, vous devez lui attribuer un nom (qui se trouve dans le champ d'en-tête de TIO), l'enfermer dans
∇
s (un avant le nom et un dans le champ de pied de page de TIO), puis l'appeler en utilisant son nom. Puisqu'il utilise un quad (⎕
) pour prendre l'entrée de l'utilisateur, il est appelé commef \n input
au lieu de l'habituelf input
Comment?
La fonction renvoie ensuite la base résultante.
la source
n←⎕
s'agira d'un simple nombre et que vous avez besoin1
comme argument initial pour le reste du code, vous pouvez simplement compter le nombre d'éléments dansn
(qui est 1), en remplaçant1⊣
par≢
. Essayez-le en ligne!Proton , 40 octets
Essayez-le en ligne!
la source
2..x
vérifie les bases dans l'intervalle[2, x)
, donc il échoue pour les cas de test1
et2
.R ,
7971666365 octetsEssayez-le en ligne!
Cette réponse est basée sur le réarrangement de Giuseppe en une seule boucle.
8 octets enregistrés grâce à JDL et 6 octets grâce à Giuseppe.
la source
b
pourT
, qui commence défini commeTRUE == 1
, supprimant le besoin deb=1
. De même, vous pouvez vous abonnerF
pourk
(F
estFALSE
)m%/%T
(division entière) au lieu de(m-m%%T)/T
MATL ,
1312 octetsEssayez-le en ligne!
-1 octet merci à Luis Mendo. Ce programme ne gère pas les cas de test supérieurs à 2 ^ 53 (
flintmax
, l'entier consécutif maximum représentable par un type à virgule flottante), car le type de données par défaut estdouble
en MATL. Cependant, il devrait être en mesure de trouver une base arbitraire sans zéro en dessous de ce nombre.la source
YA
utilisant des doubles en interne, de sorte qu'il ne peut gérer que les entrées jusqu'au nombre entier consécutif maximum représentable par un double (voirflintmax
). Est-ce que cela invalide la réponse? En principe, l'algorithme fonctionne pour une base arbitraire, j'ai explicitement travaillé autour d'une autre commande qui ne ferait que jusqu'à la base 36.PHP, 59 + 1 octets
en utilisant des éléments intégrés , base max 36:
pas de builtins,
6360 + 1 octets , n'importe quelle base:Exécuter en tant que pipe avec
-nR
ou essayez-les en ligne .la source
Actually,
1211 bytesTry it online!
Uses this consensus. Thanks to Mego for byte-saving help in chat.
la source
J, 26 bytes
Would love to know if this can be improved.
The main verb is a the dyadic phrase:
which is given the input on the left and the constant 2 on the right. That main verb phrase then uses J's Do..While construct, incrementing the right y argument as long as 0 is an element of
e.
the original argument in base y.Try it online!
la source
Lua,
7776 bytesTry it online!
la source
Milky Way, 38 bytes
usage:
./mw base.mwg -i 3
Explanation
I'm sure this can be shortened using a while-loop instead of a for loop, but I couldn't get it to work.
la source
Stacked, 23 bytes
Try it online!
This increments (
[1+]
) J starting from two (2
) while the baseJ representation of the input has no zeroes (all
anduntil
).la source
Perl 5, 52 + 2 (
-pa
) = 54 bytesTry it online!
la source