Bei einer positiven Ganzzahl n
wird die kleinste Basis ausgegeben, bei der b >= 2
die Darstellung von n
in base b
ohne führende Nullen kein a enthält 0
. Dies können Sie b <= 256
für alle Eingaben annehmen .
Testfälle
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
spielen keine Rolle, da dies nicht der Fall ist0
.Antworten:
Pyth , 6 Bytes
Überprüfen Sie alle Testfälle.
Wie es funktioniert
Obwohl Pyths
f
auf1, 2, 3, 4, ...
(beginnend mit 1) arbeitet, behandelt Pyth Zahlen in Basis 1 (unär) als eine Reihe von Nullen, sodass Basis 1 ignoriert wird.quelle
0 -> Falsy; > 0 -> Truthy
. Ist das eine Absicht,0
die sowohlTruthy
als auchFalsy
in dieser Situation ist?>
Vor dem zweiten steht ein Zeichen0
, was bedeutet, dass alles, was höher als 0 ist, wahr ist.C
5250 BytesProbieren Sie es online!
C (gcc),
47-45BytesProbieren Sie es online!
Zwei Bytes gespart dank des Vorschlags von @ Nevay auf die Antwort von @ Kevin Cruijssen!
quelle
k%i
ist hier ein Ternary -Check. Eine lesbare Variante wärek=(k%i?k:n*++i);
oder noch deutlicher: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;}
undi,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Der gesamte Kredit geht an @Nevay , der diesen Vorschlag auf meiner portierten Java 8-Antwort gepostet hat .i, k;
undf(n)
in alten Versionen von C (K & R) existiert, aber nur in der Zeit, inreturn
runden Klammern benötigt um seine Streit. Wenn Sie K & R mit verwenden möchteni,k;
, müssen Sie auch verwendenreturn(i);
. Die oben genannten möglicherweise Gnuc, aber nicht C.Haskell ,
565248 BytesProbieren Sie es online!
Ziemlich einfach, aber es gibt keine guten Möglichkeiten, es zu verkürzen
EDIT: Danke an Laikoni für das Speichern von 4 Bytes! Ich weiß nicht, warum ich nie daran gedacht habe
!!0
. Ich hätte wahrscheinlich versuchen sollen, diese Klammern zu entfernen, aber ich habe vage Erinnerungen an einen seltsamen Fehler, wenn Sie versuchen,||
und&&
zusammen zu verwenden. Vielleicht verwechsle ich es mit den Gleichstellungsoperatoren.EDIT 2: Danke @Lynn für die Rasur weiterer 4 Bytes! Ich weiß nicht, wie ich es
until
vorher noch nie gewusst habe .quelle
!!0
ist kürzer alshead
und ich denke, Sie können die Klammer fallen lassen#
.until :: (a → Bool) → (a → a) → a → a
speichert vier Bytes:f n=until(#n)(+1)2
Wolfram Language (Mathematica) , 33 Byte
Probieren Sie es online!
quelle
Schale , 7 Bytes
Probieren Sie es online!
Erläuterung
quelle
Python 2 , 57 Bytes
Probieren Sie es online!
Dies ist ein Byte kürzer als eine rekursive Funktion:
quelle
Gelee , 7 Bytes
Probieren Sie es online!
quelle
05AB1E , 6 Bytes
-4 Bytes dank Adnan
Probieren Sie es online!
quelle
[¹NÌDŠвPĀ#
1µNвPĀ
works for 6 bytesLB0.å0k
is another method entirely >_>.Husk, 9 bytes
Try it online!
Explanation
quelle
Java 8,
615654 bytesTry it here.
Explanation:
I have the feeling this can be golfed by using an arithmetic approach.It indeed can, with a port of @Steadybox' C answer, and then golfed by 2 bytes thanks to @Nevay.Old (61 bytes) answer:
Try it here.
Explanation:
quelle
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japt, 8 bytes
Try it online!
Explanation
Return the first number (
X
) to pass the function, starting at2
Convert the input number to an array of base-
X
digits.Check if all digits are truthy.
quelle
10
?JavaScript (ES6),
434137 bytesTest cases
Show code snippet
quelle
Brachylog, 11 bytes
Try it online!
Explanation
quelle
Python 2, 57 bytes
Try it online!
-1 thanks to Felipe Nardi Batista.
-2 thanks to Lynn (and now this is a dupe of her solution :D)
quelle
a,b=a+c,d
toa+=c;b=d
while m>1
bywhile m
(and then we’re tied!)APL (Dyalog),
2019 bytesTry it online!
As usual, thanks to @Adám for helping out in chat and getting the code to work in TIO. Also, saving 1 byte.
This is tradfn (traditional function) body. To use it, you need to assign it a name (which is in TIO's header field), enclose it in
∇
s (one before the name and one in TIO's footer field), and then call it using its name. Since it uses a quad (⎕
) to take the user's input, it's called asf \n input
instead of the usualf input
How?
The function then returns the resulting base.
quelle
n←⎕
will be a simple number and you need1
as initial argument to the rest of the code, you can just count the number of elements inn
(which is 1), by replacing1⊣
with≢
. Try it online!Proton, 40 bytes
Try it online!
quelle
2..x
checks for bases in the interval[2, x)
, hence it fails for test cases1
and2
.R,
7971666365 bytesTry it online!
This answer is based on Giuseppe's re-arrangement in one single loop.
Saved 8 bytes thanks to JDL, and 6 bytes thanks to Giuseppe.
quelle
b
forT
, which starts out defined asTRUE == 1
, removing the need forb=1
. Similarly you can subF
fork
(F
isFALSE
)m%/%T
(integer division) instead of(m-m%%T)/T
MATL,
1312 bytesTry it online!
-1 byte thanks to Luis Mendo. This program does not handle testcases bigger than 2^53 (
flintmax
, the maximum consecutive integer representable by a floating point type), as the default datatype isdouble
in MATL. However, it should be able to find any arbitrary zeroless base below that number.quelle
YA
using doubles internally, so it can only handle inputs up to the maximum consecutive integer representable by a double (seeflintmax
). Does this invalidate the answer? In principle the algorithm works for arbitrary base, I've explicitly worked around another command that would only do up to base 36.PHP, 59+1 bytes
using builtins, max base 36:
no builtins,
6360+1 bytes, any base:Run as pipe with
-nR
or try them online.quelle
Actually,
1211 bytesTry it online!
Uses this consensus. Thanks to Mego for byte-saving help in chat.
quelle
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!
quelle
Lua,
7776 bytesTry it online!
quelle
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.
quelle
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
).quelle
Perl 5, 52 + 2 (
-pa
) = 54 bytesTry it online!
quelle