Учитывая положительное целое число n
, выведите наименьшую базу, в b >= 2
которой представление n
в базе b
без начальных нулей не содержит a 0
. Вы можете предположить, чтоb <= 256
для всех входов.
Тестовые случаи
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
не имеют значения, потому что они не имеют значения0
.Ответы:
Pyth , 6 байт
Проверьте все контрольные примеры.
Как это работает
Хотя Pyth
f
работает1, 2, 3, 4, ...
(начиная с 1), Pyth рассматривает числа в базе 1 (унарные) как группу нулей, поэтому база 1 игнорируется.источник
0 -> Falsy; > 0 -> Truthy
. Это преднамеренное, что0
и то,Truthy
и другоеFalsy
в этой ситуации?>
знак0
, который означает, что все, что выше 0, является правдой.C,
5250 байтовПопробуйте онлайн!
C (gcc),
4745 байтовПопробуйте онлайн!
Два байта сохранены благодаря предложению @ Nevay по ответу @Kevin Cruijssen!
источник
k%i
- это троичная проверка здесь. Более читаемый вариант был быk=(k%i?k:n*++i);
или даже более понятен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;}
иi,k;f(n){for(i=2,k=n;k;)k=k%i++?k/--i:n;n=i;}
. Вся заслуга принадлежит @Nevay, который разместил это предложение в моем портированном ответе на Java 8 .i, k;
иf(n)
существовавшие в древних версиях C (K & R), но только в эпоху, когдаreturn
требовались круглые скобки вокруг аргумент. Если вы хотите использовать K & R сi,k;
, вы также должны использоватьreturn(i);
. Выше может быть gnuc, но не C.Haskell ,
565248 байтПопробуйте онлайн!
Довольно простой, но не может придумать хороших способов сократить его
РЕДАКТИРОВАТЬ: Спасибо Laikoni за спасение мне 4 байта! Не знаю, почему я никогда не думал о
!!0
. Я, вероятно, должен был попытаться удалить эти скобки, но у меня есть смутные воспоминания о какой-то странной ошибке, когда вы пытаетесь использовать||
и&&
вместе. Может быть, я путаю это с операторами равенства.РЕДАКТИРОВАТЬ 2: Спасибо @Lynn за бритье еще 4 байта! Не знаю, как я никогда
until
раньше не знал .источник
!!0
короче,head
и я думаю, вы можете опустить скобки#
.until :: (a → Bool) → (a → a) → a → a
экономит четыре байта:f n=until(#n)(+1)2
Wolfram Language (Mathematica) , 33 байта
Попробуйте онлайн!
источник
Шелуха , 7 байт
Попробуйте онлайн!
объяснение
источник
Python 2 , 57 байт
Попробуйте онлайн!
Это на один байт короче рекурсивной функции:
источник
Желе , 7 байт
Попробуйте онлайн!
источник
05AB1E , 6 байтов
-4 байта благодаря Аднану
Попробуйте онлайн!
источник
[¹NÌDŠвPĀ#
1µNвPĀ
работает на 6 байтовLB0.å0k
это еще один метод полностью> _>.Шелуха , 9 байт
Попробуйте онлайн!
объяснение
источник
Java 8,
615654 байтаПопробуй это здесь.
Объяснение:
У меня такое чувство, что это можно сделать с помощью арифметического подхода.Это действительно может, с портом ответа @Steadybox 'C , а затем игра в гольф на 2 байта благодаря @Nevay .Старый ( 61 байт ) ответ:
Попробуй это здесь.
Объяснение:
источник
n->{int b=2,t=n;for(;t>0;)t=t%b++<1?n:t/--b;return b;}
Japt , 8 байт
Попробуйте онлайн!
объяснение
Вернуть первое число (
X
) для прохождения функции, начиная с2
Преобразуйте входной номер в массив базовых
X
цифр.Проверьте правильность всех цифр.
источник
10
?JavaScript (ES6),
434137 байтКонтрольные примеры
Показать фрагмент кода
источник
Брахилог , 11 байт
Попробуйте онлайн!
объяснение
источник
Python 2 , 57 байт
Попробуйте онлайн!
-1 thanks to Felipe Nardi Batista.
-2 thanks to Lynn (and now this is a dupe of her solution :D)
источник
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.
источник
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!
источник
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.
источник
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.источник
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.источник
Actually,
1211 bytesTry it online!
Uses this consensus. Thanks to Mego for byte-saving help in chat.
источник
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!
источник
Lua,
7776 bytesTry it online!
источник
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.
источник
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
).источник
Perl 5, 52 + 2 (
-pa
) = 54 bytesTry it online!
источник