Kekuatan mandiri

13

Bilangan bulat yang diberikan n, menghasilkan eksponen terkecil yang elebih besar dari 1 sehingga n^eberisi nsebagai substring.

Misalnya, untuk 25, jawabannya harus 2, seperti 25 ^ 2 = 625, yang berisi 25sebagai substring, tetapi jawaban untuk 13harus 10, seperti 13 ^ 10 = 137858491849, jadi 10adalah eksponen terendah yang hasilnya berisi 13sebagai substring.

Aturan

  • Aturan I / O standar
  • Celah standar berlaku
  • Kode terpendek dalam byte menang
  • n akan selalu menjadi bilangan bulat yang lebih besar dari 0

Uji Kasus

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)

Skrip python untuk menghasilkan 1000 jawaban pertama

Skidsdev
sumber
Terkait
Skidsdev
A045537
Shaggy

Jawaban:

4

R , 69 44 byte

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

Fungsi anonim. Bekerja pada ukuran besar iketika ndikonversi ke BigZ (lihat TIO). Terima kasih telah mengajari saya sesuatu Giuseppe dan digEmAll!

Cobalah online!

BLT
sumber
61 byte - Anda memiliki ruang tambahan n, ?n^idan pastemengubahnya charactersecara default :-)
Giuseppe
56 byte - pengembalian iharus memadai.
Giuseppe
2
44 byte byte tidak diperlukan, grepl mengkonversi ke karakter secara default :)
digEmAll
Masalahnya adalah bahwa itu "salah" ketika eksponen menjadi besar karena akurasi floating point dan fakta bahwa sejumlah besar dikonversi menjadi string dalam notasi ilmiah. Misalnya 15 mengembalikan 17 sedangkan seharusnya 26. Jadi, secara teoritis ini berfungsi, tetapi dalam praktiknya kita harus menggunakan paket Big Integer atau sesuatu seperti itu ...
digEmAll
1
@digEmAll untuk BigInt Anda bisa memaksa input untuk menjadi BigInt seperti BigZ dari gmp dan masih harus bekerja, kecuali mungkin untuk mengkonversi ike bigZ juga
Giuseppe
3

Python 2 , 42 41 byte

-1 byte terima kasih kepada Ørjan Johansen (kembali ylangsung)

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

Cobalah online!

Penjelasan / Tidak Diundang

Fungsi rekursif mencoba dari 2,3 hingga kami berhasil:

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

Cobalah online!

ბიმო
sumber
1
Mengembalikan y lebih pendek
Ørjan Johansen
@ ØrjanJohansen: Aneh, saya pikir saya sudah mencobanya, tidak yakin apa yang saya lewatkan. Terima kasih banyak!
ბიმო
Saya harus menukar multiplikasi untuk menghindari ruang, mungkin itu?
Ørjan Johansen
@ ØrjanJohansen: Mungkin itu dia, ya.
ბიმო
3

JavaScript (ES6 / Node.js),  41  40 byte

Disimpan 1 byte berkat @Shaggy

Mengambil input sebagai Angka (berfungsi untuk n<15 ) atau literal BigInt .

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

Cobalah online!

Arnauld
sumber
1
Berakhir dengan solusi yang sangat mirip dengan Anda selama 40 byte
Shaggy
@ Shaggy Anda harus menggunakan bilangan bulat besar, jika tidak, ia tidak akan mengembalikan jawaban yang benar dalam beberapa kasus uji. Pada akhirnya ia memiliki bytecount yang sama n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz
1
@LuisfelipeDejesusMunoz, umumnya kita tidak perlu khawatir tentang masalah ketepatan tetapi ini juga akan bekerja dengan BigInts.
Shaggy
Hal kecil tetapi jika ini menggunakan BigInt bukankah seharusnya judulnya adalah JavaScript (Node.js)? ES6 belum memiliki BigInt.
Shieru Asakoto
@ShieruAsakoto Anda benar. Tujuan awal saya adalah untuk menjelaskan bahwa itu berfungsi baik dengan Angka atau BigInt. Sekarang diklarifikasi.
Arnauld
3

APL (Dyalog Unicode) , 25 23 17 byte

-2 byte terima kasih kepada @Erik the Outgolfer

-6 byte terima kasih kepada @ngn

terima kasih kepada @ H.PWiz untuk membuat kode tidak memerlukan custom ⎕pp(ketepatan cetak)

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

Cobalah 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
sumber
Gagal untuk 17 karena ditemukan 17pada 17 ^ 14 = 1.6837782655940093E17, tetapi idk untuk jawaban presisi apa yang harus didukung
Kritixi Lithos
@Cowsquack Saya hanya perlu menyesuaikan sewenang-wenang ⎕PPsaya kira
Quintec
Oh, tunggu, itu bahkan tidak akan berhasil
Quintec
23 byte .
Erik the Outgolfer
19 byte
ngn
2

Brachylog , 8 byte

;.^s?∧ℕ₂

Cobalah online!

Penjelasan

