Bağımsız güçler


13

Tamsayı verildiğinde n, alt dize olarak içeren e1'den büyük en küçük üssü çıkar .n^en

Örneğin, için 25, cevap olmalıdır 2gibi 25 ^ 2 = 625içeren, 25bir alt dize olarak, ama için cevap 13olmalıdır 10gibi 13 ^ 10 = 137858491849, bu yüzden 10sonuç içeren için en düşük üs olan 13bir alt dize olarak.

kurallar

  • Standart I / O kuralları
  • Standart boşluklar geçerlidir
  • Bayt cinsinden en kısa kod kazanır
  • n her zaman şundan büyük bir tamsayı olur 0

Test Durumları

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)

İlk 1000 cevabı üreten Python betiği



Yanıtlar:



4

R , 69 44 bayt

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

Anonim işlev. Büyük çalışır izaman nBigZ (Tio bakınız) dönüştürülür. Bana Giuseppe ve digEmAll hakkında bir şeyler öğrettiğiniz için teşekkürler!

Çevrimiçi deneyin!


61 bayt - fazladan bir alanınız vardı n, ?n^ive varsayılan olarak pastedönüşüyor character:-)
Giuseppe

56 bayt - geri dönüş iyeterli olmalıdır.
Giuseppe

2
44 bayt ezmesi gerekli değildir, grepl varsayılan olarak karaktere dönüştürülür :)
digEmAll

Sorun, kayan noktaların doğruluğu ve büyük sayıların bilimsel gösterimde dizgeye dönüştürülmesi nedeniyle üsler büyüdüğünde "hatalı" olmasıdır. Örneğin, teorik olarak bu çalışır, ancak pratikte bir Büyük Tamsayı paketi veya bunun gibi bir şey kullanmalıyız ...
digEmAll

1
Bigd için @digEmAll, girdiyi gmp'den BigZ gibi büyük bir şey olmaya zorlayabilir ve muhtemelen ibir bigZ'ye dönüştürmek dışında da çalışmalıdır
Giuseppe

3

Python 2 , 42 41 bayt

Ørjan Johansen sayesinde -1 bayt (doğrudan geri ydönüyor)

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

Çevrimiçi deneyin!

Açıklama / Ungolfed

Biz başarılı olana kadar deneyen özyinelemeli işlev :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)

Çevrimiçi deneyin!



@ ØrjanJohansen: Tuhaf, bunu denediğimi sanıyordum, neyi kaçırdığımı tam olarak bilmiyordum. Çok teşekkürler!
ბიმო

Bir boşluktan kaçınmak için çarpmayı değiştirmek zorunda kaldım, belki de öyleydi?
Ørjan Johansen

@ ØrjanJohansen: Muhtemelen öyleydi, evet.
18:04

3

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

@Shaggy sayesinde 1 bayt kaydedildi

Bir Sayı ( için çalışır ) veya bir BigInt değişmez değeri olarak girdi alır .n<15

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

Çevrimiçi deneyin!



