Niezależne moce

13

Podana liczba całkowita nwyprowadza najmniejszy wykładnik ewiększy niż 1 taki, który n^ezawiera njako podłańcuch.

Na przykład dla 25, odpowiedź powinna brzmieć 2jako 25 ^ 2 = 625, która zawiera 25jako podłańcuch, ale odpowiedź na 13powinna być 10, ponieważ 13 ^ 10 = 137858491849, podobnie 10jak najniższy wykładnik, dla którego wynik zawiera 13jako podłańcuch.

Zasady

  • Standardowe reguły we / wy
  • Obowiązują standardowe luki
  • Najkrótszy kod w bajtach wygrywa
  • n zawsze będzie liczbą całkowitą większą niż 0

Przypadki testowe

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)

Skrypt Pythona do generowania pierwszych 1000 odpowiedzi

Skidsdev
źródło
Powiązane
Skidsdev,
A045537
Kudłaty

Odpowiedzi:

4

R , 69 44 bajtów

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

Funkcja anonimowa. Działa na dużych, igdy njest konwertowany na BigZ (patrz TIO). Dzięki za nauczenie mnie czegoś Giuseppe i digEmAll!

Wypróbuj online!

BLT
źródło
61 bajtów - miałeś dodatkowe miejsce n, ?n^ii domyślnie pastekonwertuje się na character:-)
Giuseppe
56 bajtów - zwracanie ipowinno wystarczyć.
Giuseppe,
2
Wklejanie 44 bajtów nie jest konieczne, grepl domyślnie konwertuje na znaki :)
digEmAll
Problem polega na tym, że jest „wadliwy”, gdy wykładniki stają się duże ze względu na dokładność liczb zmiennoprzecinkowych i fakt, że duże liczby są konwertowane na ciąg w notacji naukowej. Na przykład 15 zwraca 17, podczas gdy powinno być 26. Teoretycznie to działa, ale w praktyce powinniśmy używać pakietu Big Integer lub czegoś podobnego ...
digEmAll
1
@digEmAll dla BigInt może po prostu siła wejściowa być BigInt jak BigZ z GMP i powinien nadal działać, z wyjątkiem być może do konwersji ido bigZ także
Giuseppe
3

Python 2 , 42 41 bajtów

-1 bajt dzięki Ørjan Johansen (wraca bezpośrednio y)

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

Wypróbuj online!

Wyjaśnienie / Niegolfowany

Funkcja rekurencyjna próbuje od 2,3 aż do osiągnięcia sukcesu:

# 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)

Wypróbuj online!

ბიმო
źródło
1
Powrót y jest krótszy
Ørjan Johansen
@ ØrjanJohansen: Dziwne, myślałem, że tego spróbowałem, nie do końca pewny, co przegapiłem. Wielkie dzięki!
ბიმო
Musiałem zamienić mnożenie, aby uniknąć spacji, może to było to?
Ørjan Johansen
@ ØrjanJohansen: Prawdopodobnie o to chodziło, tak.
ბიმო
3

JavaScript (ES6 / Node.js),  41  40 bajtów

Zaoszczędzono 1 bajt dzięki @Shaggy

n<15

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

Wypróbuj online!

Arnauld
źródło
1
Skończyło się na rozwiązaniu bardzo podobnym do twojego dla 40 bajtów
Shaggy
@Shaggy Musisz użyć dużych liczb całkowitych, inaczej nie zwróci poprawnej odpowiedzi w niektórych przypadkach testowych. Na końcu ma tę samą liczbę bajtów n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz
1
@LuisfelipeDejesusMunoz, generalnie nie musimy martwić się o problemy z precyzją, ale będzie działać również z BigInts.
Kudłaty
Drobna sprawa, ale jeśli używasz BigInt, czy tytuł nie powinien być JavaScript (Node.js)? ES6 nie ma jeszcze BigInt.
Shieru Asakoto
@ShieruAsakoto Masz rację. Moim początkowym zamiarem było wyjaśnienie, że działa on z liczbą lub dużym Intentem. Teraz wyjaśnione.
Arnauld
3

APL (Dyalog Unicode) , 25 23 17 bajtów

-2 bajty dzięki @Erik the Outgolfer

-6 bajtów dzięki @ngn

dzięki @ H.PWiz za spowodowanie, że kod nie wymaga niestandardowego ⎕pp(precyzja wydruku)

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

Wypróbuj online!