;.^         Input ^ Output…
   s?       …contains the Input as a substring…
     ∧      …and…
      ℕ₂    …the Output is in [2,+∞)
Fatalisasi
sumber
2

05AB1E , 7 byte

∞>.Δm¹å

Cobalah online!

Penjelasan:

∞>.Δ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
sumber
2

SAS, 71 66 byte

Sunting: Dihapus ;run;pada akhirnya, karena tersirat pada akhir input.

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

Input data dimasukkan setelah cards;pernyataan, seperti:

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

Menghasilkan dataset yang aberisi input ndan output e.

masukkan deskripsi gambar di sini

Josh Eller
sumber
Ini terlihat sebagai definisi fungsi, atau setara (saya berasumsi sebenarnya "makro") Ini berarti bahwa mengharuskannya dipanggil dengan argumen (yaitu %p(n)) benar-benar baik-baik saja, namun output tergantung pada apakah macros di SAS dapat mengembalikan nilai. Jika mereka dapat kembali, "output" harus dengan mengembalikan hasilnya, jika tidak maka output dengan metode standar apa pun yang didukung
Skidsdev
@ Skidsdev Terima kasih atas umpan baliknya! SAS agak aneh; makro tidak benar-benar berfungsi, mereka hanya bahasa pengganti teks yang menghasilkan kode SAS 'nyata' saat dikompilasi. Saya telah melihat bagaimana orang lain telah melakukan I / O untuk SAS dalam codegolf, dan mengedit jawaban saya berdasarkan itu, menyingkirkan pernyataan makro.
Josh Eller
1

Bersihkan , 99 byte

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

Cobalah online!

Jika tidak perlu bekerja untuk jumlah besar raksasa, maka

Bersih , 64 byte

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

Cobalah online!

Suram
sumber
1

Java (OpenJDK 8) , 84 byte

Mengambil input sebagai String yang mewakili angka dan menghasilkan int.

Sebagian besar byte berasal dari verbositas BigDecimalyang diperlukan untuk memproses angka-angka besar.

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

Cobalah online!


Bagaimana itu bekerja

Ini cukup sederhana tetapi saya akan menyertakan penjelasan untuk anak cucu;

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
sumber
0

Japt, 10 byte

@pX søU}a2

Cobalah

Shaggy
sumber
0

Arang , 19 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Penjelasan:

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

Ulangi sampai panjang daftar paling sedikit 2 dan produknya mengandung input ...

⊞υIθ

... masukkan input ke integer dan dorong ke daftar.

ILυ

Keluarkan panjang daftar ke string dan cetak secara implisit.

Neil
sumber
0

Python 3 , 63 58 byte

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

Cobalah online!

Python2 mungkin akan lebih pendek, tapi saya suka menggunakan 3. Datang dengan lambda itu sulit, tapi saya mencoba beberapa hal.

Gigaflop
sumber
Saya tidak tahu python tetapi, bukankah lebih pendek menggunakan lambda?
Luis felipe De jesus Munoz
@LuisfelipeDejesusMunoz Saya mulai mencoba melakukan itu, tetapi IDLE mengeluh karena telanjang whiledi lambda. Mungkin saya dapat mencoba beberapa cara lain ..
Gigaflop
Mungkin beberapa fungsi rekursif?
Luis felipe De jesus Munoz
2
Mendefinisikan edalam argumen-daftar (mis. def f(n,e=2)) Dan n**eharus menyimpan beberapa byte, Python 2 memang akan menyimpan beberapa byte.
ბიმო
@LuisfelipeDejesusMunoz Lambdas tidak seperti fungsi. Sisi kanan lambda harus berupa ekspresi tunggal, dan perintah kontrol aliran suka foratau whiletidak berfungsi.
James
0

MathGolf , 10 byte

ôkï⌠#k╧▼ï⌠

Cobalah online!

Penjelasan

Ini terasa sangat boros, harus membaca input secara eksplisit dua kali, harus menambah penghitung loop dua kali.

ô            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
maks
sumber
0

C # (.NET Core) , 104 89 byte

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

Cobalah online!

-1 byte: diubah untuk loop menjadi while (terima kasih kepada Skidsdev )
-14 byte: penyalahgunaan string aneh C # untuk menghapus ToString() panggilan

Perlu menggunakan pustaka BigInteger C # , karena tipe C # numerik standar (int, dobel, panjang, ulong, dll.) Gagal untuk beberapa angka yang lebih besar (termasuk 12, 15, dan 17).

Tidak Disatukan:

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
sumber
Anda dapat menyimpan 1 byte dengan beralih ke loop sementara
Skidsdev
0

PowerShell(V3+), 67 bytes

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

Common Lisp, 78 bytes

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

Try it online!

Renzo
sumber
0

J, 26 bytes

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

Try it online!

NOTE: I've changed the final ] to x: in the TIO, to make the tests pass for larger integers.

Jonah
sumber
0

Oracle SQL, 68 bytes

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

There is an assumption that source number is stored in a table t(x), e.g.

with t as (select 95 x from dual)

Test in 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
sumber