Poteri autonomi


13

Dato intero n, genera l'esponente epiù piccolo maggiore di 1 tale che n^econtiene ncome sottostringa.

Ad esempio, per 25, la risposta dovrebbe essere 2, come 25 ^ 2 = 625, che contiene 25come sottostringa, ma la risposta per 13dovrebbe essere 10, come 13 ^ 10 = 137858491849, quindi 10è l'esponente più basso per cui il risultato contiene 13come sottostringa.

Regole

  • Regole I / O standard
  • Si applicano scappatoie standard
  • Vince il codice più breve in byte
  • n sarà sempre un numero intero maggiore di 0

Casi test

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)

Script Python per generare le prime 1000 risposte



Risposte:



4

R , 69 44 byte

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

Funzione anonima. Funziona su grande iquando nviene convertito in BigZ (vedi TIO). Grazie per avermi insegnato qualcosa Giuseppe e digEmAll!

Provalo online!


61 byte - avevi uno spazio extra n, ?n^ie ti pasteconverti per characterimpostazione predefinita :-)
Giuseppe

56 byte - il ritorno idovrebbe essere sufficiente.
Giuseppe

2
44 byte incolla non è necessario, grepl si converte in carattere per impostazione predefinita :)
digEmAll

Il problema è che è "difettoso" quando gli esponenti diventano grandi a causa della precisione in virgola mobile e del fatto che i grandi numeri vengono convertiti in stringhe in notazione scientifica. Ad esempio, 15 restituisce 17 mentre dovrebbe essere 26. Quindi, teoricamente funziona, ma in pratica dovremmo usare un pacchetto Big Integer o qualcosa del genere ...
digEmAll

1
@digEmAll per BigInt potresti semplicemente forzare l'input a essere un bigInt come BigZ da gmp e dovrebbe funzionare ancora, tranne forse per la conversione iin un bigZ
Giuseppe

3

Python 2 , 42 41 byte

-1 byte grazie a Ørjan Johansen (ritorno ydiretto)

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

Provalo online!

Spiegazione / Ungolfed

Funzione ricorsiva provando da 2,3 fino a quando non avremo successo:

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

Provalo online!



@ ØrjanJohansen: Strano, pensavo di averlo provato, non sapevo esattamente cosa mi mancasse. Molte grazie!
ბიმო

Ho dovuto scambiare la moltiplicazione per evitare uno spazio, forse è stato?
Ørjan Johansen,

@ ØrjanJohansen: probabilmente è stato così, sì.
ბიმო

3

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

Salvato 1 byte grazie a @Shaggy

Accetta input come Numero (funziona per n<15 ) o come valore letterale BigInt .

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

Provalo online!


1
Finì con una soluzione molto simile alla tua per 40 byte
Shaggy,

@Shaggy È necessario utilizzare numeri interi grandi, altrimenti non restituirà la risposta corretta in alcuni casi di test. Alla fine ha lo stesso bytecount n=>(g=x=>$ {x * = n}.match(n)?2n:-~g(x))(n)
Luis felipe De jesus Munoz

1
@LuisfelipeDejesusMunoz, generalmente non dobbiamo preoccuparci di problemi di precisione, ma funzionerà anche con BigInts.
Shaggy,

Cosa minore, ma se questo utilizza BigInt il titolo non dovrebbe essere JavaScript (Node.js)? ES6 non ha ancora BigInt.
Shieru Asakoto,

@ShieruAsakoto Hai ragione. La mia intenzione iniziale era di spiegare che funziona con un numero o un BigInt. Ora chiarito.
Arnauld,

3

APL (Dyalog Unicode) , 25 23 17 byte

-2 byte grazie a @Erik the Outgolfer

-6 byte grazie a @ngn

grazie a @ H.PWiz per aver reso il codice non necessario personalizzato ⎕pp(precisione di stampa)

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

Provalo 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

Questo fallisce per 17 perché trova 17in 17 ^ 14 = 1.6837782655940093E17, ma idk su quali risposte di precisione dovrebbero supportare
Kritixi Lithos

@Cowsquack Devo solo adeguarmi arbitrariamente, ⎕PPsuppongo
Quintec,

Oh aspetta che non funzionerà nemmeno
Quintec,




2

Brachylog , 8 byte