⊢⍟×⍣(∨/(⍕÷)⍷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
źródło
To się nie udaje dla 17, ponieważ znajduje się 17w 17 ^ 14 = 1.6837782655940093E17, ale idk do tego, jakie precyzyjne odpowiedzi powinny obsługiwać
user41805
@Cowsquack Muszę dowolnie regulować ⎕PPChyba
Quintec
Och, czekaj, to nawet nie zadziała
Quintec
23 bajty .
Erik the Outgolfer
2

Brachylog , 8 bajtów

;.^s?∧ℕ₂

Wypróbuj online!

Wyjaśnienie

;.^         Input ^ Output…
   s?       …contains the Input as a substring…
     ∧      …and…
      ℕ₂    …the Output is in [2,+∞)
Fatalizować
źródło
2

05AB1E , 7 bajtów

∞>.Δm¹å

Wypróbuj online!

Wyjaśnienie:

∞>.Δ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
źródło
2

SAS, 71 66 bajtów

Edycja: Usunięto ;run;na końcu, ponieważ sugeruje to koniec danych wejściowych.

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

Dane wejściowe są wprowadzane po cards;instrukcji, w następujący sposób:

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

Generuje zestaw danych azawierający dane wejściowe ni wyjściowe e.

wprowadź opis zdjęcia tutaj

Josh Eller
źródło
Wygląda to na definicję funkcji lub jej odpowiednik (zakładam, że jest to „makro”). Oznacza to, że wymaganie jej wywołania z argumentami (tj. %p(n)) Jest całkowicie w porządku, jednak wynik zależy od tego, czy macros w SAS może zwrócić wartości. Jeśli mogą zwrócić, „wyjście” powinno wynikać ze zwrócenia wyniku, w przeciwnym razie powinno zostać
wygenerowane dowolną
@Skidsdev Dzięki za opinie! SAS jest trochę dziwny; makra nie są tak naprawdę funkcjami, to po prostu język zastępowania tekstu, który po kompilacji generuje „prawdziwy” kod SAS. Przyjrzałem się, jak inni ludzie wykonali operacje we / wy dla SAS w codegolf i na tej podstawie zredagowałem moją odpowiedź, pozbywając się makropoleceń.
Josh Eller
1

Czysty , 99 bajtów

import StdEnv,Text,Data.Integer
$n=hd[p\\p<-[fromInt 2..]|indexOf(""<+n)(""<+prod(repeatn p n))>=0]

Wypróbuj online!

Jeśli to nie musi działać dla gigantycznych ogromnych liczb, to

Czysty , 64 bajty

import StdEnv,Text
$n=hd[p\\p<-[2..]|indexOf(""<+n)(""<+n^p)>=0]

Wypróbuj online!

Obrzydliwe
źródło
1

Java (OpenJDK 8) , 84 bajty

Pobiera dane wejściowe jako ciąg znaków reprezentujący liczbę i wyprowadza liczbę całkowitą.

Większość bajtów pochodzi z gadatliwości BigDecimalpotrzebnej do przetworzenia dużych liczb.

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

Wypróbuj online!


Jak to działa

Jest to dość proste, ale dołączę wyjaśnienie dotyczące potomności;

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
}
Luke Stevens
źródło
0

Japt, 10 bajtów

@pX søU}a2

Spróbuj

Kudłaty
źródło
0

Węgiel drzewny , 19 bajtów

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

Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:

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

Powtarzaj, aż długość listy będzie wynosić co najmniej 2, a jej produkt zawiera dane wejściowe ...

⊞υIθ

... rzutuj wejście na liczbę całkowitą i wypchnij je na listę.

ILυ

Rzuć długość listy na ciąg i niejawnie ją wydrukuj.

Neil
źródło
0

Python 3 , 63 58 bajtów

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

Wypróbuj online!

Python2 byłby prawdopodobnie krótszy, ale lubię używać 3. Wychodzenie z lambda jest trudne, ale próbuję kilku rzeczy.

Gigaflop
źródło
Nie znam pytona, ale czy nie jest krótszy przy użyciu lambda?
Luis felipe De jesus Munoz
@LuisfelipeDejesusMunoz Zacząłem próbować to zrobić, ale IDLE narzekało na to, że mam nago u whilelambdy. Może spróbuję innych sposobów ..
Gigaflop,
Może jakaś funkcja rekurencyjna?
Luis felipe De jesus Munoz
2
Po zdefiniowaniu ena liście argumentów (tj. def f(n,e=2)) I n**ezapisaniu niektórych bajtów, Python 2 rzeczywiście zapisałby sporo bajtów.
ბიმო
@LuisfelipeDejesusMunoz Lambdas nie są jak funkcje. Po prawej stronie od lambda musi być pojedynczym wyrazem, i poleceń, jak kontrola przepływu forlub whilenie działają.
James
0

MathGolf , 10 bajtów

ôkï⌠#k╧▼ï⌠

Wypróbuj online!

Wyjaśnienie

Czuje się to wyjątkowo marnotrawstwem, ponieważ trzeba odczytać dane wejściowe dwa razy, dwukrotnie zwiększyć licznik pętli.

ô            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
źródło
0

C # (.NET Core) , 104 89 bajtów

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

Wypróbuj online!

-1 bajt: zmieniono dla pętli na while (dzięki Skidsdev )
-14 bajtów: nadużywano dziwnej obsługi ciągu C # w celu usunięcia ToString() wywołań

Musisz użyć biblioteki BigInteger w języku C # , ponieważ standardowe liczbowe typy C # (int, double, long, Ulong itp.) Zawodzą w przypadku niektórych większych liczb (w tym 12, 15 i 17).

Nie golfowany:

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;
}
Surykatka
źródło
Możesz zapisać 1 bajt, przechodząc do pętli while
Skidsdev
0

PowerShell (V3 +), 67 bajtów

function f{param($n)$i=1;do{}until([math]::pow($n,++$i)-match$n)$i}
jyao
źródło
0

Common Lisp, 78 bajtów

(lambda(n)(do((e 2(1+ e)))((search(format()"~d"n)(format()"~d"(expt n e)))e)))

Wypróbuj online!

Renzo
źródło
0

J , 26 bajtów

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

Wypróbuj online!

UWAGA: Zmieniłem finał ]na x:w TIO, aby testy były udane dla większych liczb całkowitych.

Jonasz
źródło
0

Oracle SQL, 68 bajtów

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

Zakłada się, że numer źródłowy jest przechowywany w tabeli t(x), np

with t as (select 95 x from dual)

Testuj w 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
Dr Y Wit
źródło