Автономные силы

13

Принимая во внимание целое число n, выходное наименьший показатель eбольше , чем 1 таким образом, что n^eсодержит в nкачестве подстроки.

Например, для 25, ответ должен быть 2, как 25 ^ 2 = 625, который содержит 25в качестве подстроки, но ответ для 13должен быть 10, как 13 ^ 10 = 137858491849, 10как и самый низкий показатель, для которого результат содержит 13в качестве подстроки.

правила

  • Стандартные правила ввода / вывода
  • Применяются стандартные лазейки
  • Самый короткий код в байтах выигрывает
  • n всегда будет целым числом больше, чем 0

Тестовые случаи

1 => 2   (1 ^ 2 = 1)
2 => 5   (2 ^ 5 = 32)
3 => 5   (3 ^ 5 = 243)
4 => 3   (4 ^ 3 = 64)
5 => 2   (5 ^ 2 = 25)
6 => 2   (6 ^ 2 = 36)
7 => 5   (7 ^ 5 = 16807)
8 => 5   (8 ^ 5 = 32768)
9 => 3   (9 ^ 3 = 729)
10 => 2  (10 ^ 2 = 100)
11 => 11 (11 ^ 11 = 285311670611)
12 => 14 (12 ^ 14 = 1283918464548864)
13 => 10 (13 ^ 10 = 137858491849)
14 => 8  (14 ^ 8 = 1475789056)
15 => 26 (15 ^ 26 = 3787675244106352329254150390625)
16 => 6  (16 ^ 6 = 16777216)
17 => 17 (17 ^ 17 = 827240261886336764177)
18 => 5  (18 ^ 5 = 1889568)
19 => 11 (19 ^ 11 = 116490258898219)
20 => 5  (20 ^ 5 = 3200000)
25 => 2  (25 ^ 2 = 625)
30 => 5  (30 ^ 5 = 24300000)
35 => 10 (35 ^ 10 = 2758547353515625)
40 => 3  (40 ^ 3 = 64000)
45 => 5  (45 ^ 5 = 184528125)
50 => 2  (50 ^ 2 = 2500)
55 => 11 (55 ^ 11 = 13931233916552734375)
60 => 2  (60 ^ 2 = 3600)
65 => 17 (65 ^ 17 = 6599743590836592050933837890625)
70 => 5  (70 ^ 5 = 1680700000)
75 => 3  (75 ^ 3 = 421875)
80 => 5  (80 ^ 5 = 3276800000)
85 => 22 (85 ^ 22 = 2800376120856162211833149645328521728515625)
90 => 3  (90 ^ 3 = 729000)
95 => 13 (95 ^ 13 = 51334208327950511474609375)
100 => 2 (100 ^ 2 = 10000)

Python скрипт для генерации первых 1000 ответов

Skidsdev
источник
Связанные
Скидсдев
A045537
Лохматый

Ответы:

4

R , 69 44 байт

function(n,i=2){while(!grepl(n,n^i))i=i+1;i}

Анонимная функция. Работает на больших, iкогда nконвертируется в BigZ (см. TIO). Спасибо за то, что научили меня Джузеппе и digEmAll!

Попробуйте онлайн!

BLT
источник
61 байт - у вас есть дополнительный пробел n, ?n^iи по умолчанию он pasteконвертируется character:-)
Джузеппе
56 байт - возврата iдолжно быть достаточно.
Джузеппе
2
Вставка в 44 байта не требуется, grepl по умолчанию преобразуется в символ :)
digEmAll
Проблема в том, что он «ошибочен», когда показатели становятся большими из-за точности с плавающей запятой и того факта, что большие числа преобразуются в строку в научной нотации. Например, 15 возвращает 17, а должно быть 26. Итак, теоретически это работает, но на практике мы должны использовать пакет Big Integer или что-то в этом роде ...
digEmAll
1
@digEmAll для BigInt, вы можете просто сделать так, чтобы ввод был bigInt, как BigZ из gmp, и он все еще должен работать, за исключением, возможно, преобразования iтакже в bigZ
Джузеппе
3

Python 2 , 42 41 байт

-1 байт благодаря Эрджану Йохансену (возвращающемуся yпрямо)

f=lambda x,y=2:y*(`x`in`x**y`)or f(x,y+1)

Попробуйте онлайн!

Объяснение / Ungolfed

Рекурсивная функция пытается от 2,3 пока не получится:

# Start recursion with y=2
def f(x,y=2):
    # If we succeed, we arrived at the desired y
    if `x` in `x**y`:
        return y
    # Else we try with next y
    else:
        return f(x, y+1)

Попробуйте онлайн!

