Самостійні повноваження


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 відповідей



Відповіді:



4

R , 69 44 байт

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

Анонімна функція. Працює на великих, iколи nперетворюється на BigZ (див. TIO). Дякую, що ви навчили мене чомусь Джузеппе та digEmAll!

Спробуйте в Інтернеті!


61 байт - у вас був додатковий простір n, ?n^iі pasteпереходив characterза замовчуванням :-)
Джузеппе

56 байт - повернення iмає бути достатнім.
Джузеппе

2
Вставити 44 байти не потрібно, grepl перетворює символи за замовчуванням :)
digEmAll

Проблема полягає в тому, що вона "несправна", коли експоненти стають великими через точність плаваючих точок і те, що великі числа перетворюються на рядки в науковій нотації. Наприклад, 15 повертає 17, хоча має бути 26. Отже, теоретично це працює, але на практиці ми повинні використовувати пакет Big Integer або щось подібне ...
digEmAll

1
@digEmAll для BigInt ви можете просто змусити вхід бути великим, як BigZ від gmp, і він все одно повинен працювати, за винятком можливого перетворення iна bigZ також
Giuseppe

3

Python 2 , 42 41 байт

-1 байт завдяки Ørjan Johansen (повертається yпрямо)

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

Спробуйте в Інтернеті!

Пояснення / Недозволений

Рекурсивна функція, намагаючись від 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)

Спробуйте в Інтернеті!



@ ØrjanJohansen: Дивно, я думав, що спробував це, не зовсім впевнений, що мені не вистачало. Дуже дякую!
ბიმო

Мені довелося міняти множення, щоб уникнути пробілу, можливо, це було?
Ørjan Johansen

@ ØrjanJohansen: Напевно, це було так, так.
ბიმო

3

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

Збережено 1 байт завдяки @Shaggy

Вводиться як число (працює для н<15 ) або як буквар BigInt .

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

Спробуйте в Інтернеті!


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 Ви маєте рацію. Первинним моїм наміром було пояснити, що воно працює або з числом, або з BigInt. Тепер уточнено.
Арнольд

3

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

-2 байти завдяки @Erik The 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

Це не вдається для 17, тому що він знаходить 17у 17 ^ 14 = 1.6837782655940093E17, але idk, які точні відповіді повинні підтримувати
user41805

@Cowsquack Мені просто довільно коригуватись ⎕PPя здогадуюсь
Quintec

О зачекайте, що навіть не вийде
Квінтек






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може SAS повернути значення. Якщо вони можуть повернутися, "вихід" повинен бути шляхом повернення результату, інакше він повинен виводити його будь-яким стандартним методом виводу, який підтримується
Skidsdev

@Skidsdev Дякую за відгук! SAS трохи дивний; макроси насправді не є функціями, вони є лише мовою підстановки тексту, яка створює «справжній» код SAS при компілюванні. Я переглянув, як інші люди робили I / O для SAS в кодегольфі, і відредагував свою відповідь, виходячи з цього, позбувшись макрозаписів.
Джош Еллер



1

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

Приймає введення як рядок, що представляє число і виводить 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, але хіба це коротше використання лямбда?
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz Я почав намагатися це зробити, але IDLE поскаржився на те, що гола whileв лямбда. Можливо, я можу спробувати інші способи ..
Gigaflop

Може, якась рекурсивна функція?
Luis felipe De jesus Munoz

2
Визначаючи eу списку аргументів (тобто def f(n,e=2)) і n**eповинен зберігати деякі байти, Python 2 дійсно збереже досить багато байтів.
ბიმო

@LuisfelipeDejesusMunoz Lambdas не схожі на функції. Права частина лямбда має бути одним виразом, а команди керування потоком, як, 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


0

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

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

Спробуйте в Інтернеті!

-1 байт: змінено для циклу на час (завдяки Skidsdev )
-14 байт: зловживали дивним обробкою рядків C # для видалення ToString() дзвінків

Потрібно скористатися C # 's BigInteger бібліотеку , оскільки стандартні числові типи C # (int, double, long, ulong тощо) не спрацьовують для більшої кількості (включаючи 12, 15 і 17).

Безголівки:

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;
}

Ви можете зберегти 1 байт, перейшовши на цикл "час"
Skidsdev



0

PowerShell (V3 +), 67 байт

function f{param($n)$i=1;do{}until([math]::pow($n,++$i)-match$n)$i}



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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.