@Shaggy Büyük tamsayılar kullanmanız gerekir, aksi takdirde bazı test durumlarında doğru cevabı döndürmez. Sonunda aynı bayt hesabı var n=>(g=x=>{x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz, genellikle hassas konular hakkında endişelenmemize gerek yoktur, ancak BigInts ile de çalışacaktır.
Shaggy

Küçük bir şey ama bu BigInt kullanıyorsa başlık JavaScript (Node.js) olmamalı mı? ES6 henüz BigInt'ye sahip değil.
Shieru Asakoto

@ShieruAsakoto Haklısın. İlk amacım ya bir Sayı ya da bir BigInt ile çalıştığını açıklamaktı. Şimdi açıklığa kavuştum.
Arnauld

3

APL (Dyalog Unicode) , 25 23 17 bayt

@Erik Outgolfer sayesinde -2 bayt

@Ngn sayesinde -6 bayt

@ H.PWiz sayesinde kodun özel ⎕pp(baskı hassasiyeti) gerektirmediği için

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

Çevrimiçi deneyin!

⊢⍟×⍣(∨/(⍕÷)⍷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

Bu 17 için başarısız olur, çünkü 1717 ^ 14 = 1.6837782655940093E17'de bulur , ancak hassas yanıtların desteklemesi gereken şeylere idk
user41805

Sadece keyfi ayarlamak zorunda @Cowsquack ⎕PPsanırım
Quintec

Oh bekle, bu bile işe yaramaz
Quintec





2

05AB1E , 7 bayt

∞>.Δm¹å

Çevrimiçi deneyin!

Açıklama:

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

2

SAS, 71 66 bayt

Düzenleme: ;run;Girişlerin sonunda ima edildiği için, sonunda kaldırıldı .

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

Girdi verileri cards;ifadeden sonra şu şekilde girilir :

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

aGirdiyi nve çıktıyı içeren bir veri kümesi oluşturur e.

resim açıklamasını buraya girin


Bu bir işlev tanımı veya eşdeğeri gibi görünüyor (aslında bir "makro" olduğunu varsayalım) Bu, argümanlarla çağrılmayı gerektiren (yani %p(n)) tamamen iyi olduğu anlamına gelir , ancak çıktılar SAS'taki macrodeğer döndürüp döndüremeyeceğine bağlıdır . Geri dönebilirlerse, "çıktı" sonucu döndürerek olmalıdır, aksi takdirde standart çıktı yönteminin desteklendiği
herhangi bir çıktıyla

@ Skidsdev Geri bildiriminiz için teşekkür ederiz! SAS biraz garip; makrolar gerçekten işlev görmüyor, sadece derlendiğinde 'gerçek' SAS kodu üreten bir metin değiştirme dilidir. Diğer insanların SAS için G / Ç'yi codegolf'ta nasıl yaptığını gördüm ve yanıtımı buna dayanarak makro ifadelerden kurtularak düzenledim.
Josh Eller



1

Java (OpenJDK 8) , 84 bayt

Girdiyi sayıyı temsil eden bir String olarak alır ve bir int çıkarır.

Baytların çoğu BigDecimal, büyük sayıları işlemek için gereken varlığın ayrıntılarından gelir .

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

Çevrimiçi deneyin!


Nasıl çalışır

Bu oldukça basit ama ben gelecek nesiller için açıklama ekleyeceğim;

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

Kömür , 19 bayt

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

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı versiyonudur. Açıklama:

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

Liste uzunluğu en az 2 olana ve ürünü girişi içerene kadar tekrarlayın ...

⊞υIθ

... girişi tamsayıya aktarın ve listeye itin.

ILυ

Listenin uzunluğunu dizgiye alın ve dolaylı olarak yazdırın.


0

Python 3 , 63 58 bayt

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

Çevrimiçi deneyin!

Python2 muhtemelen daha kısa olurdu, ama 3'ü kullanmayı seviyorum. Bir lambda ile gelmek zor, ama birkaç şey deniyorum.


Python bilmiyorum ama lambda kullanmak daha kısa değil mi?
Luis felipe De jesus Munoz

@LuisfelipeDejesusMunoz Bunu yapmaya çalıştım, ama IDLE bir lambdada çıplak olduğundan şikayet etti while. Belki başka yollar deneyebilirim ..
Gigaflop

Belki özyinelemeli fonksiyon?
Luis felipe De jesus Munoz

2
eArgümanlar listesinde (yani. def f(n,e=2)) Tanımlayarak ve n**ebazı baytları kaydetmesi gerektiğinde, Python 2 gerçekten de bazı baytları kurtaracaktır.
18:20

@LuisfelipeDejesusMunoz Lambdas işlevlere benzemez. Bir lambda'nın sağ tarafı tek bir ifade olmalı ve akış kontrol komutları gibi forveya whileçalışmıyor.
James

0

MathGolf , 10 bayt

ôkï⌠#k╧▼ï⌠

Çevrimiçi deneyin!

açıklama

Bu, girişi açıkça iki kez okumak zorunda kalan, döngü sayacını iki kez artırmak zorunda kalan son derece savurganlık hisseder.

ô            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 bayt

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

Çevrimiçi deneyin!

-1 bayt: döngü olarak değişti ( Skidsdev sayesinde )
-14 bayt: çağrıları kaldırmak için C # 'ın tuhaf dize işlemeToString()

Standart sayısal C # türleri (int, çift, uzun, ulong, vb.) Bazı büyük sayılar (12, 15 ve 17 dahil) için başarısız olduğundan, C # 'ın BigInteger kütüphanesini kullanmanız gerekir .

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




0

PowerShell (V3 +), 67 bayt

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


0

J , 26 bayt

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

Çevrimiçi deneyin!

NOT: Ben son değiştirdik ]için x:testler daha büyük tamsayılar için geçmesi yapmak için, TIO içinde.


0

Oracle SQL, 68 bayt

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

Kaynak numarasının bir tabloda depolandığı varsayımı vardır t(x), örn.

with t as (select 95 x from dual)

SQL * Plus'ta test edin

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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.