ბიმო
источник
1
Возвращение у короче
Орджан Йохансен
@ ØrjanJohansen: Странно, я думал, что попробовал это, не совсем уверен, что я пропустил. Большое спасибо!
მოიმო
Я должен был поменять умножение, чтобы избежать пробела, может быть, это было?
Орджан Йохансен
@ ØrjanJohansen: Вероятно, это было так, да.
ბიმო
3

JavaScript (ES6 / Node.js),  41  40 байт

Сохранено 1 байт благодаря @Shaggy

n<15

n=>(g=x=>`${x*=n}`.match(n)?2:-~g(x))(n)

Попробуйте онлайн!

Arnauld
источник
1
Закончилось решением, очень похожим на ваше, на 40 байтов
Shaggy
@ Shaggy Вам нужно использовать большие целые числа, в противном случае он не вернет правильный ответ в некоторых тестовых случаях. В конце он имеет тот же счет n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Луис Фелипе Де Иисус Муньос
1
@LuisfelipeDejesusMunoz, как правило, нам не нужно беспокоиться о проблемах точности, но это будет работать и с BigInts.
лохматый
Незначительная вещь, но если это использует BigInt, не должен ли заголовок быть JavaScript (Node.js)? ES6 еще не имеет BigInt.
Шиеру Асакото
@ShieruAsakoto Ты прав. Моим первоначальным намерением было объяснить, что он работает либо с Number, либо с BigInt. Сейчас уточнил.
Арно
3

APL (Dyalog Unicode) , 25 23 17 байт

-2 байта благодаря @Erik Outgolfer

-6 байт благодаря @ngn

спасибо @ H.PWiz за то, что код не требует пользовательского ⎕pp(точность печати)

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨

Попробуйте онлайн!

⊢⍟×⍣(∨/(⍕÷)⍷0⍕⊣)⍨
  ×⍣(          )⍨ generates a geometric progression by repeatedly multiplying the argument
                   by its original value
     ∨/(⍕÷)⍷0⍕⊣   the progression stops when this function, applied between the new and the
                   last old member, returns true
         ÷        the original argument (ratio between two consecutive members)
                 formatted as a string
                 occurrences within...
            0    ...the formatted (with 0 digits after the decimal point)...
                 ...new member
     ∨/           are there any?
⊢⍟                use logarithm to determine what power of  we reached
Quintec
источник
Это терпит неудачу для 17, потому что это находит 17в 17 ^ 14 = 1.6837782655940093E17, но idk к тому, какие точные ответы должны поддержать
user41805
@ Cowsquack Я просто должен произвольно настроить, ⎕PPя думаю
Quintec
Ой, подождите, это даже не сработает
Quintec
23 байта .
Эрик Outgolfer
19 байт
нгн
2

05AB1E , 7 байтов

∞>.Δm¹å

Попробуйте онлайн!

Объяснение:

∞>.Δm¹å  //full program
∞        //push infinite list, stack = [1,2,3...]
 >       //increment, stack is now [2,3,4...]
  .Δ     //find the first item N that satisfies the following
     ¹   //input
      å  //is in
    m    //(implicit) input **  N
Cowabunghole
источник
2

SAS, 71 66 байт

Редактировать: удалено ;run;в конце, поскольку подразумевается в конце входных данных.

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;

Входные данные вводятся после cards;выписки, вот так:

data a;input n;e=1;do until(find(cat(n**e),cat(n)));e+1;end;cards;
1
2
3
4
5
6
7
8
9
10
11
12
13
14

Создает набор данных, aсодержащий входные nи выходные данные e.

введите описание изображения здесь

Джош Эллер
источник
Это выглядит как определение функции или эквивалент (я предполагаю, что на самом деле это «макрос»). Это означает, что требование вызова его с аргументами (т.е. %p(n)) вполне нормально, однако вывод зависит от того, macroмогут ли s в SAS возвращать значения. Если они могут вернуться, «output» должен быть возвращен результат, в противном случае он должен выводить его любым поддерживаемым стандартным методом вывода
Skidsdev
@Skidsdev Спасибо за отзыв! SAS немного странный; макросы на самом деле не являются функциями, они просто текстовый язык замещения, который генерирует «настоящий» код SAS при компиляции. Я посмотрел на то, как другие люди делали ввод / вывод для SAS в codegolf, и отредактировал мой ответ на основе этого, избавившись от операторов макроса.
Джош Эллер
1

Java (OpenJDK 8) , 84 байта

Принимает input как String, представляющий число, и выводит int.

Большинство байтов происходит от многословия BigDecimalсущества, необходимого для обработки больших чисел.