;.^s?∧ℕ₂

Provalo online!

Spiegazione

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

2

05AB1E , 7 byte

∞>.Δm¹å

Provalo online!

Spiegazione:

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

Modifica: rimosso ;run;alla fine, poiché è implicito dalla fine degli input.

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

I dati di input vengono inseriti dopo l' cards;istruzione, in questo modo:

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

Genera un set di dati acontenente l'input ne l'output e.

enter image description here


Questa sembra essere una definizione di funzione, o equivalente (presumo in realtà una "macro"). Ciò significa che richiederlo sia chiamato con argomenti (cioè %p(n)) va benissimo, tuttavia l'output dipende dal fatto macroche in SAS sia possibile restituire valori. Se possono restituire, "output" dovrebbe essere restituendo il risultato, altrimenti dovrebbe essere output con qualunque metodo di output standard supportato
Skidsdev

@Skidsdev Grazie per il feedback! SAS è un po 'strano; le macro non sono realmente funzioni, sono solo un linguaggio di sostituzione del testo che genera un codice SAS "reale" durante la compilazione. Ho dato un'occhiata a come altre persone hanno eseguito l'I / O per SAS in codegolf e ho modificato la mia risposta in base a ciò, eliminando le dichiarazioni macro.
Josh Eller,


1

Pulito , 99 byte

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

Provalo online!

Se non ha bisogno di lavorare per numeri enormi giganti, allora

Pulito , 64 byte

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

Provalo online!


1

Java (OpenJDK 8) , 84 byte

Prende l'input come stringa che rappresenta il numero e genera un int.

La maggior parte dei byte deriva dalla verbosità BigDecimaldell'essere necessario per elaborare i grandi numeri.

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

Provalo online!


Come funziona

Questo è abbastanza semplice ma includerò la spiegazione per i posteri;

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

Carbone , 19 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Spiegazione:

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

Ripeti fino a quando la lunghezza dell'elenco è almeno 2 e il suo prodotto contiene l'input ...

⊞υIθ

... invia l'input all'intero e spingilo nell'elenco.

ILυ

Trasmetti la lunghezza dell'elenco alla stringa e lo stampa implicitamente.


0

Python 3 , 63 58 byte

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

Provalo online!

Python2 sarebbe probabilmente più breve, ma mi piace usare 3. Arrivare con una lambda è difficile, ma sto provando alcune cose.


Non conosco Python ma non è più breve usare Lambda?
Luis felipe De jesus Munoz,

@LuisfelipeDejesusMunoz Ho iniziato provando a farlo, ma IDLE si è lamentato di avere un nudo whilein una lambda. Forse posso provare altri modi ..
Gigaflop,

Forse qualche funzione ricorsiva?
Luis felipe De jesus Munoz,

2
Definendo enella lista degli argomenti (es. def f(n,e=2)) E n**edovrebbe salvare alcuni byte, Python 2 risparmierebbe parecchi byte.
ბიმო

@LuisfelipeDejesusMunoz Lambdas non sono funzioni simili. Il lato destro di una lambda deve essere una singola espressione e i comandi di controllo del flusso gradiscono foro whilenon funzionano.
James,

0

MathGolf , 10 byte

ôkï⌠#k╧▼ï⌠

Provalo online!

Spiegazione

Questo sembra estremamente dispendioso, dover leggere l'input in modo esplicito due volte, dover aumentare due volte il contatore del loop.

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

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

Provalo online!

-1 byte: modificato per loop in while (grazie a Skidsdev )
-14 byte: abusata della strana gestione delle stringhe di C # per rimuovere le ToString() chiamate

È necessario utilizzare la libreria BigInteger di C # , poiché i tipi numerici C # standard (int, double, long, ulong, ecc.) Non riescono per alcuni numeri più grandi (inclusi 12, 15 e 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;
}

Puoi salvare 1 byte passando a un ciclo while
Skidsdev



0

PowerShell (V3 +), 67 byte

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

0

Lisp comune, 78 byte

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

Provalo online!


0

J , 26 byte

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

Provalo online!

NOTA: ho cambiato la finale ]in x:nel TIO, per far passare i test per numeri interi più grandi.


0

Oracle SQL, 68 byte

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

Si presume che il numero di origine sia memorizzato in una tabella t(x) , ad es

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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.