n->{int i=1;while(!(new java.math.BigDecimal(n).pow(++i)+"").contains(n));return i;}

Попробуйте онлайн!


Как это устроено

Это довольно просто, но я включу объяснение для потомков;

n->{                                    // Lamdba taking a String and returning an int
    int i=1;                            // Initialises the count
    while(!                             // Loops and increments until
        (new java.math.BigDecimal(n)    // Creates a new BigDecimal from the input n
            .pow(++i)+"")               // Raises it to the power of the current count
            .contains(n)                // If that contains the input, end the loop
    );
    return i;                           // Return the count
}
Люк Стивенс
источник
0

Древесный уголь , 19 байт

W∨‹Lυ²¬№IΠυθ⊞υIθILυ

Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:

W∨‹Lυ²¬№IΠυθ⊞

Повторяйте до тех пор, пока длина списка не станет как минимум 2, а его произведение содержит входные данные ...

⊞υIθ

... приведите ввод к целому числу и поместите его в список.

ILυ

Приведите длину списка к строке и неявно напечатайте его.

Нил
источник
0

Python 3 , 63 58 байт

def f(n,e=2):
	while str(n)not in str(n**e):e+=1
	return e

Попробуйте онлайн!

Python2, вероятно, будет короче, но мне нравится использовать 3. Приходить к лямбде сложно, но я пытаюсь кое-что сделать.

гигафлоп
источник
Я не знаю Python, но разве это не короче, используя лямбду?
Луис Фелипе Де Иисус Муньос
@LuisfelipeDejesusMunoz Я начал пытаться сделать это, но IDLE жаловался на то, что у меня whileесть лямбда. Может быть, я могу попробовать другие способы ..
Gigaflop
Может быть, какая-то рекурсивная функция?
Луис Фелипе Де Иисус Муньос
2
Определяя eв списке arguments (т.е. def f(n,e=2)) и n**eсохраняя несколько байтов, Python 2 действительно сохранит довольно много байтов.
ბიმო
@LuisfelipeDejesusMunoz Лямбды не похожи на функции. Правая часть лямбды должна быть одним выражением, а команды управления потоком данных работают forили whileне работают.
Джеймс
0

MathGolf , 10 байт

ôkï⌠#k╧▼ï⌠

Попробуйте онлайн!

объяснение

Это кажется крайне расточительным: приходится дважды читать входные данные, а счетчик циклов увеличивать вдвое.

ô            start block of length 6
 k           read integer from input
  ï          index of current loop, or length of last loop
   ⌠         increment twice
    #        pop a, b : push(a**b)
     k       read integer from input
      ╧      pop a, b, a.contains(b)
       ▼     do while false with pop
        ï    index of current loop, or length of last loop
         ⌠   increment twice
maxb
источник
0

C # (.NET Core) , 104 89 байт

a=>{int i=2;while(!(System.Numerics.BigInteger.Pow(a,i)+"").Contains(a+""))i++;return i;}

Попробуйте онлайн!

-1 байт: изменено для цикла на while (благодаря Skidsdev )
-14 байт: использовано странную обработку строк в C # для удаления ToString() вызовов

Нужно использовать C # BigInteger библиотеку , поскольку стандартные числовые типы C # (int, double, long, ulong и т. Д.) Не подходят для некоторых больших чисел (включая 12, 15 и 17).

Ungolfed:

a => {
    int i = 2;                                          // initialize i

    while( !(System.Numerics.BigInteger.Pow(a,i) + "")  // n = a^i, convert to string
                                .Contains(a + ""))      // if n doesn't contain a
        i++;                                                // increment i

    return i;
}
Meerkat
источник
Вы можете сохранить 1 байт, переключившись на цикл while
Skidsdev
0

PowerShell (V3 +), 67 байт

function f{param($n)$i=1;do{}until([math]::pow($n,++$i)-match$n)$i}
jyao
источник
0

J , 26 байт

2>:@]^:(0=[+/@E.&":^)^:_~]

Попробуйте онлайн!

Примечание: Я изменил финал , ]чтобы x:в TIO, чтобы сделать тесты проходят для больших целых чисел.

Ион
источник
0

Oracle SQL, 68 байт

select max(level)+1 from dual,t connect by instr(power(x,level),x)=0

Существует предположение, что номер источника хранится в таблице t(x), например

with t as (select 95 x from dual)

Тест в SQL * Plus

SQL> with t as (select 95 x from dual)
  2  select max(level)+1 from dual,t connect by instr(power(x,level),x)=0
  3  /

MAX(LEVEL)+1
------------
          13
Доктор У Вит
источник